C++でつくるWebアプリケーション TreeFrog Framework

C++でWEBアプリが作れるフレームワーク

http://www.treefrogframework.org/ja/

ダウンロードからソースを取得

> wget http://www.treefrogframework.org/wp-content/uploads/2011/11/treefrog-0.80.tar.gz
> tar zxvf treefrog-0.80.tar.gz
> cd treefrog-0.80
> ./configure -h
Usage: ./configure [OPTION]... [VAR=VALUE]...

Configuration:
  -h, --help          display this help and exit
  --enable-debug      compile with debugging information
  --enable-gui-mod    compile and link with QtGui module

Fine tuning of the installation directories:
  --framework=PREFIX  install framework files in PREFIX [/Library/Frameworks]
  --bindir=DIR        user executables [/usr/bin]
  --datadir=DIR       read-only architecture-independent data [/usr/share/treefrog]

> ./configure
qmake: command not found

http://qt.nokia.com/downloads-jp
http://qt.nokia.com/downloads/qt-for-open-source-cpp-development-on-mac-os-x
ここからosxのdmgファイルを取得してインストール
qt-mac-opensource-4.7.4.dmg

> which qmake
/usr/bin/qmake
> ./configure
...
First, run "make" and "sudo make install" in src directory.
Next, run "make" and "sudo make install" in tools directory.

> cd src
> make
> sudo make install
> cd ../tools
> make
> sudo make install

treefrogのドキュメントからチュートリアルをひと通りチェック
http://www.treefrogframework.org/ja/ドキュメント/チュートリアル

> tspawn new blogapp
  created   blogapp
  created   blogapp/controllers
  created   blogapp/models
  created   blogapp/models/sqlobjects
  created   blogapp/views
  created   blogapp/views/layouts
  created   blogapp/views/mailer
  created   blogapp/views/partial
  created   blogapp/views/_src
  created   blogapp/helpers
  created   blogapp/config
  created   blogapp/config/environments
  created   blogapp/config/initializers
  created   blogapp/public
  created   blogapp/public/images
  created   blogapp/public/js
  created   blogapp/public/css
  created   blogapp/db
  created   blogapp/lib
  created   blogapp/log
  created   blogapp/plugin
  created   blogapp/script
  created   blogapp/sql
  created   blogapp/test
  created   blogapp/tmp
  created   blogapp/blogapp.pro
  created   blogapp/appbase.pri
  created   blogapp/controllers/applicationcontroller.h
  created   blogapp/controllers/applicationcontroller.cpp
  created   blogapp/controllers/controllers.pro
  created   blogapp/models/models.pro
  created   blogapp/views/views.pro
  created   blogapp/views/_src/_src.pro
  created   blogapp/views/mailer/.trim_mode
  created   blogapp/helpers/helpers.pro
  created   blogapp/helpers/applicationhelper.h
  created   blogapp/helpers/applicationhelper.cpp
  created   blogapp/config/application.ini
  created   blogapp/config/database.ini
  created   blogapp/config/logger.ini
  created   blogapp/config/routes.cfg
  created   blogapp/config/validation.ini
  created   blogapp/config/initializers/internet_media_types.ini
  created   blogapp/public/404.html
  created   blogapp/public/413.html
  created   blogapp/public/500.html

mysqlもしくはsqliteデータベースの作成

> mysql -u root
mysql> create database blogdb;
mysql> use blogdb;
mysql> create table blog (id int PRIMARY KEY, title varchar(20), body varchar(200), created_at timestamp, updated_at timestamp, lock_revision int);
mysql> quit
> sqlite3 db/blogdb
sqlite> create table blog (id int PRIMARY KEY, title varchar(20), body varchar(200), created_at timestamp, updated_at timestamp, lock_revision int);
sqlite> .quit

lock_versionってなんだ?と思ったらドキュメントに書いてあった。

また、lock_revision フィールドは、楽観的ロックを実現するためのもので、integer 型で作っておきます。

楽観的ロック (Optimistic Lock)
レコードにはあらかじめロックリビジョンを記録しておき、ロックリビジョンが変わっていないことを検証しつつデータを保存すること。ロックはかけないので、処理速度の向上がちょっとだけ期待できるでしょう。

> cd blogapp
> tree
.
├── appbase.pri
├── blogapp.pro
├── config
│   ├── application.ini
│   ├── database.ini
│   ├── environments
│   ├── initializers
│   │   └── internet_media_types.ini
│   ├── logger.ini
│   ├── routes.cfg
│   └── validation.ini
├── controllers
│   ├── applicationcontroller.cpp
│   ├── applicationcontroller.h
│   └── controllers.pro
├── db
├── helpers
│   ├── applicationhelper.cpp
│   ├── applicationhelper.h
│   └── helpers.pro
├── lib
├── log
├── models
│   ├── models.pro
│   └── sqlobjects
├── plugin
├── public
│   ├── 404.html
│   ├── 413.html
│   ├── 500.html
│   ├── css
│   ├── images
│   └── js
├── script
├── sql
├── test
├── tmp
└── views
    ├── _src
    │   └── _src.pro
    ├── layouts
    ├── mailer
    ├── partial
    └── views.pro

※なんかmysql用のなにかが足りないようでDriverType=QMYSQLが失敗しているので、sqliteで試します

> vi config/database.ini
[dev]
DriverType=QSQLITE
DatabaseName=db/blogdb
HostName=
Port=
UserName=
Password=
ConnectOptions=

> tspawn scaffold blog
DriverType: QSQLITE
DatabaseName: db/blogdb
HostName: 
Database open successfully
  created   controllers/blogcontroller.h
  created   controllers/blogcontroller.cpp
  updated   controllers/controllers.pro
  created   models/sqlobjects/blogobject.h
  created   models/blog.h
  created   models/blog.cpp
  updated   models/models.pro
  created   views/blog/index.html
  created   views/blog/index.otm
  created   views/blog/show.html
  created   views/blog/show.otm
  created   views/blog/entry.html
  created   views/blog/entry.otm
  created   views/blog/edit.html
  created   views/blog/edit.otm

> qmake -spec macx-g++ (linuxならlinux-g++) #最初の一回だけ実行してMakefileを作成している
> make

※ -spec オプションについては、Windows では win32-g++ を、Mac OS X では macx-g++ を指定すればよいでしょう。
ビルドが成功すると、4つの共有ライブラリ(controller, model, view, helper)が lib ディレクトリに作られます。

だそうです。

アプリケーションの起動

> treefrog -e dev

ブラウザでhttp://localhost:8800/Blog/indexにアクセスする
なんか見慣れたscaffoldの画面が出てくればOK
日本語もばっちりでした。