Pythonプロダクトを活用した開発チーム運営 in PyCon APAC 2013

Post on 21-May-2015

2.189 views 4 download

description

PyCon APAC 2013 で登壇した際に利用したスライドです。 Pythonプロダクトを活用した開発チームの運営ノウハウを、株式会社ALBERTの実例を元にしてご紹介します。 - Mercurial でソースコード管理 - Sphinx でドキュメント作成 - RhodeCode でコードレビュー

Transcript of Pythonプロダクトを活用した開発チーム運営 in PyCon APAC 2013

Python プロダクトを活用した開発チーム運営

inPyCon APAC 2013

株式会社ALBERT@iktakahiro2013-09-14

Agenda

•ALBERTの開発環境の紹介•Pythonプロダクト活用事例

自己紹介

•株式会社ALBERT•池内 孝啓 / Takahiro Ikeuchi•システム開発部 部長•推しメン : flask•@iktakahiro

株式会社ALBERT

•2005年07月設立•分析力をコアとする マーケティングソリューションカンパニー

•メインの開発言語はJavaです ←

株式会社ALBERT

•データマイニング、統計解析、自然言語処理...•数値計算や機会学習アルゴリズムがプロダクトのコア

•collections, itertools•SciPy, NumPy•Pandas•nltk

Pythonとデータサイエンス

こんな開発環境です

•Java, SAStruts, Play framework,Spring Batch

•Mercurial•RhodeCode•Sphinx•Redmine, Backlog•Jenkins•Python 3.3

今回のテーマ

一部で利用

•2011年に導入•ソースコードのバージョン管理はもちろん•Office系ドキュメントも管理しています

Mercurial

•TortoiseHg, Eclipse Plugin• IntelliJ, PyCharmやNetBeansでは標準で使える

•Source Treeも人気?

Mercurial

•CVSから刷新すべく、Git, Subversion, Bazaar と比較検討して決めた

•たぶん今の開発メンバーの中には、なんでGitにしなかったんだ!と思っている人もいそう...

Mercurial

後悔なんて、あるわけない

•2013年に導入•コードレビューとソースコード探索目的•ディレクトリ構造をみてグループ化してくれるのが何気に便利

Rhodecode

RhodeCode

RhodeCode

RhodeCode Gist

•2013年に導入、やっと運用に乗り始めた段階•ドキュメンテーションツール•Sphinx自体はreST記法なのですが、Markdownで書いてます ※ 詳細後述

Sphinx

健全な開発チーム運営とは

•管理されるべきものが管理されている•技術、仕様の継承が行われている•機能要件以外の品質が担保されている

健全な開発チーム運営

プロジェクト

納品したら

すぐに負債

そんなの、絶対おかしいよ

改善の系譜

•バージョン管理されてないのは論外として•コミット漏れ•レポジトリとプロダクション環境のコードが何故か一致していない

ソースコード管理あるある

デプロイ経路は一本化しましょう

•デプロイはJenkinsに一任•CIや自動化の利便性もそうですが、Commit & Pushしなければデプロイできなくなるので

•コミット漏れをなくすという単純なルールが徹底できます

Mercurial × Jenkins

•ドキュメントを書かないのは論外として•Excel方眼紙ェ•Wordを使いこなしてもそれなりにつらい

ドキュメント作成あるある

でやっぱりドキュメントが書かれなくなる

•ドキュメントもコードとして管理•軽量マークアップ言語で "書くモチベーション"を維持

•再利用性の高いドキュメントを残す

Sphinx × Mercurial

Sphinxとは?

[参考]ドキュメントを作りたくなってしまう魔法のツールSphinx http://www.slideshare.net/shimizukawa/sphinx-6084667

•Python製のドキュメンテーションツール•reStructuredTextでマークアップする•拡張でダイアグラムとかも書ける•Wikiではない

https://www.oreilly.co.jp/books/9784873116488/

Sphinxとは?

•O'REILLYからEbookが出ましたね

•個人で使うにはかなり気軽に始められる•ただしチーム運用には障壁がある- make htmlは誰がやるか?- reST記法の学習コスト- ドキュメントの粒度や階層構造の統一 etc...

Sphinxの課題

•reST記法の学習コストreSTがいやなら、 Markdownで書けば良いじゃない

Pandocでやろう

Pandocとは?

[参考]多様なフォーマットに対応! ドキュメント変換ツールPandocを知ろう http://qiita.com/sky_y/items/80bcd0f353ef5b8980ee

•Haskell製ドキュメント変換ツール•軽量マークアップ言語の相互変換•WordやPDFへの変換もできるすぐれもの•Markdown -> reStructuredText も対応

# 見出し1

## 見出し2

```pythonprint('test')```

Markdown

見出し1======

見出し2---------

.. code:: python

print('test')

reStructuredText

Pandocさんによる変換の例

•ビルド( make html ) は誰がやる?コミット~ビルドを自動化したい

Mercurialのhookスクリプトに任せよう

ディレクトリ構成

/var/hg/sphinx => Webサーバーの doc root にしておく

/var/hg/sphinx/manual1 => Sphinxプロジェクト [manual1] のroot

/var/hg/sphinx/manual1/source => rstファイル置き場。ここをレポジトリにする

/var/hg/sphinx/sphinx_hook.sh => hookスクリプトの置き場所

ディレクトリ構成(つづき)

/var/hg/sphinx/manual1/build/html => make htmlしたときのhtml出力場所 ※プロジェクト作成時の設定による

http://example.com/manual1/build/html/

=> ブラウザから確認できるURI例

hookスクリプトの中身

#!/bin/bash

repository=$1BASE_DIR="/var/hg/sphinx"DIR="${BASE_DIR}/${repository}"

# pyvenvでSphinx環境を作成した場合source /usr/local/sphinx/bin/activate

# 変換処理 (長いけどワンライナーだよ)cd ${DIR}/source && find ./ -name "*.md" | sed -e 's/^.*\///' -e 's/\.md$//' | xargs -i pandoc -f markdown -t rst -o {}.rst {}.md

source/.hg/hgrc の中身

[hooks]pretxnchangegroup.make /var/hg/sphinx/sphinx_hook.sh manual1

レポジトリ名を引数に与えて実行外部からPUSHされたら実行するhook(hookが失敗したらロールバック)

hook処理の流れ

1. レポジトリにPushすると、hookスクリプトが実行される

2. 拡張子 .md のファイルを探し、pandoc で reSTに変換する

3. make html を実行

Sphinx Sample

Sphinx と Pandoc連携の詳細は下記スライドを...

SphinxをMarkdownで使い隊 - SlideShare http://www.slideshare.net/iktakahiro/sphinxmarkdown

Sphinx × Mercurial×

Pandoc

•Markdownで書けるし•きれいなHTMLが出来るのは嬉しい•コミット履歴も差分も見られるし

それはとっても嬉しいなって

•レビュー会してる時間なんかないし•対面レビューも習慣化しない

コーディングあるある

負債のバーゲンセール

•カジュアルにコードを眺められる環境を作る•レビューは好きなときに•コミットリビジョンにコメントを残せる

RhodeCode × Mercurial

RhodeCode Code Review

仲良くマサカリを投げ合えますね ^^

まとめ

•Mercurial•RhodeCode•Sphinx•コード管理•コード品質管理(レビュー)•ドキュメント管理

もう何も恐くない!

•管理されるべきものが管理されている•技術、仕様の継承が行われている•機能要件以外の品質が担保されている

健全な開発チーム運営 : おさらい

今後

•Chef流行ってますがAnsible検証中•Numpy, SciPy, Pandasあたりのノウハウを公開していきたい

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