はたらクラフト

AIプログラミングの精度を上げ・コストを下げるLinterとFormatter

業務改善ノウハウ

Claude CodeやCodexのようなAIエージェントに任せれば、プログラミングの知識がなくても業務ツールやWebサイトを作れます。

ただし何も対策せずに任せ続けると、コードは少しずつ汚れていき、AIの精度低下・コスト浪費につながります。

今回紹介するのは、コードの汚れを自動で防ぐLinter(リンター)とFormatter(フォーマッター)です。導入をAIに任せるやり方も解説します。

動画で見たい方はこちら。

AIの開発でコードは少しずつ汚れていく

画面は動いていても未使用・重複・不統一なコードがたまる様子

AIとの開発では、画面上の動きだけを確かめて、次の依頼へ進みがちです。動いているから問題ないように見えても、その裏側でコードは少しずつ汚れています

汚れたコードの代表例は、次の3つ。

  • どこからも使われない処理が残っている
  • ほぼ同じ内容のコードが、複数の場所に重複
  • 機能によってコードの書き方がバラバラ

修正を重ねるうちに、不要になった処理の消し忘れや、似た処理の作り直しが増えていきます。人がコードを読まないAI開発では、コードの汚れに気づけません。

コードの汚れがAIの精度低下・コスト浪費につながる

コードの汚れは、見た目だけの問題ではありません。AIの精度とコストの両方に悪影響です。

汚れた手本でAIが間違え、判断がブレる

古く不統一なコードを手本にしてAIの判断がブレる流れ

AIは作業のたびに、既存のコードを手本にします。重複や書き方のバラつきがあると、どれが正解か判断できず、回答ごとに違う書き方を選びやすくなります

やりたいことは同じなのに、色んなところに異なる書き方のコードが散らばっている。その中からAIが見本にしたものが、実はもう使われていない古いコードかもしれません。

無駄なコードを読み、判断に迷ってトークンを消費する

無駄な読み込みと判断の迷いでトークンとコストが増える流れ

トークンとは、AIが情報を読み書きする最小単位(1トークンで1単語のようなイメージ)です。

汚れたコードによってAIが読むコード量が増えるほど、トークン(=コスト)を消費します。

さらに、正解がわからないコードでは、正しいコードの書き方の検討も必要なため、その判断でも余計にトークンを使います。

LinterとFormatterは、コードの汚れを自動で見張る道具

Linterが問題を指摘しFormatterが見た目をそろえる自動検査

こうした汚れは、AIへの指示である程度防ぐことができます。

でも、AIに任せるよりコードを自動検査するLinterとFormatterという仕組みを使った方が速くて正確です。検査にAIを使わないので、トークンも消費しません。

Linterはコードの問題を指摘

Linterが未使用・重複・複雑・ルール違反を指摘する流れ

Linterは、コードを解析して問題を指摘する道具です。

  • 使われていない処理
  • コードの重複
  • 複雑すぎる書き方
  • 決まりに反する書き方

などを、ルールにもとづいて機械的に指摘します。代表的なLinterにESLintがあります。

Linterを使っていると、以下のようにルール違反の書き方はエラーになります。

3文字未満の変数名を指摘するESLint

ここでは、変数(数値や文字などの値を入れる箱)の名前が、aという3文字未満なのでエラーになっています。

aのように短すぎる変数名は意味がわからないので、3文字以上の変数名を強制するルールです。ここでの変数名はserviceなどが適切です。

AIはよくixyのような1文字変数を使いがちです。意味ある変数名を考えるよりラクなので。

Formatterはコードの見た目をそろえる

Formatterが不統一なコードの見た目を自動でそろえる流れ

Formatterは、字下げや引用符の種類といったコードの見た目を、決めたルールどおりに自動でそろえる道具です。

書き方が統一されるため、どのAIがいつ書いても同じ見た目のコードになります。代表的なFormatterにPrettierがあります。

Prettierによるコード整形の前後

Formatterを使うと、このようにルール通りにコードを一瞬で整形してくれます。たとえば上記は、

  • そろってない字下げの統一
  • 無駄な空白スペースの削除
  • シングルクォートへ統一
  • 末尾の;欠落の補完

をやっています。

はたらクラフトで使っているLinterとFormatter

はたらクラフトのWebサイトも、LinterとFormatterを組み合わせて、AIのコードを検査しています。

Linter:ESLint・jscpd・knip

ESLint・jscpd・knipが異なる観点でコードを検査する流れ

役割の違う3つのLinterを使い分けています。

  • ESLint:関数(処理のまとまり)の長さや複雑さ、デザインルールへの違反などを幅広く検出(例: 1つの関数は50行まで)
  • jscpd:5行以上続く重複コードを検出
  • knip:未使用のファイル・処理・外部ツールを検出

このほか、データベースの言語(SQL)用に、LinterとFormatterを兼ねるSQLFluffを使っています。

Formatter:Prettier

FormatterはPrettierを使っています。字下げや引用符の種類はもちろん、デザイン指定の並び順のような細かい点まで、自動でそろえます。

コード修正の保存ごとにLinter・Formatterを自動実行するlefthook

lefthookがコミット時に自動検査し違反をAI修正へ戻す流れ

道具をそろえても、実行を忘れれば意味がありません。そこでlefthookで、コード修正を保存するたびに、修正コードにLinterとFormatterを自動実行しています。

ここでの保存は、履歴管理ツールGitの「コミット」という操作を指します。

違反が1つでも残っていると、修正をコミットできません。AIがルール違反のコードを書くとコミット時に指摘され、AI自身が直してから先へ進みます。Formatterによる修正も同じ流れです。

人がコードをチェックしなくても、AIによるコードの汚れを自動でガードする仕組みです。

Linter・Formatter導入はAIに任せる

AIがLinter・Formatterを導入し既存コードを段階的に修正する流れ

ここまで読んで、設定が難しそうだと感じたかもしれません。安心してください。導入も設定もAIに任せられます

まずはどのLinter・Formatterを使うかを検討しましょう。開発中のプロジェクトを開いて、次の依頼文をそのまま送ってください。

このプロジェクトに最適なLinterとFormatterを、導入実績やメンテナンス状況もふまえて検討して

AIがプロジェクトの内容に合わせて、候補と選んだ理由を提案してくれます。次の3点を確認しましょう。

  • 自分のプロジェクトに合っているか
  • 多くのプロジェクトに導入実績があるか
  • 継続的にメンテナンスされているか

Linter・Formatterを導入したら、以下の指示でコミット時に自動チェックが走るようにしましょう。

lefthookでcommit前にLinterとFormatterを実行するようにして

すでに動いているプロジェクトへの導入は、注意点があります。既存コード全体が検査され、大量の違反が見つかることです。

一度に直すと変更が大きくなり、確認が大変でバグもまぎれ込むかもしれません。次のように、導入計画を立てさせてください。

◯◯を導入して。既存コードの違反は一度に直さず、段階的に解消する導入計画を先に作って

あとは計画にそって、少しずつ違反を解消させればOKです。

コード検査を仕組み化し、AIコーディングの精度UP

この記事の要点は、次の4つです。

  • AIによる開発では、使われない処理・重複・書き方のバラつきといった汚れがたまる
  • コードが汚れると、AIの判断がブレて精度が落ち、無駄なコードの読み込みと迷いでトークンを浪費する
  • Linter・Formatter・lefthookで汚れを自動で防げる
  • 導入・設定はAI任せでOK。ただし、既存プロジェクト導入は違反が大量に出るので、計画を立てさせる

まずは、新規もしくは既存のプロジェクトで、「このプロジェクトに最適なLinterとFormatterを、導入実績やメンテナンス状況も含めて検討して」と指示してください。

開発が進めば進むほど、LinterとFormatterがAIの精度低下・トークン浪費を防いでくれます。

この記事をシェア