自宅でも使えるDCCランチャー

こちらは Maya Advent Calendar 2023 10日目の記事です。

> Maya Advent Calendar 2023
https://qiita.com/advent-calendar/2023/maya

# 始めに

会社でDCC(CG関連)のソフトを起動する際にランチャーを使用してる人も多いかと思います。
会社で使ってるランチャーは自宅では使えずに、以下のような悩みを抱えてると思います。

- デスクトップにショートカットアイコンがいっぱい並んでる…
- Windows11だとタスクバーへ自由にフォルダやショートカットが配置できなくなった…
- バッチファイルを経由して起動してるけどアイコンが全部同じでパッと見分からない…
- バッチファイルだらけでどこに置いていいか分からない、編集も大変…
- マシン交換や、複数マシンあるけど、同じ設定でツールを起動出来なくて困ってる…
- 出先でも同じ環境でツールを起動できるようにUSBに入れて持ち歩きたい…
- 管理者権限が不要でインストールしないで使えるランチャーが欲しい…

簡易的でいいので、気軽に使えるランチャーが欲しいと思った方は是非試してみてください。
紹介するツールは商用フリーなので、気に入った方は社内で使えるように設定ファイルを用意してシェアすると喜ばれかもしれません。


# ツール紹介

Quick Launcher
https://github.com/unitbus/QuickLauncher

ダウンロードリンク
https://github.com/unitbus/QuickLauncher/releases/

この記事を書いてる段階で最新バージョンは`v0.2.1`になります。
自分でコンパイル出来ない方は`release.zip`をダウンロードしてください。


# 使い方

## インストール

ダウンロードしたら、Zipファイルを好きな場所に解凍してください。
解凍するだけで使えます。特別なインストールは必要ありません。
`QuickLauncher.exe`を実行してください。

設定ファイルはJSONフォーマットを使用しており、ファイルはメモ帳でも編集可能ですが、
構文チェックがある専用のエディタを使用する事を **強く推奨** します。

**Visual Studio Code**(通称VSCode)がオススメです。
構文エラーがあると、下のように警告してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99554/6e8456bf-63e6-dbed-748d-750cc07b4d2f.png)

> Visual Studio Code
https://azure.microsoft.com/ja-jp/products/visual-studio-code

GitHubに慣れてる方はJSON管理に使うのもありかと思います。
バックアップにもなり、外出先でもダウンロード出来るので便利かと思います。

## 基本的な使い方

1. `QuickLauncher.exe`を起動するとタスクトレイに滞在します
1. 右クリックで、登録されたアプリケーションの一覧が表示されます
1. 左クリックで、システムメニューが開きます
    1. `Edit`でアプリケーションを追加できます
    1. `Update`で編集したJSONを読み直す事でメニューが更新されます

:::note info
初回起動時はタスクトレイの矢印アイコンの中に隠れてると思います。
ドラッグで外に引っ張り出すと常に表示出来るようになります。
:::

## 複数起動

複数起動可能です。設定ファイルを分ける事で用途に応じて内容を変える事が出来ます。
アイコンも変えれるので、仕事用、プライベート用など、使い分けると便利です。

詳しくは本家のドキュメントを参照してください。
https://github.com/unitbus/QuickLauncher#コマンドラインオプション

# DCCの登録

ここからが本題です。Mayaを起動できるようにしてみましょう。
VSCodeで、JSONファイルを開きます。

## Mayaの登録

シンプルに起動するだけなら、以下のように追加するとメニューが作成されます。
アイコンをわざわざICOファイルを作成しなくても、EXEを指定すれば自動で取得してくれます。

```
[
    {
        "name": "",
        "softwares": [
            {
                "name": "Maya 2024",
                "path": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe",
                "icon": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe"
            }
        ]
    }
]
```

Windowsのパスは、バックスラッシュ(`\`)、または￥マークで表現されますが、
スラッシュで書いても問題ありません。

バックスラッシュを使いたい場合、JSONではエスケープ文字として認識してしまうので、
2つ並べる(`\\`)必要があります。エクスプローラーからコピペする場合は注意してください。

Mayaのインストール先が間違ってなければ下の画像のように表示されるかと思います。
ソフトウェアが見つからない時はアイコンが表示されないので、インストールの有無が分かりやすいかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99554/c0e47063-6cdc-8ea6-0bd2-da6300f9e5e3.png)

これで完成です！
後は好きなアプリケーションを並べて書いていけば、自分専用のランチャーが出来上がります。
この後の記事は、便利な機能の紹介になります。

## バッチファイルを登録

DCCの場合、専用の起動用バッチを作ってる人も多いと思います。
その場合、実行はバッチから、アイコンはEXEから取得するようにします。
先程と見た目は変わりませんが、バッチファイルから起動できるようになります。

パス部分に環境変数が使えるので、`USERPROFILE`や、`COMPUTERNAME`のように、
複数アカウントを使い分けてる人に便利な環境変数があるので、利用してみてください。

環境変数を確認するには、Windowsの設定をから「環境変数の編集」を検索すると出てきます。
余談ですが、コマンドプロンプトから`set`とだけ打って実行すると、現PCに登録されてる環境変数の一覧が表示されるので便利です。

```
[
    {
        "name": "",
        "softwares": [
            {
                "name": "Maya 2024",
                "path": "%USERPROFILE%/launcher/maya2024.bat",
                "icon": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe"
            }
        ]
    }
]
```

## 環境変数を追加

このツールの便利なところは環境変数を一時的に追加して起動出来るところです。
バッチファイルを指定してる場合でも、一時的に環境変数が追加された状態で開始されます。
更に、追加した環境変数を、バッチファイルの中で拾って処理を分岐するような事も可能です。

例えばランチャー側でソフトウェアのバージョンを環境変数に入れておき、バッチに記載するパスの部分に環境変数を使用する事で、1つのバッチから複数のバージョンを切り替えて起動する事が可能になります。

事前にコピー処理を走らせたり、ディレクトリを作成したりなど、
バッチファイルにしか出来ない事もあるので上手く使い分けしてもえると良いかと思います。

下はMayaのプラグインを追加してる例です。
通常、環境変数に複数のパスを入れる場合はセミコロン(`;`)で区切り一行で書く必要がありますが、JSONの配列として書くことでも認識します。複数登録する時の視認性がかなり良くなります。

::: note info
環境変数にパスを登録する場合は、Windows側に合わせてバックスラッシュを使用してください。パス同士をつなげた際に、スラッシュとの混在を避ける為の暗黙のルールだと思われます。混在したとしても問題になるケースは聞いたことありませんが、一応です…
:::

```
[
    {
        "name": "",
        "softwares": [
            {
                "name": "Maya 2024",
                "path": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe",
                "icon": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe",
                "environments": {
                    "MAYA_UI_LANGUAGE": "en_US",
                    "MAYA_MODULE_PATH": [
                        "%HOME_PLUGIN_DIR%\\pencil\\v4.2.2",
                        "%HOME_PLUGIN_DIR%\\vray\\v6.10.00\\maya_root\\modules"
                    ]
                }
            },
            {
                "name": "Maya 2024 日本語",
                "path": "%USERPROFILE%/maya2024.bat",
                "icon": "C:/Program Files/Autodesk/Maya2024/bin/maya.exe",
                "environments": {
                    "AW_JPEG_Q_FACTOR": 85,
                    "MAYA_UI_LANGUAGE": "ja_JP",
                    "MAYA_APP_DIR": "F:\\USB-Drive\\documents\\maya",
                    "MAYA_CMD_FILE_OUTPUT": "%USERPROFILE%\\maya_log.txt"
                }
            }
        ]
    }
]
```

:::note warn
設定ファイルに日本語が含まれる場合は`utf8`でJSONを保存してください。
`BOM(Byte Order Mark)`は要りません。ここから変更可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99554/1d8b85f6-3767-e633-f395-48a424a301e1.png)
:::


# 環境変数の紹介

## MAYA_UI_LANGUAGE

日本語(ja_JP)や、英語(en_US)に切り替えできます。

言語でプリファレンスの保存先が異なるので、気軽に切り替えれないのが頂けないところ…
人に教えを請う時は、相手の使い易い言語に切り替えれるようにしておくとスムーズだったりします。

## MAYA_MODULE_PATH

昔から使われてる、Mayaのパッケージ管理方法です。
Mayaが認識できるディレクトリ階層になってれば、自動で認識するで配布が楽になります。
有償プラグインの配布はこのモジュール形式を取ってる事が多いです。

## MAYA_SCRIPT_PATH

パッケージ管理されてないスクリプトを読み込みたい場合に指定します。
デフォルトでもいくつかパスが通ってますが、ディレクトリを追加したい時に使います。
MELだけではなく、Pyhonファイルも読み込み可能です。
Pythonの場合はルートさえ指定してあればパッケージも扱えるようになります。
確か起動時に同じパスが`PYTHONPATH`にも自動で追加される仕様になってたかと思います。

## MAYA_APP_DIR

意外と使います。例えば、USBにMayaの環境を入れて持ち歩きたい時などに便利です。
USBに保存場所を決めて、この環境変数で指定すれば、外出先でも自分の環境で作業可能です。

何も指定しないと、Windowsが用意してる`ドキュメント`に保存されます。
デフォルトのままだと Microsoft Cloud に同期されて嫌、と言う理由で変える人も多いかと思います。笑

他にも、ネットワーク先を指定する事で、レンダリング環境を統一する事も出来ます。
`MAYA_MODULE_PATH`や`MAYA_SCRIPT_PATH`を指定するよりも気軽に環境構築が出来るので便利です。

:::note warn
レンダリング目的以外で作業環境をネットワークに置くことは推奨しません。
自宅でNASに保存とかは全然ありかと思いますが、複数人で使用すると同時編集でバグったり、アプリケーションの起動速度や、ツール動作が劇的に遅くなります。ツールのレスポンスの悪さはアーティストにとってかなりのストレスとなるので、共有する側が注意を払うようにしてください。
:::

:::note alert
他のスクリプト系の環境変数にも言えますが、環境を共有する為にネットワークに環境を構築するのは良いのですが、そのままネットワークから直接スクリプトをロードする仕組みは避けてください。特にWindows環境ではファイルにアクセスする為のセキュリティ認証が遅く、いくらインフラを整備しても致命的な遅延が発生します。
:::

:::note info
もし、ネットワークに構築した環境を共有したい場合は、そのままネットワークからロードしても誰も幸せにならないので、必ずローカルに同期する仕組みをつくってからアプリケーションを起動するように環境を整備しましょう。
:::

## MAYA_CMD_FILE_OUTPUT

これも便利です。スクリプトエディタに出るログがテキストに保存されます。
これを指定しておけば、クラッシュした時にテキストから原因を探る事が可能になります。
Mayaは良くクラッシュするので、普段から指定しておく事で、突然の事態が起きても、テキストを渡すだけで誰かが助けてくれるかもしれません。

## AW_JPEG_Q_FACTOR

JPEGのクオリティです。デフォルトが`100`になってます。
`100`だと劣化する癖にファイルサイズがデカくてあまりJPEGの恩恵がないので`85`ぐらいがオススメです。`85`だと、拡大しない限りは気付かない程度の劣化ですみ、ファイルサイズが劇的に減ります。

個人的にはPlayblastは動画ではなく、JPEG連番派なので、この設定が意外と役に立ちます。音の同期とかなければ連番良いですよ。途中からやり直したり、コマ送り戻りもスムーズですし、なによりコーデックによる様々なトラブルが劇的に減ります。

### よくある動画変換での問題

- 開始フレームがズレる
- 最終フレームがダブる
- 残像(ゴースト)現象
- ツールウインドウが上に写る
- 致命的な色の劣化
- コーデックの解像度制限で歪んだりノイズになる
- Mayaがクラッシュなど

## 環境変数一覧

他にも便利な環境変数がいっぱいあるので試してみてください。

> Autodesk Maya 2024 環境変数
https://help.autodesk.com/view/MAYAUL/2024/JPN/?guid=GUID-925EB3B5-1839-45ED-AA2E-3184E3A45AC7


# 終わりに

以上で終了です。自分でも使用してるツールなので紹介してみました。
最近だと、OCIOの切り替えや、プラグイン検証用にシンプルな環境で起動したい時などに利用してます。

Houdini, Nuke, Blenderの登録方法も、それぞれのアドカレにも記事を書こうと思いましたが、
環境変数を使うほど使いこなせてないのでやめました。汗

同じ方法で他のアプリケーションも登録できると思うので、是非活用してください。
誰か紹介記事を書いてくれると嬉しいです。笑

フォルダのパスを登録する事でブックマーク的な使い方もできるので、プロジェクト用のアイコン使ってリンク集を作ってシェアするのも便利かと思います。登録し過ぎてもゴテゴテしても使いづらいだけなので、用途によって設定を使い分けると良いかと思います。