Ruby on Rails

Rails 5におけるActive Record Observerの代替ライブラリを作った

はじめに 最近、Rails 5におけるActive Record Observerの代替ライブラリとして、Everettというものを作りました。 本エントリでは、このgemの紹介と作成のきっかけや工夫した点などを述べたいと思います。 Everettとは 概要 READMEの冒頭にも書いてあるよう…

【Amazon Linux】capybara-webkitでスクリーンショットを撮った際に日本語が表示されない問題を解決した

はじめに 普段EC2インスタンス(Amazon Linux)にSSHをして開発しているのですが、E2Eテストの中で page.save_screenshot "screenshot.png" などとしてスクリーンショットを撮ると、日本語が表示されずにいました。 検索すると日本語フォントをインストール…

Railsで静的ページの管理を簡単にするgemを作った

はじめに 先月、エラーページをAsset Pipelineで管理する - WEB SALADというエントリを書いたのですが、あの後「これはエラーページに限らずもっと一般化できるのでは」と思ってgemを作ってみました。 yasaichi/gakubuchi このエントリでは、このgemの紹介と…

エラーページをAsset Pipelineで管理する

はじめに Railsでエラーページをいかに楽に書いて管理するかを模索した結果、Asset Pipelineを使う方法が良さそうだったのでまとめます。 追記(2015/08/17) このエントリで提案した手法をgem化し、その使い方を解説したエントリを書きました。 よろしけれ…

RubyとRailsで特定のバージョン下でのみ適用したいパッチを書く方法

はじめに RubyとRailsで、特定のバージョン下において適用したいパッチを書く方法を調べたのでまとめました。 実装例 以下の通りです。 if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0.0') # Ruby 2系で適用したいパッチ end if Gem::Version.…

Railsで配列の要素から"A, B, and C"形式の文字列を作る時はArray#to_sentenceが便利

はじめに タイトル通りです。 最初は自分で実装しようと思ったんですが意外とめんどいことに気付き、色々探していたら該当の処理をよしなにやってくれるメソッドを見つけたのでまとめました。 Array#to_sentence Array#to_sentenceは、ActiveSupportのArray…

Railsでのpreflightリクエストの実装およびテスト例

はじめに Railsでpreflightリクエストの処理を実装する機会があったのでまとめてみました。 preflightリクエストとは CORS(Cross-Origin Resource Sharing)という、originをまたいだAjax通信の際に発生するリクエストのことです。 発生条件など、詳しくは…

Railsでidが前後のレコードを取得するメソッドを実装してみた

はじめに Railsでとあるサービスを実装しているときに、詳細画面でidが前後のレコードへのリンクをつけたかったのですが、ActiveRecordではそのようなメソッドが用意されていないようなので実装しました。 方針 基本的には次のリンク通りなのですが、5年前の…

Rubyでパス文字列を組み立てるときはPathnameクラスを使おう

はじめに Rubyで文字列操作だけでパス文字列を組み立てようとすると苦しいコードになりがちですが、Pathnameクラスを使うといい感じに書けることがわかったのでまとめました。 Pathnameとは Rubyの組み込みクラスで、パス名をオブジェクト指向っぽく扱うこと…

パーフェクトRuby on RailsのBasic認証の実装がしっくりこなかったので書き換えてみた

はじめに 現在パーフェクトRuby on Railsの10章を読んでいるのですが、そこに掲載されていたBasic認証のためのRack Middlewareの実装がしっくりこなかったので書き換えてみました。 実装 credentialsのチェックを別メソッドを切り出すことで、何をやっている…

ActiveSupportを使ってHash#camelize_keysを実装する

はじめに ActiveSupportにHash#camelize_keysってあってもよさそうなのに、ないのか、、、— yasaichi (@_yasaichi) 2015, 3月 11 先日RailsでとあるAPIを実装していたときに、Hashの各キーをlowerCamelCaseに変換するメソッドがActiveSupportにないことに気…

attr_readerとattr_accessorを拡張してto_hメソッドを簡潔に実装する

はじめに 先日Ruby on Railsであるサービスの開発を行っていた際に、自作のクラスにto_hというインスタンスメソッドを実装する必要が出てきました。 このメソッドの要件は以下の通りです。 attr_readerまたはattr_accessorで設定したgetterメソッドの名前をk…

乃木どこ開始5分前にYoするサービスを作った

はじめに 若干旬が過ぎた感もありますが、Yoを使った「乃木どこが始まるよ」というサービスを先日リリースしました。 本エントリでは最初にサービスの簡単な紹介をしたあと、備忘録も兼ねて苦労した点について述べていきます。 サービス概要 乃木坂46の冠番…

google-api-ruby-clientをRailsで使おうとしたときにはまったこととその解決策

概要 タイトル通り。備忘録も兼ねてまとめておきます。 Google::APIClient.newでエラーが出る NameError: uninitialized constant Googleって出てえっ?ってなったパターン(笑) これはGemfileで gem 'google-api-client' としか書いておらず、gemの読み込…

独自クラスをDraperを使ってdecorateする

はじめに 最近Draper使ってview周りのコードを書いてるんですが、ほんと素晴らしいですよねこのgem。 で、model以外でも使えたらもっと便利なのにな〜と思いながら色々調べていたら、Draper::Decoratableモジュールをincludeすれば何でもdecorateできるとい…

RailsでURLのクエリ文字列を組み立てるときはHash#to_queryを使うと捗る

はじめに Railsでコードを書いていて、ControllerやhelperでURLのクエリ文字列を組み立てる場面ってありますよね。 こうゆうとき、僕は今まで query = { hoge: 1, fuga: 2 } query.map{ |k,v| "#{k}=#{v}" }.join("&") とかやってたんですけど、これだと値が…

Railsで環境毎にサブドメインとパスを切り替える

はじめに 先日、とあるAPIを作成していたときに 開発環境では、http://localhost:3000/api/users/1のように、パスの最初にapiをつける。 本番環境では、http://api.example.com/users/1のように、apiというサブドメインを利用するためパス内のapiは不要。 と…

Ruby / Railsで文字列がIPアドレスとして適切かどうかチェックする

概要 最近、ある文字列がIPアドレスとして適切かどうかチェックする方法を調べる機会があったので、その結果を備忘録としてここにメモしておきます。 実装 正規表現を考えるのは面倒だったので、Rubyの標準ライブラリであるIPAddrを使いました。 例 引数の文…

Ruby / Railsで任意のオブジェクトが配列の要素かどうか調べたい

はじめに RubyやRailsで任意のオブジェクトが配列の要素かどうか調べる場合、普通、include?を使うと思います。 例えば、以下のような感じ。 ystk = "中田ヤスタカ" perfume = %w(あ〜ちゃん かしゆか のっち) perfume.include?(ystk) # => false 僕はtrueだ…

R on Rails with Rserve

概要 RをRailsで動かすまでの簡単なチュートリアル。 誰かの役に立つかもしれないと思って書くことにした。 そもそもRをRubyで動かすには 主なライブラリが3つある。 RSRuby 実行速度は3つの中で最も速いらしいが、パスを通さないとだめだったり、 その他実…