(更新日: 2025年8月22日 )
MATLAB/Simulinkではプロジェクトを活用するのが何かと楽だ。
ただ、毎回フォルダを作成したり、パスを設定するのに飽きるので、一つのコマンド一発で設定できるようにした。
この記事では、そのスクリプトを紹介しよう
目次
概要
このスクリプトは以下の項目を順番に実行すする:
- フォルダ作成
- プロジェクト生成
- 必要フォルダをプロジェクトとPATHへ追加
- キャッシュ/コード生成先を work/ 配下に設定
- .prj 名とプロジェクト名を指定名に変更
インストール
- GitHubから取得するか下のソースコードをコピーする。
- パスの通ったところにコピーする。私は”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")];
を追記する。