【Rails】Rakeとはなんだろう?

rails

こんにちは!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というビルドツールも実行ことができるのでスーパーコマンドなのでしょうか。そこらへんをまた次の機会に掘り下げていきたいと思います!

     

    参考:

    コメント