Maya Pythonの開発環境を構築する

## 環境

* Windows
* Autodesk Maya 2025.3


## uv

開発環境を管理するためのツールとして [uv](https://docs.astral.sh/uv/) を使用します。

uvについて簡単に説明すると仮想環境の作成、プロジェクトの初期化、パッケージの管理などができるツールです。Rust製で非常に高速でかつ高機能なため、このツールのみで色々なライブラリを代用することができます。

Windows環境でのインストールは [Installation](https://docs.astral.sh/uv/#installation) に記載があるPowerShellのコマンド1行で簡単にインストールできます。

Windows でのインストール先は ```%HOMEPATH%\.local\bin``` で、uvでインストールするツールはこのパスに追加されるため好みに応じて環境変数 ```PATH``` に追加しておくと良いかと思います。


## 仮想環境の作成

### mayapyへのソフトリンクの作成

「[mayapyでvenvを実行する](https://help.autodesk.com/view/MAYAUL/2025/JPN//?guid=GUID-6AF99E9C-1473-481E-A144-357577A53717)」を参考にmayapyへのソフトリンクを作成します。

```console
cd "C:\Program Files\Autodesk\Maya2025\bin"
mklink python.exe mayapy.exe
```
Program Files以下のディレクトリのため管理者権限が必要です。

### venv の作成

```console
uv venv --python "C:\Program Files\Autodesk\Maya2025\bin\python.exe" --system-site-packages
```

```--python``` でMayaのPythonインタプリタを指定、```--system-site-packages``` をONにすると作成した仮想環境からMayaのPythonパッケージにアクセスできるようになります。

### プロジェクトディレクトリの作成

下記のコマンドで作成できます。

```console
uv init
```

ただし、DCCツールのケースではPythonの一般的なプロジェクト構成よりもドキュメントで推奨されている構成のほうが扱いやすいかもしれません。
例えばMayaであれば「[モジュール パッケージを作成する](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=Maya_DEVHELP_Distributing_Maya_Plug_ins_DistributingUsingModules_CreatingAModulePackage_html)」あたりを参考にサブディレクトリの構成を検討すると良いかと思います。


## EditorConfig

コードスタイルを維持するための設定ファイルとして [EditorConfig](https://editorconfig.org/) に準拠した設定ファイルを ```.editorconfig``` という名前で用意します。

有名なエディタではプラグイン不要で認識します。
(エディタの対応状況は https://editorconfig.org/#pre-installed で確認できます)

設定については [Example](https://editorconfig.org/#example-file) を参考に始めて、好みに応じて [File Format Details](https://editorconfig.org/#file-format-details) を基に調整を加えると良いかと思います。


## linter, formatter

linter, formatterに関しては実行速度と機能性の観点から [Ruff](https://docs.astral.sh/ruff/) がおすすめです。

下記のコマンドでインストールできます。

```console:インストール
uv tool install ruff
```

### linterとして使用する

下記のコマンドで静的構文解析が実行できます。

```console
ruff check <Directory or File>
```

修正まで行う場合はオプションで ```--fix``` を指定します。

```console
ruff check --fix <Directory or File>
```

### formatter として使用する

下記のコマンドでフォーマットできます。

```console
ruff format <Directory or File>
```

フォーマット前に実行結果を確認したい場合は ```--check``` と ```--diff``` のオプションを指定します。

```console
ruff format --check --diff <Directory or File>
```

### import order

import order に関する設定はMayaのPythonパッケージを ```tool.ruff.lint.isort``` の ```section-order``` と ```tool.ruff.lint.isort.sections``` で指定すると綺麗にできます。

```toml
[tool.ruff.lint.isort]
section-order = [
    "future",
    "standard-library",
    "first-party",
    "third-party",
    "maya-library",
    "local-folder",
]

[tool.ruff.lint.isort.sections]
"maya-library" = [
    "maya",
]
```

## 型チェック

型チェックについてはいくつか種類がありますが、ここでは [mypy](https://github.com/python/mypy) を紹介します。

```console:インストール
uv tool install mypy
```

```console:使い方
mypy <File or Directory>
```

## その他

### テストフレームワーク

テストについてはシンプルで使いやすい [pytest](https://docs.pytest.org/en/stable/) がおすすめです。


## 参考
* [uv](https://docs.astral.sh/uv/)
* [mayapyでvenvを実行する](https://help.autodesk.com/view/MAYAUL/2025/JPN//?guid=GUID-6AF99E9C-1473-481E-A144-357577A53717)
* [モジュール パッケージを作成する](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=Maya_DEVHELP_Distributing_Maya_Plug_ins_DistributingUsingModules_CreatingAModulePackage_html)
* [EditorConfig](https://editorconfig.org/)
* [Ruff](https://docs.astral.sh/ruff/)
* [mypy](https://github.com/python/mypy)
* [pytest](https://docs.pytest.org/en/stable/)