MATLAB MCP Server を使った Simulink モデルのリファクタリング
※この投稿は 2026 年 3 月 26 日に Guy on Simulink へ 投稿されたものの抄訳です。
—
AI エージェントを使い始めると、なかなかやめられなくなりますね!
今回の記事では、Sourcegraph が開発した AI コーディングエージェントで、Claude Code と似た存在である Amp を使って、私が Simulink ユーザーを支援する中で最も頻繁に行っている作業のひとつ:アクセラレータモードで参照モデルを使用することにより、モデルのコンポーネント化を改善する作業をやってみました。
課題
私が常に Simulink ユーザーに推奨しており、また Improving Simulation Performance in Simulink という記事でも紹介しているベストプラクティスのひとつが、アクセラレータモードで参照モデルを活用することです。参照モデルは事前にコンパイルできるため、シミュレーション間で変更がない場合には、初期化がほぼ瞬時に行われ、シミュレーションも高速に実行されます。
このワークフローを分かりやすく示すために、この例(Helicopter Modeling and Simulation – MATLAB & Simulink)から始めました。この例を MATLAB 上で開きたい場合は、次のコマンドを実行してください。

作業の大部分を自動で行える Model Reference Conversion Advisor が Simulink には用意されていますが、変換後に何かしらが期待どおりに動作しない、というケースはよくあります。
この例にはそうした問題がいくつか含まれていることを知っていたため、AI エージェントを試すには良い題材だと考えました。
試した結果
まずは、Amp が MATLAB MCP Server との反復処理を通じて、このタスクをどのように達成したかを示す動画をご覧ください。
私が指示した内容は次のとおりです。
- やること:Attitude と Altitude Control サブシステムを参照モデルに変換する
- 今回の目的:参照モデルをアクセラレータモードでシミュレーションすることでシミュレーション速度を向上させる
- 要件:コントローラー内のバリアントを変更しても、アクセラレータターゲットの再ビルドが発生しないようにしたい
また、最終結果が元のモデルと一致していることを検証するため、まずはベースラインテストを作成し、それをもとに反復を進めるよう提案しました。
詳細
それでは、この動画の中で AI エージェントが実際に行ったことを詳しく見ていきましょう。
Skills
- simulink-interaction: AI エージェントが Simulink 上で何が起きているかを把握できるようにするためのスキルです。たとえば、「this block」は gcb、「this model」は bdroot、「this subsystem」は gcs を意味します。このスキルがあると、より自然な形でエージェントと「会話」できると感じています。
- simulink-simulation: 古い set_param と sim(‘modelname’) の組み合わせではなく、 Simulink.SimulationInput オブジェクトの構文を使うようエージェントを誘導するためのスキルです。必須ではありませんが、私はこの書き方のほうがコードとして好みです。
- simulink-baseline-test: これも必須ではなく、AI エージェントはテストを自力で書くことができます。私好みの setup や teardown を含めるなど、細かな点のために使用しています。
ベースラインテスト
AI エージェントであれ人間であれ、変更を加える前にシステムの挙動を捉えたベースラインテストを用意しておくことは重要です。このケースでは、エージェントはモデルを解析し、変数 state がバリアント条件を制御していることを特定できました。以下は、state を使用しているブロックの一例です。

テストでは、バリアント構成ごとに 1 つのベースラインを取得できるよう、テストパラメーターとして設定しました。
モデル参照への変換
これは、1 行のコードで実現できます。
ひとつ問題がありました。元のサブシステムの境界でログ取得されていた信号が、変換の過程で失われてしまったのです。エージェントはこれを素早く修正し、正しい信号に対してログ取得を再度有効化しました。
再ビルドなしでアクティブなバリアントを変更する

Startup のアクティベーション時間には制約があり、それについては次のドキュメントで詳しく説明されています。Considerations and Limitations for startup Variant Activation Time – MATLAB & Simulink.
エージェントは次の問題に直面しました。
- Startup を使用する場合、各バリアントで選択されるサブシステムはアトミックでなければならない
- Startup では、バリアント制御式に文字列を使用することができない
バリアントで選択されるサブシステムをアトミックにすることは簡単でした。2 つ目の制約に対処するため、エージェントは文字列の代わりに 列挙型 を作成することを決定しました。これは、私がユーザーに対して推奨するのとまったく同じ対応です。以下に、左側が元の状態、右側が修正後の状態を示します。

再ビルド不要という要件
- MATLAB のベースワークスペースの diary を記録し、ビルドサマリーを解析する
- Simulink.BlockDiagram.getChecksum の出力を比較する
- 参照モデルの mex ファイルに対して dir を実行し、その戻り値の datenum フィールドを比較する
最終的に最後の方法に落ち着きました。私としてもこの方法で問題なく、十分に信頼できるものだと思います。
まとめ
次はあなたの番です
一方で、もう少し待ちたいという方のために言うと、多くの同僚がエージェント型ツールや機能の開発に積極的に取り組んでおり、Simulink のエコシステムに完全に統合された形で、近いうちに提供される予定です。


评论
要发表评论,请点击 此处 登录到您的 MathWorks 帐户或创建一个新帐户。