PowerBootsについて

Joel Bennettさんが作っておられる、PowerBootsが面白いです。RubyGUIツールキット、ShoesにインスパイアされたというPowerShellGUIモジュールです。PowerBootsの概要はPowerBoots: The tutorial walkthroughが良い感じです。最初のリリースが1/5、1/16時点で5回バージョンがあがってるのでまだまだどんどん変わっていくと思いますけど。
#余談ですが、Ruby Shoesだとルビーの靴でありかわいらしい感じですが、Power Bootsはジャンピングシューズのような補助動力付き長靴のことであるらしく、Power Bootsで検索すると、面白画像が一杯出てきます。また、power shellで検索するとスピリチュアルな力を持つ貝殻の広告が沢山……。
先ほどのチュートリアルにあるサンプルコードは、もちろん、全部そのまま自分で動かすことが出来るのですが、先日のHuddled Massesのエントリ、PowerBoots - Output Graphs to Images from PowerShellのサンプル? が全然動かない……、ということで少し調べた事を書きたいと思います。
そもそも、二行目で使われている"Chart"というfunctionらしきものが、どこにも定義されていない。というか、先ほどのチュートリアルに出てきた、"Window"、"Button"、"StackPanel"なんかも、モジュールのソースを覗いてもどこにも定義されていないわけです。これらの関数はどこで定義されているかというと、モジュールのディレクトリにある、"PresentationFramework^{namespace}.Proxies.txt"ファイルに記述されたクラス名を元に、動的に生成されています。と、ここに書いてありました。で、じゃあ"Chart"とか、"DataPoints"といったクラスはどこで定義されているかというと、VisifireのDLLの中にあります。
なので、Visifireの"Download Now!"で落としてきたファイルの中から、WPFVisifire.Charts.dllを探し出して、ロードします。それから、PresentationFramework^Visifire.Charts.Proxies.txtという名前のファイルをPowerBootsのモジュールディレクトリに作り、インスタンス生成用関数を作りたいクラスの名前を列挙します。とりあえず、"Chart"、"DataSeries"、"DataPoint"辺りを列挙しておきます。それから、"Import-Module -Name PowerBoots"で、PowerBootsモジュールを読み込みます。ということで、PowerBoots自体の準備も含めて整理すると、

  1. $Env:PSMODULEPATH のどれかのディレクトリにPowerBoots自体をおく
  2. そのディレクトリにPresentationFramework^Visifire.Charts.Proxies.txtもおく
  3. ここでPowerShell起動。 # ISEじゃない、普通のPowerShellを使う場合、"-STA"オプションをつけたほうが良い?
  4. [System.Reflection.Assembly]::LoadFile('dokoka\WPFVisifire.Charts.dll')とかでアセンブリをロードする
  5. "Import-Module -Name PowerBoots"

これで、さっきまで動かなかったサンプル(の一部を改変した形で)動かすことが出来ました。


Chart -Width 300 -Height 250 -Theme Theme3 -Watermark $false -Animation $true -Series (
DataSeries -DataPoints $(
1..(Get-Random -min 3 -max 6) | ForEach-Object { DataPoint -YValue (Get-Random 100) }
)
) | Boots
実行するとこういう感じ。