実習日誌(一)
さて、今日は実習の三日目ですが、今のところ以前に想像していたのとはかなり違うようです。
以前、ここのネットワーク環境と回線速度について愚痴ったことがあります:寮には全くネットがなく、授業を受ける場所の回線速度もあまり良くありません。このような状況に直面して、自分がかなりのネット依存症であることに突然気づかされました。しかし、個人的にはこれは問題ないと思っています。ネットワークは完全に人々の心を啓発する「カラ」となり得るものであり、それによって私たちの種全体が高度に発達した存在へと昇華する可能性を秘めているのです……。
本題に戻りましょう。ここ二日間はSpring frameworkを学んでいて、とても新鮮な感覚があります。初心者の私は、Javaのコードがこれほどまでにエレガントになり得るのかと、思わず感嘆してしまいました。
このような感嘆は、私がいかに未熟であるかを露呈しています。よく考えてみれば、どんな言語でもエレガントに書くことは可能です。エレガントさとは、緻密な思考の後に丹念に設計された知恵の結晶であり、それを記述する媒体(言語)とはあまり関係がないように思えます。
RESTful
現段階でSpringフレームワークを使用する主な目的はWebアプリケーションの構築です。公式サイトのチュートリアルを一通り進める中で、RESTfulアーキテクチャの利点についても復習することができました。まとめると以下のようになります:
- フロントエンドとバックエンドの分離:このアーキテクチャはリソース指向であるため、レスポンスとしてHTMLページ全体ではなく、フォーマットされたテキスト(多くの場合JSON?)が返されます。これにより、フロントエンドとバックエンドを完全に分離することが可能になります。
- 表現の明確さ:RESTfulはHTTPプロトコルの特性を十分に活用しています。
&で区切られた長いQueryStringではなく、URIを使用してリソースを要求します。これは、HTTP(ハイパーテキスト転送プロトコル)を単なる低レベルの転送プロトコルとして扱い、上層で適当に扱うのではなく、その設計思想を体現しています。リソースに対するCRUD操作を厳密に定義し、HTTP verb(メソッド)を利用して実現しています。
私自身も、古いWeb開発の考え方から抜け出したばかりで、理解はまだ十分に深くないかもしれません。誤りなどございましたら、ご指摘いただければ幸いです。
WebフレームワークとしてのSpring
大学二年生のJava Webコースの最終課題からちょうど一年が経ち、いくつかのWeb開発技術に触れてきました。初めてアプリケーションをサーバーにデプロイし、携帯電話からアクセスして成功したときの興奮した気持ちを、今でも思い出すことができます :) 好奇心を持ち、その好奇心に従って未知の領域を開拓していくことは、確かに素晴らしいことです。
JavaのJSPからPythonのDjango、そしてFlaskへと渡り歩き、最終的にJavaに戻ってきて、私はSpringに出会いました。
JSPは正真正銘の「古代」技術で、使っていて本当に煩雑でした。特に開発の後期に特定の機能のためにあちこち修正を加えるときには、Servlet全体が巨大で冗長な悪魔のようになってしまいます。また、JavaBeanがデータベース接続やページネーションを要求される場面では、エレガントに実装することなど夢のまた夢でした。高再利用性を体現するはずのJSPページも、様々な<%if(...)%>文によって見るも無残な姿に変わり果て、自分自身の人生を疑うようなコードを書いてしまうことさえありました。これらの大罪を犯した自分を反省する記事を、いずれ書くつもりです。話を戻すと、JSPでRESTfulスタイルのWebサービスをどう書けばいいのか、私にはさっぱりわかりませんでした。
Pythonの世界に来ると、物事は明快になりました。Djangoの強力さであれ、Flaskの簡潔明瞭さであれ、最も基礎的で開拓者的な技術とは異なり、フレームワークに関してははるかに簡明な印象を受けます。もし開発者を階層分けするとしたら、第一層は技術の開拓者、最下層はアプリケーションの利用者(完全な「持ってくる主義」の開発者)だとすると、私はフレームワーク(framework)の開発者は第二層に位置すると考えています。彼らは、ある一般的な技術の開発プロセスを総括し、その中から最も頻繁に使われる、最も基本的で、最も本質的な部分を抽出して再利用可能なコンポーネントとしてまとめ上げることで、優れたフレームワークを作り上げます。そのため、優れたフレームワークはすべて、実際のアプリケーションプロジェクトから切り離されて生まれてきたのです。Djangoもそうだし、Springもそうです。
しかし、結局のところ、SpringはFlaskにもう少し似ているように感じます。どちらも非常に軽量で、ほとんど何の制約も与えません。もしかすると、Flaskの開発者はSpringから何らかのインスピレーションを得たのかもしれません。
興味深い点 — 記号@について
学習過程で、SpringのコントローラールーティングがJavaの言語機能である「アノテーション」によって実現されていることに気づきました。この機能については、さらに学ぶ必要があります。面白いことに、Flaskでも同様の形式が使われています。ただし、Pythonでは@はデコレータと呼ばれ、関数をラップするためのシンタックスシュガーです。いくつかの資料を読んだ限りでは、この機能は確かにPythonがJavaから借用したものの、より複雑な機能を持つ言語機能のようです。
したがって、もともとFlaskを高く評価していた私は、この点を見て思わずSpringへの好感度が大きく上がりました。
まとめ
要するに、私のレベルはまだまだ未熟なので、SpringのIoCやDIといったコア機能については触れませんでした。しかし、Springは、一見老朽化したかに見えるJavaという言語がなぜ今なお衰えを知らないのかを私に気づかせてくれ、同時にJavaへの好感度も大きく上げてくれました。
もっと多くのことを学べることを楽しみにしています。本当にExcitingです。
最後は、古典的な日誌の結びの言葉で締めくくりましょう:「今日は本当に有意義な一日でした。」