はじめに
本稿は、CIが通らないという問題からずっと逃げ続けてきた自分が、
具体的にどうやって解消したのか、
そもそもなぜ問題に向き合えるようになったのかを記録として残していきます。
起きていた問題
GitHub上でPRを作成した際、CIが通らず、以下のようなエラーが順に出ました:
- Brakeman:バージョンが古くセキュリティチェックで警告
- Rubocop:コードスタイル違反(空行やトレーリングスペースなど)
- RSpec:テスト仕様の不整合やスタブの未定義によるエラー
いずれもローカルのDocker開発環境では解消できるが、Mac本体ではRubyやBundlerのバージョン違いで bundle install すらできない状態でした。
解決に向けて行った修正
Brakeman:バージョンのズレ
問題点
Gemfileの brakeman の指定が明確でなかったため、CI上で古いバージョン (7.0.2) が動作し警告が出ていました。
gem 'brakeman', '~> 7.1.0'
と明示的に記載し、bundle install で更新。
Rubocop:スタイルチェック違反
問題点
- 空行不足
- 行末スペース
- def foo; end の1行記法への変換
- ダブルクオート vs シングルクオート など
Docker環境で以下を実行して自動修正しました
docker compose exec app bundle exec rubocop -A
RSpec:テストの意図と現実のズレ
問題点1:バリデーションを外したのに、バリデーション前提のテストが残っていました
→ expect(subject).to be_falsey を truthy に修正
問題点2:Notification.create に対するスタブ notification_double が未定義でした
→ テスト内で notification_double = instance_double("Notification") を明示して allow(...).to receive(...).and_return(...) を補完
今までできなかった、コンフリクト解消をなぜ行えたのか
AIに徹底的に壁打ちすることが今回できた要因の全てだと思います。
上記を行った結果下記の結果になりました。
- CIで何が起きているか、エラーメッセージが理解できた
- エラーメッセージ内の理解できてない単語(概念)を一つずつ理解できた
元々どこでエラーが起こっているのかもわからない状態から、
どこで問題が起こっているのか、その原因が何か?を初学者でも分かるようになったことが大きいかなと思います。
今回の学びとこれから
エンジニア業務はAIによって代替できるということがよく言われていますが、
そもそもどこをどうやって代替してくれるのかがわからなければ、AIを使う(AIに指示する)側になれないなと思いました。
結局、最低限土台となる知識をつけなければAIの恩恵は受けれなさそうなので、
少し時間はかかるかと思いますが、まずは最低限の知識をつけることに注力していこうと思います。