Rails 5.0.0-beta1が出た && API mode使ってみた

今朝、ついに出てましたーー

ということで、Release Notesは以下に。

Riding Rails: Rails 5.0.0.beta1: Action Cable, API mode, Rails command

冒頭で、

Rails 5.0! Can you believe it? We only just celebrated the tenth anniversary of Rails 1.0 a few days ago. Time flies when you're having fun with good friends, and we've never had more fun or better friends in the Rails community, so no wonder it's going swoosh!

なんて言ってますね。Rails 10周年なのか...すごいな...。

Rails4.0がリリースされたのっていつだっけなと調べてみたらこんなのがでてきました。Googleすごい、じゃなくてRailsすごい(?)

f:id:to_tu:20151219094632p:plain

Rails4のリリースが2013年の6/25なら、頑張り目に言っても僕はRails4系からしか触ってないことになるな...笑

そして5.0のRelease Notesの、

Now this is just the first beta release, but Rails 5.0.0.beta1 is already running Basecamp 3 in production.

というのがまたすごい。笑

さすがCTOの会社です。。。

ということで余談はこんなとこにして作ってみます。。

参考サイト

手順

Rails5は、Rubyの2.2以上のサポートになります。なかなか攻めるなという感じですが、Rubyのバージョンに追従するRails Coreチームの意向が伺えて、ひたすらすごいなという感じです。Rubyがそれを支えるFWと断絶を起こさずに断続的にバージョンアップしていけるのも、Railsチームの理解あってのことなのかなぁと感じ入ります。。。

ということで、まずはRailsの5.0.0.beta1をインストール。

$ gem install rails -v 5.0.0.beta1

出力全部載せてみます。

$ rails new rails5-api-sample --api
      create  
      create  README.md
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/javascripts/application.js
      create  app/assets/javascripts/cable.coffee
      create  app/assets/stylesheets/application.css
      create  app/channels/application_cable/channel.rb
      create  app/channels/application_cable/connection.rb
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/jobs/application_job.rb
      create  app/mailers/application_mailer.rb
      create  app/models/application_record.rb
      create  app/views/layouts/application.html.erb
      create  app/views/layouts/mailer.html.erb
      create  app/views/layouts/mailer.text.erb
      create  app/assets/images/.keep
      create  app/assets/javascripts/channels/.keep
      create  app/controllers/concerns/.keep
      create  app/models/concerns/.keep
      create  bin
      create  bin/bundle
      create  bin/rails
      create  bin/rake
      create  bin/setup
      create  bin/update
      create  config
      create  config/routes.rb
      create  config/application.rb
      create  config/environment.rb
      create  config/secrets.yml
      create  config/environments
      create  config/environments/development.rb
      create  config/environments/production.rb
      create  config/environments/test.rb
      create  config/initializers
      create  config/initializers/active_record_belongs_to_required_by_default.rb
      create  config/initializers/application_controller_renderer.rb
      create  config/initializers/assets.rb
      create  config/initializers/backtrace_silencers.rb
      create  config/initializers/callback_terminator.rb
      create  config/initializers/cookies_serializer.rb
      create  config/initializers/cors.rb
      create  config/initializers/filter_parameter_logging.rb
      create  config/initializers/inflections.rb
      create  config/initializers/mime_types.rb
      create  config/initializers/request_forgery_protection.rb
      create  config/initializers/session_store.rb
      create  config/initializers/wrap_parameters.rb
      create  config/locales
      create  config/locales/en.yml
      create  config/redis
      create  config/redis/cable.yml
      create  config/boot.rb
      create  config/database.yml
      create  db
      create  db/seeds.rb
      create  lib
      create  lib/tasks
      create  lib/tasks/.keep
      create  lib/assets
      create  lib/assets/.keep
      create  log
      create  log/.keep
      create  public
      create  public/404.html
      create  public/422.html
      create  public/500.html
      create  public/favicon.ico
      create  public/robots.txt
      create  test/fixtures
      create  test/fixtures/.keep
      create  test/fixtures/files
      create  test/fixtures/files/.keep
      create  test/controllers
      create  test/controllers/.keep
      create  test/mailers
      create  test/mailers/.keep
      create  test/models
      create  test/models/.keep
      create  test/helpers
      create  test/helpers/.keep
      create  test/integration
      create  test/integration/.keep
      create  test/test_helper.rb
      create  tmp
      create  tmp/.keep
      create  tmp/cache
      create  tmp/cache/assets
      create  vendor/assets/stylesheets
      create  vendor/assets/stylesheets/.keep
      remove  app/assets
      remove  lib/assets
      remove  tmp/cache/assets
      remove  vendor/assets
      remove  app/helpers
      remove  test/helpers
      remove  app/views
      remove  app/assets/javascripts
      remove  config/initializers/assets.rb
      remove  config/initializers/session_store.rb
      remove  config/initializers/cookies_serializer.rb
      remove  config/initializers/request_forgery_protection.rb

一回作ってから消すのか笑

assets、helpers、views、その他session、cookie関連のものが削除されてますね。

あとapp/channelsも作成されてます。これはActionCable用のディレクトリですね。

totutotu.hatenablog.com

では、Taskというモデルをscaffoldしてみます。

$ bin/rails g scaffold Task name:string duration:integer
      invoke  active_record
      create    db/migrate/20151218220423_create_tasks.rb
      create    app/models/task.rb
      invoke    test_unit
      create      test/models/task_test.rb
      create      test/fixtures/tasks.yml
      invoke  resource_route
       route    resources :tasks
      invoke  scaffold_controller
      create    app/controllers/tasks_controller.rb
      invoke    test_unit
      create      test/controllers/tasks_controller_test.rb
Running via Spring preloader in process 5928

viewやassetsが生成されてないことがわかります。

そんでdb/seeds.rbに適当にシードのレコードをぶっこみます。

# db/seeds.rb
10.times do
  Task.create(
    name: "task",
    duration: 15
  )
end

/tasksにアクセスしてみると...

Screenshot 2015-12-19 07.08.16.png

JSONが吐かれてますね!

まだ全く核になるような部分には触れれてみませんが、もうちょっと使ってみて便利そうな使い方見つけたらまた記事を書こうと思います。とりあえず個人のプロダクトをRails5.0.0.beta1にあげてみます。