第11回 Python mini hack-a-thon でやったことまとめ

(第11回)Python mini Hack-a-thon

やろうと思った事

オブジェクト指向のWebアプリケーションフレームワークであるBlueBream。このチュートリアルを一通り終わらせ、簡単なサンプルアプリを作る事を目標としました。

BlueBreamについて軽く説明をすると、これは2004年11月にリリースされたもので、元はZope3という名前のプロダクトでした。3があるということはもちろん2もあります。しかし、以前に開発されたZope2はフレームワークではなくWebアプリケーションサーバです。
同じ名前なのに違うプロダクトということで混乱があったらしく、Zope3は2010年1月にBlueBreamに名前を変えています。
現在、最新バージョンは2011年1月にリリースされた1.0です。あまり活発に開発されていないのかな?

ちなみに、PythonのWebアプリケーションフレームワークについては、これまで以下のものを触ってきました。どれもチュートリアル程度ですが。

  • Flask
  • Django
  • Pyramid

とりあえず今は「どんな状況の時にはどのフレームワークが適しているのか」というのを掴もうと思って、フレームワークの特徴を覚える為に軽く触っては次へ、という事をやってます。

レポート

インストール

ドキュメント 3. Getting Started を参考にBlueBreamをインストールするところから。

まずインストールからかなりつまづきました。詳細は省くというか原因自体把握できていないのですが、pipからのインストールでいろいろエラーが出ました。この所為で午前中と午後の1時間半くらいは消費…。
最終的に、tarballを展開してsetup.pyからインストールした場合は問題なくインストールが出来ました。

チュートリアル開始

ドキュメント 5.Tutorial - Part1 を見ながら進めました。

このチュートリアルでは、シンプルなIssue Tracking Systemを作るようです。

paster create -t bluebream

で、プロジェクトの情報を対話的に入力するとディレクトリが作成され、そこに必要なファイル一式が生成されている。

cd <project name>
python bootstrap.py

bootstrap.pyはbuildoutのセットアップスクリプトですね。
bin/buildoutコマンドが作成されます。

./bin/buildout

buildoutがBlueBream開発用の環境を整えてくれますが、かなり時間がかかります。依存しているzope関連モジュールが多いので、そのダウンロードとセットアップに時間がかかっている模様。完了まで30分くらいかかってたかも。
あまりに長かったので、Pyramidのroutesalchemyチュートリアルも少し進めてました。

その後は各種設定ファイル(buildout, pastedeploy, zope)の中身についての解説がつらつらと。
他のフレームワークもだいたいそんな感じでしたが、BlueBreamの設定ファイルも本番用(deploy)と開発用(debug)の2種類が用意されており、本番に出す時はdebugにしないようにね、等の注意書きもありました。

永続化オブジェクトを体験する

インストールと設定についての説明が終わると、アプリケーションオブジェクトの作成に入ります。
BlueBreamでは、他のZope関連プロダクト(Ploneなど)と同様、データの永続化にはオブジェクト指向データベースであるZODBを用います。
オブジェクトをpickle化してファイルストレージに保存することで、Pythonオブジェクトのまま取り出して使ったりできます。

チュートリアルではpasterのサブコマンドとして定義されたshellコマンドを使って、

  • 永続化オブジェクト用のクラスを作成
  • ルートオブジェクトに作成した永続化オブジェクトを保存
  • shellを立ち上げ直してもオブジェクトが取得できる事(永続化されていること)を確認

という流れで、簡単な使い方が理解できます。
ZODBはトランザクションをサポートしているため、ルートオブジェクトにオブジェクトを格納しても、コミットしない限りは実際の保存は行われないようです。

スキーマを定義する

この後は、アプリケーションオブジェクトのスキーマを、zope.interfaceモジュールを利用してinterfaceクラスとして定義していくのですが、この辺りで時間切れでした。

おわり

こんな感じで中途半端なところで終わってしまいました。始めにインストールでグダグダしていた時間のロスは大きかった…。あと英語力が無いのでブラウザのアドオンで翻訳しながら読み進んでおり、進みは遅かったと思います。
成果発表するレベルでも無いなあと思って発表には参加しませんでした。やってみた事はまとめたのでお許しを…。
次回に参加する時は何か発表できればいいと思います。