🌊

Rails7.1の初期セットアップ

2022/01/20に公開

株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら弊社HPからご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。

  • プロジェクトでRailsエンジニアが足りなくて困っている
  • Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
  • オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら弊社HPからご連絡いただけますと幸いです。

前提

Rails7.1でrails newをするところからやっていくことをリストアップします。
随時更新していきます。

rails newのオプション

基本的に以下のコマンドで実行している。

rails _7.1.3.2_ new test_project -d mysql --css tailwind

CSSはBootstrapを使いたい場合は、bootstrap、Tailwindを使いたい場合はtailwindを指定する。

DBのオプションは何も指定しない場合はPostgreSQLになる。MySQLを利用したいため、mysqlを指定する。

他にも様々なオプションも指定できますが、長くなるので他の記事を参考にしてください。

https://qiita.com/morioka1206/items/d9297cc5d5085422acac

.gitignoreの設定

Jetbrains社のエディターを使っている場合は、.gitignoreに以下の記述を追記します。

.gitignore
.idea/*

しかし、上記の方法ではすでにコミットされているファイルをignoreの対象にすることはできません。そのため、すでにコミットしてしまった場合には、以下のコマンドを実行して無視するようにします。

bash
git rm -r --cached .idea/*

不要なファイルが作成されないようにする

rails gなどのコマンドの際に、~~~_helper.rb~~~_spce.rbなどの、自身では利用しないようなファイルが作成されるため、これらを作成されないように設定します。

config/application.rbの特定の箇所に以下の記述を追記します。
これによって、rails generateなどのgenerateコマンドの際に、不要なファイルが作成されなくなります。

application.rb
  class Application < Rails::Application
    ...(省略)
    config.generators do |g|
      g.stylesheets false
      g.javascripts false
      g.helper false
      g.test_framework false
    end
  end

参考サイト
https://qiita.com/yuutetu/items/135b1c8ab512208aebfe

様々なgemの導入

画面系

デバッグ系

テスト系

ユーザー管理系

コード品質管理系

Rubocop導入方法

Gemfile
group :development do
  gem 'rubocop', require: false
  gem 'rubocop-performance', require: false
  gem 'rubocop-rails', require: false
  gem 'rubocop-rspec', require: false
end
bash
bundle install

次にrubocopで必要な設定ファイルを作成するために、以下のコマンドを実行します。

bash
bundle exec rubocop --auto-gen-config

これにより、プロジェクト配下に.rubocop.yml.rubocop_todo.ymlが作成されます。
以下の.rubocop.ymlは、私がいつもプロジェクトで導入する設定ファイルになります。

.rubocop.yml
inherit_from: .rubocop_todo.yml

require:
  - rubocop-rails
  - rubocop-rspec
  - rubocop-performance

AllCops:
  TargetRubyVersion: 3.1.0
  TargetRailsVersion: 6.1.4.4
  Exclude:
    - node_modules/**/*
    - vendor/**/*
    - bin/*
    - db/migrate/*
    - db/schema.rb

Metrics/AbcSize:
  Max: 65

Metrics/ClassLength:
  Max: 160

Metrics/CyclomaticComplexity:
  Max: 10

Layout/LineLength:
  Max: 200

Metrics/MethodLength:
  Max: 50

Metrics/PerceivedComplexity:
  Max: 11

Style/ClassAndModuleChildren:
  Enabled: false

Style/Documentation:
  Enabled: false

Style/GuardClause:
  Enabled: false

# Use only ascii symbols in comments.
Style/AsciiComments:
  Enabled: false

Layout/EmptyLinesAroundAttributeAccessor:
  Enabled: true

Layout/SpaceAroundMethodCallOperator:
  Enabled: true

Lint/RaiseException:
  Enabled: true

Lint/StructNewOverride:
  Enabled: true

Style/ExponentialNotation:
  Enabled: true

Style/HashEachMethods:
  Enabled: false

Style/HashTransformKeys:
  Enabled: true

Style/HashTransformValues:
  Enabled: true

Style/SlicingWithRange:
  Enabled: true

Style/EmptyMethod:
  EnforcedStyle: expanded

Rails/UnknownEnv:
  Environments:
    - production
    - staging
    - development
    - test

Style/SymbolArray:
  Enabled: false

Rails/LexicallyScopedActionFilter:
  Enabled: false

Style/RescueStandardError:
  EnforcedStyle: implicit

RSpec/ExampleLength:
  Enabled: false

RSpec/NestedGroups:
  Enabled: false

すでにあるファイルの警告を無視するコマンドを実行。これにより.rubocop_todo.ymlがプロジェクトのルート配下に作成される。

bash
rubocop --auto-gen-config

日本語化対応

画面の文字などを日本語で表示されるように設定します。
以下の記事がわかりやすかったです。
https://qiita.com/shimadama/items/7e5c3d75c9a9f51abdd5

flashメッセージの設定

不要なルーティングの削除

※これはrails routesを実行した際に、不要なルーティングがある場合に行います。
config/application.rbrequire "rails/all"があるので、それを以下の記述に変更して不要な機能をコメントアウトします。

application.rb
# 変更前
require "rails/all"

# 変更後
# 以下の中で不要な機能をコメントアウトする
require "active_record/railtie"
require "active_storage/engine"
require "action_controller/railtie"
require "action_view/railtie"
require "action_mailer/railtie"
require "active_job/railtie"
require "action_cable/engine"
require "action_mailbox/engine"
require "action_text/engine"
require "rails/test_unit/railtie"
require "sprockets/railtie"

タイムゾーン周りの設定

以下の記事に記載しました。参考にしていただけると幸いです。
https://zenn.dev/ryouzi/articles/dda18594f2dbd3

404, 500エラーなどのエラーメッセージの作成

https://qiita.com/YutoYasunaga/items/7c2e6962966677610d39

https://morizyun.github.io/blog/custom-error-404-500-page/index.html

https://qiita.com/ryuuuuuuuuuu/items/1a1e53d062bff774d88a

Discussion