アプリ作成の事前準備・DB設計

内容

本日よりオリジナルアプリ作成に入るので、今後の備忘録として実装手順、詰まったところ等をまとめる。

本日の実装

1. 新規アプリケーション作成

ターミナル

% cd ~/作成したいディレクトリ名
# railsのバージョンと、-dオプションでMySQLの使用を明示
% rails _6.0.0_ new アプリケーション名 -d mysql
# ここでdatabase.ymlのencodingを、utf8mb4→utf8に編集する
% cd 作成したアプリケーション名
% pwd
% rails db:create

2. リポジトリを作成

GitHub Desktopを用いてローカルリポジトリを作成する
② first commitというコミットメッセージでcommitする
③ アプリケーションと同名のリモートリポジトリを作成する
④ pushする

3. GitHubのプロジェクトボードに実装機能を記述

4. 自動整形ツールの導入

Rubyの静的コード解析ツールであるRubocopを導入する。
Gemfile

group :development do
  gem 'rubocop', require: false
end

ターミナル

% bundle install
% touch .rubocop.yml

Rubocopの設定を行う。以下コピペ。
.rubocop.yml

AllCops:
# 除外するディレクトリ(自動生成されたファイル)
# デフォルト設定にある"vendor/**/*"が無効化されないように記述
 Exclude:
   - "vendor/**/*" # rubocop config/default.yml
   - "db/**/*"
   - "config/**/*"
   - "bin/*"
   - "node_modules/**/*"
   - "Gemfile"


# 1行あたりの文字数をチェックする
Layout/LineLength:
 Max: 130
# 下記ファイルはチェックの対象から外す
 Exclude:
   - "Rakefile"
   - "spec/rails_helper.rb"
   - "spec/spec_helper.rb"

# RSpecは1つのブロックあたりの行数が多くなるため、チェックの除外から外す
# ブロック内の行数をチェックする
Metrics/BlockLength:
 Exclude:
   - "spec/**/*"

# Assignment: 変数への代入
# Branch: メソッド呼び出し
# Condition: 条件文
# 上記項目をRubocopが計算して基準値を超えると警告を出す(上記頭文字をとって'Abc')
Metrics/AbcSize:
 Max: 50

# メソッドの中身が複雑になっていないか、Rubocopが計算して基準値を超えると警告を出す
Metrics/PerceivedComplexity:
 Max: 8

# 循環的複雑度が高すぎないかをチェック(ifやforなどを1メソッド内で使いすぎている)
Metrics/CyclomaticComplexity:
 Max: 10

# メソッドの行数が多すぎないかをチェック
Metrics/MethodLength:
 Max: 30

# ネストが深すぎないかをチェック(if文のネストもチェック)
Metrics/BlockNesting:
 Max: 5

# クラスの行数をチェック(無効)
Metrics/ClassLength:
 Enabled: false

# 空メソッドの場合に、1行のスタイルにしない NG例:def style1; end
Style/EmptyMethod:
 EnforcedStyle: expanded

# クラス内にクラスが定義されていないかチェック(無効)
Style/ClassAndModuleChildren:
 Enabled: false

# 日本語でのコメントを許可
Style/AsciiComments:
 Enabled: false

# クラスやモジュール定義前に、それらの説明書きがあるかをチェック(無効)
Style/Documentation:
 Enabled: false

# %i()構文を使用していないシンボルで構成される配列リテラルをチェック(無効)
Style/SymbolArray:
 Enabled: false

# 文字列に値が代入されて変わっていないかチェック(無効)
Style/FrozenStringLiteralComment:
 Enabled: false

# メソッドパラメータ名の最小文字数を設定
Naming/MethodParameterName:
 MinNameLength: 1

ちなみに、Rubocopを実行するにはターミナルで以下のコマンドを実行する。
【例】ターミナル

# Rubocopを実行
% bundle exec rubocop

チェック内容を自動で修正させることもできる。
【例】ターミナル

# Rubocopを実行し、check内容を自動修正
% bundle exec rubocop -a

5. デフォルトの記述を削除

JavaScriptファイルの処理が正常に動作しないことを防ぐため、turbolinksを無効化しておく。
app/javascript/packs/application.js

// 省略
require("@rails/ujs").start()
// require("turbolinks").start() //この行を削除する
require("@rails/activestorage").start()
require("channels")

// 省略

6. Gitで不要なファイルを除外

不要な変更履歴である.DS_Storeという隠しファイルを、Gitで管理しないようにする。
.gitignoreファイルの一番下の行に、.Ds_Storeと追記する。
.gitignore

# 1番下の行
.Ds_Store

7. DB設計

画面遷移図を作成する。
ER.dioファイルを作成し、ER図を作成後、READMEに設計情報を記述する。

次回

DB設計をもとに、必要な機能から順次実装していく。まずはユーザー管理機能からかな。

所感

今回の実装の流れが絶対ではないが、さっと実装に移るためにもこの流れを覚えておきたいと感じた。

※注意点

開発環境で以下の変更を行なった場合、必ずローカルサーバーを再起動する必要がある(ローカルサーバーを起動するタイミングに1度だけ読みこまれるため)。
- Rubyバージョンの変更
- テーブル、カラム情報の変更
- Gemの導入状況の変更