Pythonおじさんの
web2py挑戦記
2012-09-16 Python Conference Japan 2012
中村 良幸 @nakayoshix
Python札幌 / 数学勉強会@札幌 / クラウド研究会@札幌
今日のアジェンダ
• 自己紹介と札幌の勉強会事情
• PythonのWeb Application Framework
• web2pyの特徴的な機能及び利点と欠点
• web2pyの事例紹介
• web2pyによるライブコーディング
• まとめ
自己紹介
• 中村 良幸
→ なかむら よしゆき
→ なかよし(ワタミメソッド)
→ nakayoshix(xを付けて)
→ 統合ID: nakayoshix です。(キリッ
仕事でやってきたこと
• HPC (Fortran) 1994∼2000
• 津波数値解析、港湾の水質汚染拡散計算、泊原発の大気汚染拡散計算
• 報告書作成と3Dアニメによる可視化 (C + PostScript & OpenGL)
• CRM (Siebel) 2001∼2003
• 北海道ガス(北ガス)のお客様問い合わせ対応システム
• Siebelのカスタマイズは、SiebelVBというMicrosoftVB互換言語
• MSテクノロジー (ASP.NET, C#がメイン)
• 札幌市環境マネジメントシステム (ASP.NET, C#, VS2005時代)
• 某組織向けグループウェア(XML Web Service & スマートクライアント)
• 他にもJava, PHP, ExcelVBA, R, およびPythonによる業務用アプリ開発を色々と…
Pythonによる受託アプリケーション開発歴
• 2006年 全国各地の大学向け施設管理システム(Webアプリケーション)
• 帳票出力モジュールを、Linux上でPython + PyUNO + OpenOffice.orgで作成
• 2007年 北海道大学の大気環境汚染研究のためのサーバシステム
• センサー付き端末から定期的に送られるメール(含データ)を受信してDB化
• Python SMTPモジュールを利用、O/R MapperとしてSQLAlchemyを利用
• 2009年 中古自動車売買Webサイトの構築 ( http://www.calwing.com/ )
• DjangoによるWebアプリケーション、DjangoAdminを大幅にカスタマイズ
• 2010年 統計分析用パッケージの作成(納期二週間でSPSSと同じものを…)
• 重回帰分析(AICによるモデル選択を含む)計算処理はRで、GUIはPythonで
Pythonによる自社用アプリケーション開発歴
• 2010年∼2012年にかけて、SSLサーバ証明書の申請管理システムを開発
• 初めてのweb2pyによる業務用Webアプリケーションの開発
• 他システムとのAPI連携がたくさん
• Google Apps, Zoho CRM, kintone, JIRAとの間のREST API連携
• Root CAとの間の証明書ベースによる暗号化されたSOAP API連携
• ぼっちdeveloperゆえ、基本的に全て独りで開発。最近ではサーバーへの
デプロイ、サーバの保守管理、セキュリティ、ログ管理、社内PC管理
等々まで独りで…
• 本当は、今日はその実際の事例を紹介しようと思っていましたが、諸般
の事情でそれが不可能になりました。
というわけで…
•Pythonおじさんです。(キリッ
勉強会活動について
• 札幌で色々と勉強会を主宰しています
• Python札幌 / from sapporo import *; with the Zen of Python
• 現在、「Python初学者向け読書会@札幌」を隔週木曜で開催中
• 数学勉強会@札幌 / 大人のためのやり直しの数学勉強会
• 現在、「解析の基礎」を教科書に、毎週月曜に勉強会を開催中
• クラウド研究会@札幌 / 年に一度の「クラウド温泉@小 」
• 現在、「ぼちぼちHaskell勉強会@札幌」を隔週木曜で開催中
• 勉強会充です。(キリッ
その他、趣味とか興味とか
• オープンソース関連活動
• オープンソースのCRM, openCRXの日本語化
• openCRXのベースとなるMDAフレームワーク、openMDX
• 最近興味があるのは…
• 関数型言語、特にHaskell (ついでにScala & F#)
• Monadとその理論的背景である圏論、代数構造
• 好きなエディタはEmacs
• Emacs歴24年になります。自称・Emacsおじさんです。(キリッ
• 日常生活では
• 1994年からヨーガを始めたので、ヨーガ歴24年です。
前置きはここまで
• ここからが本編です
Pythonで作られた各種の
Web Application Framework
• Django - 豊富な実績、多くのPaaSでも標準で使える
いわゆるフルスタックフレームワーク
• TurboGears ( → Pylonsと統合)
• Pylons (→ Pyramidと統合)
• Pyramid - Python3へ対応済み、Zope由来、自由度最大
• Flask - マイクロフレームワーク by @mitsuhiko
• web2py - 今日紹介するものです
web2pyとは?
• web2pyは高速、スケーラブルでセキュアかつポータブルなデータベース
駆動型のWebアプリケーションをアジャイルで開発するための、フ
リーかつオープンソースなエンタープライズ向けWebアプリケーション
フレームワークです。
• もちろん全てPythonで書かれています。
• ライセンスは LGPL version 3 License
• 最新バージョンは一昨日出たばかりの2.0.9 (2012-09-13 23:51:30) stable
• 作者は、アメリカのDePaul University College of Computing and Digital
Media (CDM)でコンピュータ・サイエンスを教えている、Dr. Massimo Di
Pierroで、Massimoさんは、元々は物理屋さんです。
web2pyの特徴・その1
• フルスタックのフレームワーク
• セキュリティを重要視している
• 全てブラウザのみで開発が可能
• インストール不要
→ web2py_src.zipを展開するだけで使用可能に
• そのままGAEにデプロイが可能
• 開発当初より後方互換性を維持
フルスタックとは?
• SSLとストリーミングが可能なWebサーバー
• SQLを動的に作成するデータベース抽象レイヤ (DAL)
• 多様な認証方式とロールベースアクセス制御
• Localの他, OpenID, OAuth, Janrain, CAS連携等が可能
• グループとロールベースによる完全なアクセス制御
• エラーロギングとチケットシステムの統合
• スケーラビリティのための様々なキャッシュメソッド、等々
セキュリティ重視
• The Open Web Application Security Project (OWASP) のいうと
ころのセキュリティ上の問題トップ10を未然に防ぐための仕
組みを内蔵
• クロスサイトスクリプティング
• インジェクションフロー
• ディレクトリトラバーサル
• 悪意のあるファイルの実行
• Audit Trail (監査証跡) 機能も追加されている
Web IDEでブラウザによる開発
• 強力な機能を持つWeb IDEを標準で持つ
• 開発、テスト、デプロイ、メンテナンスといったアプリ
ケーション開発の各フェーズに対して、ローカルやリ
モートから操作のできるWebのインターフェイスを提供
• 新規アプリ作成時のウィザード機能も追加された
• Mercurialがインストールされていれば、バージョン管理
までWeb IDE上で可能になった
• 結論として、ブラウザのみで全ての開発が可能です
Emacsによる開発も可能
• とはいえ、Web IDEは単なる釣りです
• Emacsのみによる開発ももちろん可能です
• 通常はEmacsでソースコードを編集し、ターミナルから
web2py用のシェルを起動して動作確認を行います
• ipythonがインストールされていれば、それを使います
• bpythonがインストールされていればそちらを優先します
• 開発中のイメージを次に…
GAEへのデプロイ
• 一部制限はあるものの、GAEにデプロイしてそのまま
動作させることが可能
• 一部制限とはDB設計の根本的な違いが原因
→ BigTableはRDBではないため
• アプリケーションID以外はソースコード以外の設定
ファイル等も書き換える必要なし
• GAEへのデプロイに関しても、今はWeb IDEからク
リック一発でインストールが可能に
web2pyの特徴・その2
• 多くのDBに対応した強力なDAL機能
• 強力なテンプレート機能を備えたView機能
• AppAdminはDjangoAdminとは少し方向性が違うが非常に便利
• RESTやSOAP等、多くのWeb Serviceに標準で対応
• 全てにおいてデフォルト値を持つ
→ 初期状態において、設定なしですぐに動作可能
• ボイラープレートコードを極限まで排除
• ネット上のコミュニティが活発 → 進化がとても早い
DALの存在
• DAL (= Database Abstraction Layer)は本当に便利です
• あくまでもデータベース抽象レイヤーです
→ 他のFWが持つようなO/Rマッパーではないので注意が必要
• 実際に使ってみて非常によく出来ている
→ DjangoのO/Rマッパーに不満を持っている方は一度お試しを
• デフォルトで非常に多くのデータベースに対応
• SQlite, MySQL, PostgreSQL, Oracle, MSSQL, DB2, Firebird, MyBase,
Informix, Google App Engine
• RDBMSの他、GAE (BigTable)にも対応している
• 最近では、MongoDB等のNoSQLにも対応済み
Pythonなのにimport文が不要
• ボイラープレートコードを極限まで排除
• フレームワークの基本機能に関しては、importが不要
• VとCにおいて、HTMLタグをPythonの関数で作ることが可能
• その代わり、フレームワーク側でexecfileを行い、グローバルレベル
での環境を作ってしまう!
• とはいえ、それはやってもいいのか?
• 古参PythonistaでPythonic重視派からは異端視
• ネット上どこの掲示板へ行っても、世界中からdisられる原因に
• そこへ、原作者のDr. Massimoさんが必ず出てきて反論を…
二年間使ってきた私の今の印象
• DBへの操作が必要なWebアプリを、とにかく手軽に素早く作るのには向い
ている
• 業務用Webアプリも、最初にとにかく早く作る上では十分に役だった
• ところが、段々と辛くなってきます
• O/Rマッパーではないので、テーブルに対応するクラスを持つべきか、持
たざるべきか?
• テスト容易性(Testability)の問題
• 結局、多くの機能は順次モジュール化していきます
• 以前はlocal_import()関数でしたが、今は普通にimportでいけます
• 本格的な販売管理等の業務アプリケーションを作る際には再考が必要です
実際の使用例
PyCon Asia Pacific 2012
• PyCon Asia Pacific 2012のサイト構築で使
われています
• web2pyのアプリケーション、Conf2pyを
使って構築されているそうです
• 実際にサイトを見てみましょう
アプリの例: Conf2py
• Open Source Conference Management System (GPL2)
• Massimo Di Pierroさんによって作られたweb2pyのアプリケーション
• MetaCryption LLCにより、サポートも提供されている
• スライドショー:
• http://www.slideshare.net/mdipierro/conf2py
• web2py appとしてダウンロード (sourceも含む):
• http://conf2py.googlecode.com/files/web2py.app.conf2py.w2p
• ソースのみダウンロード (google codeより):
• hg clone https://conf2py.googlecode.com/hg/ conf2py
• オンライン・ビデオ(バージョンは古いものが対象):
• http://vimeo.com/1838049 http://vimeo.com/12157148
ライブコーディング
• ここで、実際にライブコーディングで
プログラムを作ってみましょう
web2py関連の情報源
• web2pyの公式サイト
• http://www.web2py.com/
• 日本語化プロジェクト(web2py japan)
• http://groups.google.co.jp/group/web2py-
japan
まとめ
• GAEについて
• Pythonについて
• web2pyについて
• ライブコーディング
• GAEへのデプロイ
勉強会の紹介
• 私が主催する勉強会 (立ち上げた順)
• Python札幌
• 数学勉強会@札幌
• クラウド研究会@札幌
最後に
• ご清聴ありがとうございました。

Pythonおじさんのweb2py挑戦記