Step 02:認証作業を自動化しよう
筆者もしばらくの間、手作業で認証付きのzxpファイルを作成したときは、毎回秘伝のマニュアルを見ながら証明書を作るか既存の証明書を使って圧縮をしていましたが、手順は複雑だし、毎回行うのは正直大変ですよね。
特に出向先にもっていく際、「何年何月何日まで使いたい」と言われると証明書から作るのに日数計算が本当に面倒でした。なので、この作業を自動化することにしました。
2-1:面倒なので認証作業を自動化しよう
以下は簡単なPythonのソース例です。筆者はMayaのMELからMayaのPythonを通してPythonを覚えたので、個人的に書きやすいPythonで作りました。ファイル名は仮に「COYOTE_makeZXP_XXXXXX.py」としています。
●python
# -*- coding: UTF-8 -*-
import os
import sys
import datetime
def main():
_args = sys.argv # ドラッグ&ドロップしたフォルダ名を取得
_team = 'team' # パラメーターは後で変更しやすいように変数
_name = 'name'
_pass = 'pass'
_file = 'Extension.p12'
_date = '20' + _args[0][-10:-4] # ファイル名から日付を取得
_now = datetime.datetime.now() # 作成日の日付を取得
_days = 0
# 証明書の使用期限の計算
if _date.isdecimal():
_days = datetime.datetime(int(_date[0:4]), int(_date[4:6]),int(_date[6:8])) - datetime.datetime(_now.year, _now.month, _now.day)
_days = _days.days
# 証明書の発行
_exePath = os.path.dirname(_args[0])
_cmd = ('{}\ZXPSignCmd -selfSignedCert JP Tokyo {} {} {} {}\{}'.format(_exePath, _team, _name, _pass, _exePath, _file,))
if _days > 0: # 証明書の使用期限
_cmd = ('%s -validityDays %s' % (_cmd, _days))
os.system(_cmd)
# 繰り返しで圧縮ファイルの作成
del _args[0] # 最初の変数はお払い箱
for _folder in _args:
_expotName = _folder.split('\\')[-1]
# ZXPSignCmdまでのパス -sign ソースフォルダのパス 出力ファイルパス.zxp 証
明書.p12 設定した証明書のパスワード
try:
_cmd = ('{}\ZXPSignCmd -sign {} {}\{}.zxp {}\{} {}'.format(_exePath,_folder, _exePath, _expotName, _exePath, _file, _pass,))
os.system(_cmd)
except:
print('[%s] is Error' % _expotName)
os.remove('{}\{}'.format(_exePath, _file) ) # 必要の無くなった証明書の削除
os.system('pause')
main()
このソースを「pyinstaller」モジュールのonefileコマンドで1つの.exeファイルにまとめています。今回の主旨から外れるので詳しい説明は省きますが「pyinstaller」はPythonのソースをexeファイルにまとめられるので他ユーザーにツールを渡すときに便利です。また、今回のようにドラッグ&ドロップで実行するexe作成に便利です。
完成した「makeZXP_XXXXXX.exe」と「ZXPSignCmd.exe」が同じフォルダ内にある状態にして、エクステンションフォルダをドラッグ&ドロップするだけで証明書の組み込まれた.zxpファイルができます。ファイル名は末尾の「_XXXXXX」部分が重要で、ここを西暦の末尾2桁と月日に変更をしてから作成すると、その日まで有効なエクステンションとして簡単に作成できます。
証明書に関してはスクリプトで簡単に作れるので、作るたびに消すというストロングスタイルでやっています。同じことのくり返しなので自動化した結果......、実は筆者が手動でのやり方を忘れていてブログで書くために思い出すのと、手順通りにできるのか確認するのに苦労しました(汗)。そんな苦労をするのは大変なので、自動化はぜひオススメしたいですね。
2-2:インストールもバッチで自動化
単純にアーティストのインストールが楽になるので、補助的に作成しています。バッチに関しては特別なことはしていないので書くことはありませんが、同じフォルダ内にバッチファイルとExManCmd.exe、zxpファイルを入れて1行実行するだけです。
●console
%~dp0\ExManCmd_win\ExManCmd.exe /install %~dp0\COYOTE_changePsd2Image'.zxp
一応、ツールを消しやすいようにアンインストールの選択肢を入れてあります。
%~dp0\ExManCmd_win\ExManCmd.exe /remove COYOTE_changePsd2Image
個人的には、TAとしてアーティストの作業を1クリックでも減らすところにこだわりたいですね。
まとめ:Photoshopツールの有用性について
以上、3回を通してPhotoshopのツール制作のながれを説明してまいりました。この手順でPhotoshopのツールを作って他の人のマシンに配信できます。
では、そもそもPhotoshopでツールを作る必要性について考えたいのですが、ツールを作った立場からすると、大いに必要を感じています。
この記事を書くきっかけになった「CRPS_指定ファイル保存」ツールですが、これは1分強の手間を1クリック1秒にするという、一見すると地味なツールです。しかし、仮に60回別形式保存すれば1時間かかった作業が1分に短縮されます。アーティストが1つの画像を作成する上で、一体何回別形式で保存をするか考えると、どれだけ作業が短縮できるかわかるでしょう。
これはあくまで一例で、普段Photoshopを使うアーティストがアクションで解決しない単純作業で苦しんでいることはたくさんあります。
筆者はまだPhotoshopのツールに関しては未熟な部分もあります。でも、ツールを作成して周りのアーティストに使ってもらい、新たな要望をこなしつつツールもスクリプト知識も高めている途上です。
元々JavaScriptやHTMLの知識に乏しかった筆者でも、このようにPhotoshopのツールが作れたので、作ろうと思えば意外と簡単に作れるのではないでしょうか。
次回は......Pythonを使ってPhotoshopのツールを作ってみる!
さて次回ですが......
Photoshopのスクリプトの記事は全3回と予告したな......あれは嘘だ!
筆者のTAチームでメインに使っているスクリプトはPythonです。最近は社内向けPhotoshopツールにおいてPythonでの作成を試みているのですが、この試みを基に、次回はPhotoshopのツール開発の話・番外編として「PythonによるPhotoshop操作」を紹介します。
ここまでのお話は主にJSXを使ったツール開発のお話でしたが、これらを踏まえた上で次回のPythonでのツール開発と比較すると、その有効性がわかりやすいと思います。
ではまた次回。今宵はここまでに致しとうござりまする。
Profile.
-
中林伸和 / Nobukazu Nakabayashi(COYOTE 3DCG STUDIO)
ゲーム開発会社にてマップデザイン、レベルデザイン、エフェクト作成など様々な経験をする中でMELと出会い、DCCツール作成の面白さに目覚めてテクニカルアーティストに転身。現在は株式会社クリーク・アンド・リバー社 COYOTE 3DCG STUDIOにて、Mayaに限らずPhotoshopやMotionBulderのグラフィックソフト、Unityなどのゲームエンジンと言語にとらわれずユーザーフレンドリーのツール開発に従事