C++ ときどき ごはん、わりとてぃーぶれいく☆

Wonder Rabbit Projectのなかのひとのブログ。主にC++。

community/wt 3.2.0-2 a C++ library ...

Wt という C++ のウェブフレームワークをご存知だろうか?

存在を知ったきっかけはBoostを使用しているプロジェクト - boostjp。ここのオープンソースライブラリに名前が上がっている。存在を知ってからというもの、度々興味を持ちながらもこれまで遊ぶ機会を作れずに居た。

この所、HaskellのYesodや、関連してWAI、Hakyllなどに興味を示しつつ、 http://www.WonderRabbitProject.net/ をしばらくぶりに既成のCMSではなく、といっても今回は以前にやって制作し切れずに終わった様な完全な独自仕様フレームワークを作って・・・というのでもなく、YesodなりTreeFrogなりで遊びながらてけとーなウェブサイトやサービスをでっちあげてしまおうと画策していたのでした。

が・・・、どうも Hackage が・・・またまたダウンしている(´・ω・`) 玄人の先生方は Hackage なにそれ美味しいのとか言い放っていたけど、ファッションユーザーにすらなりきれていない私にゃcabれないと割と詰んだ感。

そういうわけでHaskellでやってみようと思っていたウェブサイトのリメイクは諦めて、TLで最近話題に上がっていたTreeFrogというC++のフレームワークを検討してみた。

してみた・・・のだけど、どうもなんだか好みに合わない感じがしてどうしようかなー・・・とHackage復活しないかなー・・・とぐぬぬしていた。

結局、Hackageは昨日から未だにずっと落ちたままなのだけれど、そこでそういえば、という具合に Wt が気になっていた事を思い出した・ω・

Wt, C++ Web Toolkit - Featuresを見ると、なんだかとても良さそう。具体的には、

  • コア ライブラリ
    • 有名所のブラウザはサポートできるますよ(Firefox, Internet Explorer, Safari, Chrome, Konqueror, Opera
    • テキストブラウザもサポートしないこともないですよ(links, Lynx
    • Unix/Linux/Windowsにデプロイできるよ
    • とにかく綺麗サッパリ美しくJavaScriptなりAjaxしてやんよ
    • UNICODEだしローカライズもばっちりよ
    • 効率良くレンダリングするめっさ応答性もいいよ
    • ブラウザの戻る進む履歴、HTML5履歴、生HTMLやらAjaxによるSEOもいけてますよ
    • URL書き換えやらクッキーによる追跡やらもできますよ
    • 高性能からしょぼい組み込みまで省エネ省スペース低予算に設置可能
    • 完全にイベント駆動な非同期I/Oだよ!セッションはスレッドによらないし、コネクションもブロックされません!
  • イベントの処理
    • 近代的で型安全なシグナル/スロットなAPIを使うよ
    • キーボード、マウス、フォーカスイベントを待ち受けてイベント情報(マウスの一位置、特殊キーの状態、押されているキーなど)を受け取るよ
    • ブラウザとサーバーでフォームの値を自動同期したりとか
    • ステートレススロットであれば動的にC++からJavaScriptへ変換しちゃったりとか
    • JavaScriptをフックしてC++に投げたり
    • ドラッグ&ドロップAPIとかできます
    • 時間によるイベント、サーバー側が起点となるいわゆるプッシュ的な事も
    • 生HTML、CGI、Ajax、WebSocketsなどなどつこうております
  • ネイティブ描画システム
    • ブラウザネイティブなベクタグラフィックスのサポート(VML、SGV、HTML5CanvasもOK)
    • 任意の描画パス、クリッピング、文字列、画像、変形、影付け、とかできます
  • GUI部品
    • を見てくれよ!(およそぱっと思いつくような部品は大抵あるっぽい)
  • 内蔵セキュリティ
    • セッションを完全にそれ専用のものに分離させる事ができるし、カーネルレベルのメモリ保護でプログラミングのバグに起因するようなプライバシーの問題からも保護できるよ
    • SSLとかHTTPS(TLS)とかつこうて暗号化やサーバー認証とかできます
    • 継続的なHTTPSで低帯域でもいけますよ
    • 内蔵のXSS防止機能とかあります。レンダリング段階でフィルタ適用するからXSSとか不可能ですし
    • CSRF脆弱性についても大丈夫。だってクッキーによるセッション追跡とかオプションですし、使う場合にもそれらはトリガーイベントの処理コードの要求として信頼される事はないです
    • インターフェースで公開されたイベントのみがトリガーになるので、特定のURLにスキップすることでアプリケーションのロジックを破壊したりとかしないです
    • セッションの乗っ取りのリスク軽減と予防とかしてます
    • DoS攻撃を緩衝しちゃうです
    • 最適な認証モジュールが組み込み済み。OAuth 2.0、OpenIDとかできます
  • オブジェクトリレーショナルマッピングライブラリ
    • この為にコード書いたりXMLの設定作ったりしないで現代的なC++さえ書けばいいよ!
    • template化されたビジターパターンはドライで効率的さ!
    • 任意のC++型をキーにできますよ
    • バージョンフィールドを使った楽観的並行制御とかできます
    • STL互換コレクションにより多対単、多対多のマッピングとかできます
    • スキーマ生成(DDL)とかCRUDDML)とかできます
    • 通しのステートメントの準備
    • セッション毎のダーティオブジェクトの追跡と一次キャッシュの提供
    • Boost.Tupleによる柔軟なフィールドとオブジェクト
    • シングルコネクションでも複数のセッションによる共有接続プールでもアクティブなトランザクションのみに使われます
    • SQLite3、FirebirdPostgreSQLとか使えます。あとMySQL(GPLに限るけど)もコミュニティのポールハリソンによりメンテナンスされています。
  • デプロイ
    • 内蔵httpdとか使えます。
      • シンプルで高性能ですよ。(マルチスレッド、C++ asio ライブラリベースの非同期I/O)
      • HTTP(S)とかWebSocket(S)とかできます
      • レスポンスチャンクとか圧縮とかつかえます
      • シングルプロセスでも動かせます(デバッグとか楽でそ)
      • ProxyPass'ingとかできます(必要なら負荷分散とかさ)
      • UNIXでもWin32でもいけるぜよ
    • FastCGIとか使えます
      • 有名所のサーバーに組み込めるよ(Apacheとかlighttpdとか)
      • 異なるセッション−プロセス間マッピング戦略
      • ホットデプロイ: 新しいセッションから新しいアプリに切り替えて動かしてくます
      • 但しUNIXだけな
    • ISAPI
      • IISに組み込めるよ
      • ISAPI非同期APIつこうて再高性能だせるよ
      • 但しWin32だけな

・・・途中から眠くなってきたりもあってやや怪しげな訳になっていたりもしますが・・・。まあ、とにかくカッコイイことがアレコレ書いてありますね・ω・

ウェブフレームワークとしてはいわゆるフルスタックの、Haskellで言うところのYesodの様な構えで、しかもAjaxやらGUIやら、しかもしかもSVGがどうとかCanvasつかえますとかイベント駆動余裕でしたとか、内蔵サーバーいけてそうとか・・・。移植性も心配なんて無さそうだし、なんだか最強のかほりが漂っています。

でも、なんだか情報が少ないのですよねー・・・。今日はもう眠いのでこのくらいにしますが、これから少しずつ遊んでみようかと思います。
今回は紹介のみということでノシ

・・・と、タイトルを見なおして思い出しました。Arch LinuxならWtをpacmanできます。

community/wt 3.2.0-2
    a C++ library and application server for developing and 
    deploying web applications

とかあったので・w・b

http://www.webtoolkit.eu/wt/downloadを見てもどうやら執筆現在のWt最新版は3.2.0の様なのでここは素直にpacmanしてみるのがいいかな。

ちなみにライセンスはGPLまたは商用利用ライセンスの2択。デプロイするウェブアプリのソースをGPLで公開して問題無いのならGPLで、問題なら商用ライセンスを購入してロイヤリティフリーでどうぞ、と。

では、眠すぎるし今日はココまでノシ