みずー工房

- 3Z1K-Works -

【BlenderAPI】コンソールでエラーを表示する

Blenderスクリプトを開発する際に、内部で表示されるエラーだけだと心もとないので、
詳細なエラーを表示する方法を紹介します。
この方法で、print文等による日本語の出力も可能になります。



私の勝手な勘違いだったんですけど、
Windowsなら特に大掛かりなことをしなくてもできるもんだと思ってました。
ちょっと手間をかけることで、開発が格段にしやすくなります。
というかやらないといろいろ厳しいので、やってみましょう!


設定をしなかった場合

設定をしなかった場合でも、エラーが発生したかどうかは調べられます。
インフォメーションアイコンが特徴の「情報」を選択することで、表示されます。
しかし、ここで表示されるエラーのほとんどは「システムコンソールを確認しろ」とだけで、
どこの行の何が問題なのかまでは表示されません。


そこで、コンソールを立ち上げてエラー内容を確認してみましょう。
この方法は、OSごとに微妙に異なっています。


Windowsの場合

Windowsの場合は、通常のBlenderの起動でもコンソールを立ち上げることができます。
「ウィンドウ→システムコンソール切り替え」からエラーが表示されるようになります。


しかし、いざ使ってみるととんでもなく使いづらいことがわかります。
bpyをimportせずに、bpyを呼び出してエラーを吐くスクリプトを実行してみました。
コンソールを見てみると...なんと 文字化け しているのです!


この文字化けはWindowsが表示する文字コードBlenderが出力する文字コードの差異 により発生しています。
Windowsは「Shift-JIS(ANSI)」、Blenderは「UTF-8」を利用しているそうです。
さらに、このコンソールの表示文字コードは変更することができません。
簡単に言えば、このコンソールは使い物にならないってことです。


コマンドプロンプトで立ち上げる

では、どうするか。
コマンドプロンプト」を使ってBlenderを立ち上げてみましょう!
「検索」タブから「cmd」と入力して、コマンドプロンプト を立ち上げます。


まずは、 コマンドプロンプトで表示される文字コードを「UTF-8」に変更 しましょう。
「chcp 65001」と入力し、[Enter]を打って実行してください。

C:\Users\user_name> chcp 65001


次にBlender本体のある、フォルダを探します。
場所を探すのは大変ですが、例えばBlenderのショートカットがデスクトップにある場合、
右クリックで「ファイルの場所を開く(I)」を選択すると、Blender本体のあるフォルダが表示されます。
そのフォルダの中身が表示されている枠をクリックし、文字列(パス)をコピー します。
私の場合は「C:\Program Files\Blender Foundation\Blender 2.82」でした。


パスをコピーした状態で、コマンドプロンプトに戻ります。
このように「cd [コピーした内容]」というようにコマンドを打ってください。

C:\Users\user_name> cd C:\Program Files\Blender Foundation\Blender 2.82


次に「blender.exe」と打ち、実行するとBlenderが立ち上がります。
コマンドプロンプトがシステムコンソール代わりとなりますが、
このプロンプトを「×」(終了)すると、Blenderも終了するので注意です!
先ほどと同じようにスクリプトを実行しエラーを吐かせると、ちゃんと日本語で表示 されました。

C:\Users\user_name> blender.exe


バッチを作ってみる(簡略化)

これまで一連のコマンドを入力するのを毎回やるのは少し面倒です。
Windowsの場合はバッチファイルを作成するのがいいでしょう。
バッチファイルは、あらかじめ打つコマンド群を保存しておき、
そのファイルを呼び出せば、そのコマンドをすべて一度に実行
してくれるものです。


今回は、このバッチファイルをコマンドプロンプトで最初に表示されるフォルダに作成しようと思います。
私の場合は「C:\Users\user_name」が最初に表示されているので、ここにバッチファイルを作ります。
パスを通すなどをやってもよいですが、更新したりするとフォルダ名が変わり面倒そうなので今回はやりません。


テキストエディタ(メモ帳など)を開き、以下をコピーして貼り付けてください。
[Blenderがあるフォルダのパス]には、先ほどコピーしたパスと同じものを指定してください。
これを見ると、 最初の1行以外はさっき打ったコマンドと同じ です。

@echo off
chcp 65001
cd [Blenderがあるフォルダのパス]
blender.exe


ちなみに、ダブルクォーテーション(")で囲めばディレクトリを移動しなくても(cdしなくても)、
blenderを直接起動できるそうです。以下でも起動できますよ!
無知でした。。。

@echo off
chcp 65001
"[Blenderがあるフォルダのパス]\blender.exe"

最後に、保存しましょう。
名前は最後が「.bat」であれば適当でよい ので、私は「blender.bat」にしました。
場所は先ほど言ったように、私は「C:\Users\user_name」に保存します。


この設定が完了すれば、今後はコマンドプロンプトを立ち上げたすぐ、
blender.bat」と入力すれば正常なコンソールのBlenderが立ち上がります。

C:\Users\user_name> blender.bat


macOSの場合

macOSでは、ターミナルを利用してWindowsと同じようなことを実現します。
文字コードの問題などは発生しないので、Windowsよりも往生際はいいと思います。


ターミナル で立ち上げる

まず、Blenderのある場所を探しましょう。
Finderから、アプリケーションをクリックします。
右クリックのメニューから「パッケージの内容を表示」をクリック して内部に入ります。


さらに進んでいきましょう。
私の場合は「Contents→MacOSBlender」にありました。
このBlenderのアイコンを右クリックし、optionキーを長押しします。
すると、 メニューの中に「“Blender”のパス名をコピー」が現れるのでクリック してコピーします。



ターミナル を立ち上げます。
いまコピーした内容をターミナル にそのまま貼り付け、[Enter]で起動します。

$ /Applications/Blender.app/Contents/MacOS/Blender


これにより、Blenderが立ち上がります。
先ほどのエラースクリプトを実行すると、ターミナルにエラーが表示されるようになりました!


エイリアスを作ってみる(簡略化)

まあまあ長いので、もっと短く起動できるようにしてみましょう。
エイリアスというものを利用してみます。
ターミナルで「alias blender=[先ほどコピーしたパス]」のように入力します。

$ alias blender='/Applications/Blender.app/Contents/MacOS/Blender'

このようにすることで「blender」と入力するだけで立ち上げることができます。

$ blender
Linux系と異なり、macOSの場合は再起動しても設定が消えません。


Linuxの場合...

すみません。確認できる実機がないので、動作の確認はできませんが、
他OSと同じように、シェルを利用すれば同じようにできると思います。
UNIXの派生という意味で言えば、この中ではmacOSが一番参考になるのではないでしょうか。


おわりに

開発にエラーはつきものです。
ぜひエラー表示を利用して、効率をあげましょう!