Web 勉強メモ

数日ぶりの更新。今日は個人的にはあまり興味が無いけどダラダラとネットサーフィンして得たWeb開発の勉強まとめメモ。

IaaS関連

クラウドVMをいっぱい作るから管理しやすいように基盤ソフトがあって、AmazonEC2やS3みたいな機能を実装している。メジャーどころはEucalyptus、CloudStack、OpenStackの3つ。日本発のWakameってのもあるらしいがまだマイナー。3大メジャーの中ではOpenStackが参加ベンダーがいっぱいあって2011年はメジャーアップデート2回とか活動も活発なので一番有望そう。EucalyptusとCloudStackは伽藍開発な感じ。

IaaSレイヤとしてアプリケーションよりなのはストレージの部分で、AmazonS3やOpenStackのSwiftというやつが提供するのはオブジェクトストレージという機能で、JSONとかXMLとか画像とか映像とかを読み書きできるというもの。インタフェースはRESTful。オブジェクトストレージの対義語はHadoopHDFSみたいなブロックストレージというやつで、こちらは中身を単なるバイト列だと思って読み書きする。

PaaS関連

PaaSというのは要するに、いろんなプログラミング言語やWebアプリフレームワーク、DBなどを「お仕着せ」する代わりに構築導入運用といっためんどくさいところを自動でやってくれるというもの。

OSやミドルウェアの会社が出すPaaSとしては、RedHatのOpenShift、VMwareのCloudFoundry、MicrosoftのAzure、がメジャーっぽい。OracleもPaaSを提供するがこちらはプライベートクラウド向けで少し毛色が違う感じ。Webサービス系ベンダのPaaSでは、GoogleのGAE、AmazonAWSSalesForceの子会社Heroku、サイボウズのKintone、がメジャーっぽい。

Web/APサーバ

言語によらないWebサーバはApachelighttpd(通称lighty)、nginx(えんじんえっくす)など。JavaのWeb/APサーバ(サーブレットコンテナと呼ばれる)は、TomcatとJettyが有名。WebサーバよりもAPロジック部分(EJBと呼ばれる)に特化しているのが商用のWebSphere(IBM)やWebLogicOracle)、オープンソースではRedHatが商用サポートするJBOSSがメジャー。.NETはよく知らないけどIISASP.NETとかかな。

スクリプト言語系は単独で動くWebサーバもあるし、Apacheやlightyなどに乗っかる方法もいくつかある。前者は言語毎に色んなタイプのWebサーバがライブラリの形で用意されている。(PerlだとStartman,Twigy,Coronaなど。これらはPSGI仕様を実装したPlackupというツールを使って統一的に操作する。後述)。後者は、おおもとのCGIではHTTPリクエストの度にプロセスを起動して非効率なのでサーブレットPHPのようにプロセスを使いまわすapachemod_perlとかmod_rubyとかがメジャー。さらにapache依存じゃない仕様としてFastCGIがあってlightyとかnginxで使える(もちろんApacheも)。

さらに最近はサーバサイドJavascriptというのも登場してて、プロセスを使いまわすどころかスレッド一つでイベントドリブンするnode.jsがメジャー。各スクリプト言語でもイベントドリブンが注目されPerlのAnyEventみたいなライブラリがブームになったり。

Webアプリフレームワーク

JavaだとJSFを始め、MVCの火付け役となったStruts、DIを搭載したSpringが有名。DIだけの進化版としてGoogleGuiceってのもある。JavaVMで動く先進的な関数型言語ScalaではLiftがメジャー。

スクリプト言語系ではいわずと知れたRuby on Rails、それが他言語に波及してPythondjangoPerlCatalystPHPCakePHPが有名。PHPではSymfonyやZendもメジャー。

さらに、よりシンプルに書けるSinatraというフレームワークRubyで実装されてメジャーに。それがPerlのDancer、PythonのJunoに波及。

PythonDjango以外にもフレームワークがわんさかあるためWebサーバ×フレームワークの組み合わせが膨大になり、そこでWSGIというI/F仕様が登場し、それを介してWebサーバとアプリケーションが情報をやり取りするようになり、それがRubyのRake、PerlPSGI/Plack(上述のPlackupはこれを実装したもの)に波及し、各フレームワークともそれらをサポートするように。

クライアントサイド

Webのクライアント・サーバ間はサーブレットのように密接に結合したもの(そういうのを没入型Webアプリケーションと呼ぶらしい)と、RESTのように疎結合なものがある。ajaxはそのちょうど中間みたいな感じか。一時期流行したXML WebServicesは最近は廃れた感じで、マッシュアップはRESTfulマンセーな感じ。

クライアントサイドのロジックはjavascriptFLASHjavascriptフレームワークとしてはprototype.jsdojo, jQueryがメジャー。FLASHAdobeのツールやActionScriptみたいな言語を使って作るそうだが良く知らない。

話題のHTML5/CSS3は表現力がアップしており、JavascriptFLASHを持ちだすまでもなくマークアップできてしまうケースが増えていきそうな感じ。HTML5系の技術であるWebSocketやWebStorage、WebGLなどはみなクライアントサイドの強化、いいかえると、クライアントサイドのWeb化が進行しつつある。

リッチクライアントという言葉が一時期流行ったが、SilverLightやEclipseRCPは汎用的には使われない感じ。クライアントサイドのWeb化が進行してUI以外の処理は全てサーバ化されてしまうのか今後が気になるところ。

モバイル

jQuery Mobileや最近Adobeに買収されたPhoneGapとかがメジャーかも。この分野は今いちばん儲かりそうなので、Webやりたいけどどの分野に注力すべきか悩んでる人はここにコミットすると良いと思われる。

そんな感じで

なんとなく思うこととしては、インターネットすなわちWebは疎結合マンセーだなってこと。

ではまた明日。