1週間でWeb Frameworkを書いてみた話
あけましておめでとうございます。
突然の本題ですが、ちょっと紆余曲折あってさくらのレンタルサーバーのライトプランで軽くWebシステムを作ることになりました。
別に仕事でもないのでPHPで書くよりは他のスクリプト言語を勉強の意味も込めて使ってみたいなと思ったので、Pythonで書く事にしました。
まあ今のところいちばんメジャーなFrameworkはDjangoらしいので、Django使ってみるかと思ったところ…
_人人人人人人人人_
> SSHが使えない <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
なんと…SSHが使えないサーバーとは…
ライトプランの売りは低価格なので仕方はないんですが。
ただ、これではDjangoがインストールできない。
てかだいたいのFrameworkがインストールできない疑惑。
(Flaskも1ファイルとは聞いた覚えがありますが、virtualenvとか必要だという話も聞きました。あまり確証はない)
不幸中の幸いということで、PythonでCGIを吐くのはいけることがわかりました。
ということで…
Pythonで(CGIラッパの)Web Frameworkを作ろう!!
ということになったわけです。
Frameworkの名前はibisとしました。
英語で朱鷺という意味らしいです。由来の理由は特にないです。鳥が好きだったのと、語感がよかったことですかね。
現状
https://github.com/levelfour/ibislevelfour/ibis · GitHub
Githubの方で結構頑張ってREADMEを鋭意執筆中です。
Web Frameworkに必要だと僕が感じている最低限の機能は、基本的に網羅したのかなと思っています。
実装は簡易ですし、コードの綺麗さはあまり考えていませんが…
それでも極力綺麗に書こうと努力はしたつもりです(´・ω・`)
機能
1. Viewをrenderする
Web Frameworkなので言わずもがな。LayoutとElementに分けた考え方をしています(本質的には同じもの)。
2. Viewに置換変数を埋め込める
PHPでは簡単にできますが、インデントを強要するPythonではなかなか考えもの。結果的に簡易的な置換を可能にしました。
3. GET、POST、Ajaxが受け取れる
HTTPリクエストの仕組みとかわかってよかったです。
4. Model classをXMLschemaから自動生成できる
これはPropelリスペクトです。Propelのチュートリアルを参照。
5. ModelにCRUDが揃っている
まあ当然っちゃ当然です。insert、find、update、deleteみたいなところで、findには条件指定もできます。
みたいなところでしょうか。
この程度の機能で、だいたい700行弱くらいでした。ibis.pyという1ファイルです。
詳しくはGithubのREADMEにどんどん書き加えていこうと思っているところです。
課題
実は書くのが楽しくて没頭してしまったせいで、セキュリティについては考慮できてないです。
特にSQLインジェクションが気になるところ。
実はSQLインジェクションの概要はなんとなくわかっているつもりですが、具体的なハック例などを見たことがあるわけではなく理解できてないところが多いので、その勉強がてら考えてみるのもいいのかもしれません。