Project活用のススメ（個人的見解）

# これはなに？
MATLAB　Projectを使うときに僕が個人的にやってみてることを一方的に皆さんにご紹介する記事です！
---------------------------------------
# Projectってなんぞ

**ProjectはMATLABの標準機能として備わっている機能です。**
この機能は複数のモデルやスクリプトをProjectファイルと呼ばれるファイルに関連付けしてくれるので、
色々と便利なので気に入っています。

当然MathWorksヘルプページに使い方は書いてるし、検索すると機能を紹介するYoutubeもあるようです。

https://jp.mathworks.com/help/simulink/project-management.html?s_tid=CRUX_lftnav

---------------------------------------
**代表的な機能**

+ Projectファイルを開いたときだけ有効になるMATLAB Pathの設定
+ Projectファイルを開く、閉じたときにCallするスクリプト指定
+ Git,SVNに対する簡易的なGUIインタフェース（クライアント）提供
+ Project登録ファイルの一括アップデート(新しいVersionのMATLABで開いたときに便利）
+ Projectファイル内の依存性可視化

などなど・・・Toolbox買わなくてもMATLABだけでこれを使えます。

---------------------------------------
**・・・でももう僕はそろそろ年末なのでこれ以上仕事したくありません（爆）**

今回は完全プライベートで記事を書いているので
おすすめなオレオレProjectの使い方をご紹介したいとおもいます。
あくまで「オレオレ」なのでいいところだけ皆さんパクってつかってください！

---------------------------------------
## Projectって使ってなにが嬉しいんじゃ

・・・まぁ、Youtubeとかで調べたら動画あるんでここで説明する必要はないでしょう。
軽く。かるーくね。

---------------------------------------
## 複数ファイルをまとめて誰かに共有するとき
複数のモデルやスクリプトを作っていくときに、
関連ファイルがどんどん増えて、自分でもどうなってるかわかんねぇ感じになることありますよね。

その状態で誰かにファイル郡を共有すると
足りないファイルがあったり、パスが通ってなかったり、
モデル実行する前に動かしてほしいスクリプトを実行せずにモデル動かしてしまい
同僚から「うごかないんだけど～？」と言われてしまいます。

**もうそのシチュエーションがダルいですよね**

---------------------------------------
::: note 
そういうのを解消するのに僕はProjectを使ってます。
:::

### いやもう少し詳しく

基本的な操作はこの記事がいい感じな気がします。
https://qiita.com/stozaki/items/e4fa14c36f6c134e53e7

最近ではローカル環境であればMATLAB内でSimulinkファイルやMATLABスクリプトについて
ブランチ同士の３Way-Margeを行えるようです。

https://jp.mathworks.com/help/simulink/slref/resolve-conflicts-with-simulink-three-way-merge.html


**まぁ・・・基本的な操作はヘルプとおすすめ記事をみてくださいな。**

この記事の本題であるオレオレ設定のご紹介に移ります。

---------------------------------------

# オレオレテク１：テンプレートからProjectをつくる

えっ　フォルダから新規作成を選んでる？
そんなちゃちなことをしてると日が暮れちまうぜ。時代はテンプレートよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/dc3fed85-fce5-5057-dfb1-20601f7fac5d.png)

---------------------------------------

::: note 
実際にやってみました
:::

https://x.com/griffin921/status/1737301650757525617?s=20

実はProjectは雛形としてのProjectファイルをつくっておけば
テンプレート化することができます。
そのテンプレートを任意のフォルダに保存し、そこにMATLABPathを通しておけば
「マイテンプレート」に定義したテンプレート設定が現れますので。

あとはそれをクリックしてプロジェクトを作成。
必要に応じていらない設定を消したり、付け足したりすればすぐに環境を構築できます。

---------------------------------------

**やりかたはここにかいてありました。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/df7d7227-5ac1-8237-420a-486183a23b3d.png)

https://jp.mathworks.com/help/simulink/ug/create-a-template-from-the-current-project.html

決まった合わせ調味料をさっと提供してくれる
某AJIN◯M◯T◯のC◯◯ck D◯という製品みたいなお手軽さですね。
名前伏せてるので皆さんにはなんのこと言ってるのか伝わらなそうで申し訳ないです。

---------------------------------------

つまり後述するテクを参考にみなさんがお好きなオレオレテクプロジェクトを作ってしまえば
いつでもオレオレテクを呼び出せるという代物なわけです。

フォルダ構成やProjectPathも登録できるので、テンプレ開いたらなんか勝手に設定されてるのがわかりますよね。

オレオレテクでテンプレートをつくってしまうと嬉しいのは自分だけですが、
もし、グループみんなが嬉しいテンプレートを作成できたとしたら、
そのテンプレートを共有ファイルに配置し、みんなのMATLABがそこにPathとおせばみんながテンプレートを使えます。

これもみんなのファイル構築規則を揃える上でも便利ですね。

---------------------------------------

## オレオレテク２：CachフォルダとCodeGenフォルダを作る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/93918275-9811-92c7-3fad-5fff9b1c082f.png)

ここの詳細ボタンをおすとこんな画面がでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/84bd0a1b-5ec3-1e93-60ad-d399e807e281.png)

---------------------------------------

**この設定項目どれも重要だと思うのです、特に気に入ってるのは赤枠のところです。**

みなさん、Simulink 動かすとキャッシュファイルとかできますよね？
あれ、２回めシミュレーションするときに早く動作できるようにキャッシュを作るんです。
あれ、バージョンごとにキャッシュ作らないといけないので、
新しいバージョンでモデル開いたときに「古いバージョンのキャッシュ消せ」っていわれて
**いやどこやねん**
ってなったことないです？

あと、モデルをCに変換すると、出てきたコードって今いるPathに生成されるんで、
パス変えてコード生成するといたるところに生成コード出てきたりしません？
**いや最新の生成コードどこやねん**
ってなったことないです？

僕は毎回でした。Projectを知るまでは・・・

---------------------------------------
::: note 
詳細設定の　シミュレーションキャッシュフォルダ、コード生成フォルダを指定していれば
Projectを開いている間はそのフォルダにキャッシュ、コード生成ファイルが保存されます。
:::

これは個人的にデカい。
だってキャッシュ消せって言われたら　Cacheフォルダの中全部消せば良いんだもん。
コード生成先も迷子にならない。

下手したら起動時にCacheフォルダの中を毎回消すという設定をしてもいいですね。
その場合毎回キャッシュを初回に作成するので面倒ですけどね。

どちらにせよ警告が出たときに「あっキャッシュ消せばいいのね。了解～」で終わるのはデカいです。
この設定もテンプレートに登録できます。

---------------------------------------

## オレオレテク３：起動時に実行するスクリプトを用意する

https://x.com/griffin921/status/1737310653013262587?s=20

こちらも簡単。
プロジェクト→起動とシャットダウンから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/3b0a2318-71e6-8047-f741-828eea2dd7f4.png)

任意のスクリプトを登録するだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/c088e3d1-76f8-bb26-0cb9-ffb1cecf214c.png)

**この設定もテンプレートに登録できます。**

---------------------------------------

## オレオレテク４：依存関係アナライザーでProject登録漏れをチェック

これはテンプレートとは別の話ですが、
たまに関連ファイルなのにProjectに登録するの忘れて、
同僚から「うごかないんだけど～？」と言われてしまいます。

**もうそのシチュエーションがダルいですよね**
---------------------------------------

そんなときは依存関係アナライザーを使うと
なんと関連があるのにProjectに含まれてないファイルを教えてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/bb2b2aad-0dad-e8c8-7032-0db614109528.png)

たまに、「あっそれはほんまにいらんねん」っていうやつもありますけど
ありがたいですよね。

---------------------------------------

ちゃんと全部登録すると警告は消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/6a9f9bc0-15d7-ed47-629e-b818f45d9bd9.png)

---------------------------------------

この辺の情報はエクスポートできるみたいで、
MATLAB使えない人に情報シェアするときにつかえそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/93b4e654-7a40-b1a4-2f3b-a98867d5eee6.png)

---------------------------------------

# おわり

みんなもオレオレテクを発掘してオリジナルのテンプレートを作ろう！
組織展開を狙ったみんなハッピーテンプレートを作ってもいいぞ！