bio_img_japan-community

MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

Simulink モデルを GitHub Copilot と MATLAB MCP サーバーで実行する方法

※この投稿は 2025 年 12 月 10 日に Guy in Simulink へ 投稿されたものの抄訳です。

最近 AI コーディングアシスタントの世界を探求しており、特に Simulink でどのように役立つかを見ていきます。今回の投稿のテーマは「MATLAB MCP サーバー」です。

MATLAB MCP サーバー

MathWorksは最近、MATLAB MCP Core Server の初版を GitHub で公開しました。Model Context Protocol(MCP)に馴染みがない方は、Wikipediaのページ「Model Context Protocol – Wikipedia」をざっと見てみるとよいでしょう。簡単に言えば、これは OpenAI や Anthropic といった主要な AI プロバイダーが、あらゆるものとやり取りするために採用しているプロトコルです。
MathWorks が MCP サーバーを提供するということは、Claude Desktop や VS Code の GitHub Copilot のようなツールが、生成したコードを MATLAB に実行させ、その出力を受け取り、自動で反復できるようになったということです。私の同僚である Yann Debray さんと Akshay Paul さんがブログで説明しているように、もう人間がツール間でコードを手動でコピー&ペーストする必要はありません!
この投稿では、VS Code の GitHub Copilot を使って Simulink モデルをシミュレーションする MATLAB コードを生成する、私の最初の試みを紹介します。
免責事項: ここで説明することは、本当はすべて MATLAB デスクトップ内でやりたいのですが、現時点ではまだできません。いつか可能になると確信していますし、そのときは喜んでまたブログを書きたいと思います。

チャレンジ

この投稿では、次のようなシンプルな Simulink モデルを含む MATLAB プロジェクトから始めます。
open_system(‘BasicModelingSimpleSystem’);
私の目標は、VS Code の GitHub Copilot に、ステップ入力を与えてモデルをシミュレーションし、ログされた信号「x」をプロットする MATLAB コードを生成させることです。
まずはツールチェーンをセットアップし、動作確認をしましょう。以下の手順は必要以上に詳しいかもしれませんが、私自身が初めて設定したときにこういう情報が欲しかったので、ここにまとめます。

Setupセットアップ

まず、MATLAB MCP Server の GitHub リポジトリにアクセスし、readme.md ファイルを読んで、必要なセットアップとオプションの概要を把握します。

MATLAB MCP Core Server のダウンロード
MATLAB MCP Serverの最新リリースをダウンロードします。私の場合 Windowsではこれになります:

実行ファイルは、後で mcp.json ファイルを作成するときに場所を指定する必要があるので、パソコンの便利な場所に保存してください。

Visual Studio Code のダウンロード

Visual Studio Code は、現在最も人気のあるコードエディタのひとつです。その人気の高さから、MathWorks は Visual Studio Code 用のMATLAB 拡張機能をリリースしました。これにより、ユーザーは Visual Studio Code 上で MATLAB コードの編集、実行、デバッグが可能になります。まだインストールしていない場合は、こちらからダウンロードしてインストールしてください:Visual Studio Code

GitHub Copilot Chat 拡張機能
今回やりたいことのために、GitHub Copilot Chat 拡張機能をインストールします。VS Code の拡張機能パネルで検索し、インストールをクリックしてください。

これが終わったら、新しいチャットを開きます。
GitHub アカウントにログインする必要があります。

もし馴染みがない場合は、こちらの手順に従って Copilot アカウントを設定してください: Set up GitHub Copilot in VS Code。このブログ投稿の内容を再現するだけなら、GitHub Copilot の無料アカウントで十分です。
サインインすると、無料で利用できるモデルの簡単な一覧が表示されます。有料サブスクリプションを持っている場合は、さらに多くのモデルが表示されます。

Visual Studio Code で MATLAB MCP サーバーを登録

MATLAB MCP サーバーが正しく構成されているかを確認する最も簡単な方法は、利用可能な MATLAB ツールボックスを尋ねることです。
この時点ではまだ構成していないので、Copilot チャットで質問すると、次のような結果になります

これは欲しい動作ではないので、キャンセルしましょう。MCP サーバーが正しく構成されていれば、Copilot は MATLAB コードを実行するのに matlab -batch を使う必要はありません。
Visual Studio Code で MCP サーバーをセットアップする手順は、こちらにあります:https://code.visualstudio.com/docs/copilot/customization/mcp-servers

より具体的には、MathWorksは「Add an MCP server to a workspace mcp.json file」のセクションにある手順に従うことを推奨しています。このファイルは、.vscodeという名前のフォルダに配置する必要があります。

このファイルの構文については、こちらで説明されています。最低限、command フィールドは、先ほどダウンロードした MATLAB MCP サーバーの実行ファイルのフルパスを指す必要があります。私の場合は、使用する MATLAB のバージョンと初期作業フォルダを指定するために引数も追加しました。私の mcp.json は次のようになっています:

{
    “servers”: {
        “matlab”: {
            “type”: “stdio”,
            “command”: “C:\\MATLAB\\MCP\\server\\matlab-mcp-core-server-win64.exe”,
            “args”: [“–matlab-root=C:\\MATLAB\\R2025b”,
                     “–initial-working-folder=C:\\MATLAB\\blog\\MCP\\post”]
        }
    }
}
利用可能な MATLAB ツールボックスについて、同じ質問をしてみましょう。今回は、新しい MATLAB セッションが自動的に起動し、Copilotがコードの実行許可を求めてきます。免責事項で指摘されているとおり、ここは注意が必要な部分です。MCP サーバーは AI が生成したコードを実行します。それを許可するかどうかは、あなた次第です。
すべてが正常に動作していれば、次のような応答が返ってくるはずです。これは、利用可能なツールボックスやブロックセットを示すものです。

Simulink モデルのオープンとシミュレーション

では、Simulink モデルをシミュレーションできる MATLAB コードを生成してみましょう。
プロンプトは次のとおりです:
Create a MATLAB script named stepSim.m that simulates the Simulink model BasicModelingSimpleSystem.slx with a step input signal and plots the logged signal ‘x’.

「stepSim.m という名前のMATLABスクリプトを作成し、Simulinkモデル BasicModelingSimpleSystem.slx をステップ入力信号でシミュレーションし、ログされた信号『x』をプロットしてください。」という感じです。

選択したモデルによっては、Copilot がコードを生成する前にモデルを理解するために MATLAB コードを実行しようとする場合があります。私の場合、Copilot は get_paramfind_system といったコマンドを実行し、モデルの内容、指定されたステップ入力の設定方法、そして信号「x」がどのようにログされているかを確認しようとしました。

 

しばらく考えた後、stepSim.mという名前のファイルが MATLAB のカレントディレクトリに現れます。
MATLAB コードの生成に加えて、AI アシスタントはモデルを実際にシミュレーションして、コードが動作することを検証しようとする場合があります。チャット上で確認できた追加の出力は次のとおりです:

 

最終的に、AI が生成したファイルには 100 行強のコードが含まれており、私の予想よりずっと多いものでした。ここではその前半部分を貼り付けます。
modelName = ‘BasicModelingSimpleSystem’;
modelFile = fullfile(pwd, [modelName ‘.slx’]);
if ~exist(modelFile,‘file’)
    error(‘Model file “%s” not found in current folder: %s’, [modelName ‘.slx’], pwd);
end
% Simulation parameters
tStop = 10; % stop time (s)
dt = 0.01; % sample interval for external input
stepTime = 1; % time at which step goes from 0 -> 1
% Build external input as a two-column [time, value] matrix
t = (0:dt:tStop)’;
u = double(t >= stepTime);
in = [t u];
% Load model (does not open the GUI by default)
load_system(modelFile);
% Run simulation using the external input. Use Dataset save format to capture
% logged signals (logsout) when available.
simOut = sim(modelName,
    ‘ExternalInput’,‘in’,
    ‘StopTime’, num2str(tStop),
    ‘SaveOutput’,‘on’,
    ‘SaveFormat’,‘Dataset’);

残りの部分は「ログされた信号『x』の抽出を試みる」というロジックで、ここでは扱いません。

上のコードを見て最初に思ったことは以下のとおりです:

  • 行5〜7の exist チェックは不要です。ファイルがプロジェクト内にあることは分かっています。
  • load_system を使う必要はありません。sim コマンドがモデルをロードします。
  • in = [t u]; という行は古い書き方なので、Simulink.SimulationData.Dataset を使うよりモダンな構文にしたいです。
  • sim コマンドは、より新しい Simulink.SimulationInput オブジェクトの構文を使ってほしいです。

コードを実行して結果をプロットすると、次のようになりました:

plot(simOut.logsout.get(‘x’).Values)
期待していたステップ応答とは違います!
(「out」がゼロになっている理由が気になる方へ:コードではExternalInput を指定していますが、LoadExternalInput をオンにしていないため、指定した ExternalInput は使用されません)

まとめ

今回の実験から得られた結論は以下のとおりです:

  • 良かった点:MATLAB MCP サーバーによって、GitHub Copilot が MATLAB スクリプトを作成し、実行できることを確認しました。
  • 課題となった点:AI コーディングアシスタントは魔法ではないということ。あいまいな依頼は、意図した通りのコードにならない可能性が高いです。
次のステップとして、Copilot とのチャットを続けてコードを洗練させることもできます。何度かやり取りすれば、望むコードを得られる自信はあります。しかし、それは自分でコードを書くより時間がかかるでしょう。そして、Simulink モデルをシミュレーションするたびに同じやり取りを繰り返したくはありません。
今日はのところはここで終了します。
次回の投稿では、MATLAB AI Coding Rules の GitHub リポジトリを参考にして、Simulink 向けの AI コーディングルールを自分なりに定義します。そうすれば、GitHub Copilot に最初の試行で望むコードを生成させることができるはず!

次はあなたの番です

MATLAB MCP サーバーを試してみましたか?もし試されたこと、これから試したいアイデアあればぜひコメントで教えてください。

|
  • print

コメント

コメントを残すには、ここ をクリックして MathWorks アカウントにサインインするか新しい MathWorks アカウントを作成します。