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

TreeFrog Frameworkの紹介

  • Upload
    ao27

  • View
    2.979

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: TreeFrog Frameworkの紹介

C++ Webアプリケーションフレームワーク

TreeFrog Framework の紹介

AOYAMA Kazuharu

Page 2: TreeFrog Frameworkの紹介

Webアプリケーションフレームワーク

● Ruby on Rails● symfony● CakePHP● Struts● SpringMVC

etc.Wikipedia 情報 : 100以上

Page 3: TreeFrog Frameworkの紹介

C++のWebアプリケーションフレームワークはどのくらいあるのか

● Wt ● CppCMS● Tntnet (Wikipediaから)

→ Rails や symfony と比べて機能的に見劣り...→ 簡単にWebアプリが作れるものがなさそう

Page 4: TreeFrog Frameworkの紹介

なぜ C++ のは少ないのか

~ 開発していて思うこと ~

● 文字エンコーディング● データベースドライバ● リフレクション機能

(実行中のプログラムの情報を取り出したり,変更したりすること)

● クロスプラットフォーム

→ これらを実装する必要がある

Page 5: TreeFrog Frameworkの紹介

じゃ、Qt を使えば

● Qt 4.5 から LGPL を加えたトリプルライセンス

→ 企業でも使いやすくなった

→ 開発してみる気になった

→ そこそこなものができた気がする

→ 公開してみた

Page 6: TreeFrog Frameworkの紹介

TreeFrog Framework とは

2009年に開発を始める

● 高速動作

● C++プログラマでもWebアプリケーションが開発できる!

● Model View Controller (MVC) アーキテクチャ

Rails や symfony などを参考にした

● フルスタック (を目指しています)

● クロスプラットフォーム

● Webアプリケーションサーバに位置するフレームワーク

ブラウザ WebサーバWebアプリケーションサーバ

DBサーバ

ここ

Page 7: TreeFrog Frameworkの紹介

TreeFrogで何ができるのか

● O/Rマッピング → SQL をほとんど書かなくて良い

● テンプレートシステムあります → ERB と Otama

● URLルーティング設定を書かなくともデフォルトの動作 → URLからアクションを決定

● ジェネレータ (足場となるコード)● ユニットテスト

Page 8: TreeFrog Frameworkの紹介

MVC

モデル DAO

(ORM)

ビュー

コントローラリクエスト

レスポンス

Web Application

ブラウザ(Webサーバ)

DB

ヘルパ

Page 9: TreeFrog Frameworkの紹介

スキャフォールディング

● 足場となるコードの自動生成● データベースにテーブルを作成しておいてから● オプション

● MVC全部

● コントローラのみ● モデルのみ● ORMオブジェクトのみ

..など

ちなみに、マイグレーション機能はありません

Page 10: TreeFrog Frameworkの紹介

コントローラ

● 中心的なクラス● ブラウザからのリクエストを受け取り ● モデルを中心としたビジネスロジックを呼び出し

● ビューにHTMLレスポンスの生成を依頼

URLからアクションの決定

/コントローラ名/アクション名/引数1/引数2/…

Page 11: TreeFrog Frameworkの紹介

ORMオブジェクト

● O/Rマッピング (ORM)

SQLを直接記述すると煩雑になりがち → これを軽減

※ プレースホルダを使って安全にSQLも呼べる

● 1レコードが1オブジェクトに関連付く

● CRUD

id name address

100 John England

101 Paul Merseyside

102 George Liverpool

103 Ringo England

オブジェクト int id; QString name; QString address;

Table

Page 12: TreeFrog Frameworkの紹介

モデル

● ブラウザに返す内容(抽象的な情報)を表現するオブジェクト、あるいはその集まり

● モデルクラスは通常のクラス

→ 何かを継承しなければならないという制限なし

● モデルはORMオブジェクトを持つ

→ has-a の関係 2つ以上持っても構いません

Page 13: TreeFrog Frameworkの紹介

ビュー

● HTMLを生成してレスポンスを返す役割● ビュー全体で1つの動的ライブラリ(共有ライ

ブラリ、DLL)に変換される● テンプレートシステム

– テンプレートを読み込み、必要な箇所を動的に書き換えて出力する

● アクション毎にテンプレートを作る

Page 14: TreeFrog Frameworkの紹介

テンプレートシステム

● ERBプログラムコードをテンプレートに埋め込むシステム(ライブラリ)

HTMLの中に <% … %> 形式でコードを記述

● OtamaHTMLテンプレートとプレゼンテーションロジックを完全に分離したテンプレートシステム

HTMLテンプレート

ロジック(C++)

C++コード 共有ライブラリ(View)

テンプレートコンパイラ

C++コンパイラ

Page 15: TreeFrog Frameworkの紹介

Otama テンプレートシステム“Hello world” を出力する

● HTMLテンプレート側:● 書き換えたい要素(タグ)にマークをつける

例: p要素に #hello というマーク

● プレゼンテーションロジック側:

● マークと C++ コードを関連づけ

● 空行までが1つのセット

#hello ~= "Hello world" → あるいは

#hello := "Hello world" →

<p data-tf="#hello"></p>

<p>Hello world</p>

Hello world

Page 16: TreeFrog Frameworkの紹介

ビューへのデータの受け渡し

● エクスポート (コントローラ側)

QString hoge = "Hello world";texport(hoge);

● フェッチ (ビュー側)

もし変数が QString 型であれば

<% tfetch(QString, hoge); %> :<%= hoge %>

<%=$ hoge %>

Page 17: TreeFrog Frameworkの紹介

セキュリティ

● SQLインジェクション対策– ORM オブジェクトを使う

– プレースホルダを使う– エスケープ処理をする

● クロスサイト・スクリプティング対策– eh() メソッドか、<%= … %> を使って値を出力する

● CSRF対策– 何らかの処理(更新や削除など)を実行するページで

は、POSTメソッドでリクエストを受け付けるようにする

– その前のページで秘密情報(hiddenパラメータ)を挿入しておき(form()メソッド)、実行ページでそれを検証する

Page 18: TreeFrog Frameworkの紹介

パフォーマンス

● PC: MacBook Pro 2.4GHz Intel Core 2 Duo, 4GB 1067MHz DDR3

● httperf を使用

● MPM: thread (MPM.thread.MaxServers=20)

● DBレコード: 0件

● キャッシュシステム: 無

→ 1秒間に約 562 回のリクエストを処理

Total: connections 10000 requests 10000 replies 10000 test-duration 17.800 sConnection rate: 561.8 conn/s (1.8 ms/conn, <=1 concurrent connections)

Page 19: TreeFrog Frameworkの紹介

その他の機能

● ロギング

● メーラー(SMTP)

● 認証● プラグインで機能追加

● Makefile自動生成 → qmake

Page 20: TreeFrog Frameworkの紹介

TODO

● HTML5への追随

● NoSQLデータベース対応

● その他いろいろ...

Page 21: TreeFrog Frameworkの紹介

実演

Page 22: TreeFrog Frameworkの紹介

質問タイム

Page 23: TreeFrog Frameworkの紹介

開発者、翻訳者(英訳)、テスター

募集!募集!

ユーザメーリングリストまでご連絡を

Page 24: TreeFrog Frameworkの紹介

ご静聴ありがとうございましたご静聴ありがとうございました