こんにちは!tekute-kuです。
今回は、Railsに出てくるRakeについてまとめてみました。
記事を書いた目的
RakeはRailsを扱っている際に、問題が発生し調べているとよく出てきますが、あまりどういうコマンドで、どういうことができるのかを理解できていないため、Rakeとは何なのかをまとめてみました。
この記事が誰かの役に立てれば幸いです。
Rakeとは
公式によると
Rubyリファレンスマニュアルには以下のように説明があります。
Rakeとは
Rake は Make によく似た機能を持つ Ruby で書かれたシンプルなビルドツールです。
from Ruby 3.1 リファレンスマニュアル > ライブラリ一覧 > rakeライブラリ
Railsドキュメント(v6.0.2.1)にはこうも記載されています。
Rakeとは
Rubyで記述されたビルドツール
Rails5以降はrailsコマンドでrakeを呼び出せるようになっています
さて素人にはさっぱりの内容なので一つ一つ紐解いてみましょう。
Makeとよく似た機能
Rake は Make によく似た機能を持つ Ruby で書かれたシンプルなビルドツールです。
はてさて、まずはMakeとはなんでしょうか。
「Make」とは
“C言語で書かれ古くから使われてきたUNIXのビルドプログラムのこと”
だそうです。
ビルドとは
Rake は Make によく似た機能を持つ Ruby で書かれたシンプルなビルドツールです。
「ビルド」とは
“記述したソースコードに問題がないかどうかの解析を行い、問題がなければ実行可能なファイルに変換すること”
なるほど、なるほど。。。
つまり、まとめて簡単に書くと
「古くから使われている”ビルドプログラム(make)”によく似ていて、Rubyで書くことができるシンプルにビルドができる機能」
といったところでしょうか。
Rakeの特徴
ここでRakeの特徴を2つ紹介します。
- 言語内DSLを採用
- Rakefileというファイルに一連の処理を定義する (この処理のまとまりを「タスク」と呼ぶ)
言語内DSLを採用
DSLとは
Domain-Specific Language の略
→ 特定の領域で特化して設計された言語
(例)Rake, RSpec, SQLなど。
Rakefileというファイルに一連の処理を定義する
Rakefileとは
build定義を記述するファイルのこと
このファイルに記述されている作業を上から順に実行してくれる。
なるほど。Rakeファイルに記述されていることを実行してくれるんですね。
ではどうやって実行するのかをみてみましょう。
Rakeの実行
RakeはRakeコマンドで実行することができます。
記述方法は以下のとおりです。
rake コマンド
Rakeのコマンドはどんなものがあるのでしょうか。
Rakeコマンド一覧
Railsで使用できるRakeコマンド一覧をRakeコマンドで見てみることができます。
rake -T
実行結果
rake about # List versions of all Rails frameworks and the environment
rake active_storage:install # Copy over the migration needed to the application
rake active_storage:install:migrations # Copy migrations from active_storage to application
rake app:template # Applies the template supplied by LOCATION=(/path/to/template) or URL
rake app:update # Update configs and some other initially generated files (or use just update:configs or update:bin)
rake assets:clean[keep] # Remove old compiled assets
rake assets:clobber # Remove compiled assets
rake assets:environment # Load asset compile environment
rake assets:precompile # Compile all the assets named in config.assets.precompile
rake cache_digests:dependencies # Lookup first-level dependencies for TEMPLATE (like messages/show or comments/_comment.html)
rake cache_digests:nested_dependencies # Lookup nested dependencies for TEMPLATE (like messages/show or comments/_comment.html)
rake db:create # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RA...
rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_EN...
rake db:environment:set # Set the environment value for the database
rake db:fixtures:load # Loads fixtures into the current environment's database
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:status # Display status of migrations
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:schema:cache:clear # Clears a db/schema_cache.yml file
rake db:schema:cache:dump # Creates a db/schema_cache.yml file
rake db:schema:dump # Creates a db/schema.rb file that is portable against any DB supported by Active Record
rake db:schema:load # Loads a schema.rb file into the database
rake db:seed # Loads the seed data from db/seeds.rb
rake db:setup # Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)
rake db:structure:dump # Dumps the database structure to db/structure.sql
rake db:structure:load # Recreates the databases from the structure.sql file
rake db:version # Retrieves the current schema version number
rake dev:cache # Toggle development mode caching on/off
rake initializers # Print out all defined initializers in the order they are invoked by Rails
rake log:clear # Truncates all/specified *.log files in log/ to zero bytes (specify which logs with LOGS=test,development)
rake middleware # Prints out your Rack middleware stack
rake notes # Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)
rake notes:custom # Enumerate a custom annotation, specify with ANNOTATION=CUSTOM
rake restart # Restart app by touching tmp/restart.txt
rake routes # Print out all defined routes in match order, with names
rake secret # Generate a cryptographically secure secret key (this is typically used to generate a secret for cookie sessions)
rake stats # Report code statistics (KLOCs, etc) from the application or engine
rake test # Runs all tests in test folder except system ones
rake test:db # Run tests quickly, but also reset db
rake test:system # Run system tests only
rake time:zones[country_or_offset] # List all time zones, list by two-letter country code (`rails time:zones[US]`), or list by UTC offset (`rails time:zones[-8]`)
rake tmp:clear # Clear cache, socket and screenshot files from tmp/ (narrow w/ tmp:cache:clear, tmp:sockets:clear, tmp:screenshots:clear)
rake tmp:create # Creates tmp directories for cache, sockets, and pids
rake yarn:install # Install all JavaScript dependencies as specified via Yarn
【重要】Rails5以降はrailsコマンドでRakeを呼び出せる!
ここまでクドクド説明してきましたが、最初に記載していたとおりRailsドキュメント(v6.0.2.1)にはこうも説明されています。
Rakeとは
Rails5以降はrailsコマンドでrakeを呼び出せるようになっています
なんとRails5からはrailsコマンドでRakeを呼び出せるのです!
Ruby on Rails 5.0 リリースノートも確認してみましょう。
そこには
Rakeコマンドをrailsコマンドに統一
とあります。
やはりRails5以降のバージョンはRakeコマンドをrailsコマンドに統一しているようですね。
Rails5以降を使っている場合はRakeコマンドを使う必要がないということです。
なるほど。これまで私が見てきたネットに落ちているRakeコマンドが使われている様々な記事はRails5以前に投稿された可能性が高いので、できればRails5以降に出された記事を参照する方が良いかもしれませんね。
まとめ
- RakeはRubyで書かれたビルドツールだがRails5以降はrailsコマンドでRakeを呼び出すことができる。つまりRakeコマンドがrailsコマンドに統一されている!
- Rakeコマンドが書かれているネットの記事はRails5以前のものかもしれない。
ここで疑問に思ったのがRakeはRubyで書かれたビルドツールですがrailsコマンドは一体何かということです。railsコマンドはRakeというビルドツールも実行ことができるのでスーパーコマンドなのでしょうか。そこらへんをまた次の機会に掘り下げていきたいと思います!
参考:
コメント