Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pythonおじさんのweb2py挑戦記

3,389 views

Published on

2012-09-16 Python Conference Japan 2012
中村 良幸 @nakayoshix
Python札幌 / 数学勉強会@札幌 / クラウド研究会@札幌

Published in: Software
  • Be the first to comment

Pythonおじさんのweb2py挑戦記

  1. 1. Pythonおじさんの web2py挑戦記 2012-09-16 Python Conference Japan 2012 中村 良幸 @nakayoshix Python札幌 / 数学勉強会@札幌 / クラウド研究会@札幌
  2. 2. 今日のアジェンダ • 自己紹介と札幌の勉強会事情 • PythonのWeb Application Framework • web2pyの特徴的な機能及び利点と欠点 • web2pyの事例紹介 • web2pyによるライブコーディング • まとめ
  3. 3. 自己紹介 • 中村 良幸 → なかむら よしゆき → なかよし(ワタミメソッド) → nakayoshix(xを付けて) → 統合ID: nakayoshix です。(キリッ
  4. 4. 仕事でやってきたこと • 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による業務用アプリ開発を色々と…
  5. 5. 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で
  6. 6. Pythonによる自社用アプリケーション開発歴 • 2010年∼2012年にかけて、SSLサーバ証明書の申請管理システムを開発 • 初めてのweb2pyによる業務用Webアプリケーションの開発 • 他システムとのAPI連携がたくさん • Google Apps, Zoho CRM, kintone, JIRAとの間のREST API連携 • Root CAとの間の証明書ベースによる暗号化されたSOAP API連携 • ぼっちdeveloperゆえ、基本的に全て独りで開発。最近ではサーバーへの デプロイ、サーバの保守管理、セキュリティ、ログ管理、社内PC管理 等々まで独りで… • 本当は、今日はその実際の事例を紹介しようと思っていましたが、諸般 の事情でそれが不可能になりました。
  7. 7. というわけで… •Pythonおじさんです。(キリッ
  8. 8. 勉強会活動について • 札幌で色々と勉強会を主宰しています • Python札幌 / from sapporo import *; with the Zen of Python • 現在、「Python初学者向け読書会@札幌」を隔週木曜で開催中 • 数学勉強会@札幌 / 大人のためのやり直しの数学勉強会 • 現在、「解析の基礎」を教科書に、毎週月曜に勉強会を開催中 • クラウド研究会@札幌 / 年に一度の「クラウド温泉@小 」 • 現在、「ぼちぼちHaskell勉強会@札幌」を隔週木曜で開催中 • 勉強会充です。(キリッ
  9. 9. その他、趣味とか興味とか • オープンソース関連活動 • オープンソースのCRM, openCRXの日本語化 • openCRXのベースとなるMDAフレームワーク、openMDX • 最近興味があるのは… • 関数型言語、特にHaskell (ついでにScala & F#) • Monadとその理論的背景である圏論、代数構造 • 好きなエディタはEmacs • Emacs歴24年になります。自称・Emacsおじさんです。(キリッ • 日常生活では • 1994年からヨーガを始めたので、ヨーガ歴24年です。
  10. 10. 前置きはここまで • ここからが本編です
  11. 11. Pythonで作られた各種の Web Application Framework • Django - 豊富な実績、多くのPaaSでも標準で使える いわゆるフルスタックフレームワーク • TurboGears ( → Pylonsと統合) • Pylons (→ Pyramidと統合) • Pyramid - Python3へ対応済み、Zope由来、自由度最大 • Flask - マイクロフレームワーク by @mitsuhiko • web2py - 今日紹介するものです
  12. 12. 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さんは、元々は物理屋さんです。
  13. 13. web2pyの特徴・その1 • フルスタックのフレームワーク • セキュリティを重要視している • 全てブラウザのみで開発が可能 • インストール不要 → web2py_src.zipを展開するだけで使用可能に • そのままGAEにデプロイが可能 • 開発当初より後方互換性を維持
  14. 14. フルスタックとは? • SSLとストリーミングが可能なWebサーバー • SQLを動的に作成するデータベース抽象レイヤ (DAL) • 多様な認証方式とロールベースアクセス制御 • Localの他, OpenID, OAuth, Janrain, CAS連携等が可能 • グループとロールベースによる完全なアクセス制御 • エラーロギングとチケットシステムの統合 • スケーラビリティのための様々なキャッシュメソッド、等々
  15. 15. セキュリティ重視 • The Open Web Application Security Project (OWASP) のいうと ころのセキュリティ上の問題トップ10を未然に防ぐための仕 組みを内蔵 • クロスサイトスクリプティング • インジェクションフロー • ディレクトリトラバーサル • 悪意のあるファイルの実行 • Audit Trail (監査証跡) 機能も追加されている
  16. 16. Web IDEでブラウザによる開発 • 強力な機能を持つWeb IDEを標準で持つ • 開発、テスト、デプロイ、メンテナンスといったアプリ ケーション開発の各フェーズに対して、ローカルやリ モートから操作のできるWebのインターフェイスを提供 • 新規アプリ作成時のウィザード機能も追加された • Mercurialがインストールされていれば、バージョン管理 までWeb IDE上で可能になった • 結論として、ブラウザのみで全ての開発が可能です
  17. 17. Emacsによる開発も可能 • とはいえ、Web IDEは単なる釣りです • Emacsのみによる開発ももちろん可能です • 通常はEmacsでソースコードを編集し、ターミナルから web2py用のシェルを起動して動作確認を行います • ipythonがインストールされていれば、それを使います • bpythonがインストールされていればそちらを優先します • 開発中のイメージを次に…
  18. 18. GAEへのデプロイ • 一部制限はあるものの、GAEにデプロイしてそのまま 動作させることが可能 • 一部制限とはDB設計の根本的な違いが原因 → BigTableはRDBではないため • アプリケーションID以外はソースコード以外の設定 ファイル等も書き換える必要なし • GAEへのデプロイに関しても、今はWeb IDEからク リック一発でインストールが可能に
  19. 19. web2pyの特徴・その2 • 多くのDBに対応した強力なDAL機能 • 強力なテンプレート機能を備えたView機能 • AppAdminはDjangoAdminとは少し方向性が違うが非常に便利 • RESTやSOAP等、多くのWeb Serviceに標準で対応 • 全てにおいてデフォルト値を持つ → 初期状態において、設定なしですぐに動作可能 • ボイラープレートコードを極限まで排除 • ネット上のコミュニティが活発 → 進化がとても早い
  20. 20. 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にも対応済み
  21. 21. Pythonなのにimport文が不要 • ボイラープレートコードを極限まで排除 • フレームワークの基本機能に関しては、importが不要 • VとCにおいて、HTMLタグをPythonの関数で作ることが可能 • その代わり、フレームワーク側でexecfileを行い、グローバルレベル での環境を作ってしまう! • とはいえ、それはやってもいいのか? • 古参PythonistaでPythonic重視派からは異端視 • ネット上どこの掲示板へ行っても、世界中からdisられる原因に • そこへ、原作者のDr. Massimoさんが必ず出てきて反論を…
  22. 22. 二年間使ってきた私の今の印象 • DBへの操作が必要なWebアプリを、とにかく手軽に素早く作るのには向い ている • 業務用Webアプリも、最初にとにかく早く作る上では十分に役だった • ところが、段々と辛くなってきます • O/Rマッパーではないので、テーブルに対応するクラスを持つべきか、持 たざるべきか? • テスト容易性(Testability)の問題 • 結局、多くの機能は順次モジュール化していきます • 以前はlocal_import()関数でしたが、今は普通にimportでいけます • 本格的な販売管理等の業務アプリケーションを作る際には再考が必要です
  23. 23. 実際の使用例 PyCon Asia Pacific 2012 • PyCon Asia Pacific 2012のサイト構築で使 われています • web2pyのアプリケーション、Conf2pyを 使って構築されているそうです • 実際にサイトを見てみましょう
  24. 24. アプリの例: 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
  25. 25. ライブコーディング • ここで、実際にライブコーディングで プログラムを作ってみましょう
  26. 26. web2py関連の情報源 • web2pyの公式サイト • http://www.web2py.com/ • 日本語化プロジェクト(web2py japan) • http://groups.google.co.jp/group/web2py- japan
  27. 27. まとめ • GAEについて • Pythonについて • web2pyについて • ライブコーディング • GAEへのデプロイ
  28. 28. 勉強会の紹介 • 私が主催する勉強会 (立ち上げた順) • Python札幌 • 数学勉強会@札幌 • クラウド研究会@札幌
  29. 29. 最後に • ご清聴ありがとうございました。

×