AKAGI Rails

鉄道模型シミュレーターで遊んでいたはずが、気づいたらPythonなども。

Pythonは空をも飛べる VRMNXは?

<注意: VRM NXは開発途上の段階であり,βテストの経過に伴って仕様変更の可能性がある。本エントリに示す情報は執筆時点(v6.0.0.25)でのものである。> (2019/1/20 現在 Ver. 6.0.0.25)

VRMNXのPythonエンジンでは,カレント作業ディレクトリ(os.getcwd()で取得できる)と,モジュールを検索する場所sys.path)はどのようになっているのか,次のコードで調べてみた。

import vrmapi
import os, sys

vrmapi.LOG('[CWD] ', os.getcwd())
vrmapi.LOG('[PATH]')
for p in sys.path:
    vrmapi.LOG(p)

結果,

  • カレント作業ディレクトリは,レイアウトを保存しているフォルダ
  • モジュール検索パスは,VRMNXインストールフォルダ/python/Lib

であることがわかった。

さらに,sys.path.append(os.getcwd())で,レイアウトを保存している場所をモジュール検索パスに追加できることも分かった。つまり,これ以降では,レイアウトファイルと同じディレクトリに保存してあるpythonスクリプトをimportしてVRMNXで利用できる。

VRMNXのスクリプトエディタでPythonのコードを書くのは結構苦痛(インデントはスペースキー連打しなきゃいけないし,色分けもないし,行番号もわからない)であるが,クラス定義などの長ったらしい部分をmymodule.pyのように名前をつけてレイアウトと同じディレクトリに置いておけば,import mymoduleでVRMNXレイアウトに取り込むことができる。

モジュールの再利用もカンタンだし,Webでレイアウトを配布するときも,レイアウトファイルと一緒に圧縮してやればよい。

sys.path.append(os.getcwd())をしなくても,VRMNXのインストールフォルダ以下のpython/Libに自作したモジュールを入れておく術もあるかもしれない。しかし,こんな方法はそもそも気が引けるし,モジュール側に非互換な変更が生じたり,作者が異なる同名のモジュールが書かれたとしたら重複するとまずい。Webで配布するときもインストラクションが面倒臭そうである。やらないほうが賢明だ。

Python

「飛んでんじゃん!どうやって?」「Python!」

「昨晩覚えたんだ!なんでもシンプルだよ!
Hello Worldなんか,print "Hello, World!"だけだし!」

「ダイナミックタイピング?ホワイトスペース?さっぱりだね。」
「こっちへおいでよ!プログラミングがもう一度楽しくなるよ!きれいさっぱり新しい世界さ!」
「で,どうやって飛んでるのさ?」

import antigravityって打ち込んだだけ。」
「それだけ?」
「くすり棚の中身を全部見て比べてみたけど,こりゃあPythonだと思うね。」