Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

TreeFrog Frameworkの紹介

4,067 views

Published on

C++ Webアプリケーションフレームワーク
TreeFrog Framework の紹介

Published in: Technology, Education
  • Be the first to comment

TreeFrog Frameworkの紹介

  1. 1. C++ Webアプリケーションフレームワーク TreeFrog Framework の紹介 AOYAMA Kazuharu
  2. 2. Webアプリケーションフレームワーク● Ruby on Rails● symfony● CakePHP● Struts● SpringMVC etc. Wikipedia 情報 : 100以上
  3. 3. C++のWebアプリケーションフレー ムワークはどのくらいあるのか● Wt● CppCMS● Tntnet (Wikipediaから) → Rails や symfony と比べて機能的に見劣り... → 簡単にWebアプリが作れるものがなさそう
  4. 4. なぜ C++ のは少ないのか ~ 開発していて思うこと ~● 文字エンコーディング● データベースドライバ● リフレクション機能 (実行中のプログラムの情報を取り出したり,変更したりすること)● クロスプラットフォーム → これらを実装する必要がある
  5. 5. じゃ、Qt を使えば● Qt 4.5 から LGPL を加えたトリプルライセンス → 企業でも使いやすくなった → 開発してみる気になった : : → そこそこなものができた気がする → 公開してみた
  6. 6. TreeFrog Framework とは 2009年に開発を始める● 高速動作● C++プログラマでもWebアプリケーションが開発できる!● Model View Controller (MVC) アーキテクチャ Rails や symfony などを参考にした● フルスタック (を目指しています)● クロスプラットフォーム● Webアプリケーションサーバに位置するフレームワーク こ こ Webアプリケー ブラウザ Webサーバ DBサーバ ションサーバ
  7. 7. TreeFrogで何ができるのか● O/Rマッピング → SQL をほとんど書かなくて良い● テンプレートシステムあります → ERB と Otama● URLルーティング設定を書かなくともデフォルトの動作 → URLからアクションを決定● ジェネレータ (足場となるコード)● ユニットテスト
  8. 8. MVC Web Application リクエスト DAO コントローラ モデル (ORM) DB ブラウザ(Webサーバ) レスポンス ビュー ヘルパ
  9. 9. スキャフォールディング● 足場となるコードの自動生成● データベースにテーブルを作成しておいてから● オプション ● MVC全部 ● コントローラのみ ● モデルのみ ● ORMオブジェクトのみ ..など ちなみに、マイグレーション機能はありません
  10. 10. コントローラ● 中心的なクラス● ブラウザからのリクエストを受け取り● モデルを中心としたビジネスロジックを呼び出し● ビューにHTMLレスポンスの生成を依頼 URLからアクションの決定 /コントローラ名/アクション名/引数1/引数2/…
  11. 11. ORMオブジェクト● O/Rマッピング (ORM) SQLを直接記述すると煩雑になりがち → これを軽減 ※ プレースホルダを使って安全にSQLも呼べる● 1レコードが1オブジェクトに関連付く● CRUD Table id name address オブジェクト int id; 100 John England QString name; 101 Paul Merseyside QString address; 102 George Liverpool 103 Ringo England
  12. 12. モデル● ブラウザに返す内容(抽象的な情報)を表現するオ ブジェクト、あるいはその集まり● モデルクラスは通常のクラス → 何かを継承しなければならないという制限なし● モデルはORMオブジェクトを持つ → has-a の関係 2つ以上持っても構いません
  13. 13. ビュー● HTMLを生成してレスポンスを返す役割● ビュー全体で1つの動的ライブラリ(共有ライ ブラリ、DLL)に変換される● テンプレートシステム – テンプレートを読み込み、必要な箇所を動的に書き換え て出力する● アクション毎にテンプレートを作る
  14. 14. テンプレートシステム● ERB プログラムコードをテンプレートに埋め込むシステム(ラ イブラリ) HTMLの中に <% … %> 形式でコードを記述● Otama HTMLテンプレートとプレゼンテーションロジックを完全 に分離したテンプレートシステム HTMLテンプレート テンプレート C++ コンパイラ コンパイラ 共有ライブラリ C++コード (View) ロジック(C++)
  15. 15. Otama テンプレートシステム “Hello world” を出力する● HTMLテンプレート側: ● 書き換えたい要素(タグ)にマークをつける 例: p要素に #hello というマーク <p data-tf="#hello"></p>● プレゼンテーションロジック側: ● マークと C++ コードを関連づけ ● 空行までが1つのセット #hello ~= "Hello world" → <p>Hello world</p> あるいは #hello := "Hello world" → Hello world
  16. 16. ビューへのデータの受け渡し● エクスポート (コントローラ側) QString hoge = "Hello world"; texport(hoge);● フェッチ (ビュー側) <% tfetch(QString, hoge); %> : <%= hoge %> もし変数が QString 型であれば <%=$ hoge %>
  17. 17. セキュリティ● SQLインジェクション対策 – ORM オブジェクトを使う – プレースホルダを使う – エスケープ処理をする● クロスサイト・スクリプティング対策 – eh() メソッドか、<%= … %> を使って値を出力する● CSRF対策 – 何らかの処理(更新や削除など)を実行するページで は、POSTメソッドでリクエストを受け付けるようにする – その前のページで秘密情報(hiddenパラメータ)を挿入してお き(form()メソッド)、実行ページでそれを検証する
  18. 18. パフォーマンス● PC: MacBook Pro 2.4GHz Intel Core 2 Duo, 4GB 1067MHz DDR3● httperf を使用● MPM: thread (MPM.thread.MaxServers=20)● DBレコード: 0件● キャッシュシステム: 無 Total: connections 10000 requests 10000 replies 10000 test-duration 17.800 s Connection rate: 561.8 conn/s (1.8 ms/conn, <=1 concurrent connections) → 1秒間に約 562 回のリクエストを処理
  19. 19. その他の機能● ロギング● メーラー(SMTP)● 認証● プラグインで機能追加● Makefile自動生成 → qmake
  20. 20. TODO● HTML5への追随● NoSQLデータベース対応● その他いろいろ...
  21. 21. 実演
  22. 22. 質問タイム
  23. 23. 開発者、翻訳者(英訳)、テスター 募集!ユーザメーリングリストまでご連絡を
  24. 24. ご静聴ありがとうございました

×