検証の際のRailsのバージョン
5.1.6
前提
Rails4系で開発している場合は、各コマンドのrails 〇〇
のrailsをrake 〇〇
に変更すればOKで、rake secret
コマンドについては、Rails4系と5系どちらも関係なくrake secret
で大丈夫です。
rails aboutコマンド
現在いるRailsアプリのディレクトリ内での各ライブラリやツールのバージョン情報などを出力するコマンド
$ rails about
About your application's environment
Rails version 5.1.6
Ruby version 2.3.8-p459 (x86_64-darwin17)
RubyGems version 2.5.2.3
Rack version 2.0.5
JavaScript Runtime Node.js (V8)
Middleware Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, ActiveSupport::Cache::Strategy::LocalCache::Middleware, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Sprockets::Rails::QuietAssets, Rails::Rack::Logger, ActionDispatch::ShowExceptions, WebConsole::Middleware, ActionDispatch::DebugExceptions, ActionDispatch::Reloader, ActionDispatch::Callbacks, ActiveRecord::Migration::CheckPending, ActionDispatch::Cookies, ActionDispatch::Session::CookieStore, ActionDispatch::Flash, Rack::Head, Rack::ConditionalGet, Rack::ETag
Application root /Users/shigeyukifukuda/workspace/rails_tutorial
Environment development
Database adapter sqlite3
Database schema version 0
rails runnerコマンド
$ bundle exec rails runner ファイル名
これを使うことで、runnerコマンドの引数に渡した .rbファイル
をRails環境(irbと違いRailsのメソッドが使える環境)で実行可能です。
gem "pry-rails"
がすでにインストールされている場合は、 binding.pry
でデバッグすることも可能です。
詳しい使用方法はこちらを参照
https://speakerdeck.com/fuqda/rubyfalsebentimakutesuto
rails middlewareコマンド
そのリポジトリのコードを追いかける時やgemが依存しているミドルウェアについて調べる時に使えるかも
(結局gemの場合はgithubのリポジトリのコード読めよ!って話ですが...)
$ bundle exec rake middleware # 実行すると依存しているミドルウェアが一覧でコンソールに表示される
use Rack::Sendfile
use ActionDispatch::Static
use ActionDispatch::Executor
use ActiveSupport::Cache::Strategy::LocalCache::Middleware
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use ActionDispatch::RemoteIp
use Sprockets::Rails::QuietAssets
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use WebConsole::Middleware
use ActionDispatch::DebugExceptions
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use ActionDispatch::Cookies
use ActionDispatch::Session::CookieStore
use ActionDispatch::Flash
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
run Signapp::Application.routes
rake secretコマンド
任意の暗号化文字列を作ってくれるコマンド
secret_key_base
に記載する長文の暗号文字列を生成する際に主に使用する
$ bundle exec rake secret
c72dfbbacdde22240e4ea7e8f6d4297aa1605743c9ba77baeb2f50e59491d01c625fccbdfbdc6dfb9bafc88dbbec7bc8a8c5dafdea724c29f3073e8c0d980721
rake statsコマンド
アプリケーションディレクトリで実行すると現状のアプリの各MVCのコードに関する統計情報をコンソールに表示してくれるコマンドです!
これを使うことでアプリ内の問題点を統計ベースで分析することに役立ちそうです。
下の例はRailsチュートリアル(5.0系)のアプリディレクトリに対して実行した結果になります。
なお、このコマンドについては、Rails4.0系でも5.0系でもrake stats
で大丈夫な模様です!
$ bundle exec rake stats
+----------------------+--------+--------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+--------+--------+---------+---------+-----+-------+
| Controllers | 269 | 231 | 8 | 35 | 4 | 4 |
| Helpers | 87 | 72 | 0 | 11 | 0 | 4 |
| Jobs | 2 | 2 | 1 | 0 | 0 | 0 |
| Models | 142 | 100 | 4 | 16 | 4 | 4 |
| Mailers | 16 | 14 | 2 | 2 | 1 | 5 |
| Channels | 8 | 8 | 2 | 0 | 0 | 0 |
| Javascripts | 51 | 4 | 0 | 1 | 0 | 2 |
| Libraries | 0 | 0 | 0 | 0 | 0 | 0 |
| Tasks | 0 | 0 | 0 | 0 | 0 | 0 |
| Controller tests | 196 | 160 | 6 | 25 | 4 | 4 |
| Helper tests | 26 | 22 | 2 | 4 | 2 | 3 |
| Model tests | 140 | 116 | 3 | 24 | 8 | 2 |
| Mailer tests | 46 | 36 | 2 | 4 | 2 | 7 |
| Integration tests | 379 | 321 | 9 | 29 | 3 | 9 |
+----------------------+--------+--------+---------+---------+-----+-------+
| Total | 1362 | 1086 | 39 | 151 | 3 | 5 |
+----------------------+--------+--------+---------+---------+-----+-------+
Code LOC: 431 Test LOC: 655 Code to Test Ratio: 1:1.5
番外編
Rails標準のコマンドとは違うが、おそらくどの会社のRailsアプリでも Gemfile
には必ず入っているであろう pry-rails
の便利な仕組み
show-methodコマンド(主に pry-rails
でのデバッグ時に有効)
コマンドの引数に渡したメソッドの定義内容と定義されている場所をコンソールに表示してくれます。
下の例ではコマンドの引数に指定したメソッドがrails_warden
というgemの中に定義されていることがわかります。
show-method 該当メソッドが記載されているクラス(定義元である必要なし).new.メソッド名
$ show-method SessionsController.new.logged_in?
From: /Users/ユーザー名/アプリ名/vendor/bundler/ruby/2.3.0/gems/rails_warden-0.5.8/lib/rails_warden/controller_mixin.rb @ line 13:
Owner: RailsWarden::Mixins::HelperMethods
Visibility: public
Number of lines: 3
def authenticated?(*args)
warden.authenticated?(*args)
end
こいつの便利ポイントとしては、「このメソッドどこにも定義されてないけど、何だこれ?」と思った時にどのgemに依存しているメソッドなのかを明確にしてくれるのでコードリーディングが捗ることでしょうか。
(まあ先程同様にgemのコード読めよ!って話ですが)
最後に
いかがだったでしょうか?
自分は働き始めてから、これらのコマンドを知りました...
なかなかRailsの本などでも取り上げられることの少ない項目だと思うので、
読んで下さる方のRails知識のちょっとした足しになれば幸いです。