16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tama.rbAdvent Calendar 2018

Day 4

教科書で扱われないRails標準の便利コマンド

Last updated at Posted at 2018-12-03

検証の際の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知識のちょっとした足しになれば幸いです。

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?