[Rails 5] rakeタスクがrailsコマンドでもできるようになった

こんにちは、hachi8833です。BigBinaryシリーズ第3弾をお送りいたします。Rails 4以前で使い分けの面倒だったrakeコマンドがRails 5ではrailsコマンドで実行できるようになっています。

元記事

確認に使った環境

Rails 5ではrakeタスクをrailsコマンドで実行できるようになった

注: この記事ではコマンド実行時にbundle execのbashエイリアスとしてbeを追加しています。このエイリアスをbashに設定していない場合はbundle exec rails./bin/railsのように実行してください。

Rails 4以前

Rails 4以前は、各種コマンドがrailsrakeに分散していました。

データベースのマイグレーションはrake db:migrateでしたし、scaffoldなどを行う場合はrails generate scaffold ...といった具合でした。

rakeはRuby自身の標準ツールですが、そのためにプロジェクトディレクトリでrake --helpを実行しても普通のヘルプしか表示されず、Railsならではの実行オプションは表示されません。

さらに、rakeでは値を引数で渡すのも面倒になりがちです。

Rails 5以後

同記事によると、rakeコマンドを好む開発者も多い中、Railsコアチームはrakeでできるタスクをrailsでもできるようにする決定を下したとのことです。もちろん従来どおりrakeコマンドで実行することもできますので、rakeに慣れた開発者も戸惑わずに済みます。

たとえばルーティングの確認によく使われているrake routesは、Rails 5ではrails routesで実行できます。もっともRubyMineなどのIDEがあればそれほど使わないかもしれません。

そのためにRails 5ではRake Proxyが導入されました。railsにないオプションが指定されるとこのRake Proxy経由でコマンドをrakeに委譲するようになっています。

rails --helpを実行すると、従来rakeで実行できたオプションも続けて表示されます。たぶんこれが一番ありがたいと思います。

追加情報1: railsコマンドの名前空間が一部変更された

Rails 5では上述の変更に伴い、railsコマンドのupdatetemplateで指定する名前空間がrailsからappに変更されています。Rails 5で以前のrails rails:update`などを実行するとdeprecation warningが表示されます。

# Rails 4以前
$ rails rails:update
$ rails rails:template
$ rails rails:templates:copy
$ rails rails:update:configs
$ rails rails:update:bin
# Rails 5以後
$ rails app:update
$ rails app:template
$ rails app:templates:copy
$ rails app:update:configs
$ rails app:update:bin

追加情報2: rails routesの-gオプションでgrep、-cオプションでコントローラをgrep

Rails 5のrails routesコマンドにgrep用の-gオプションが追加されました(#18902: rails routes -g pattern to search for specific routes )。

また、-cオプションを渡すとコントローラ名で絞り込めます(#20420: Add options for rake routes task)。

もっとも私ならとっととpecoに渡しちゃいます。

関連記事(BigBinaryシリーズ)

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ