Pythonで アジャイル 開発サイクル 2010ver.

このコンテンツのコンテキスト

アジャイル開発をやっていると欲しくなる自動化ツール類を全て Python でそろえてみよう!

という Engineering Practiceコンテキスト で話をします。

そのまえに...

そのまえに...

自己紹介1: 清水川 貴之

  • http://清水川.jp/ @shimizukawa

  • お仕事:
    • Python+Thrift+PHPによる認証サーバーとかCMSとか
  • コミュ:
    • Zope/Plone系, Sphinx系, pyspa系, XP系
  • 言語:
    • Python, Rails, 昔はC++/C/8086
_images/sphinxusers.jpg

自己紹介2: 最近やってること

  • Deliverance / xdv
    • Webフレームワークのテンプレを書き換えずにデザイン適用
    • 複数のフレームワークをまたがって同じデザインに

詳しくは http://縮.jp/一点 で!

自己紹介3: 翻訳本を出しました

  • エキスパートPythonプログラミング
    • アスキー・メディアワークス
    • B5変 (416ページ)
    • 3780円
_images/epp.jpg

自己紹介3: 翻訳本を出しました.

エキPythonの概要

  • 1章: 環境別インストール
  • 2章: リスト内包表記, デコレータ
  • 3章: メタクラス, デスクリプタ
  • 4章: 良い名前を選ぶ
  • 5,6章: アプリ作成とパッケージング
  • 7章~11章: ずっとXP的な話
  • 12~15章: 最適化,デザパタ,日本語
_images/epp.jpg

自己紹介3: 翻訳本を出しました..

エキPythonの概要

  • 1章: 環境別インストール
  • 2章: リスト内包表記, デコレータ
  • 3章: メタクラス, デスクリプタ
  • 4章: 良い名前を選ぶ
  • 5,6章: アプリ作成とパッケージング
  • 7章~11章: ずっとXP的な話
  • 12~15章: 最適化,デザパタ,日本語

今日はこのへんの話をします。

_images/epp.jpg

XPとワタシ

XPとの出会いは2002年頃、当時は組み込み開発へのxUnit適用と継続的インテグレーションを実践していました。2003年頃からZope, 2005年からPythonを使い始めましたが、それ以降もUnitTestや自動化といったことを続けています。

アジャイルに必要な自動化

Engineering Practice

  • ソースコード管理の自動化
  • テストの自動化
  • 環境構築の自動化
  • 継続的インテグレーションの実施
  • ドキュメント生成の自動化

ソースコード管理の自動化

まずはソースコード管理から

何を自動化するにしても、まずはコード管理から!

  • VCS (Version Controll System)
  • ソースコード等の履歴を管理
  • 全ての自動化の基盤

VCS: 中央集権 vs 分散

  • 中央集権と言えば: cvs, svn
  • 分散と言えば: hg, bzr, git

中央集権と分散, どっちがいいの?

  • サーバー不要でも使える 分散 が超おすすめ

VCS: 使ってみよう1

  • インストール
    • easy_install mercurial
  • 初期化
    • hg init
  • 複製
    • hg clone

SCM: 使ってみよう2

  • 画面閲覧 & リポジトリ公開
    • hg serve -p 8000
_images/xpfest-repos.jpg

環境構築の自動化

環境構築って何?

プログラムはVCSから入手するだけで動くものはほとんどありません。

  • 関連プログラムの入手, 配置
  • パスの設定, スクリプトの設置
  • 環境設定ファイルの配置, 変更

環境構築の自動化

  • 環境構築手順書 ってありますよね
  • プログラムインストールから設定まで全く引っかからずに5分で出来ますか?
  • buildout で自動化しましょう!

zc.buildout

  • buildout.cfg というini形式のファイルで全て自動化
  • 右の例はZopeとPloneを自動インストールしてプラグインも入れます
[buildout]
parts = zope2 instance
extends = http://dist.plone.org/release/3.3.4/versions.cfg
versions = versions

find-links =
    http://dist.plone.org/release/3.3.4
    http://download.zope.org/ppix/
    http://download.zope.org/distribution/
    http://effbot.org/downloads

eggs =
    Plone
    Products.PloneFlashUpload
    Products.PloneSlimbox
    Products.ATGoogleMap

[zope2]
recipe = plone.recipe.zope2install
fake-zope-eggs = true
additional-fake-eggs = ZODB3
url = ${versions:zope2-url}

[instance]
recipe = plone.recipe.zope2instance
zope2-location = ${zope2:location}
eggs = ${buildout:eggs}
user = admin:admin
http-address = 8080

zc.buildout の実行例

$ hg clone http://xxxxx/ .
$ ls
bootstrap.py   buildout.cfg
$ python bootstrap.py
$ bin/buildout

これでZope/Ploneのインストールと環境構築が完了しました!

zc.buildout デモ

GAE環境を作ります。(デモ)

詳しくは zc.buildout - Python Hack-a-thon 4: ハンズオン を参照してください。

あんちょこ python25 bootstrap.py init -d

zc.buildoutで構築する環境の例

  • Zope/Plone のインストール、プラグイン設定、テスト環境
  • Google App Engine の開発、テスト、デプロイ環境
  • nginx, varnish のビルド、インストール、設定

テストの自動化

ユニットテスト

  • Python標準のunittestライブラリ

  • Nose や py.test などの高機能版

  • PySpec (RSpecのpython版)
    • XP祭り実行委員長 @shibukawa 作

PythonのDocTest

  • 機能の説明文章がそのままテストになるスグレモノ

PythonのDocTest.

def add(x, y):
    """ 二つの値を足します。

    >>> add(1, 2)
    3
    """
    return x + y

PythonのDocTest .

  • 機能の説明文章がそのままテストになるスグレモノ
  • 実際にテストを動かしているところを見てみます

PythonのDocTest-2

PythonのDocTest..

  • 機能の説明文章がそのままテストになるスグレモノ

  • 実際にテストを動かしているところを見てみます
    • 続きは DocTest TDD で検索!

ここでおしらせです

毎月勉強会などをやってます。

9月はほぼ埋まってしまいました>< 10月もやりますよ!

継続的インテグレーションの実施

継続的インテグレ―ション

自動テストサーバー Buildbot

_images/buildbot-logo.png

Buildbotってなに?

_images/buildbot-logo.png

Buildbotってなに?

_images/buildbot-logo.png

buildbot on slideshare

Buildbotを使っているツール類

Buildbot, Python, Webkit, Mozilla, Google Chromium XEmacs, MongoDB, Wireshark ILM, Boost, Zope, Twisted, SpamAssassin, OpenID, KDE, GHC, Subversion, OpenOffice, Jython ...

http://buildbot.net/trac/wiki/SuccessStories

_images/buildbot-logo.png

ドキュメント生成の自動化

ドキュメンテーション– –

ドキュメント作成はさぼってしまいがち

  • 開発終了に向かうにつれて時間がない
  • 自分は文章を書くのが苦手だ
  • 誰も見ない文章は書きたくない

こういった状況から・・・

ドキュメンテーション++

ドキュメントを書くのは楽しい!へ

  • プロジェクト開始時にプロセスを整備
  • 必要な文章を必要な時に書く
  • ソフトウェアコード同様に成長させていく

ドキュメントを書くのをもっと簡単に!

Sphinxとは何か?

  • ドキュメント生成のツール
  • reStructuredText記法(Wikiっぽい?
  • ページ間のリンクを自動生成
  • 強力なコードハイライト
  • HTML, PDF, ePub, htmlhelp, latex, man...
_images/PythonSphinxlogo.png

Sphinxの記入の例

Sphinxのサンプル
=================

Sphinxとは何か?
-----------------
* ドキュメント生成のツール
* reStructuredText記法(Wikiっぽい?
* ページ間のリンクを自動生成
* 強力なコードハイライト
* HTML, PDF, ePub, htmlhelp, latex, man...
_images/sphinx-sample.jpg

ここでちょっと...

良い資料があるので紹介します。

_images/shibu-sphinx.jpg

もうひとつ。

課題管理システム

PythonだとTracが有名ですね。

  • Trac = Wiki + 課題管理 + コード管理

Tracを使う流れ

_images/trac-flow.jpg

Tracを使う流れ.

  • チケット(課題)を登録
    • -> #id が決まる(10とか)
  • 課題の実装・テストしてコミット
    • -> コミットログに #10 と記載
  • チケットに完了リビジョンを記載
    • -> チケットとコミットが関連付け
_images/trac-flow.jpg

最後に

全てをひとつに繋ぐ

  • ソースコード管理の自動化
  • テストの自動化
  • 環境構築の自動化
  • 継続的インテグレーションの実施
  • ドキュメント生成の自動化

全てをひとつに繋ぐ.

_images/landscape1.png

全てをPythonで。

_images/landscape2.png

質問タイム?

おまけ

今日のプレゼンテーションは

  • Sphinx
  • S6 (c) 2007 Cybozu Labs, Inc.

で作成しました。

まとめ

MercurialHG, Bazaar, PyPI, setuptools, easzy_install, zc.buildout, Paver, Nose, py.test, Buildbot, Trac, Sphinx, ...

  • 続きは懇親会、または勉強会で!

ご清聴ありがとうございました