みなさんこんにちは。ここ1年ほど大変だったプロジェクトが一息ついたため、私の中で久しぶりに3Dスキャンブームが訪れています。最近は超低価格で高性能な3Dスキャナが発売されていたり、センサー関係もいろいろとラインナップがあったりで楽しいですね。私はとりあえずMicrosoft Azure Kinect DKを入手して遊んでいるところです。と言いつつIntelのRealSense事業が閉鎖となってデプスカメラ業界が路頭に迷いそうになっていたり、センサーではないもののMicrosoftのHoloLens 3が開発中止という噂が立ったりと、ハードウェアは色々と大変だなぁとも痛感します。
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
運用のための要素技術
前回までは、“良いコードを書く”という部分にフォーカスして様々なテクニックをご紹介してきました。良いコードを書くというのはとても大事で、これが上手くいかないと高い生産性を保ちながら長期的な開発を続けることが難しくなってしまい、早い段階で行き詰まることになります。それと同時に、作成したプログラムをどのように取りまわしていくかということもとても大事なトピックです。いくら中が奇麗なコードを用意しても、きちんと管理されて適切なタイミングで適切なものをユーザーに提供できなければ意味がありません。そのため、今回からは作成したプログラムをどのように運用していくかというお話に進んでいきます。
今回はバージョン管理システム、仮想環境、パッケージ管理システムをご紹介します。いずれもプログラムを運用していく上でとても大切な要素技術ではあるものの、とりあえず使うだけであれば、その存在を知っており、手を動かして触ったことがあるだけで十分なので、本記事でも駆け足で内容をご紹介するに留めます。詳しいことはご自分で調べてみてください。
バージョン管理システム
バージョン管理システムは既に開発者にとっては当たり前のものになっており、一部は映像制作の現場でも活用されてきています。スタジオごとに用意しているパブリッシュ(出荷)ツールなんかはバージョン管理システムですね。ShotGridでもPublishedFileやVersionという概念が存在し、何らかの方法でバージョン管理が行われている前提の構造になっています。
プログラムを開発する場合、バージョン管理システムを導入する前と後では開発の進め方が全く変わってしまい、慣れた後ではバージョン管理システムなしでどうやって開発を進めていたのか、まったくわからなくなるくらいのインパクトがあります。そのような中で、もしバージョン管理システムを使わずに開発をしているとしたら、それは周りが車に乗ってレースをしているのに、自分一人だけ生身でそのレースに参加しているようなものです。
イマドキはGitにも使いやすいGUIインターフェイスがあるので全部が全部コマンドラインで操作する必要はないと思います。例えばVisualStudioCode(VSCode)にはGit連携があります。また、WindowsであればTortoiseGitがあります。そのため、Gitの基本操作とブランチの感覚に慣れることができればほとんど困ることはないはずです。細かいことを学習しようと思えば覚えることはたくさんありますが、単に使うだけなら1日もあれば十分身に着けることのできるスキルなので、まだ試したことのない人はこれを機会にぜひ身に付けてください。1日程度で身に付くスキルでその後の開発体験をガラリと変えることができるのは、とてもコストパフォーマンスが良いのでおススメです。
バージョン管理システムの使い方に関しては、今さら私が下手糞な説明をするまでもなくインターネット上に優良ドキュメントがたくさん公開されています。そこで、Gitの説明は既存のドキュメントをご紹介するだけで終わらせてしまうことにします。
まずは、「サル先生のGit入門」を入り口にするのが良いでしょう。これはGitを初めて触る人におすすめのドキュメントです。この入門編と発展編を身に付ければ、Gitを使って開発を進めることができるようになります。
もっと詳しく、Gitのブランチの扱いについて学習したいのであれば「Learn Git Branching」はパズル感覚でgitコマンドとブランチの操作を身に付けることができます。個人の興味としてこういうものを試してみるのも良いでしょう。
Gitの話を進めていくと、複数人で開発を進めるための様々なお話や、リポジトリ内を奇麗に保つための各種テクニックのお話が出てきます。もちろんこれはとても大事なことですが、いきなりここまで手を出すと混乱してしまうので、まずは簡単な使い方だけを確実に身に付けるようにしましょう。
ということで、ここまで読んだ人は既にGitが使えるようになったこととします。笑。
仮想環境:venv(virtualenv)
venv(virtualenv)は非常に強力なしくみです。通常、pip installを使用してサードパーティーのプログラムをインストールするとPython環境本体にプログラムがインストールされてしまいます。Mayaであれば、Mayaのインストールフォルダにインストールされてしまうため、プロジェクトによって使用するツールのバージョンを変えるような運用が難しくなってしまいます。venvはシステムにインストールされているPythonとは別に、軽量な仮想環境を用意することができます。ユーザーはこの仮想環境を切り替えることで、複数の異なる環境を使い分けることができます。
Python3であれば標準で含まれており、Python2であれば
>python -m pip install virtualenv
でインストールできます。後は仮想環境を格納したいフォルダに移行して作成します。以下では、C:\temp\venv_test\venv37を作成しています。
C:\temp\venv_test>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 5691-07FA です
C:\temp\venv_test のディレクトリ
2022/02/21 15:41 <DIR> .
2022/02/21 15:41 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 797,111,078,912 バイトの空き領域
C:\temp\venv_test>python.exe -m venv venv37
C:\temp\venv_test>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 5691-07FA です
C:\temp\venv_test のディレクトリ
2022/02/21 15:46 <DIR> .
2022/02/21 15:46 <DIR> ..
2022/02/21 15:46 <DIR> venv37
0 個のファイル 0 バイト
3 個のディレクトリ 797,103,169,536 バイトの空き領域
C:\temp\venv_test>
仮想環境は作成しただけでは有効になりません。使用する環境を選ぶには、activate.batを実行します。
C:\temp\venv_test>venv37\Scripts\activate.bat
すると、コマンドプロンプトに現在有効になっている環境が表示されるようになります。
(venv37) C:\temp\venv_test>
試しにPySide2をインストールしてみます。
(venv37) C:\temp\venv_test>pip install PySide2
Collecting PySide2
Downloading PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl (137.4 MB)
|████████████████████████████████| 137.4 MB 6.4 MB/s
Collecting shiboken2==5.15.2.1
Downloading shiboken2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64.whl (2.3 MB)
|████████████████████████████████| 2.3 MB ...
Installing collected packages: shiboken2, PySide2
Successfully installed PySide2-5.15.2.1 shiboken2-5.15.2.1
WARNING: You are using pip version 20.1.1; however, version 22.0.3 is available.
You should consider upgrading via the 'c:\temp\venv_test\venv37\scripts\python.exe -m pip install --upgrade pip' command.
(venv37) C:\temp\venv_test>dir venv37\Lib\site-packages
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 5691-07FA です
C:\temp\venv_test\venv37\Lib\site-packages のディレクトリ
2022/02/21 15:51 <DIR> .
2022/02/21 15:51 <DIR> ..
2022/02/21 15:46 126 easy_install.py
2022/02/21 15:46 <DIR> pip
2022/02/21 15:46 <DIR> pip-20.1.1.dist-info
2022/02/21 15:46 <DIR> pkg_resources
2022/02/21 15:51 <DIR> PySide2
2022/02/21 15:51 <DIR> PySide2-5.15.2.1.dist-info
2022/02/21 15:46 <DIR> setuptools
2022/02/21 15:46 <DIR> setuptools-47.1.0.dist-info
2022/02/21 15:50 <DIR> shiboken2
2022/02/21 15:50 <DIR> shiboken2-5.15.2.1.dist-info
2022/02/21 15:46 <DIR> __pycache__
1 個のファイル 126 バイト
12 個のディレクトリ 796,606,652,416 バイトの空き領域
(venv37) C:\temp\venv_test>python
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import PySide2
>>> print(PySide2.__file__)
C:\temp\venv_test\venv37\lib\site-packages\PySide2\__init__.py
>>>
このように、venv37\Lib\site-packages以下にファイルがインストールされていることがわかります。
仮想環境から抜ける場合にはdeactivate.batを実行します。
(venv37) C:\temp\venv_test>venv37\Scripts\deactivate.bat
C:\temp\venv_test>python.exe
Python 3.7.9 (tags/v3.7.9:13c94747c7, Aug 17 2020, 18:58:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import PySide2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'PySide2'
>>>
deactivate後はコマンドプロンプトの表示が元に戻り、PySide2をimportしようとしてもモジュールがないと言われます。これで、大元のPython環境が奇麗なままであることが確認できました。
もし仮想環境が壊れてしまったり、必用なくなった場合はenv37フォルダを削除するだけで完全に消すことができます。
パッケージ管理システム
Pythonを使っていればパッケージ管理システムを使ったことがない人はいないはずです。何か新しいプログラムを使うときに
> pip install hogehoge
とコマンドを打ってインストールをするアレです。仮想環境の説明の際にもPySide2をインストールしましたね。普段、このようにしてインストールされるパッケージはPyPIに登録された誰でもアクセスできるものですが、組織内だけで使用したいファイルもパッケージ管理システムを使って管理できます。
パッケージ管理システムがない環境では、作成したプログラムをユーザーに届けるために、共有フォルダの特定の場所にプログラムを置き、それをみんなで使う方法をとることが多いです。少人数でやり取りしている間ならそれでも何とかなりますが、人が増えたり、管理するプログラムの数が増えたりすると、様々な問題が発生します。例えば、人やプロジェクトによって使用するツールのバージョンがバラバラになってしまう問題や、Windowsであれば誰かがファイルを開いているとそのファイルを置き換えることができなくて管理が煩雑になる問題などです。
10年ほど前はスタジオ内で使用できるパッケージ管理システムにあまり適したものがなく、ハリウッド大手の会社でも自分たちでパッケージ管理システムをつくって運用していたケースをよく耳にしました。今は状況が変わって、少なくともCG/映像系のプロダクションであればPythonのpipを使用することでパッケージ管理システムを導入できます。当社も当初は自前のパッケージ管理システムを構築していましたが、2016年頃にvirtualenv+pipベースの体制に移行しています(ちなみに、この情報もgitの履歴から先ほど確認しました)。
パッケージ管理システムを使用することで環境構築やツールの更新を自動的に行うことができ、さらにはプロジェクトごとに使用するツールのバージョンを切り替えたり、問題のあるバージョンを古いものに戻したり、という運用を簡単に行うことができるようになります。DCCToolsを絡めたパッケージ管理システムの運用は今後詳しくご紹介していきます。
まとめ
今回は作成したプログラムを運用するための要素技術のうち、基本的なものを3つご紹介しました。バージョン管理システム、仮想環境、パッケージ管理システムは、どれもなんとなく難しそうなイメージをもたれがちですが、実際に使ってみるとまったくそんなことはなく、簡単に使うことができます。むしろ、自分で手を動かしてなんとなく納得してみることが大事です。この3つは、開発環境を構築する話をする際には余りにも当たり前すぎて話題にすらのぼらないこともあります(ShotGridのVersionもそんな感じですね)。そして、これらの技術をベースにしてプログラムを運用するための環境を整えていくと、様々なことを実現できるようになるのですが、そもそものベースになっている技術を知らないと、一体何の話をしているのか理解できないということになってしまいます。そのようなギャップを埋められるよう、今後お話を進めていきます。
第43回の公開は、2022年6月を予定しております。
痴山紘史
日本CGサービス(JCGS) 代表
大学卒業後、株式会社IMAGICA入社。放送局向けリアルタイムCGシステムの構築・運用に携わる。その後、株式会社リンクス・デジワークスにて映画・ゲームなどの映像制作に携わる。2010年独立、現職。映像制作プロダクション向けのパイプラインの開発と提供を行なっている。新人パパ。娘かわいい。