こんにちは。RoR永遠の初心者seitです。
Railsに5.0 RC1が出たというのをチラッと目にしたので、インストールして少しさわってみました。

インストール
まずはインストールします。せっかくなので、前回Chefで作ったVagrant環境にインストールします。
と言っても以下のコマンド一発であっさりインストール完了です。
# gem install rails --version=5.0.0.rc1 # rails -v Rails 5.0.0.rc1
ただし、Rubyのバージョンが2.2以上でないといけないようなので、注意が必要です。
アクセスしてみると、トップページが変わっていました。
Yay! I'm on Rails!
RakeとRailsコマンドの統合
Rails 5.0 RC1の新機能を調べていて地味に気になったのは、RakeのRailsコマンドへの統合です。
今まで結構めんどくさかったというか間違えて打ち込むことがあったのでうれしいです。
よく使うコマンドroutesを試してみると、
# rake routes
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
root GET / users#index
# rails routes
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
root GET / users#index
おぉッ確かに同じ結果が返ります。
Rakeコマンドの一覧が見たければ、これまでrake -Tとしていたところを、rails -Tでも確認ができます。
当然、railsコマンドはこれまでと変わらず利用できています。
ちなみにGithubのソースコードを見てみると、commands_tasks.rbファイルに以下のような記述がありました。
・・・略
COMMAND_WHITELIST = %w(plugin generate destroy console server dbconsole runner new version help test)
・・・略・・・
def run_command!(command)
command = parse_command(command)
if COMMAND_WHITELIST.include?(command)
send(command)
else
run_rake_task(command)
end
end
・・・略・・・
rails関連のコマンド以外はrun_rake_taskメソッドを実行するような記述になっています。 4.2では以下のようにエラーメッセージを出すだけでした。
def run_command!(command)
command = parse_command(command)
if COMMAND_WHITELIST.include?(command)
send(command)
else
write_error_message(command)
end
end
また、/rails-master/railties/lib/rails/commands/ディレクトリにrake_proxy.rbファイル追加されていて、中にRakeProxyモジュールが定義されています。
require 'rake'
require 'active_support'
module Rails
module RakeProxy #:nodoc:
private
def run_rake_task(command)
ARGV.unshift(command) # Prepend the command, so Rake knows how to run it.
Rake.application.standard_exception_handling do
Rake.application.init('rails')
Rake.application.load_rakefile
Rake.application.top_level
end
end
・・・略・・・
end
end
ここにrun_rake_taskメソッドが定義されていて、Rakeコマンドが実行されているっぽいです。
[/ruby-2.3.1/gems/rake-10.4.2/lib/rake/application.rb]
module Rake
CommandLineOptionError = Class.new(StandardError)
class Application
・・・略
# Run the top level tasks of a Rake application.
def top_level
run_with_threads do
if options.show_tasks
display_tasks_and_comments
elsif options.show_prereqs
display_prerequisites
else
top_level_tasks.each { |task_name| invoke_task(task_name) }
end
end
end
・・・略・・・
end
他にもRailsでWeb Socketを利用するためのAction Cableというフレームワークが追加されているようなので、また試してみたいと思います。 久しぶりにRailsと遊んでみよう。