binって何?railsとrakeって何??(後編)
こんにちは、マリンです。
前回はよく見かけるbin
とは何か?
そして、bin/rails
ファイルの中で行われていることが何か?を書きました。(今思えばちょっと趣旨がずれたかも・・・)
今回は、bin/rake
は何か?そしてrails
とrake
の違いなどを書けたらなと思います。
前回の記事はこちらです。
song-of-life.hatenablog.com
bin/rake
とは?
まずは定番のRailsドキュメント様から。
Rakeとは Rubyで記述されたビルドツールです。
1行wwまぁそうなんでそうなんですけど・・・
ビルドツールとはソースコードを実行ファイルに変換したりするプロセスをやってくれるやつですね。コンパイルとか。
UNIX系でよく使われるという「make」がそれです。こっちはRubyだから「Rake」。
自分初心者なんで横文字の用語とかについてくのも必死なんですが、こういう語源とかにも何か大層な意味があるんじゃないかって気になっちゃうんですけど、意外と「え。そういうこと??」みたいのいっぱいありますよね(笑)
話しを元に戻しまして、つまりRakeはRubyで書かれた様々なタスクを呼び出して実行できる機能です。
で、問題はその「様々なタスク」に何があるのか?ですよね。
それはこちらのコマンドで確認できます。
$ rake -T
代表的なものがRailsドキュメントの解説にありますので見てみますと、
載っているのはrake db:migrate
やrake db:rollback
、rake db:seed
、rake about
、rake doc:app
、rake rails:update
、rake db:create
などなど・・・
とってもたくさんありますが、何かデータベース系をいじるものが多い気がします。
他にもいっぱい載ってるんで見てみてください。
rails
とrake
の違い
前述した通り、rake
の説明としては「Rubyで記述されたビルドツール」ということでした。
でrails
については、
アプリケーションに最低限必要なフォルダやファイルを自動的に作成
と書かれています。
何となく「タスクを実行する」っぽい感じは似てる気がしますが、その処理する分野が違うのかな?って感じです。
多分、そういうことではないかと・・・曖昧ですみません。違ってたらご指摘ください。
rake
がrails
に統合されてる
これですね。
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
コマンドはないとダメ!ということでした。
Railsはbin/rails
ファイルを優先的に起動する仕様になっているけど、bin/rake
ファイルについてはbin/
をつけないと素のrake
コマンドが実行されてしまい、rake -T
とかはSpringを使わないからRailsが起動するまで待たなきゃいけないよ。
ということらしいです。
つまり、bin/rake
ファイル内の処理を実行したい時はつけなきゃいけないんですね!「/」が入ってるからディレクトリの構造を示してはいるんだろうけど・・・とは思っていましたが、スッキリ。
で一つ前の項に書きましたが、Rails5では両者が統一されましたので、5以降を使用する場合はbin/
もいらないし、rails
一本だけでどちらのタスクも使えますよ!ということですね!!
はぁ〜!長かったけどやっとスッキリしたぁ!
ということで、長々とご覧いただきありがとうございました。
内容に間違いがございましたら是非ご指摘ください。よろしくお願い致します!