analyzer 9.x.xにアップデート出来た*1ので、元々custom_lintで書いてたものに加えて新たにカスタムルールを書いたりしている。
なぜLinterが必要なのか
- AIは確率論的に動くため人間と同様に抜け漏れがある。逆にLinterは、抜け漏れが*2ない
- Linterはルールのテストが書けるというのも自分的には大事
- 基本的に自分が扱うリポジトリは、Claude Codeを前提にしてルールなどを書いているが、チームメンバーがそれ以外を使って開発することは止めることは出来ないし、プルリクエストが必ずAIを通しているとは限らない
すべてをAIで解決するのではなく、適材適所いい感じに使いたい。プログラムで問題発見出来るものを都度AIで発見するのではなく、問題発見するためのプログラムをAIで書く。手動テストせずに自動テスト書くみたいな感じ。
どういうルールを書くのか
プロジェクト特有のルールやライブラリ特有のルールを書く。 例えば、以下のようなのを書いて設定している。
- このレイヤーからこのレイヤーは逆流してはいけない
- このファイルは、こういう命名規則のクラスでなければならない
- Widgetは1ファイルにつきpublic classは1つでなければならない
- sealed classは、freezedを利用しなければならない
- RiverpodのRefをProvider以外に引数として渡してはいけない
どういうルールを作るべきか?もAIと話して見つけることがある。また元々custom_lintを使っていた時からこういうルールがあると良さそうというのを溜めていたのでそこからちまちま作っている。
その他、考えていること
コードレビューをAIに任せようという話があり、自分も任せているし有益である。一方で、Linter、テストカバレッジ、循環的複雑度、認知的複雑度、Code smellsなどを機械的に示すことで解決できることも多くあり、まずはそっちを頑張ろうかとぼんやり思っている。