47
Python プロダクトを活用した 開発チーム運営 in PyCon APAC 2013 株式会社ALBERT @iktakahiro 2013-09-14

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

inPyCon APAC 2013

株式会社ALBERT@iktakahiro2013-09-14

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

Agenda

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

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

自己紹介

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

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

株式会社ALBERT

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

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

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

株式会社ALBERT

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

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

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

Pythonとデータサイエンス

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

こんな開発環境です

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

•Java, SAStruts, Play framework,Spring Batch

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

今回のテーマ

一部で利用

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

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

Mercurial

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

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

•Source Treeも人気?

Mercurial

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

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

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

Mercurial

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

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

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

Rhodecode

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

RhodeCode

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

RhodeCode

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

RhodeCode Gist

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

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

Sphinx

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

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

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

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

健全な開発チーム運営

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

プロジェクト

納品したら

すぐに負債

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

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

改善の系譜

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

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

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

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

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

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

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

Mercurial × Jenkins

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

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

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

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

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

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

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

Sphinx × Mercurial

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

Sphinxとは?

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

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

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

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

Sphinxとは?

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

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

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

Sphinxの課題

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

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

Pandocでやろう

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

Pandocとは?

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

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

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

# 見出し1

## 見出し2

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

Markdown

見出し1======

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

.. code:: python

print('test')

reStructuredText

Pandocさんによる変換の例

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

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

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

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

ディレクトリ構成

/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スクリプトの置き場所

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

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

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

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

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

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

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

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

source/.hg/hgrc の中身

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

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

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

hook処理の流れ

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

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

3. make html を実行

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

Sphinx Sample

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

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

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

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

Sphinx × Mercurial×

Pandoc

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

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

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

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

コーディングあるある

負債のバーゲンセール

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

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

RhodeCode × Mercurial

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

RhodeCode Code Review

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

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

まとめ

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

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

もう何も恐くない!

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

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

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

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

今後

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

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

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