Pythonおじさんのweb2py挑戦記

2,785 views

Published on

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

Published in: Software
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,785
On SlideShare
0
From Embeds
0
Number of Embeds
67
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

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. 最後に • ご清聴ありがとうございました。

×