【ArtistでもMELが書きたい】Maya MEL入門(4)【フラグ】

# はじめに
この記事は、3DCG業界で働く**Artist向けのMEL入門記事**です。
普段の業務を効率化したいけど、MELの書き方が分からない、調べたけどイマイチ分からなかった、そんな方向けに書きました。
本記事は「MELコマンドのフラグを使う」をゴールとします。

# 環境
Autodesk Maya 2022.2

# 前回のあらすじと今回へのつなぎ
[前回](https://qiita.com/Hum9183/private/f37458ee3730706098aa)はスクリプトエディタでMELを記述し実行しました。
MEL開発の環境も良くなったところで、そろそろ少し凝ったMELを書きたくありませんか？
少なくともキューブを生成するのであれば、MELを書くのではなくオペレーションで生成すればいいという話で終わってしまいます。
ということで実践的なMELを書きたいのですが、そのためにはコマンドの**フラグ**というものを知る必要があります。

# フラグとはなんぞや？
フラグという名前からはイメージがつきにくいかもしれませんが、
実態としてはオプション設定のようなものに近いです。
`polyCube`コマンドを例にすると、キューブを生成する際に**キューブの名前を指定できるオプションがある**というようなイメージです。

フラグの文法は下記です。
```
コマンド名 -フラグ名 フラグとして設定するもの
```
コマンド本体の記述の後に半角スペースを入れて、`-`(ハイフン)とフラグ名を記述。その後ろにまた半角スペースを入れて、フラグとして設定するものを記述、
です。
日本語だとスペース関係が見辛いと思うので、英語版も用意すると、
```
commandName -flagName flagValue
```
という感じです。

>キューブを生成する際にキューブの名前を指定できるオプション

上記の例だと、実際に実行できるMELとしては
```
polyCube -name myCube
```
というような書き方になります。

日本語で表現するなら
**ポリゴンのキューブを生成する(オプション設定として、名前はmyCubeにする)**
というようなイメージでしょうか。

これを実行して、生成されたCubeの名前が「myCube」となっていれば無事にnameフラグを使えたということになります。

# フラグを使ってみる
スクリプトエディタで記述するとこのようになります。
`;`を忘れずに記述してください。
![MEL_learning01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/976d2be5-d2e9-7cfa-537b-9b959921e903.png)
実行すると、
![MEL_learning02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/70fb81e9-3381-9621-88a8-8ddce80a2341.png)
やりました！キューブの名前が「myCube」になっています。

フラグが使えるようなったので、MELで実行できることの幅が広くなりました。これは大きな一歩です！
しかし、このフラグ、どうやって調べればいいのでしょうか？
教えてくれる人が常に身近にいるとは限りません。

# フラグの調べ方
初心忘るべからずということで、実はヒントは[第一回](https://qiita.com/Hum9183/private/ab5cc907734737b508b4)にあります。
>実は、Maya公式が出しているMELコマンドリファレンスがあります。

そうです。MELはコマンドリファレンスが公式から出ているので、それを参照すればフラグを調べることできそうです。
[MELコマンドリファレンス](https://help.autodesk.com/view/MAYAUL/2022/JPN/index.html?contextId=COMMANDS-INDEX)

さっそくpolyCubeのページを見てみましょう。
![MEL_learning03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/b6435b87-40e5-c4ad-9dd1-c5f74f442012.png)
どこから見ればいいやらという感じではありますが、必要な箇所だけ参照させてもらいましょう。
![MEL_learning04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/e7081563-9f4b-2a1d-58f3-aea45bbbb5a6.png)
フラグの一覧のような記述を見つけました(黃線マーキング部)
-axis, -caching, -constructionHistory ...等たくさんあるようですね。
![MEL_learning05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/3c3828b1-1e08-c5a2-480e-6646b3a4dfb2.png)
nameフラグも発見しました。

フラグを探すのは少し大変ですが、よく使用するものはある程度決まっているので、すべてのフラグを暗記するといったようなことは必要ありません。

# サンプルコードを試す
コマンドをざっくりと知りたいときは、コマンドリファレンス下部の「MEL 例」にサンプルコードが載っているので試してみると理解が進みます。
![MEL_learning06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/a889f1de-343e-c2de-6b2b-6ef172e6f4c0.png)
サンプルコードの1行目をコピーして、Mayaのスクリプトエディタにペーストするとこのようになります。
![MEL_learning07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/5444ad14-516e-61e8-7f7c-c76356f579ea.png)
ここで新発見が2つあります。

1つは、フラグは複数個にわたって連結して記述できるということです。
半角スペースを入れさえすれば、何個でもフラグを記述することができそうです。

2つは、フラグ名にはショートネームが使えるということです。
1つ目のフラグ**sx**は、コマンドリファレンスでは下記に該当します。
![MEL_learning08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/255663a4-32e9-2dde-f3f8-1086b1e6d861.png)
フラグ名としては**subdivisionsX**ですが、省略した名前として**sx**という書き方もできるんですね。

ちなみに、**name**フラグは**n**というショートネームのようです。
![MEL_learning09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/4030391d-4c56-a37c-5f70-6b4166d80af7.png)

気を取り直して実行してみます。
![MEL_learning10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/1a4cb7fa-656c-27bc-04b2-c88ba8d397ca.png)
なにやら細長いキューブが生成されました。
具体的にどんなフラグだったのか一つずつ見ていきましょう
```
-sx 10
```
![MEL_learning08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/11cd78d1-7e7d-4dbc-c70a-c0fba803d891.png)
X方向のサブディビジョンを10に設定しています。
```
-sy 15
```
![MEL_learning11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/b16aad8a-f11c-0aa1-e823-21abe3fd7c6b.png)
Y方向のサブディビジョンを15に設定しています。
```
-sz 5
```
![MEL_learning12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/44b22b5e-8b5b-6ba2-7367-92b0fc4072f7.png)
Z方向のサブディビジョンを5に設定しています。
```
-h 20
```
![MEL_learning13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/f54e90e5-dba6-4d18-2061-d29ebfdd3035.png)
高さを20に設定しています。

本当に正しく設定されているか、チャネルボックスを確認してみましょう。
![MEL_learning14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121056/33f25192-9732-b630-8c6f-f41b75bddb18.png)
バッチリでしたね。

# 終わりに
コマンドのフラグ、かなり情報盛りだくさんだったと思いますが、いかがでしたか？
フラグを扱えるようになれば本当にいろいろなことがMELで実行できるようになります。
焦らず、ゆっくりとコマンドリファレンスを確認してもらえたらと思います。

次回はこちら→[【ArtistでもMELが書きたい】Maya MEL入門(5)](https://qiita.com/Hum9183/private/d148f2ba3d2b55f70cd6)

# 参考
https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/JPN/Maya-Scripting/files/GUID-579A6D9F-CB41-4CD9-B9D7-3DB1FD33735D-htm.html