JadeでXAMLとMSBuild用のプロジェクトファイルをつくってビルドする
昨夜、ふと「そういえばJadeってあったよな…」と思い出してしまいまして、きっとXMLをつくることもできるだろうと思い立ってやってみました。 結論から言うと、できなくはありません。
node.jsのパッケージで、単独のコマンドラインツールでもあります。
テンプレートエンジンでして、ruby製のhamlなんかと同じ類でしょうか。 node.jsを勉強するときに合わせて少しかじっていました。 なんとなくdoctypeでXMLもいけたような気がしていたのでHTMLをつくるときのようにするといい感じになるんじゃないかと。 つまりはXAMLを簡単につくることができるかな?と思った次第です。 なにせ、タグをタイプするのがダルいですし、Visual Studioを起動しなくても書くことができるのでいいですよね(注意:インテリセンスが効いたほうが絶対いいです!)
Jadeではdoctypeの指定に「xml」とすればいいです。 それだけで、あの長いドキュメントタイプの指定にしてくれます。
あとは何事もなかったかのようにタグを改行しながらタイプしていきます。 XAMLを考えていますので、画面になるもののルート要素はWindowです。 また、XAMLでは名前空間に指定のものがありますのでそれをタグの属性として指定していきます。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation")
タイトルや画面のサイズ指定もするなら、同じようにカンマで区切って入れていきます。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation",Title="My First Jade XAML",Width="800",Height="600")
最後にHello World的なことをしたいのでテキストブロックを入れます。 最終的には以下のようになりました。
doctype xml Window(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation",Title="My First Jade XAML",Width="800",Height="600") TextBlock(name="txt") Hello
これを文字コードUTF-8で「main.jade」という名前のファイルに保存します。
JadeでXMLに変換したいのでまずはインストールしておきます。 node.jsはインストール済みとして、次のようにしましょう。
もうこれで「jade」コマンドが使えるはずです。 PowerShellならGet-Commandコマンドレットで確認できると思います。
ではjadeコマンドを使いましょう。 ここで、ひとつ注意が必要です。 次のようにそのまま実行してしまうと…
「rendered main.html」と表示されると思います。 そうです、デフォルトではHTMLを作成するようになっているからです。
では名前を付ければいいのでは?と思うのですが「-n」あるいは「--name」は関係がありません。さらに、クライアントサイドだからとして「-c」や「--client」もつけてはだめです。なんとJavaScriptに変換されてしまいます!
XMLを出力するJavaScriptになるのでXAMLではなくなりますのでだめですね。
どうするかというと拡張子を「-E」オプションを付けるだけでした。
次はビルドできるようにします。 同じ要領でjadeを書いていきます。
今回はアプリケーション定義のXAMLを用意してXAMLだけでGUIをつくります。 まずアプリケーション定義の「app.jade」です。 同じように「-E」オプションで「xaml」と指定して「app.xaml」をつくります。
doctype xml Application(xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation", StartupUri="main.xaml")
Application要素しかいらないので簡単ですね。
次にプロジェクトファイルをつくります。 こちらは適当に「jadexaml.jade」と名前を付けますが「-E」オプションには「proj」を指定します。
doctype xml Project(xmlns="http://schemas.microsoft.com/developer/msbuild/2003", DefaultTargets="Build") PropertyGroup AssemblyName jadexaml OutputType winexe OutputPath .\ ItemGroup ApplicationDefinition(Include="app.xaml") Page(Include="main.xaml") Reference(Include="System") Reference(Include="WindowsBase") Reference(Include="PresentationCore") Reference(Include="PresentationFramework") Import(Project="$(MSBuildBinPath)\\Microsoft.CSharp.targets")
jade jadexaml.jade -E proj
うまくいっていれば「jadexaml.proj」も完成しているはずです。 それでは「MSBuild」といきましょう。
もしもパスが通っていない(コマンドが見つからない)場合は環境変数PATHにいれましょう。 PowerShellであれば以下のように。
[System.Environment]::SetEnvironmentVariables("PATH","$env:PATH;MSBuildがあるパス")
パスが通ったか確認するならGet-Commandで見てみましょう。
ビルドもうまくいったら同じフォルダに「jadexaml.exe」が爆誕しているはずです。