Download - 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あたりのノウハウを公開していきたい
ご清聴ありがとうございました