執筆者: 米
最終更新: 2021/11/29
恵まれたソフト(illustrator)で初めて作ったカスみたいなサムネ
きっかけはBlenderのアドオン開発環境を整えようとしたことであった。ただ普段の制作環境とアドオン開発環境を分けたかっただけなのだ。
しかし自分は数行のバッチファイルを書く数分をケチるために最終的に数時間を費やしてしまったのだ。
まず、基本的にWindowsにおいてBlenderの設定ファイルは初回起動時にC:\Users\(ユーザー名)\AppData\Roaming\Blender Foundation\Blender\(バージョン名)
に作られる。
詳しい説明は省くが、そこから
config
datafile
scripts
へと派生する。そして次回起動時からそのフォルダにあるファイルの設定を元に新規ファイルが作られる。
今回大事なのはconfig
とscripts
である。このフォルダにスタートアップファイル、プリファレンスファイル、プリファレンスでインストールしたアドオン等が含まれているのだ。
単にデスクトップにあるBlenderアイコンをダブルクリックするだけでは、この一つの設定しか使えない。つまり制作環境とアドオン開発環境を分けることができない。
何か方法がないか探してたところ、「環境設定を複数用意する方法・PC/バージョン間で設定を共有する方法【Blender】」という記事を見つけ、
方法3.別設定で開く.batファイルを作る
を参考にしてバッチファイルを作った。これで一件落着のはずであった。
だが、自分はこう思った。「新しい環境を作るのにいちいちフォルダを作ってちまちまとパスをコピーするのも面倒だし、プログラムを書いてコンピューターに作らせればいいじゃん」
そのせいで苦しむ羽目になったのである。
恥ずかしながら今まで自分はコマンドプロンプトしか使ってなかったので、Windows PowerShellをちゃんと勉強したいという思いがあった(PowerShellのほうがいろいろ出来そうだし)。
そして以下のようなメモをとった。(実際は色々調べながら書いてるので、最初からガチガチに固めて書いたわけじゃない)
これを元にPowerShellスクリプトを書いていく。ちなみに自分はVisual Studio Codeを使っている。
まず、スクリプトが引数を受け取るためにはParam()
という関数を使えばいいらしいので、
Param($name_pref, $name_bat, $version_blender)
と書き、blender_add_env.ps1
として保存した。しかしながら、ここで「変数の型どうなってんねん」と感じたので、`
$name_pref.Gettype()
$name_bat.Gettype()
$version_blender.Gettype()
と追記し、ターミナルで.\blender_add_env hoge hogehoge 3.0
と実行すると、
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True String System.Object
True True Double System.ValueType
と表示される。$version_belnder
がDouble型になってるのがどうも嫌だ。2.93などの中途半端な数字ならまだしも、Blenderのバージョンはもうすぐ3.0になる。このままだと3.0の0の部分は無視されてしまう。それに事故を防ぐために引数は全部String型で受け取りたい。なので
Param(
[string]$name_pref,
[string]$name_bat,
[string]$version_blender
)
と書き直した。ついでに(個人的に)見やすくした。
は簡単なので、さっさと調べて
New-Item $name_pref -ItemType Directory
Set-Location $name_pref
New-Item config, scripts -ItemType Directory
と最初は書いた。しかし「いちいち移動するの無駄じゃん、一行でいけるやろ」と感じたので、
New-Item $name_pref/config, $name_pref/scripts -ItemType Directory
と書き直し、さっきのコマンドを再び実行すると、
このように新しいフォルダーがきちんと得られたのでOKである。
次はconfigフォルダとscriptsフォルダの絶対パスを相対パスから得たい。これをするためにはConvert-Path
を使えばいいらしく、
$path_config = Convert-Path "$($name_pref)/config"
$path_scripts = Convert-Path "$($name_pref)/scripts"
$path_config
$path_scripts
と書いた。後半の2行は確認用である。例によってあのコマンドを実行すると、
となり、ちゃんと絶対パスが得られることがわかった。
とりあえず空のバッチファイルをNew-Item
で作る。
$bat_file = New-Item "$($name_bat).bat"
そしてAdd-Content
でバッチファイルに追記していく。
Add-Content $($bat_file) "set BLENDER_USER_CONFIG=$($path_config)"
Add-Content $($bat_file) "set BLENDER_USER_SCRIPTS=$($path_scripts)"
Add-Content $($bat_file) "cd C:\Program Files\Blender Foundation\Blender $($version_blender)"
Add-Content $($bat_file) "blender.exe"
これで終了である。(書くのが面倒くさくて後半投げやりになってしまった)
blender_add_env.ps1
だと長ったらしいし文法的におかしい気がするのでaddbleenv.ps1
に改名した。
中身はこんな感じである。
Param(
[string]$name_pref,
[string]$name_bat,
[string]$version_blender
)
New-Item $name_pref/config, $name_pref/scripts -ItemType Directory
$path_config = Convert-Path "$($name_pref)/config"
$path_scripts = Convert-Path "$($name_pref)/scripts"
$bat_file = New-Item "$($name_bat).bat"
Add-Content $($bat_file) "set BLENDER_USER_CONFIG=$($path_config)"
Add-Content $($bat_file) "set BLENDER_USER_SCRIPTS=$($path_scripts)"
Add-Content $($bat_file) "cd C:\Program Files\Blender Foundation\Blender $($version_blender)"
Add-Content $($bat_file) "blender.exe"
これでやっと終わりだと思った。現実はそうではなかった。
結論から言うと、さらにこのaddbleenv.ps1
を実行するバッチファイルを作らなければならなかった。
というわけで、
powershell C:\z_ps_script\addbleenv.ps1 %1 %2 %3
という内容のaddbleenv.bat
を書いた。(説明すっとばしますごめんなさい)
これをSystem32にぶち込み、エクスプローラーでaddbleenv hoge hogehoge 2.93
と実行してみると
!
!!
!!!
!!!!
!!!!!
で、出来てる~!
~完~
この人が書いた記事