トップ画像
コンピュータ弱者、初めてのシェルスクリプト

執筆者: 米

最終更新: 2021/11/29

恵まれたソフト(illustrator)で初めて作ったカスみたいなサムネ

そうだ、シェルスクリプト作ろう。

きっかけはBlenderのアドオン開発環境を整えようとしたことであった。ただ普段の制作環境とアドオン開発環境を分けたかっただけなのだ。
しかし自分は数行のバッチファイルを書く数分をケチるために最終的に数時間を費やしてしまったのだ。

Blenderの設定はどこにある?

まず、基本的にWindowsにおいてBlenderの設定ファイルは初回起動時にC:\Users\(ユーザー名)\AppData\Roaming\Blender Foundation\Blender\(バージョン名)に作られる。
詳しい説明は省くが、そこから

  • config
  • datafile
  • scripts

へと派生する。そして次回起動時からそのフォルダにあるファイルの設定を元に新規ファイルが作られる。
今回大事なのはconfigscriptsである。このフォルダにスタートアップファイル、プリファレンスファイル、プリファレンスでインストールしたアドオン等が含まれているのだ。
単にデスクトップにある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
)

と書き直した。ついでに(個人的に)見やすくした。

  • 受け取ったフォルダの名前で現在の階層に新たなフォルダを作る
  • 新しいフォルダに移動する
  • configとscriptsのフォルダを作る

は簡単なので、さっさと調べて

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と実行してみると



!!

!!!

!!!!

!!!!!

で、出来てる~!





あとがき

  • はじめてじぶんのためにプログラムをかけたのでうれしかった
  • プログラムのかきかたぐだぐだ
  • てすともぐだぐだ
  • ぶんしょうもぐだぐだ
  • よくかんがえたらがぞうむだなのある こーどぶろっくでかけや
  • すいこうだるい
  • こんなくだらないプログラムをかくのにふつかもかかった
  • きちょうなさくひんせいさくじいかんをむだにした
  • けっかんはしらん

おまけ

取得に失敗しました

2019年度 入部