mcpField
M
matlab-review-code

matlab-review-code

github.com/matlabテスト・品質1.2k171 回インストール1 日前に更新
リポジトリ

matlab-review-code について

matlab-review-codeは、MATLABコードの品質、正確性、性能、MathWorks規約を確認するスキルです。静的解析と目視確認を組み合わせ、重要度別に指摘をまとめます。

主な機能

  1. 01MATLAB静的解析の実行
  2. 02MathWorksの命名・構造規約の確認
  3. 03コードパターンと複雑度の確認
  4. 04重要度別の指摘報告

活用シーン

  1. 01コミット前のコードレビュー
  2. 02引き継ぎや公開に向けたコード監査
  3. 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 を使用してください

ワークフロー

  1. 静的解析を実行する — すべての対象ファイルで check_matlab_code MCP ツールを使用します
  2. コーディング標準を読み込む — matlab_coding_guidelines MCP リソースを読みます
  3. 命名を確認する — 関数、クラス、変数、ファイルが規約に従っていることを確認します
  4. 関数シグネチャをレビューする — Arguments ブロック、入出力の数、名前と値のペアのパターンを確認します
  5. 構造を評価する — 関数の長さ、ネストの深さ、複雑さを確認します
  6. パターンを確認する — ベクトル化、事前割り当て、最新の API の使用状況を確認します
  7. 要約する — 重大度別に指摘事項を報告します:エラー > 警告 > 提案

ステップ 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
クラスPascalCaseSensorReader、DataProcessor
変数lowerCamelCase、内容がわかる名前sr ではなく sampleRate
定数UPPER_SNAKE または Constant プロパティMAX_ITERATIONS
テストファイルt を先頭に付けるtComputeArea.m
アプリファイルPascalCaseDashboardApp.m
ファイル名 = 関数名ファイル名を主要な関数名に合わせるcomputeArea.m → function computeArea
関数の品質
チェック項目標準重大度
入力数位置引数は最大 6 個警告
出力数出力は最大 4 個警告
検証arguments ブロックがある警告
名前と値のペアの引数varargin ではなく options.Name のパターン提案
長さ50 行を超える場合にフラグを付ける提案
ネスト3 レベルを超える場合にフラグを付ける警告
end キーワードすべての関数を end で終了する警告
ヘルプテキストパブリック関数に H1 行がある提案
コードパターン
チェック項目最新の方法古い方法(フラグを付ける)
複数パネルの図tiledlayout/nexttilesubplot
日付/時刻datetimedatenum/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.


コメント