MATLAB/Simulinkのプロジェクトをコマンド一発で生成: フォルダ構成・PATH設定・Simulinkキャッシュまで

(更新日: 2025年8月22日 )

MATLAB/Simulinkではプロジェクトを活用するのが何かと楽だ。

ただ、毎回フォルダを作成したり、パスを設定するのに飽きるので、一つのコマンド一発で設定できるようにした。

この記事では、そのスクリプトを紹介しよう

概要

このスクリプトは以下の項目を順番に実行すする:

  1. フォルダ作成
  2. プロジェクト生成
  3. 必要フォルダをプロジェクトとPATHへ追加
  4. キャッシュ/コード生成先を work/ 配下に設定
  5. .prj 名とプロジェクト名を指定名に変更

インストール

  1. GitHubから取得するか下のソースコードをコピーする。
  2. パスの通ったところにコピーする。私は”MyUtils”というフォルダを作成・パスを通して、そこに自作の汎用スクリプトを置いてある。

使い方

makePjFolders MyProject 

とすると、prjファイル名をMyProject.prjに変更し、プロジェクト名をMyProjectに変更する。

※ 引数なしでも実行できるが、その場合は Blank_project.prj のままになる。

作成されるフォルダ

今回のスクリプトでは以下のようなフォルダ構成になる。好みに合わせてスクリプトを変更すれば良い。

/
  data/
  docs/
    emf/
  figs/
  models/
  scripts/
  libraries/
  work/
    cache/
    codegen/

PATHに追加されるフォルダ

上の構成例ではdata, models, scripts, libraries

(注意:work/cache と work/codegen は追加しない。 これらは生成物であり、プロジェクト起動時に Simulink が設定・利用するためユーザーが設定する必要がない。 また恒常的にパスへ載せると名前衝突の原因になるため避ける。)

ソースコード

function makePjFolders(varargin)
% MAKEPJFOLDER プロジェクトのフォルダの作成・パス設定・プロジェクト生成
%
    PjName = "";
    if nargin > 0
        input_1 = varargin{1};
        if regexp(input_1, "^[a-zA-Z].*")
            PjName = input_1;
        else
            disp("先頭がアルファベット以外です。")
        end
    end

    % OS非依存のパス指定(fullfileを利用)
    folders = [ ...
        "data", ...
        fullfile("docs","emf"), ...
        "figs", ...
        "models", ...
        "scripts", ...
        "libraries", ...
        fullfile("work","cache"), ...
        fullfile("work","codegen") ...
    ];

    % パス追加対象
    PathedFolders = [ ...
	    "data","models","scripts","libraries", ...
    ];

    currentDir = pwd;

    % 必要フォルダ作成
    for ii = 1:numel(folders)
        folder = folders(ii);
        if ~isfolder(folder)
            [status, ~, ~] = mkdir(folder);
            if status
                fprintf("%s is created.\n", char(folder));
            else
                fprintf("make %s is failed.\n", char(folder));
            end
        end
    end

    % プロジェクト作成
    proj = matlab.project.createProject(currentDir);
    if PjName ~= ""
        proj.Name = PjName;
    end

    % フォルダをプロジェクトに追加
    for ii = 1:numel(folders)
        folder = folders(ii);
        addFile(proj, folder);
    end

    % パスを追加
    for ii = 1:numel(PathedFolders)
        folder = PathedFolders(ii);
        addPath(proj, folder);
    end

    % キャッシュ・コード生成フォルダ(OS非依存に)
    cacheDir   = fullfile(proj.RootFolder, "work", "cache");
    codeGenDir = fullfile(proj.RootFolder, "work", "codegen");
    proj.SimulinkCacheFolder   = cacheDir;
    proj.SimulinkCodeGenFolder = codeGenDir;

    % プロジェクトファイル名の変更
    proj.close
    if PjName ~= ""
        PjFileName = PjName + ".prj";
        movefile(char("Blank_project.prj"), char(PjFileName));
        proj = matlab.project.loadProject(currentDir);
    end
end

カスタマイズ例

例えば docs/pdf を追加したい場合:
folders = [folders, fullfile("docs","pdf")];

を追記する。