IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Ruby & Rails

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第31回 あのGemは今 その1 (松永紘) 2017年10月

8/3にRails5.1.3がリリースされました(*1)。3度のRC版を挟んだこのバージョンは変更規模が大きいものではないですが、ActiveRecord周りの挙動の修正や、minitestプラグイン周りの改善が行われています。
また少し前の話になりますが、Rails5.2にはActiveStorageという機能を実装するとRailsの生みの親であるDHH氏がアナウンスしています(*2)。この機能はRailsからクラウドストレージサービスを透過的に扱うことのできるものの様で、既にRailsのリポジトリ内に取り込まれています(*3)。正式なリリース版として使える様になるのはまだ少し先のことでしょうが、今後も注目していきたい機能ですね。

さてRailsがこのように止まることなく革新的に進んでいく中ではありますが、今回から数回に分けて過去にこのコラムでご紹介したGemの今を取り上げてみたいと思います。
思い返せばこのコラムを書き始めたときはRuby1.9にRails3.2という組み合わせでしたが、気づけば今ではRuby2.4にRails5.1までバージョンアップがなされています。このコラムで取り上げたGemはどう変わったのか、或いは変わっていないのか見ていきましょう。今回は当時デバッグには欠かせなかったPry, Better Errors, Rails Footnotesの3つのGemを取り上げます。
なお、動作確認はRuby2.4.1、Rails5.1.3で行っています。

第3回Pry(2013年5月)

  バージョン:  0.9.12.2 -> 0.10.4

今も昔もRubyやRailsでの開発には欠かせないGemですね。当時から劇的な変化はありませんがRubyのバージョンが上がるごとにきちんと追随しているようです。大きな変化としては0.10からwatchコマンドが追加されていることでしょうか。

fig01

上の実行結果の様にwatchコマンドを使うと変数を監視することができ(*4)、対象に変更がかかると通知をしてくれます。ここでは変数yをwatchしており、変数xに再代入をしても何も起こらないのに対して、変数yでは通知をしてくれていることが分かります。

話は少し逸れますが、2013当時は1.0.0にバージョンをしようとする動きもあったようで、1.0.0.pre1が2013年3月にリリースされています。残念ながら現在はyankedになっているようですが・・・。

第4回Better Errors / Rails Footnotes(2013年6月)

  バージョン:
      Better Errors 0.9.0 -> 2.3.0
      Rails Footnotes 3.7.9 -> 4.1.8

こちらは、Railsの開発時にデバッグに使うと便利なGemとして紹介していました。
Better Errorsはほんの数日前(*5)に2.3.0がリリースされています。Pry同様大幅な変更点はありませんが、Rails5の環境でも問題なく使えています。逆説的に言えば2013年当時から既に洗練されていたGemといえるかもしれませんね。
なお恥ずかしながらつい最近知ったのですが、Better ErrorsにはManual consoleという便利な機能がありましたので簡単にご紹介します。

Better Errorsの画面は通常、ページ全体を遷移するHTMLのリクエスト時にしか表示されません。そのためJavaScript等を用いた非同期での通信ではデバッグに使えず歯がゆい思いをしていたのですが、Manual consoleの機能を使うとその問題を解決することができます。
使い方は簡単でエラーが起こった際、「#{Rails.root/__better_errors}」(*6)にアクセスするだけです。

fig02

非同期通信のエラーもしっかり表示されることが分かりますね(*7)(*8)。便利な機能ですので是非使ってみてください。

一方のRails Footnotesですが、こちらは2016年6月を最後にコミットが止まっているようです。一応手元の環境で簡単に動かしてみたところ、動作はするようですが・・・。
ただGitHubをみても活発な様子はうかがえないので、今後のRailsのバージョンアップによっては使えなくなるかもしれません(*9)。

fig03

まとめ

以上、ここまで当時はデバッグで活躍した3つのGemの今を見てきました。驚きなのはPryもBetter Errorsもその当時から大きく変わったわけではないですが、今でも幅広く使われているGemだということですね。当時から洗練されていた証拠でもありますし、今後も長くお世話になりそうです。
他方Rails Footnotesは進化の波に置いていかれる格好となっています。このGem自体は開発時のデバッグとして使うものなので、使えなくなってもシステムそのものには問題が出ませんが、実際にプロダクトコードとして組み込まれるものだと対応に苦労するかもしれません。このことはGemを使うことで何かを手軽に実現できる反面、使えなくなるリスクも考慮する必要があると考えさせられます。上手くバランスを取ってGemを活用していきたいですね。

次回も引き続き、過去に紹介したGemの今を取り上げていきます。

それでは、Enjoy Ruby!

(注釈)

*1: http://weblog.rubyonrails.org/2017/8/3/Rails-5-1-3-released/
*2: https://twitter.com/dhh/status/882965074767474688
*3: https://github.com/rails/rails/tree/master/activestorage
*4: 変数とかきましたが、オブジェクトの属性値にも使用することができます。
*5: 執筆時点、リリースは8/4にされたようです。
*6: 通常の開発環境だとhttp://localhost:3000/__better_errorsになるかと思います。
*7: 正確には最後の発生したエラーを表示するようです。
*8: この例ではVM上のゲストOSでRailsを実行させていますので、URLがlocalhostではなくなっています。Better Errorsは初期設定ですとlocalhostでのみの動作となるため、このようにlocalhost外からアクセスするにはconfig/environments/development.rbに「BetterErrors::Middleware.allow_ip! "#{アクセス元IP}"」の記述をする必要があります。
*9: 今回はscaffoldで作った画面で見てみただけですので、実際の開発においては既に動かないというケースもあるかもしれません。事実Issueにはいくつかのバグの報告が挙がっていますが、それに対する対応もなされていないようです。

 


 

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート