mcpField
M
matlab-modernize-code

matlab-modernize-code

github.com/matlab開発1.2k119 回インストール1 日前に更新
リポジトリ

matlab-modernize-code について

MATLAB コードの削除済みまたは非推奨の API やパターンを、現行の代替手段へ移行するスキルです。Code Analyzer の診断に加え、検出されない可能性のあるパターンもソースから確認します。

主な機能

  1. 01削除済み・非推奨関数の置き換え
  2. 02解析ツールが見落とすパターンの検出
  3. 03分野別の移行リファレンスの参照
  4. 04旧コードと新コードの動作検証
  5. 05削除済み API のエラーを優先

活用シーン

  1. 01旧式の日付時刻関数を使うコードの更新
  2. 02ファイル入出力関数の現行 API への移行
  3. 03eval や containers.Map の使用を解消
  4. 04Code Analyzer のライフサイクル診断への対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-modernize-code

インストール後、Claude Code で/matlab-modernize-codeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

manifest.yaml
references/
audio-video-guidance.md
communications-guidance.md
control-systems-guidance.md
core-functions-guidance.md
deep-learning-guidance.md
image-processing-guidance.md
mapping-guidance.md
optimization-guidance.md
signal-processing-guidance.md
statistics-ml-guidance.md

詳細

コードのモダナイズ

削除済みまたは非推奨の MATLAB 関数やアンチパターンを、最新の代替手段に置き換えます。このスキルは解決を担当します。検出を行うのは MCP ツール check_matlab_code(MATLAB の Code Analyzer)です。

このスキルで使用する用語:

  • 削除済み — MATLAB でその関数は利用できなくなっており、呼び出すとエラーになります。
  • 非推奨 — 関数は引き続き動作しますが、より優れた API が存在します。将来のリリースで削除される予定の場合も、そうでない場合もあります。

使用するタイミング

  • check_matlab_code がライフサイクル診断を報告する場合 — 大文字と小文字を区別せず、以下の3種類の文言が対象です(STRMATCH is not recommended は小文字の形式と同じシグナルです)。
    • 'X' is not recommended...(重大度:情報)
    • 'X' will be removed in a future release...(重大度:警告)
    • 'X' has been removed...(重大度:エラー — 現在、そのコードはエラーになります)
  • Code Analyzer が検出しない非推奨パターンをコードで使用している場合 — 例:containers.Map、bsxfun、str2num、eval、clear all。診断結果だけでなく、ソースをスキャンしてください(「規約」を参照)
  • ユーザーが古い MATLAB コードのモダナイズ、移行、更新を依頼した場合
  • 以下のクイックリファレンステーブルに記載された関数をコードで使用している場合
  • 静的解析で削除済みまたは非推奨の API の使用が判明した後
  • 削除済みまたは非推奨のパターンが知られている分野で新しいコードを作成する場合

使用しないタイミング

このスキルは、削除済みまたは非推奨の API を最新の代替手段に置き換えます。以下は対象外です。

  • コード品質全般のレビュー
  • 実行時の動作のデバッグ(削除済み関数によるエラーは例外で、モダナイズによって修正します)
  • すでに正しいコードの速度最適化 → matlab-optimize-performance に引き継いでください
  • 関数の入力/出力検証の作成や移行(arguments ブロック、inputParser/validateattributes から mustBe* バリデーターへの置き換え、繰り返し引数、名前と値の転送)→ matlab-validate-function-arguments に引き継いでください

クイックリファレンス:削除済み、非推奨、アンチパターン

トピック推奨事項対応バージョンカテゴリ理由
csvread / dlmreadreadmatrixR2019aファイル I/O
csvwrite / dlmwritewritematrixR2019aファイル I/O
xlsreadreadtable、readmatrixR2019aファイル I/O
xlswritewritetable、writematrixR2019aファイル I/O
datenum / datestr / nowdatetime(書式設定には string/char を使用)R2022b日付/時刻(非推奨)Code Analyzer が警告
eval / evalc / evalin動的フィールド名 s.(name)、関数ハンドル/feval、連番の名前にはセル配列—アンチパターンコンパイルされない(低速);ワークスペース変数を上書きする可能性がある;デバッグが困難;インジェクションのリスク
str2numstr2num(text, Evaluation="restricted")R2022aセキュリティ制限なしの形式は入力を eval 経由で実行します(インジェクションのリスク)。参考資料を参照してください
uicontroluibutton、uidropdown などR2016aUI/アプリ
guideappdesignerR2025aUI(削除済み)
strmatchstartsWith、matchesR2019b文字列
clear allclearvars—ワークスペースメモリから関数を消去するため、再コンパイルが必要になります

datestr に関する補足: datestr の役割は日付をテキストとして書式設定することだったため、最新の代替手段は string(dt)/char(dt)、または dt.Format の設定です。単に datetime(...) を呼び出すだけではありません。datenum/now(数値/シリアル日付を扱う方法)の置き換えには datetime を使用してください。どちらの関数も削除されてはいませんが、R2022b 以降、Code Analyzer ではどちらも「非推奨」とされています。

s = datestr(t, 'yyyy-mm-dd HH:MM:SS');          % 旧形式
s = string(t, 'yyyy-MM-dd HH:mm:ss');           % 新形式 — 書式指定子が変わる点に注意:
                                                % datetime では MM=月、mm=分(datestr では mm=月、MM=分)

最新の設計パターン

新しいコードでは、以下を優先してください。

テーブルベースのワークフロー
data = readtable('sensors.csv');
data.Timestamp = datetime(data.Timestamp);
data.Status = categorical(data.Status);
recentData = data(data.Timestamp > datetime('today') - days(7), :);
summary = groupsummary(recentData, 'SensorID', 'mean', 'Value');
文字列配列(文字配列ではなく)
name = "John";                        % not 'John'
names = ["John", "Jane", "Bob"];      % not {'John','Jane','Bob'}
fullName = firstName + " " + lastName; % not [first,' ',last]
idx = contains(names, "Jo");          % not cellfun + strfind
Arguments ブロック(nargin/varargin ではなく)
function result = processData(data, options)
    arguments
        data (:,:) double
        options.Method (1,1) string {mustBeMember(options.Method, ["fast","accurate"])} = "fast"
        options.Verbose (1,1) logical = false
    end
end

主な移行

ファイル I/O:csvread/xlsread → readmatrix/readtable
% Old                          → Modern
M = csvread('data.csv');       % M = readmatrix("data.csv");
M = dlmread('data.txt','\t'); % M = readmatrix("data.txt", Delimiter="\t");
[n,t,r] = xlsread('f.xlsx');  % T = readtable("f.xlsx");
csvwrite('out.csv', M);       % writematrix(M, "out.csv");
xlswrite('out.xlsx', data);   % writetable(T, "out.xlsx");
eval → 構造化された代替手段

eval/evalc/evalin は避けてください。テキストはコンパイルされず(遅くなります)、ワークスペース変数を気付かないうちに上書きする可能性があり、読みにくくデバッグも困難です。意図に合った構文を使用してください。詳細な一覧(連番の名前、sprintf によるファイル名、try/catch)については references/core-functions-guidance.md を参照してください。

% Old: eval([varName ' = 42;']);          -> dynamic field name
s.(varName) = 42;

% Old: result = eval(['process_' method '(x)']);  -> handle dispatch table
handlers.fast = @processFast;
handlers.slow = @processSlow;
result = handlers.(method)(x);

% Old: for n=1:10, eval(['A' int2str(n) '=magic(n);']); end  -> index a cell
A = cell(10,1);
for n = 1:10, A{n} = magic(n); end

リファレンス

特定の領域で作業する場合にこれらを読み込んでください:

読み込む条件リファレンス
主要な MATLAB 関数(ファイル I/O、文字列、UI)、セキュリティ上のアンチパターン(eval/str2num)、containers.Map→dictionary、bsxfun→暗黙的な拡張references/core-functions-guidance.md
ディープラーニング(trainNetwork→trainnet、LayerGraph/SeriesNetwork/DAGNetwork→dlnetwork、classify、activations)references/deep-learning-guidance.md
信号処理関数references/signal-processing-guidance.md
オーディオ/ビデオ I/O の移行(wavread、aviread)references/audio-video-guidance.md
Optimization Toolbox(optimset、optimtool)references/optimization-guidance.md
制御システムのプロットオプションreferences/control-systems-guidance.md
画像処理の ROI オブジェクトreferences/image-processing-guidance.md
統計/機械学習(svmtrain、dataset、classregtree)references/statistics-ml-guidance.md
Communications System オブジェクトreferences/communications-guidance.md
Mapping Toolbox(webmap、wmmarker、wmline、geotiffread、mfwdtran、makerefmat)references/mapping-guidance.md

規約

  • 常に最初に check_matlab_code を実行してください。削除された、または非推奨の使用法は静的解析に見つけさせましょう
  • 実行後は、Code Analyzer が見落としがちなパターンをソース内で確認してください: str2num(パフォーマンスのヒントとしてのみ言及されます)、containers.Map(次の項目を参照)。
  • containers.Map は check_matlab_code では指摘されません。 これを使用する単純なスクリプトは診断をゼロ件返します。containers.Map のプロパティの既定値は、ハンドルの既定値共有に関する警告(「すべてのインスタンスが同じオブジェクトデータを共有します」)のみを表面化させます。検出優先のワークフローではこの移行を見つけられません。containers.Map の使用、およびプロパティに関するそのハンドル共有の警告は、すべて containers.Map→dictionary のトリガーとして扱ってください。
  • subplot は非推奨でも非推奨扱いでもありません。 完全にサポートされており、check_matlab_code で指摘されることは決してありません。tiledlayout/nexttile は新しいコードで推奨される代替手段であり、必須の移行ではありません。動作している subplot コードを置き換えるようユーザーに伝えないでください。
  • 削除された、または非推奨のパターンは、他のコード品質の問題よりも先に修正してください
  • 新しいコードを書くときは、最初からモダンなパターンを使用してください。レガシーなコードを書いて後から修正しないでください
  • 'X' has been removed という診断(重要度 error)は、その関数が現時点でエラーになることを意味します。「非推奨」(info)や「将来削除予定」(warning)のケースよりも優先して、破壊的修正を伴うモダナイゼーションとして扱ってください
  • 移行するときは、モダンな代替手段を古い動作と比較してテストし、等価性を確認してください
  • レガシーな .m ファイルは多くの場合 Windows-1252 でエンコードされています。 編集後は、非 ASCII 文字(°、µ、±)が残っていることを確認してください。コメントや文字列における無関係な 1 行の変更を示す差分は、通常、あなたの編集ではなく再エンコードされたバイトです。
  • コード例を含む詳細な移行パターンについては、領域別のリファレンスファイルを参照してください

Copyright 2026 The MathWorks, Inc.


コメント