Rails 6で認証認可入り掲示板APIを構築する #2 gitとrubocop導入

←[Rails 6で認証認可入り掲示板APIを構築する #1 環境構築](https://qiita.com/rf_p/items/a846553c11571f4177eb)

# Githubに上げる

前回の続きから。
とりあえず動くところまでいったのでGithubにpushしましょう。

New repositoryを選択。

その後適当な名前を付けて作成。
他の人からソースコードを見られたくなければPrivateに。問題なければPublicに。

![rep.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199678/1c4fa022-f9ee-8867-2f20-ecf2507bb2df.png)

Cloud9はデフォルトでgitが入っているのでそのままgitコマンドが使えます。

```powershell
$ git add -A
$ git commit -m 'initial commit'
$ git remote add origin https://github.com/{YOUR_ACCOUNT}/{YOUR_REPOSITORY}.git
$ git branch -M master
$ git push -u origin master
```

上記コマンドのYOUR_部分は作ったばかりのリポジトリに書いてあるのでそこを参照してください。

# キーペアを作成し、公開鍵をGithubに登録する

上記対応だと、pushするたびにGithubのユーザーIDとパスワードを聞かれます。

```powershell
$ ssh-keygen -t rsa
```

Enterキー連打でキーペアを作ります。

```powershell
$ cat ~/.ssh/id_rsa.pub 
```
で表示される文字列が公開鍵なのでコピーします。

Githubに移動し、右上の自分のアイコンから『Settings』→『SSH and GPG keys』→『New SSH key』と遷移。
タイトルは分かりやすいものを付けて、keyに先程の公開鍵を貼り付けて保存。

ただ、これでもpush時にまだIDパスを聞かれるはず。

```powershell
$ git remote set-url origin git@github.com:{YOUR_ACCOUNT}/{YOUR_REPOSITORY}.git
```

とすればOK。
これで、次回以降pushやpull時にIDパスを都度聞かれなくなります。

参考：[GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)

# testディレクトリを消す

今回はRSpecを使ってテスト実装していくので、minitest用であるtestディレクトリを消します。

```powershell
$ git rm -r test/
```

# rubocopを入れる

まずは静的解析してくれるrubocopを入れましょう。
というのもコーディング規約をチェックしてくれるgemなのですが、後から入れるとコーディング規約に反する指摘が大量に出て手がつけられなくなるためです。

```diff:Gemfile
...

+ gem 'rubocop-rails'

...
```

```powershell:インストール
$ bundle
```

# rubocop設定ファイルを作る

```yml:.rubocop.yml
AllCops:
  Exclude:
    - bin/*
    - db/schema.rb

# 日本語コメント許可
AsciiComments:
  Enabled: false
  
# ダブルクォーテーションに統一
StringLiterals:
  EnforcedStyle: double_quotes
```

アプリケーションのrootディレクトリ(/home/ec2-user/environment/bbs)に配置してください。
ファイル名の先頭にドット付けるのを忘れずに。

# rubocop指摘箇所を直す

```powershell
$ rubocop -a
```

実行すると40個前後のエラーを吐きますが、ほぼ全て以下エラーのはず。

```powershell
C: Style/FrozenStringLiteralComment: Missing frozen string literal comment.
```

これは

```diff:各Rubyファイルの1行目に追記
+ # frozen_string_literal: true
+
```

これでOKです。
意味するところはRubyだと文字列がデフォルトでミュータブルだけど、意図しない不具合を生んだりするのでfreezeしてイミュータブルにするといいよね
Ruby3ではデフォルトでイミュータブルになることが決まっているよ、それに備えてこの記述を入れておけばファイル中の文字列がイミュータブルになるよ

的な感じです。

数十ファイルを開いて編集保存して…をやるのが面倒であれば、

```powershell
# Gemfileの先頭に # frozen_string_literal: trueを追記
$ sed -i '1s/^/# frozen_string_literal: true\n\n/' Gemfile
```

のようにすればファイル先頭に追記ができます。
db/*のように指定するとディレクトリ一括もできます（ちょっと危険）。

元も子もない話をすると、チュートリアルの範囲ならrubocopでこのチェック無効にしちゃってもいいです。
その場合は

```diff:.rubocop.yml
...

+ Style/FrozenStringLiteralComment:
+   Enabled: false
```

と追記してください。
ただし前述の通りRuby3からはデフォルトでイミュータブルになるので、今後新規アプリケーションを作り始めるのであれば入れておくべきでしょう。

あとは以下エラーを潰すだけですね。

```
C: Style/Documentation: Missing top-level class documentation comment.
```

app/mailers/application_mailer.rb
app/models/application_record.rb
config/application.rb
の３ファイルで発生しているはずですが、クラスのドキュメンテーションが無い時に出るエラーです。

```diff:config/application.rb

 module Bbs
+  #
+  # 設定ファイル
+  #
   class Application < Rails::Application
```

のようにclass定義の前にコメントを追加しましょう。

全て修正し、

```
Inspecting 26 files
..........................

26 files inspected, no offenses detected
```

のようにエラーがなくなればOKです。

# 続き

→[Rails 6で認証認可入り掲示板APIを構築する #3 RSpec, FactoryBot導入しpostモデルを作る
](https://qiita.com/rf_p/items/9b7cc0b3a76d6141b103)
【[連載目次へ](https://qiita.com/rf_p/items/a846553c11571f4177eb#%E7%9B%AE%E6%AC%A1)】