コンテンツにスキップ

コードとドキュメントの品質を上げる技術

Author: Kazukichi
  • ここ最近、 takada-semitmp-official 、そしていくつかのプライベートリポジトリにおいて、なるべく機械的にコード(Web領域)やドキュメントの品質を上げるための活動をしてきた
  • 主にPRのレビューコスト低減と、日頃のメンテコストの削減がねらい

コードのリンター・フォーマッタ

Section titled “コードのリンター・フォーマッタ”
  • リンターはコードの静的解析ツール
    • e.g. 未使用変数の検出、null参照の可能性の警告
  • フォーマッタはコードのスタイルを自動的に統一するツール
    • e.g. インデントの統一、クォートのスタイル統一
  • 基本的には Biome を利用している
  • ESLintやPrettierよりも導入が容易で、細かいこだわりがない場合には良い選択肢
  • Astroユーザとしては、Astro対応がまだ不完全な点が惜しい
  • 最近はリンターは Oxlint、フォーマッタは dprint もモダンな選択肢として挙がっている
  • knip という不要なコードの検出に特化したライブラリもあるが、基本的な部分はBiomeでカバーできる
  • markdownlint を利用している
  • 見出しの階層構造、インデント、リストのスタイルなどMarkdownの書き方を統一してくれる
  • textlint を利用している
  • 冗長な表現や不自然な日本語表現を検出してくれる
  • 誤検知も多いため、指摘を鵜呑みにせず内容を確認することが重要
  • AIによる文書レビューが普及した現在、以前ほど力は発揮できないが、AIほどドラスティックに書き換えることなく細かい表現を改善してくれる点は利点
  • コミット前に自動でリンターやフォーマッタを実行する仕組み
  • 特にこだわりはないが、現在は lefthook を利用している
  • 以前は husky + lint-staged を使っていた
  • 最近は prek という選択肢もあるらしい
  • dependabot.yml を設置し、デフォルト(セキュリティアップデートのみ)よりもアクティブにライブラリを更新している
  • NPMパッケージとGitHub Actionsのアクションを更新対象にしている
  • GitHub ActionsでDependabotが作成したPRを自動マージするようにしている
  • 一度に大量のPRが作られると自動マージがコンフリクトして止まることがある
  • アップデートのたびに設定ファイルの書き換えが必要なライブラリ(Biomeなど)や、同時に更新が必要なパッケージ群(AstroとStarlight、Reactとreact-domなど)は扱いが難しい
  • より柔軟な制御が必要な場合は Renovate が選択肢になる
  • Shai-HuludやTeamPCP(Trivy, LiteLLM, Axiosへの攻撃)のようにサプライチェーン攻撃が頻発しているため、自動マージの運用は見直す必要があるかもしれない
  • GitHub Actionsのアクションの更新には actions-up という選択肢もある
  • PR Agent を利用している
  • 詳しくは過去に発表した PR-Agent - AIでらくらくPRレビュー♪ を参照
  • PRの内容をAIが自動でレビューしてくれる
  • PR Agent自体はOSSだが、別途APIアクセス可能なLLMの用意が必要
  • CodeRabbit など同種のプロダクトの多くはプロプライエタリなため、OSSである点がありがたい
  • 読み込めるコンテキストが限られており、使用するモデルもハイエンドではないため、現状そこまで精度の高いレビューは受け取れていない
  • ただし、基本的なセキュリティリスクやライブラリの誤った使い方は指摘してくれている
  • 人間の認知リソースは有限で、思っているよりも限界は低い(はず)
  • リンター・フォーマッタ・プレコミット・AIによるPRレビューはレビュアーとレビュイー双方の負担軽減につながる
  • Dependabot + GitHub Actionsは日頃のメンテナンスコストの削減につながる
  • 機械的にできる部分はAIやシステムにどんどん任せていこう