matlab-review-code について
matlab-review-codeは、MATLABコードの品質、正確性、性能、MathWorks規約を確認するスキルです。静的解析と目視確認を組み合わせ、重要度別に指摘をまとめます。
主な機能
- 01MATLAB静的解析の実行
- 02MathWorksの命名・構造規約の確認
- 03コードパターンと複雑度の確認
- 04重要度別の指摘報告
活用シーン
- 01コミット前のコードレビュー
- 02引き継ぎや公開に向けたコード監査
- 03MATLAB規約への準拠状況の評価
MCP 対応
静的解析には`check_matlab_code` MCPツールを使い、`matlab_coding_guidelines` MCPリソースからコーディング規約を読み込みます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-review-codeインストール後、Claude Code で/matlab-review-codeを入力して読み込まれたか確認します。
同梱ファイルmanifest.yaml
詳細
コードレビュー
静的解析と手動での確認パターンを使用して、MATLAB コードの品質、正確性、パフォーマンス、および MathWorks のコーディング規約への準拠を体系的にレビューします。
使用する場面
- ユーザーがコードの品質をレビュー、監査、または改善したい場合
- MathWorks のコーディング標準への準拠を確認したい場合
- 引き継ぎ、公開、またはオープンソースとしてのリリースに向けてコードを準備する場合
- 大規模な実装の後、コミット前に確認したい場合
- ユーザーから「コードの問題点」が報告された場合や、クリーンアップの提案を求められた場合
使用しない場面
- ユーザーが実行時エラーのデバッグを求めている場合は、代わりに
matlab-debug-codeを使用してください - ユーザーがパフォーマンスの最適化を求めている場合は、パフォーマンスプロファイリングのスキルを使用してください
- ユーザーがテストの生成を求めている場合は、代わりに
matlab-write-testsを使用してください
ワークフロー
- 静的解析を実行する — すべての対象ファイルで
check_matlab_codeMCP ツールを使用します - コーディング標準を読み込む —
matlab_coding_guidelinesMCP リソースを読みます - 命名を確認する — 関数、クラス、変数、ファイルが規約に従っていることを確認します
- 関数シグネチャをレビューする — Arguments ブロック、入出力の数、名前と値のペアのパターンを確認します
- 構造を評価する — 関数の長さ、ネストの深さ、複雑さを確認します
- パターンを確認する — ベクトル化、事前割り当て、最新の API の使用状況を確認します
- 要約する — 重大度別に指摘事項を報告します:エラー > 警告 > 提案
ステップ 1:静的解析
各ファイルで check_matlab_code MCP ツールを使用します。その後、結果をプログラムで確認します。
info = checkcode("src/computeArea.m", "-struct");
for k = 1:numel(info)
fprintf('Line %d (col %d-%d): %s\n', ...
info(k).line, info(k).column(1), info(k).column(end), info(k).message);
end
ディレクトリ全体を解析する場合(R2022b 以降):
issues = codeIssues("src");
disp(issues.Issues);
ステップ 2:コーディング標準を読み込む
matlab_coding_guidelines MCP リソースを読み、MathWorks の正式なコーディング標準を確認します。すべての命名、書式、構造のチェックで、これを基準として使用してください。
レビューチェックリスト
命名
| 要素 | 規約 | 例 |
|---|---|---|
| 関数 | lowerCamelCase、動詞句 | computeArea、loadData |
| クラス | PascalCase | SensorReader、DataProcessor |
| 変数 | lowerCamelCase、内容がわかる名前 | sr ではなく sampleRate |
| 定数 | UPPER_SNAKE または Constant プロパティ | MAX_ITERATIONS |
| テストファイル | t を先頭に付ける | tComputeArea.m |
| アプリファイル | PascalCase | DashboardApp.m |
| ファイル名 = 関数名 | ファイル名を主要な関数名に合わせる | computeArea.m → function computeArea |
関数の品質
| チェック項目 | 標準 | 重大度 |
|---|---|---|
| 入力数 | 位置引数は最大 6 個 | 警告 |
| 出力数 | 出力は最大 4 個 | 警告 |
| 検証 | arguments ブロックがある | 警告 |
| 名前と値のペアの引数 | varargin ではなく options.Name のパターン | 提案 |
| 長さ | 50 行を超える場合にフラグを付ける | 提案 |
| ネスト | 3 レベルを超える場合にフラグを付ける | 警告 |
end キーワード | すべての関数を end で終了する | 警告 |
| ヘルプテキスト | パブリック関数に H1 行がある | 提案 |
コードパターン
| チェック項目 | 最新の方法 | 古い方法(フラグを付ける) |
|---|---|---|
| 複数パネルの図 | tiledlayout/nexttile | subplot |
| 日付/時刻 | datetime | datenum/datestr |
| 文字列 | string 型 | テキストに char 配列を使用 |
| ベクトル化 | .*、./、論理インデックス | 要素ごとのループ |
| 事前割り当て | ループ前の zeros(n,1) | ループ内で配列を拡張 |
| データコンテナー | table/timetable | 名前付きデータに生の行列を使用 |
| 動的評価 | 関数を直接呼び出す | eval、evalin、assignin |
重大度の高い指摘
以下は必ずエラーとして報告してください。
eval、assignin、またはevalinの使用 — セキュリティと保守性のリスク- 事前割り当てなしでループ内の配列を拡張 — パフォーマンス上の問題
- 組み込み関数のシャドーイング —
sum = 5はsum()をシャドーイングします - パブリック向け関数に
argumentsブロックがない - バックスラッシュを含むハードコードされたファイルパス
checkcode で検出できない問題
check_matlab_code ではすべての問題を検出できるわけではありません。静的解析を実行した後、必ずソースコードをスキャンして、目視確認が必要な以下のよくある問題を確認してください。
subplotの使用 — checkcode では警告されませんが、tiledlayout/nexttileを使用してください- 組み込み変数のシャドーイング —
sum = 0はsum()をシャドーイングします。checkcode では警告されない場合があります - 深いネスト(3 階層超)— checkcode ではネストの深さを測定しません
- バックスラッシュを使ったハードコードされたパス — checkcode は未使用の変数にはフラグを立てますが、パスのスタイルにはフラグを立てません
- マジックナンバー — コード内のラベルのない定数(例:
if length(x) > 10) - H1 ヘルプテキストの欠落 — checkcode はヘルプテキストを必須としません
checkcode の結果が少ないからといって、ワークフローのステップ 3~6 を省略しないでください。
パターン
複雑度の評価
function complexity = assessComplexity(filePath)
%assessComplexity Estimate cyclomatic complexity of a MATLAB function.
arguments
filePath (1,1) string {mustBeFile}
end
code = fileread(filePath);
branchKeywords = ["if " "elseif " "case " "while " "for " "catch "];
complexity = 1;
for kw = branchKeywords
complexity = complexity + numel(strfind(code, kw));
end
end
ツールボックスの依存関係を確認する
[files, products] = matlab.codetools.requiredFilesAndProducts('src/myFunction.m');
fprintf('Required products:\n');
for k = 1:numel(products)
fprintf(' %s (ID: %d)\n', products(k).Name, products(k).ProductNumber);
end
レビューレポートの形式
以下の形式で指摘事項を提示してください。
## Code Review: computeArea.m
### Static Analysis (checkcode)
- 2 warnings, 0 errors
### Naming ✓
- [x] Function: lowerCamelCase
- [x] Variables: descriptive
- [x] File name matches function
### Structure
- [x] arguments block present
- [x] Function under 50 lines
- [ ] ⚠ Nesting depth reaches 4 levels (line 32)
### Patterns
- [x] Vectorized
- [x] Modern graphics API
- [ ] ⚠ Uses datenum (line 18) — migrate to datetime
### Suggestions
1. Extract nested logic at line 32 into a local function
2. Replace datenum with datetime for date handling
規約
- 必ず最初に
check_matlab_codeを実行してください。問題を自動的に検出できます - 権威ある標準として
matlab_coding_guidelinesを読み込んでください - 重大度別に指摘事項を報告してください:エラー(修正必須)>警告(修正推奨)>提案(できれば対応)
eval、assignin、evalinの使用には、重大度が高いものとしてフラグを立ててくださいrequiredFilesAndProductsを確認し、ツールボックスの依存関係が記載されていることを検証してください- すべてのパブリック関数に H1 ヘルプテキストの行があることを確認してください
- ディレクトリ全体の解析には
codeIssuesを使用してください(R2022b 以降) - 動作を変更する変更は提案しないでください。レビューは読み取り専用の評価です
- 非推奨 API の移行の詳細については、
matlab-modernize-codeスキルを使用してください
Copyright 2026 The MathWorks, Inc.