matlab-modernize-code について
MATLAB コードの削除済みまたは非推奨の API やパターンを、現行の代替手段へ移行するスキルです。Code Analyzer の診断に加え、検出されない可能性のあるパターンもソースから確認します。
主な機能
- 01削除済み・非推奨関数の置き換え
- 02解析ツールが見落とすパターンの検出
- 03分野別の移行リファレンスの参照
- 04旧コードと新コードの動作検証
- 05削除済み API のエラーを優先
活用シーン
- 01旧式の日付時刻関数を使うコードの更新
- 02ファイル入出力関数の現行 API への移行
- 03eval や containers.Map の使用を解消
- 04Code Analyzer のライフサイクル診断への対応
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-modernize-codeインストール後、Claude Code で/matlab-modernize-codeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/audio-video-guidance.mdcommunications-guidance.mdcontrol-systems-guidance.mdcore-functions-guidance.mddeep-learning-guidance.mdimage-processing-guidance.mdmapping-guidance.mdoptimization-guidance.mdsignal-processing-guidance.mdstatistics-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 / dlmread | readmatrix | R2019a | ファイル I/O | |
csvwrite / dlmwrite | writematrix | R2019a | ファイル I/O | |
xlsread | readtable、readmatrix | R2019a | ファイル I/O | |
xlswrite | writetable、writematrix | R2019a | ファイル I/O | |
datenum / datestr / now | datetime(書式設定には string/char を使用) | R2022b | 日付/時刻(非推奨) | Code Analyzer が警告 |
eval / evalc / evalin | 動的フィールド名 s.(name)、関数ハンドル/feval、連番の名前にはセル配列 | — | アンチパターン | コンパイルされない(低速);ワークスペース変数を上書きする可能性がある;デバッグが困難;インジェクションのリスク |
str2num | str2num(text, Evaluation="restricted") | R2022a | セキュリティ | 制限なしの形式は入力を eval 経由で実行します(インジェクションのリスク)。参考資料を参照してください |
uicontrol | uibutton、uidropdown など | R2016a | UI/アプリ | |
guide | appdesigner | R2025a | UI(削除済み) | |
strmatch | startsWith、matches | R2019b | 文字列 | |
clear all | clearvars | — | ワークスペース | メモリから関数を消去するため、再コンパイルが必要になります |
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.