この記事は以下のURLに引っ越しました。
http://www.maid-cafe.work/2015/34
このブログの内容は個人の見解であり、所属する組織の公式見解ではありません
この記事は以下のURLに引っ越しました。
http://www.maid-cafe.work/2015/34
これは Mayaa Advent Calendar 2015 の12日目です。昨日は「Mayaaの拡張ポイントベスト5」でした。
Spring Boot再挑戦記事は準備中です。今日はまだ間に合わないので、まったりトークでつなぎます!
(Mayaaアドベントカレンダーは毎日参加者を募集しています)
さて、僕の発表スライドでこんな図を出したことがあります。
釣りっぽい画像ではないかと思われているかもしれませんので、今日は実際問題どうなのかを書こうと思います。
ただし、僕、エンジニア目線です。
僕はシステム会社の一プログラマーで、ECサイトを作るときは、デザイナーさんがHTMLで書いたモックを提供してくれるので、それをJSPに埋め込む仕事をしていました。まだ大学生のアルバイトでプログラマーをしていましたが、業務と言ったらこの業務が多かったです。
当時tableレイアウト全盛なので、気が遠くなるほどネストしたtableタグやスペーサー画像を駆使したレイアウトは慣れてます。
こういう単純業務の存在は、大学生で未経験の僕にも仕事ができたチャンスであったとも言えたかもしれません。しかし、いつまでもこんなことをしているのかと思うと残念な気持ちでした。
デザイナーさんは、会社にいたりいなかったりしました。いる時もいない時も、話したことはほとんどありません。SEの方は話すのかもしれませんが、末端のプログラマーとなると、まあ、そんなものでしょう。
そんなわけで、テンプレートエンジンが必要だとなりまして、作ります。作ってる時は、JSPからの単純移植なので、まだデザイナーさんとは話しません。
一通り移植できたところで、当時社内に一人だけいたデザイナーさんが呼び出されました。
「これは今うちではいしがみくんしか使えない技術なんだけど、これからはきみがこの技術を使ってサイトを作っていくことになるから、二人で使いやすいように整理してほしい」
という上司の言葉で、その日から1ヶ月ほどデザイナーさんと席を並べて、m:idの命名規則などの調整をする日が始まりました。
2人で全体を見渡してみると、m:idを組み込んだ人によって、名前付けのくせにばらつきがあることでした。結果として一番多く書いた僕のスタイルへ統一する方針になりました。
Excelスプレッドシートを使って旧IDから新IDにマッピング表を作って、これをもとに変換する一回限りのスクリプトを作って変換を行いました。(一撃で全部のmayaaファイルとxhtmlを書き換えるやつです。今思うとすごい勇ましいスクリプトですね(^^;)
その一方で今後作られるm:idは規則を守るようにルールも社内公開しました。その後、誰かが規則破りのm:idを作ったりすると、僕が気づくよりも前にデザイナーさんが怒ってくれたりします。
「いしがみくんのm:idが一番わかりやすいので、いしがみくんのに合わせてください!」
(僕がきちんと指導できなかったのが問題ですが、そんなこと言われたらちょっと嬉しかった!)
デザイナーさんとしては初めて聞くシステムの言葉もあったでしょう。これは何か、これはどういう意味か、色々苦労されたようで、システム用語をなんとか分かるように説明する必要がありました。
この作業の中で、HTMLページの中で、デザインとはどの部分かという感覚が身につきました。例えばinput type="hidden"タグはデザインではないです。
デザイナーさんが優秀だったからかもしれませんが、m:id="なになに"という書式は抵抗なく受け入れてくれました。一方mayaaファイルはコメント一つ変えることも怖くてできないようでした。その結果、m:idの説明書一覧表が大変重要なポイントであり、ここを死守することが連携を成功させるのに必須であることがわかりました。
最近はJavaScriptを使いこなすデザイナーさんが増えましたが、当時はjQuery一般的ではなかったので、デザイナーさんはJavaScriptを使えません。一方、僕はJavaScriptの文法はわかりますが、これを使って作れるウィジットにどんなものがあるのかは詳しくありません。
結局、いつも出だしはデザイナーさんが色々なところから一生懸命集めてきたスクリプトを組み合わせて、うまくいかない、僕が呼ばれてデバッグして解決する。。。ということの繰り返しでした。その過程で
「プログラマーすごい!」
などとも言われました。まじですか!仕事とはいえ、女性の方に、技術的なことで「すごい」なんて言われたことありません><
僕からしたら、こんな色んな部品を持ってきてサイトを作れるデザイナーってすごいと思いますよ!
デザイナーさんと密に連携したのは初めの半年〜1年くらいでした。そこから先はお互いノウハウが蓄積したこともあって、ほとんど話さずに業務ができるようになってきました。
たまにJSPの案件の時などに、デザイナーさんの席に僕が足を運んで
「ここをこんな風にしたいのだけど、どんなタグの打ち方をするべきか?あと、ここにこういうアイコンを作って欲しいのだけどどこかに素材ありますか?なければお願いできますか?」
と言って、作業をしたりするので、JSPの方がむしろ共同作業をしているようです。
というか、こんな無理なお願いをしながらスイスイアイコンとか作ってくれるデザイナーってマジ神!
さらに組織が大きくなると、デザインチームはデザイナーとコーダー、フロントエンドエンジニアに分かれ、開発はSEとPMとプログラマー、プログラマーも分担制となり。。。こうなってくると、もうテンプレートエンジン云々というより、もっと上位レイヤーの体制が必要になってきます。
JavaScriptの技術も最近の若い子の方がむしろできたりするのですが、ありがたいことに、未だに僕のところに、デザインチームの方々が質問に来てくれます。
そこでは、単純にスクリプティングのことよりも、システム上、これはできるのか?お客様からこう言われ、SEはこう言っているけどどうするべきか?という、全体的なことが多いようです。
なるほど、これはまだ若いエンジニアにはできない。
これまで、いろんなデザイナーさんの質問に答えてきた経験から、ある傾向があることに気づきました。
(これは一方的な視点なので間違っていたら申し訳ないですが。)
デザイナーさんは、デザインという、結果からスタートして、手段へブレークダウンしていきます。エンジニアは技術という手段からスタートして結果という目的へ向かっていきます。
その結果、何が起こるかというと、デザイナーさんはものすごい色んなことができる一方、罠にハマるとどうしたら良いのかわからなくなってしまうことが多いように見えます。
一方エンジニア肌の人は、問題ごとを細かく切り分け、デバッグし、テストし、解決することが得意です。そのため、僕はjQueryなんとかを使って画面の表現を作ることはできませんし、デザイナーさんから質問を受けるライブラリはいつも初めて見るものばかりでしたが、最終的に全て解決することができたし、時にはライブラリにパッチを作ってGitHubでfork/pushすることもありました。
これがデザイナーとエンジニアの相性が良いと言われる所以なのかなとも思います。
一人で両方できるのがベストなのかもしれません。
しかし、一人だけでは大きな仕事はできませんから、複数人でコラボしたほうが断然大きな仕事ができます。それにあたって、デザイナーとエンジニアというのは、良い役割分担だと思います。
両者の連携を支えるのに、テンプレートエンジンはまだまだ重要だと思いますし、そういう方向性で今後も進化し続けなければならないと思います。
これは 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の拡張ポイントです。
Mayaaは非常に柔軟に作られています。うまく使うと、テンプレートエンジンをオレオレ言語並みに拡張して独自の世界を作れてしまいます。
そこで、今日はその中でもよく使う拡張ポイントを紹介します。
これは5日目に紹介しました。aタグのhref属性やimgタグのsrc属性に書いたパスを自動調整することができます。
これによって、いちいちm:idを作らず共通リンクを作ることができたりしますし、タイムスタンプをパラメータに追加したりできます。
拡張ポイントとしては簡単な方なので、Mayaaに慣れるために最初に拡張してみると良いと思います。
MayaaはJavaScriptエンジンRhinoと標準で連携しています。その部分を司っているのがこの部分で、ここを拡張すると、例えばRhino以外のスクリプトエンジンと連携することもできます。逆に、重いスクリプトエンジンを回避してJavaコードに直接連結して、高速化を図ったりもします。
ScriptEnvironmentは、例えば、スクリプト実行中にエラーが起きたらログを取る、画面を破綻させないようにする、エラーの行番号をポップアップさせるというような細工をするときの拡張ポイントです。地味ですが結構大事な拡張箇所です。
テンプレートやMayaaファイルのデータそのものをラップしたオブジェクトです。パスとマッピングして、ファイルシステムやURL、あるいは別のストレージから、マークアップファイルを取得する部分を司ります。
ここを拡張することによって、テンプレートを置く場所を拡張したり、ファイルシステムを使えない環境でDBにテンプレートを拡張するといったことが実現できます。
ただ、スピード勝負であまり重たいところにデータを置くと、Mayaaが相当もっさりエンジンになってしまうので注意が必要です。
m:ifや、m:writeなどのプロセッサーは独自に作成することができます。Mayaaでサイトを作ってると、「いつも同じようなMayaaファイル記述するなあー」と思うことがあります。
また、ifプロセッサーを改造して、「テンプレート上に m:NOT="" という属性を追加したら、逆条件になる」というようなものを作ったりできます。
Processorをマスターすると、Mayaaを相当強力に使いこなせます。
堂々の1位は、InjectionResolverです!
これは、テンプレートとプロセッサーをひも付けする部分で、これをうまく使うと、Mayaaファイルを使わないテンプレートエンジンや、MayaaファイルがXMLなのは嫌だからJSONにするというようなこともできてしまいます。
ここまで来ると、もうMayaaというより、独自テンプレートエンジンと言えるでしょう。