giraphme tech blog

働きたくないでござる

Rails 5.1 で始める SPA (2) rails g

前回
Rails 5.1 で始める SPA (1) rails new, bundle install - giraphme tech blog


タイトルの通り今回はひたすら rails g するだけの簡単なお仕事です。
といってもこのあたりは他に優秀な記事やドキュメントがたくさんあるので Rails tutorial でも見といてください。

無理やり注意をひねり出すとしたら、以下の点ぐらいでしょうか。

  • Rails 5 系から DB のマイグレーション実行のコマンドが bundle exec rails db:* になった。 (これまで通り bundle exec rake db:* も使用できますが、今後 rails コマンドで統一されていくようです。)
  • Rails 5 系からマイグレーションファイルに comment を記載できるようになっているのでちゃんと書く
  • 後から utf8mb4 対応するのは地味面倒なので、 string のカラムに limit: 180 を付けておく(MySQL 側の設定で回避する場合は不要)
  • その他 Rails4 までの知識で DB 設計せず、新しい機能を導入できないか検討すること(Rails5から使えるActiveRecord便利機能 - Qiita
  • この時点でモデルのロジックをサービス層に逃がせる仕組みを準備しておくとなお良い(これについては別で記事にできたらいいなぁ……。)

個人的な意見ですが、 rails g scaffold ではゴミファイルやコメントアウトが大量に作られてしまってつらいので、 rails g コマンドではモデルのみ作成して、コントローラーや View は Rails の規約に則って手動で作るようにしています。


それでは今日はこのへんで。 なんの中身もないクソ記事だった……。

Rails 5.1 で始める SPA (1) rails new, bundle install

新しいサイトを作成するにあたって作業内容をまとめていこうと思います。
執筆時点ではまだ rc2 なので、5.1.0.rc2 を使用しています。
Ruby のバージョンは 2.4.1 です。

(2017-5-9 追記: 5.1.0 にアップグレードしました。)

まずはさいしょのおまじない。

$ rbenv global 2.4.1
$ gem install rails --version '5.1.0.rc2'
$ rails new zooto -d mysql --skip-coffee --skip-turbolinks --webpack=react --skip-test --skip-sprockets
$ cd zooto
$ git add .
$ git commit -m "rails new"

--skip-coffee --skip-turbolinks --webpack=react --skip-sprockets このあたりのオプションで Rails がフロントエンドに対してお節介してこないようにしておきます。
ちなみに私はこれまで rails new する時はいつも --skip-bundle を付けるようにしていましたが、 --webpack=react オプションを付けると自動で実行される rails webpacker:install:react コマンドで死んでしまうようです。

次に Gemfile を編集します。
心機一転、いつもとは違う Gem を使用してみたかったので、 mastodon の Gemfile を参考に記述しました。
Sprockets の呪縛から開放され、 Assets 関連の Gem が消えるだけで随分とスッキリしましたね……。

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails', '~> 5.1.0'

# DB
gem 'mysql2', '>= 0.3.18', '< 0.5'
gem 'redis', '~>3.2', require: ['redis', 'redis/connection/hiredis']
gem 'hiredis'

# Rack server
gem 'puma', '~> 3.7'
gem 'rack-attack'
gem 'rack-cors', require: 'rack/cors'
gem 'rack-timeout'

# Front
gem 'webpacker'
gem 'hamlit-rails'
gem 'jbuilder', '~> 2.5'
gem 'sass-rails', '~> 5.0'

# Job Queue
gem 'sidekiq'
gem 'sidekiq-unique-jobs'

# Other
gem 'paperclip', '~> 5.1'
gem 'paperclip-av-transcoder'
gem 'aws-sdk', '>= 2.0'
gem 'addressable'
gem 'devise', github: 'plataformatec/devise', branch: :master
gem 'fast_blank'
gem 'httplog'
gem 'kaminari'
gem 'rails-i18n'
gem 'rails-settings-cached'
gem 'simple_form'

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'rubocop', require: false
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'letter_opener'
  gem 'letter_opener_web'
  gem 'bullet'
  gem 'active_record_query_trace'

  gem 'capistrano', '3.8.0'
  gem 'capistrano-rails'
  gem 'capistrano-rbenv'
  gem 'capistrano-yarn'
  gem 'capistrano-faster-assets', '~> 1.0'
end

group :test do
  gem 'capybara'
  gem 'faker'
  gem 'microformats2'
  gem 'rails-controller-testing'
  gem 'rspec-sidekiq'
  gem 'simplecov', require: false
  gem 'webmock'
end

group :development, :test do
  gem 'byebug', platform: :mri
  gem 'rspec-rails'
  gem 'pry-rails'
  gem 'fuubar'
  gem 'fabrication'
  gem 'i18n-tasks', '~> 0.9.6'
end

group :production, :staging do
  gem 'redis-rails'
  gem 'lograge'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
$ bundle install --jobs=10

以上、今日はここまでにしておきます。
次回からは実装を進めていきますが、その前にサービス設計しないとなぁ……。
(設計の前に実装を開始するクズですいません。)


追記: Gemfile の中身を変更 (Rails 5.1.0 にアップグレード等)