Maya起動バッチを作ろう

# 概要
チームでMayaを使う際、特定のツールセットを使用可能にしたり、任意の設定を行ったり、
利用者全員の環境を統一する事が重要になってきます。
本記事ではバッチファイルを使った環境統一について記載してみたいと思います。

# バッチファイル構成
私は下記のバッチファイル構成をよく使用します。

- 実行ファイル起動用バッチ（実際にMayaまたはMayaBatchを起動するバッチ）
- MayaBatch実行用バッチ（Jenkinsやバッチ処理などで実行するバッチ）
- Maya通常実行用バッチ（アーティストが通常作業に実行するバッチ）
- Maya開発実行用バッチ（ツール開発者が開発時に実行するバッチ）

全てのバッチファイルを同じ階層に格納し、
サブフォルダにPythonやMELなどのスクリプトも格納していると想定してください。

## 実行ファイル起動用バッチ
EXEファイルをオプション付きで起動するバッチです。
maya2018.prj1.bat のような名前で、プロジェクト別に作成します。

| 引数 | 用途                                |
|:-----|:-----------------------------------:|
| %1   | maya.exeかmayabatch.exeへのフルパス |
| %2   | mayaの言語モードを指定する文字列    |
| %3   | 起動時にオープンするファイルパス    |
| %4   | 起動時に実行するMELファイルパス     |

同時に下記のような環境変数の設定を行います。

- MAYA_UI_LANGUAGE（起動後のUI言語を指定）
- MAYA_DISABLE_CIP（Customer Involvement Program を無効化）
- MAYA_FORCE_PANEL_FOCUS（http://ueta.hateblo.jp/entry/2015/01/31/182224）
- MAYA_SCRIPT_PATH（MELファイルの場所を指定）
- PYTHONPATH（usersetup.pyとPythonファイルの場所を指定）
- MAYA_PLUG_IN_PATH（プラグインファイルの場所を指定）


```maya2018.prj1.bat
CD /d %~dp0
::----------------------------------------------------------------
::Args
::----------------------------------------------------------------
SET MAYA_EXE=%1
SET MAYA_UI_LANGUAGE=%2
SET OPEN_FILE=%3
SET MEL=%4

::----------------------------------------------------------------
::Gernal
::----------------------------------------------------------------
SET PATH_BAT=%~DP0
SET MAYA_DISABLE_CIP=1
SET MAYA_FORCE_PANEL_FOCUS=0

::---------------------------------------------------
::MEL Tools
::---------------------------------------------------
SET MAYA_MEL_1=%PATH_BAT%inhouse\mel;
SET MAYA_MEL_2=%PATH_BAT%package\mel;
SET MAYA_SCRIPT_PATH=%MAYA_MEL_1%%MAYA_MEL_2%

::----------------------------------------------------------------
::Python Tools
::----------------------------------------------------------------
SET PATH_USERSETUP=%PATH_BAT%inhouse\prj1\python;
SET PYTHONPATH=%PATH_USERSETUP%

::----------------------------------------------------------------
::Plugin Tools
::----------------------------------------------------------------
SET PATH_PLUGIN=%PATH_BAT%inhouse\plugin;
SET MAYA_PLUG_IN_PATH=%PATH_PLUGIN%

::----------------------------------------------------------------
::Run MayaBatch
::----------------------------------------------------------------
IF NOT {%MAYA_EXE:mayabatch.exe=%} == {%MAYA_EXE%} (
    START /WAIT "" %MAYA_EXE% -file %OPEN_FILE% -script %MEL% -log "%PATH_BAT%mayabatch.log"
    EXIT
)

::----------------------------------------------------------------
::Run Maya
::----------------------------------------------------------------
if "%OPEN_FILE%" == "" (
    START "" %MAYA_EXE% -hideConsole
) else (
    START "" %MAYA_EXE% -hideConsole -file %OPEN_FILE%
)
EXIT
```


## MayaBatch実行用バッチ
起動用バッチにMayaBatchを起動させるバッチです。
maya2018.prj1.cmd.bat のような名前で、プロジェクト毎に作成します。

| 引数 | 用途                                |
|:-----|:-----------------------------------:|
| %1   | 起動時にオープンするファイルパス    |
| %2   | 起動時に実行するMELファイルパス     |

```maya2018.prj1.cmd.bat
::---------------------------------------------------
::Exe
::---------------------------------------------------
SET MAYA_EXE="C:\Program Files\Autodesk\Maya2018\bin\mayabatch.exe"

::---------------------------------------------------
::Run MainBatch
::---------------------------------------------------
SET PATH_BAT=%~DP0
SET PATH_MAYA_BAT=%PATH_BAT%maya2018.prj1.bat

SET OPEN_FILE=%1
SET MEL=%2
START %PATH_MAYA_BAT% %MAYA_EXE% en_US %OPEN_FILE% %MEL%
EXIT
```

## Maya通常実行用バッチ
起動用バッチにMayaを起動させるバッチです。
maya2018.prj1.jp.bat のような名前で、プロジェクトと言語毎に作成します。
※英語ならmaya2018.prj1.en.bat

| 引数 | 用途                                |
|:-----|:-----------------------------------:|
| %1   | 起動時にオープンするファイルパス    |
| %2   | 起動時に実行するMELファイルパス     |

```maya2018.prj1.jp.bat
::---------------------------------------------------
::Exe
::---------------------------------------------------
SET MAYA_EXE="C:\Program Files\Autodesk\Maya2018\bin\maya.exe"

::---------------------------------------------------
::Run MainBatch
::---------------------------------------------------
SET PATH_BAT=%~DP0
SET PATH_MAYA_BAT=%PATH_BAT%maya2018.prj1.bat

SET OPEN_FILE="%1"
if %OPEN_FILE% == "" (
    START %PATH_MAYA_BAT% %MAYA_EXE% ja_JP
) else (
    START %PATH_MAYA_BAT% %MAYA_EXE% ja_JP %OPEN_FILE%
)
```

## Maya開発実行用バッチ
起動用バッチにMayaを起動させるバッチです。
maya2018.prj1.dev.bat のような名前で、プロジェクト毎に作成します。

特定パスからツールが起動されていないと動作しないといったケースがあります。
そういった場合、ツールの実行場所を置き換えるなどのハックをする必要があります。
開発実行用バッチではそのようなケースに対応するために環境変数を設定します。

※スクリプトは開発用、実行環境はアーティスト環境のように見せかけるイメージ。
※開発用の環境変数を使うコードは別途実装が必要。

```maya2018.prj1.dev.bat
::---------------------------------------------------
::Develop Mode
::---------------------------------------------------
REM 開発モードの場合、下記のパスにあるバッチから起動したように見せかけます
SET MAYA_DEV_MODE=1
SET MAYA_BAT_PATH=X:\prj1\maya

::---------------------------------------------------
::Run MainBatch
::---------------------------------------------------
SET PATH_BAT=%~DP0
SET PATH_MAYA_BAT=%PATH_BAT%maya2018.prj1.en.bat
START %PATH_MAYA_BAT%
EXIT
```

# userSetup.py
起動用バッチで使用するuserSetup.pyを指定しています。
userSetup.pyでは下記のような環境設定を行うことが多いです。

- コマンドポート解放
- 独自プラグインのロード
- メニューバーやサイドバーの追加
- プリファレンスの上書き（単位設定やビューポート設定など）
- スクリプトジョブの追加（SceneOpenedでスクリプトを遅延実行させるなど）
- MELグローバル変数の定義
- Loggerのセットアップ


# まとめ
バッチファイルを使うことで、あらかじめ決めておいた場所にある
スクリプトを実行可能にしたり、設定を変更しておくことが簡単にできます。

しかしながら、Mayaのインストールパスが違うといったケースはよく発生します。
バッチファイルを生成するセットアップツールを作るといいかもしれませんね。
専用ランチャーから実行する場合は、EXEファイルの関連付けを設定できたりしていいですね。

より汎用的なパイプランを実装したい方は、[Ecosystem](https://github.com/PeregrineLabs/Ecosystem)などを参考にしてみてください。