Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

binって何?railsとrakeって何??(後編)

f:id:song-of-life1352607:20170411225447p:plain

こんにちは、マリンです。


前回はよく見かけるbinとは何か?

そして、bin/railsファイルの中で行われていることが何か?を書きました。(今思えばちょっと趣旨がずれたかも・・・)


今回は、bin/rakeは何か?そしてrailsrakeの違いなどを書けたらなと思います。


前回の記事はこちらです。 song-of-life.hatenablog.com

bin/rakeとは?

まずは定番のRailsドキュメント様から。

Rakeとは Rubyで記述されたビルドツールです。

1行wwまぁそうなんでそうなんですけど・・・


ビルドツールとはソースコードを実行ファイルに変換したりするプロセスをやってくれるやつですね。コンパイルとか。

UNIX系でよく使われるという「make」がそれです。こっちはRubyだから「Rake」。

自分初心者なんで横文字の用語とかについてくのも必死なんですが、こういう語源とかにも何か大層な意味があるんじゃないかって気になっちゃうんですけど、意外と「え。そういうこと??」みたいのいっぱいありますよね(笑)


話しを元に戻しまして、つまりRakeはRubyで書かれた様々なタスクを呼び出して実行できる機能です。

で、問題はその「様々なタスク」に何があるのか?ですよね。

それはこちらのコマンドで確認できます。

$ rake -T

代表的なものがRailsドキュメントの解説にありますので見てみますと、

載っているのはrake db:migraterake db:rollbackrake db:seedrake aboutrake doc:apprake rails:updaterake db:createなどなど・・・


とってもたくさんありますが、何かデータベース系をいじるものが多い気がします。

他にもいっぱい載ってるんで見てみてください。

Rake - - Railsドキュメント

railsrakeの違い

前述した通り、rakeの説明としては「Rubyで記述されたビルドツール」ということでした。

railsについては、

アプリケーションに最低限必要なフォルダやファイルを自動的に作成

と書かれています。


何となく「タスクを実行する」っぽい感じは似てる気がしますが、その処理する分野が違うのかな?って感じです。

多分、そういうことではないかと・・・曖昧ですみません。違ってたらご指摘ください。

rakerailsに統合されてる

これですね。

Rails5からrakeタスクがrailsコマンドに統一されたそうです。ということで、今後はbin/rails一本で行けるということですかね。

紛らわしくなくて良いと思います!


ちなみに、Rakeのコマンドに入っていたrake doc:appとかrake doc:railsなんかのドキュメント作成系のタスクは削除されたそうです。

Ruby on Rails 5.0 リリースノート | Rails ガイド

bin/がついたりつかなかったり

binに戻ってきました。そもそもこれが原因で調べ始めたんですよね。

このbin/がついたりつかなかったりする現象については、こちらの記事で詳しく説明されていました。

qiita.com


どうやら4.1から標準装備になったSpringというものが関係しているようですね。

これまた調べ始めると長くなるので省略しますが、どうやらサーバの起動が早くなるようですね。

詳しくはこちらの記事をどうぞ。

Railsの開発効率をあげる - Springを使ってRailsのコンソールコマンドの実行を早くする - Rails Webook

Rails4.1 から入ったSpringって何よ? - kasei_sanのブログ



で最初の記事で検証されていたのは、それぞれのコマンドでbin/をつけた時とつけなかった時のSpringの状態がどうなっているか?ということです。


結論から言うと、railsコマンドではなくてもOK!rakeコマンドはないとダメ!ということでした。

Railsbin/railsファイルを優先的に起動する仕様になっているけど、bin/rakeファイルについてはbin/をつけないと素のrakeコマンドが実行されてしまい、rake -TとかはSpringを使わないからRailsが起動するまで待たなきゃいけないよ。

ということらしいです。


つまり、bin/rakeファイル内の処理を実行したい時はつけなきゃいけないんですね!「/」が入ってるからディレクトリの構造を示してはいるんだろうけど・・・とは思っていましたが、スッキリ。


で一つ前の項に書きましたが、Rails5では両者が統一されましたので、5以降を使用する場合はbin/もいらないし、rails一本だけでどちらのタスクも使えますよ!ということですね!!


はぁ〜!長かったけどやっとスッキリしたぁ!

ということで、長々とご覧いただきありがとうございました。

内容に間違いがございましたら是非ご指摘ください。よろしくお願い致します!