Qtブログ(日本語)

Qt エージェンティック コードレビュースキルのご紹介

作成者: Qt Group 日本オフィス|May 8, 2026 2:26:58 AM
このブログは「Introducing the Qt Code Review Skills for Agentic Code Review」の抄訳です。

コードのレビュー、監査、健全性確認は、通常、別途リンターを実行し、チェックリストを読み、数十ファイルにわたってQt固有のパターンを手動で検証するという作業を伴います。QtコードレビュースキルはAIエージェントを使ってコードレビューフェーズの一部を自動化します。AIエージェントが決定論的なリンターを実行し、続いて6つの並列深層分析エージェントを起動して実際の問題とその対策を数分で提示するため、開発者はすべてのファイルを手動で精査する手間を省けます。 

信頼性の高い結果をもたらすAIコードレビュー 

これらのレビュースキルの基本的な考え方はシンプルです。リンターは権威ある情報源であり、エージェントがその判断を覆すことはありません。信頼度スコアが80/100を超えた指摘のみが確定済みの問題として報告され、スキルは読み取り専用でコードを変更しません。

Qt C++レビュースキルはQt6のC++ソースファイルとヘッダーを対象とします。QMLレビュースキルはQt6のQMLファイルを対象とし、型レベルのチェックにシステムのqmllintをオプションで呼び出すこともできます。どちらのスキルも単一コミット、ディレクトリ、またはプロジェクト全体に対して動作し、同じ3フェーズ分析アーキテクチャを共有しています。

2つのレビュースキル、共通アーキテクチャ

どちらのスキルもQt6ソースを対象とします。C++レビュースキルは.cpp.h.hppファイルを処理し、QMLレビュースキルは.qmlファイルを処理してオプションでシステムのqmllintによる型レベルチェックを呼び出します。どちらも単一コミット、ディレクトリ、またはプロジェクト全体をレビューでき、同じ3フェーズパイプラインを共有しています。

コードレビュースキルが起動するタイミング 

Qtコードレビュースキルは、開発者がコードのreview、check、audit、sanity-checkを依頼したとき、またはコミット前にレビューを促されたときにAIエージェントが使用します。「変更内容をレビューして」「このモジュールを監査して」「プッシュ前に確認して」「コードレビュー」といった表現で起動します。また、スコープが狭いか(diffや特定コミットのみ)広いか(ディレクトリ全体やコードベース全体)を自動判断し、対象範囲を適切に調整します。 

Qtコードレビュースキルの仕組み

起動後、スキルは本来であれば開発者が個別にリンターを実行し、チェックリストを読み、数十ファイルにわたってQt固有のパターンを手動で検討するようなワークフローを引き受けます。各ステップで行われる処理を以下に説明します。

ステップ1 - スコープ検出

スキルはまずレビュー対象を決定します。「このコミット」と指定された場合はgit diff HEAD~1..HEADを実行し、「自分の変更」と指定された場合はステージ済み・未ステージのdiffを合算します。いずれの場合も、変更行と前後±50行のコンテキストをレビュー対象とし、変更行内の問題のみを報告します。ファイル、ディレクトリ、またはプロジェクト全体が指定された場合は、対象スコープ内のすべての.cpp.h.hppファイル(C++スキル)またはすべての.qmlファイル(QMLスキル)を検索します。 


ステップ2 - 決定論的リンティング

スコープ内のすべてのファイルに対してシングルパスのPythonリンターが実行されます。C++リンターは、インクルード順序、非推奨クラスの使用、アンチパターン、QAbstractItemModelのコントラクト違反、エラーハンドリング、ライフサイクル、API命名、ヘッダー、タイムアウト、条件分岐、値クラスの衛生、三項演算子のスタイルなど、60以上の機械的に検証可能なルールをカバーしています。

QMLリンターは、インポート順序、属性順序、プロパティバインディング、レイアウトとアンカー、Loaderパターン、デリゲートの安全性、状態、画像読み込み、パフォーマンスのアンチパターン、スタイル規約、シグナルハンドラーの構文、エラーとセキュリティのパターン(ハードコードされたhttp://、非移植パスなど)、JavaScriptスタイルを含む47以上のチェックをカバーしています。どちらのリンターも決定論的かつ権威ある情報源であり、その出力は次のステップに直接渡され、エージェントが再審議することはありません。

ステップ2b - システムqmllint(QMLスキルのみ)

PythonリンターのあとでQMLスキルはシステムのqmllintがPATH上で利用可能な場合、オプションでJSON出力付きで実行します。qmllintは未解決の型、互換性のないプロパティ代入、エイリアスのサイクルといった型レベルチェックを権威をもって処理し、一方でPythonリンターはqmllintが検出しないスタイル、順序、パフォーマンスパターンをカバーします。両者の出力はマージされ、重複が除去されます。 

ステップ3 - 6つの並列深層分析エージェント

リンターの出力をコンテキストとして、6つの専門エージェントが並列で起動します。各エージェントは明確なスコープと専用のチェックリストを持ち、リンターがすでにフラグを立てた内容と重複しません。

Qt C++スキルのエージェントは以下の領域をカバーします。

  • モデルコントラクトQAbstractItemModelのシグナルプロトコル、ロールシステム、インデックスの有効性、プロキシモデルの正確性
  • オーナーシップとライフサイクル — メモリオーナーシップ、親子関係、リソースのクリーンアップ、Rule of Five、RAIIの正確性
  • スレッドセーフティ — クロススレッドでのQObjectアクセス、ミューテックスの整合性、ワーカースレッドからのシグナル送出
  • API・命名・C++の正確性 — Qt命名規約、const正確性、ムーブセマンティクス、enumの衛生、noexceptの正確性
  • エラー処理と検証QFileQJsonDocumentQNetworkReply、SSL、ユーザー入力に対するエラーチェックの欠落
  • パフォーマンスとコード品質 — アルゴリズムのアンチパターン、不要なコピー、COWデタッチのトラップ、デッドコード、マジックナンバー、コピー&ペーストされたロジック、陳腐化したキャッシュ、非決定論的なイテレーション順序


QMLスキルの6つのエージェントは以下の領域をカバーします。

  • バインディングとプロパティ — 複数サイクルのバインディングループ、エイリアスチェーン、非修飾プロパティアクセス、readonly宣言の欠落、pragma ComponentBehavior: Boundのカバレッジ
  • レイアウトとアンカー — 非表示アイテムへのanchor、クロスブランチのanchor、Layoutサイジングの曖昧さ、fillポリシーの欠落
  • コンポーネントの読み込みとライフサイクル — Loaderパターン、動的オブジェクト生成のリーク、Connectionsのライフサイクル、C++インテグレーションの正確性
  • ListViewとデリゲートの正確性 — requiredプロパティパターン、デリゲート再利用の安全性、スクロールパフォーマンス、既知のQtデリゲートバグ
  • State、Transition・構造PropertyChangesの正確性、トランジションのカバレッジ、StateGroupの使用、Qt5→6移行パターン(Binding.restoreMode、Connectionsハンドラー構文、QtGraphicalEffectsMultiEffect
  • パフォーマンスとコード品質 — コストの高いバインディング、シグナル対関数の方向性、データ用シングルトンのアンチパターン、MouseArea対ポインターハンドラー、デリゲート内の親nullチェック、再利用可能コンポーネントのサイジング

ステップ4 - 統合とレポート

スキルはリンターとエージェントの出力をすべてマージし、ファイルと行レベルで重複を除去して信頼度スコアを適用します。80/100の信頼度しきい値を超えた指摘のみが確定済みの問題として報告されます。60〜79の指摘は調査対象として別セクションに表示され、レポート全体で最大10件に制限されます。60未満は抑制されます。確定済みの各指摘には、ファイルと行番号、ルールカテゴリ、問題の説明、および具体的な対策が含まれ、コードパッチではなく文章で記述されます。

コードレビュースキルの制限事項

このスキルは従来の静的・動的解析ツールの代替ではありません。コンポーネント境界、レイヤリング、依存グラフの健全性を検証するアーキテクチャ検証には、ファイル単位のリンティングやエージェントレビューを超えた専用ツールと人間の判断が必要です。同様に、既知の脆弱性パターンのセキュリティスキャン、CVEマッチングによる依存関係チェック、サプライチェーン分析は、専用のセキュリティレビュースキルまたは外部スキャナーで処理する必要があります。これらはQtコードレビュースキルを補完するものであり、代替ではなく併用して使用してください。

分析はレビューセッション内でエージェントが読み取れる範囲に限定されます。クロスリポジトリの依存関係、生成されたコード、ソースツリーに存在しないサードパーティヘッダーは分析されません。リンク時やランタイムにのみ現れる問題、つまり特定の入力シーケンスによってトリガーされる未定義動作、特定のスレッドインターリーブを要する競合状態、ランタイムに動的に接続されたQtシグナルなどは静的レビューのスコープ外です。

信頼度しきい値によって不確実な指摘は抑制されるため、一部の実際の問題はレポートに現れません。セーフティクリティカルまたはセキュリティ上重要なコードをレビューする開発者は、レポートを上限ではなく下限として扱い、手動レビューと組み合わせてください。

依存関係

Qt C++コードレビュースキルはバンドルされたリンターの実行にPython 3が必要ですが、標準ライブラリ以外の追加パッケージは不要です。diff範囲のレビューにはGitがPATH上で利用可能である必要があります。スキルはQt6のC++コードベースを対象としており、Qt5プロジェクトでもほぼ動作しますが、一部のチェックはQt6固有です。

QMLコードレビュースキルもリンターにPython 3が必要です。オプションとして、Qt6インストールのqmllintにより型レベルチェックが有効になります。スキルは$QT_HOST_PATH/bin/またはシステムPATHから自動検出し、見つからない場合はスキップします。

動作確認済み環境

本スキルはClaude Code CLI、Claude Desktop、およびVS Code上のGitHub Copilotでテスト済みです。Claude Sonnet 4.6、GPT 5.4、Gemini 3.1 Proで良好な結果が得られています。これらのテスト済みモデル以外でも、高度なタスクには常に最新のフロンティアモデルの使用を推奨します。 

スキルの入手方法

QtエージェントスキルはGitHubリポジトリから入手できます。

https://github.com/TheQtCompanyRnD/agent-skills

または、Claudeのマーケットプレイスからプラグインとして公式Qtコードレビュースキルを直接インストールすることもできます(「qt-development」で検索してください)。