これは Mayaa Advent Calendar 2015 の11日目です。昨日は「Spring BootのテンプレートエンジンにMayaaを使おうとしてみてできなかった #javaee #mayaa」でした。
ブログを10日間書いてきましたが、そろそろネタがきつくなってきました。でも、あと2日書けば、折り返し地点!マラソンだと思って頑張ります。
昨日のリベンジ、必ずします!
昨日は残念な結果となってしまい申し訳ありません。その後、何人かの詳しい方々にアドバイスを頂きました。
https://twitter.com/megascus/status/674901495137996800
https://twitter.com/making/status/674913610662064128
https://twitter.com/tty_twt/status/675299564476235776
https://twitter.com/tty_twt/status/675299730365145088
必ず25日までの間にリベンジ記事を書来ます!
Mayaa拡張ポイントベスト5
さて、今日のネタはMayaaの拡張ポイントです。
Mayaaは非常に柔軟に作られています。うまく使うと、テンプレートエンジンをオレオレ言語並みに拡張して独自の世界を作れてしまいます。
そこで、今日はその中でもよく使う拡張ポイントを紹介します。
第5位 PathAdjuster
これは5日目に紹介しました。aタグのhref属性やimgタグのsrc属性に書いたパスを自動調整することができます。
これによって、いちいちm:idを作らず共通リンクを作ることができたりしますし、タイムスタンプをパラメータに追加したりできます。
拡張ポイントとしては簡単な方なので、Mayaaに慣れるために最初に拡張してみると良いと思います。
第4位 CompiledScript / ScriptEnvironment
MayaaはJavaScriptエンジンRhinoと標準で連携しています。その部分を司っているのがこの部分で、ここを拡張すると、例えばRhino以外のスクリプトエンジンと連携することもできます。逆に、重いスクリプトエンジンを回避してJavaコードに直接連結して、高速化を図ったりもします。
ScriptEnvironmentは、例えば、スクリプト実行中にエラーが起きたらログを取る、画面を破綻させないようにする、エラーの行番号をポップアップさせるというような細工をするときの拡張ポイントです。地味ですが結構大事な拡張箇所です。
第3位 SourceDescriptor
テンプレートやMayaaファイルのデータそのものをラップしたオブジェクトです。パスとマッピングして、ファイルシステムやURL、あるいは別のストレージから、マークアップファイルを取得する部分を司ります。
ここを拡張することによって、テンプレートを置く場所を拡張したり、ファイルシステムを使えない環境でDBにテンプレートを拡張するといったことが実現できます。
ただ、スピード勝負であまり重たいところにデータを置くと、Mayaaが相当もっさりエンジンになってしまうので注意が必要です。
第2位 Processor
m:ifや、m:writeなどのプロセッサーは独自に作成することができます。Mayaaでサイトを作ってると、「いつも同じようなMayaaファイル記述するなあー」と思うことがあります。
また、ifプロセッサーを改造して、「テンプレート上に m:NOT="" という属性を追加したら、逆条件になる」というようなものを作ったりできます。
Processorをマスターすると、Mayaaを相当強力に使いこなせます。
第1位 InjectionResolver
堂々の1位は、InjectionResolverです!
これは、テンプレートとプロセッサーをひも付けする部分で、これをうまく使うと、Mayaaファイルを使わないテンプレートエンジンや、MayaaファイルがXMLなのは嫌だからJSONにするというようなこともできてしまいます。
ここまで来ると、もうMayaaというより、独自テンプレートエンジンと言えるでしょう。