エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

やっぱりJSPはやめた方がいい

やっぱりJSPは無理。。

最近、UI/UXに強い興味を持つようになったものです。
現場でJSPを使ってゴリゴリ画面書いています。
やっぱりJSPとは付き合えない。
いろいろな問題がある。いろいろ考えたけど、有効な解決策が思いつかない。
以下、自分が思う問題点。

  1. Webデザイナーとの分業がめんどくさい
  2. HTML→JSPの変換が面倒くさい
  3. モックとして使用できない

Webデザイナーとの分業がめんどくさい

これは現場での話。
いつも画面はデザイナーに発注して納品してもらっているのだが、納品されてくるのは、HTML+JS+CSS。 当然、JSPで納品される筈はない。なぜならJSPは、そのままでは見れないので、画面を見ながら修正ができないから。
JSPで納品してもらうってのも考えたけど、手間しか生まない+デザイナーに過剰なスキルを要求するので、単価上がりそう。。。
納品されたあとは、それをJSPにエンジニアが変更する。
その作業で、デザイナーの意図をくみ取れずに、デザインを変えてしまうことがある。
(はい、自分のことです。。。)

せっかく画面表示できるHTMLを潰して新しくJSPを作ることは、デザイナーの成果物を壊すことに等しい。
分業のメリットを殺している。
分業の素晴らしさは、経済の歴史が証明してくれている。
適材適所、餅は餅屋などの諺、経済史に習って、分業は推し進めるべき。
エンジニアにとっても、デザイナーの仕事をとっているようで心苦しい。
決して、HTML→JSPの変換がめんどくせぇ~。JSPで納品しろや!とか思っていないよ!(たぶん)

オマケ:分業のメリット・デメリット

  • メリット
    1. 保持しているスキルを存分に活かせる
    2. スキル活用機会が増えるので、習熟度の上がりが早い
    3. 余分なことを考えなくていいので、経済的(思考的な面で)
  • デメリット
    1. 専門外の知識の低下
    2. エンジニア同士の繋がりが遠くなり、問題の共有が難しくなる

分業化を最初に述べたのはアダム・スミス国富論らしいです。 まだ、読んだ事無いですが、最近の考えることと非常に近しいことが書いてあるっぽいので、参考にしてみようと思います。

国富論 1 (岩波文庫 白105-1)

国富論 1 (岩波文庫 白105-1)

HTML→JSPの変換が面倒くさい

HTML→JSPの変換は苦行。
変換したことがある人なら誰しも思うはず。
JSPの意味不な呪文を書いたり、インデントが膨大になったり、意味不明な例外が実行時に起こったり、実行してみて初めて間違いに気づいたりして、非常に非生産的。
変換バッチも考えたけど、結局読みにくいJSPが出来上がり、修正コストが変わらないので、あまり解決になってない。
やるならJSPを殺す覚悟がいる。
創造の前には破壊が必要!破壊することを恐れる心があるなら、そんないらない心も壊せっ!(コードギアス的な名言のつもり)

モックとして使用できない

これは全員困るハズ。
とくにWebディレクター*1が一番困ると思う。
最終的な成果物の責任はディレクターが持つので、画面は常に見える状態にして、画面をもとに軌道修正や指示出しをしたいはず。
即座に見えない→指示が遅くなる→プロジェクト炎上→休出・残業 こうして土方エンジニアが量産されるわけであります。
自分は開発エンジニアで、最終的なツケの解消をする側です。ツケはなるべく少ないほうがいい。
そのためにも、モックは超重要です。
「納品されたHTML使えばええやん」とか思っている人は、考えがたりません。
HTML=JSPではないので、若干の誤差が必ずでます。
変換処理でさらに差が広がることもあります。(自分がそうでした。(ノω・)テヘ)
モックの重要性を認識しつつ、JSPだけではそれができないことが、非常にもどかしいと感じています。

解決方法

これは簡単。JSPを使わなければいい。以上!
JSP以外で有効そうな解決手段は、2つくらいあります。

  1. thymeleafなどのテンプレートエンジンを使う。
  2. JavaScriptFWを利用して描画処理をクライアント側にやらせる

thymeleafなどのテンプレートエンジンを使う。

問題はJSPという固有のスキルを使うことです。
HTMLベースでのテンプレートエンジンを使うことで、すべての問題が解決できます。
ここでミソとなるのが、HTMLベースであること。
変な独自言語が入ると、分業が困難化して一気に作業効率が下がります。
モック表示できることが一番重要です。
知っている範囲内では、thymeleafがベストだと思います。

JavaScriptFWを利用して描画処理をクライアント側にやらせる

データのバインディングJavaScriptにやらせてしまう方法です。
Webデザイナーは、動きのある画面を作るためにJavaScriptを使えることが一般的です。
それを利用して、表示するデータはJavaScriptを通して取得し、画面上に出させるようにする。
そうすることで、ピュアHTMLで開発が出来るようになる。
AngularJSが非常によく出来ているので、個人で開発するときはよく使っています。

最後

個人的なWebアプリを作るときは、よくSpring+AngularJS+BootStrapの組み合わせで開発します。
AngularJSは、jQuery非依存なので、面倒なコンフリクト問題を考えなくて済むのため、非常に重宝してます。
※ここに行き着くまで結構長かった。。。

早く現場でもJSPと別れて、AngularJSとチュッチュしたいです。
だれか、現場のお偉いさんを説得してくれないものか?
自分の職位は最底辺なので、取り合ってもらえないのが辛い。。
あと、権力不足で説明しても説得力の面で押しに欠ける。
権力の力は偉大です。
政治的な問題から距離をおいていましたが、コレをきっかに職位の上昇を目指します。

Webデザイナーリスペクト

Webデザイナーは、下に見ていた頃がありましたが、開発におけるデザイナーの貢献度が強いことを知り、デザイナーをリスペクトするようになりました。
少し前にあった大規模な画面の刷新で、デザイナーの方と話をしましたが、優秀な方でいろいろ得ることがありました。
特にJavaScriptの設計手法がJavaと全然違っていて、今まで作ってきたJavaScriptの違和感を払拭できました。 最近思うようになりましたが、JavaエンジニアはJavaScriptをうまく使いこなせていないことが多いと思います。
Javaエンジニアは、スクリプト言語系は使いこなせない特徴が、顕著に出る気がします。(自分も含めてですが。。。)
Java8のラムダ式がうまく理解できない人が多いのも、ここから来ている気がしています。

話が脱線したので、戻します。
なるべくデザイナーの成果物は壊さず、活かして上げたいと思うようになり、今に至ります。
エンジニアは、リスペクトする心と謙虚さを常に持つべきだと通関しました。
いい話風で終わります。

*1:Webアプリを企画する人