しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Ruby

Railsでcrontabを管理できるwheneverというGemを使ってみる

Railsを使っていると「日時バッチ」「1時間に一度の処理」など定期的に実行したいタスクが出てきます。 管理方法としては普通にcrontabに書き込んだりJenkinsなどを使ってそれらのタスクを管理する方法があります。 しかし可能ならRailsプロジェクト上で実行…

NokogiriのインストールでERROR: cannot discover where libxml2 is located on your system. please make sure `pkg-config` is installed.というエラーが出た時の対策

Nokogiriをインストール中に表題のエラーが出た時の対処法です。 メッセージは下の通りです。 current directory: /Users/xxxxxx/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/nokogiri-1.8.3/ext/nokogiri /Users/xxxxxx/.rbenv/versions/2.5.1/bin/rub…

rbenv installでconfigure: error: C compiler cannot create executablesが出た時の対処法

rbenv install 2.5.1をした時に下エラーが発生しました。 環境はMacのHigh Sierraです。 BUILD FAILED (OS X 10.13.4 using ruby-build 20180424) Inspect or clean up the working tree at /var/folders/d3/wr7y5r3j0jn_y6q0p1524pnr0000gp/T/ruby-build.20…

Rails runnerをDaemonで動かすGem、daemon-spawn

Railsで、Daemonを動かすためのメモです。 今回はdaemon-spawnというgemを使いました。 github.com Bundlerでインストールします。 requireはdaemon_spawnにする必要があるので下のように書きます。 gem 'daemon-spawn', require: 'daemon_spawn' 使い方とし…

【Ruby】benchmarkで処理速度を計測

Ruby標準ライブラリのbenchmarkを使って処理速度を測定してみました。 使い方は下の通りです。 配列へのpushの10000回ループと100回ループを測定しています。 require 'benchmark' Benchmark.bm(10) do |x| x.report("10,000回") do arr = [] (0...10000).ea…

【Ruby】Parallelで並列処理

ParallelというGemで並列処理を試してみました。 github.com インストール インストールはBundlerを使いました。 source "https://rubygems.org" gem "parallel" 使い方 使い方は下の通りです。 1,2,3を引数にしたブロックを並列に実行してくれます。 requir…

RubyでCoincheckのAPIを叩いてみる

Rubyを使ってCoincheckのAPIを叩いてみました。 取引所APIドキュメント | Coincheck(コインチェック) APIは、認証不要のpublic apiと認証が必要なprivate apiの2種類あります。 今回は板情報を取得するpublic apiを叩いてみようと思います。 Coincheckは公…

RubyでBitflyer LightingのAPIを叩いてみる

ビットコインなどの仮想通貨取引所のBitflyerのAPIを試してみました。 ビットコイン取引所【bitFlyer Lightning】 準備 APIを叩くため、まずはrest-clientをBundlerで追加します。 source "https://rubygems.org" gem "rest-client" 板情報の取得 /boardへの…

RubyでGoogleAnalyticsのデータを取得する

GoogleAnalyticsのデータの取り方を調べてみました。 取得準備 まずはGoogleCloudPlatformにアクセスしてプロジェクトを作成します。 Google Cloud Platform 続けて「IAM と管理」の「サービス アカウント」からサービスアカウントを作成します。 この時、js…

rspec-retryでfeature specを安定させる

rspec-retryという、失敗したテストを再実行するGemを使ってみました。 GitHub - NoRedInk/rspec-retry: retry randomly failing rspec example まずはRailsのプロジェクトを作ってfeature specを書きます。 require 'rails_helper' feature 'test' do scena…

Rubyの配列のzipメソッドを使ってみる

Rubyの配列にはzipというメソッドがあって、それを使うと2つの配列をつなげる事ができます。 [1, 2, 3].zip([2, 3, 4]) # → [[1, 2], [2, 3], [3, 4]] 引数の要素数が少ない場合、そこにはnilが入ります。 [1, 2, 3].zip([2, 3]) # → [[1, 2], [2, 3], [3, n…

active-rest-clientというGemでAPIを叩いてみる

RailsからAPIを叩くためにactive-rest-clientというGemを使ってみました。 使い勝手はActiveResourceに近いものでした。 github.com インストールはいつものようにBundlerを使います。 gem 'active_rest_client' データ取得/更新の為には、下記のようにModel…

RailsでMySQL5.6に変えたのにMysql2::Error: Can't initialize character set utf8mb4が出た時の対処法

MySQLを5.1 → 5.6にアップグレードしたのにRailsで表題のエラーが出た時の対処法です。 結果としてはmysql2をインストールし直せば解決しました。 5.1の時にbundle installしたので、その時のものが悪さをしていたようです。 gem uninstall mysql2 bundle in…

【Rails】acts_as_taggableで簡単にModelにタグ付けする

github.com いつものようにBundlerでインストールします。 gem 'acts-as-taggable-on' 以下のコマンドでDBのセットアップをします。 rake acts_as_taggable_on_engine:install:migrations rake db:migrate MySQLを使っている場合は更に以下コマンドを実行し…

【Ruby】Google AdsenseのAPIでAdmobの広告売上を取得する

Admobのデータを取得する方法です。 まずはBundlerでgoogle-api-clientをインストールします。 gem 'google-api-client' 次にrefresh_token・client_id・client_secretを取得します。 この辺りは下記の記事が詳しいです。 Google API OAuth2.0のアクセストー…

`require': cannot load such file -- google/api_client (LoadError) エラーの対応

GoogleのAPIを使う時に表題のエラーが出た時の対応です。 GoogleAPIの仕様が変わったため'google/apis/{サービス毎の名前}で呼び出す必要があります。 # require 'google/api_client' require 'google/apis/adsense_v1_4'

Railsでベーシック認証をかける

authenticate_or_request_with_http_basicメソッドを使うと実現できます。 class ApplicationController < ActionController::Base before_action do authenticate_or_request_with_http_basic do |user, password| user == "admin" && password == "passwor…

splitを使ってRailsで簡単ABテスト

splitというA/Bテストが簡単にできるGemを試してみました。 github.com 初期設定 このGemではredisを使うのであらかじめインストールしておきます。 brew install redis redis-server /usr/local/etc/redis.conf Bundlerでsplitをインストールします。 gem '…

GonというGemを使ってRailsからJavascriptに値を渡す

RailsからJavascriptに値を渡す方法です。 インストール インストールはbunlderを使います。 gem 'gon' 使い方 設定 htmlのheadタグの中で以下の呼び出しをします。 Gon::Base.render_data こうすると以下のようにレンダリングされます。 <script> //<![CDATA[ windo</script>…

rack-mini-profilerでRailsアプリの表示速度を表示する

rack-mini-profilerというGemを使うと、画面が表示されるまでの時間を画面上に表示してくれます。 github.com インストール Gemfileにrack-mini-profilerを追加します。 本番環境では出したくないのでdevelopだけにインストールする設定にすると良いです。 g…

Authorityというユーザーの権限管理をするGemを試してみる

ユーザーの権限管理をしてくれるauthorityというGemを試してみました。 github.com 初期設定 いつものようにBundlerでインストールします。 gem 'authority' 下コマンドで初期設定をします。 rails g authority:install 使い方 準備 UserモデルとCommentモデ…

punditというユーザーの権限管理をするGemを試してみる

ユーザーの権限管理をしてくれるGemを試してみました。 github.com インストール installはいつもどおりbundlerで行います。 gem "pundit" 初期設定 ApplicationControllerでPunditをincludeします。 pundit_userは後で登場するApplicationPolicyの初期化時…

ActiveRecordのexists?メソッドが発行しているSQLを調べてみる

ActiveRecordでデータが存在するかを調べる時はpresent?よりのexists?の方が良いと聞いたので違いを調べてみました。 調べたところ「LIMIT 1の有無」と「カラムの情報を取得するかどうか」が違っていました。 2.2.0 :005 > Item.where(name: 'name').exists?…

require_dependencyの実装を追いかけてみる

require_dependencyはrequireとどう違うの? というところから色々調べてみたメモです。 require_dependencyとrequireの違いはググったら一発解決しました。 違いは下の通りです。 requireはロード済のものはキャッシュして再読み込みしないけどrequire_depen…

個人情報カラムの暗号化に丁度いいGem、attr_encrypted

attr_encryptedというGemに関する調査メモです。 attr_encryptedとは カラムの暗号化を簡単にしてくれるGemです。 基本的な使い方 GemfileにGemの追加 gem 'attr_encrypted' テーブル作成。 暗号化したいカラムは先頭にencrypted_を付けます。 class CreateI…

Rails4でJSONを作るならto_jsonよりjbuilder

jbuilderを使いはじめたのでメモ jbuilderとは jsonのテンプレートエンジンです。 xxx.json.jbuilderファイルにDSLを記述するとJSONにして返してくれるという物。 ファイルに記述するので難しいjson形式を返す時とかは便利そうです。 DHHが作ったもので、Rai…

Rails4.1未満でカラムを列挙型として扱えるGem「enumerize」

enumerizeというGemを試してみたのでそのメモです。 enumerizeとは RailsのModelで列挙型を使えるようになるGemです。 使い方 使うための手順 利用する為の手順は下の通りです。 Gemfileに追加してModelに下の2行を追加するだけ。 gem 'enumerize' class Cre…

RSpec(rspec-rails 以外)のmatcher一覧 その1

RSpec自体にあるmatcherの一覧を調べました。 長いので2回に分けています。 be_truthy if文でtrueと判定される物かどうかを調べます。 nilとfalse以外を通します。 RSpec2まではbe_trueという名前でした。 しかし「be_trueなのにtrue以外(数字や文字列)も通る…

Railsで論理削除をするacts_as_paranoidを試してみた

論理削除を実現してくれるgem、acts_as_paranoidを試してみました。 環境 Ruby2.1.5 Rails4.2.0 インストール まずはGemfileに以下のように追加してbundle install。 gem 'acts_as_paranoid' しかしWEBrickを起動しようとすると下記エラー。 どうやらrails4…

rbenvについてやrvmと比べた時の長所を調べた

rbenvについて色々と調べてみました。 使った感想、rbenvのメリットやデメリットについて書いていきます。 rbenvとは 読み方 「あーるびーえんぶ」が一般的みたいです。 最初は「るびーえんぶ」だと思ってました。 概要 リポジトリはこちらになります。 最初のバ…