ドキュメント、書いてますか? @ Python hack-a-thon 2011/2

3,708 views
3,526 views

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,708
On SlideShare
0
From Embeds
0
Number of Embeds
359
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ドキュメント、書いてますか? @ Python hack-a-thon 2011/2

  1. 1. ドキュメント、書いてますか?<br />小宮 健 (@tk0miya)<br />2011-02-19<br />
  2. 2. おまえ誰よ?<br />小宮 健 (@tk0miya)<br />株式会社タイムインターメディア所属<br />技術者募集中らしいです<br />Python 歴は約 1年ぐらい<br />Sphinx-users の方から来ました<br />15時ぎりぎりまで資料作ってました<br />分かりづらかったらごめんなさい!<br />
  3. 3. はじめに<br />このスライドの内容<br />ドキュメント、書いてますか?<br />Inside blockdiag (と仲間たち)<br />資料はあとで会社のブログにアップします<br />http://labs.timedia.co.jp/<br />“TIM Labs” で検索してください<br />
  4. 4. ドキュメント、書いてますか?<br />
  5. 5. 理想と現実<br />ドキュメントは書くべき。<br />実際のところは?<br />ドキュメント書く時間がない<br />コスト (リソース) がない<br />そもそも開発が終わらない<br />口伝でなりたっているプロジェクト<br />= 一子相伝的プロジェクト<br />
  6. 6. こんな子いるかな?<br />「(納品しないから)今回はドキュメントなしで」<br />「機能一覧に書いてない機能がたくさんある」<br />「運用でカバーすることにしよう」<br />「仕様書はあったら嬉しいなって」<br />「ドキュメントなんて、あるわけない」<br />「こんなの絶対おかしいよ」<br />
  7. 7. 誰のためのドキュメント?<br />納品物としてのドキュメント<br />お客さんのもの<br />設計/運用のためのドキュメント<br />自分たちのもの<br />もしくは引き継ぐ誰かのためものもの<br />大抵足りないのは設計/運用のためのドキュメント<br />つまり困るのは自分たち!<br />
  8. 8. 作ったはいいけれど…<br />そのドキュメント、メンテナンスできてますか?<br />合ってないテーブル定義<br />足りない機能一覧<br />キャプチャが古いマニュアル<br />更新したいけどコスト/時間が足りない<br />あとで泣くのは自分<br />もしくは引き継ぐ羽目になった誰か<br />書いて終わりではなく、メンテできる大きさが大事<br />立派である必要はない<br />ドキュメントだって Lightweight 重要<br />
  9. 9. Lightweight なドキュメント<br />ツールをうまく使う<br />Sphinx、Wiki で書く<br />ソースに埋め込む -> docstringを Sphinx などで抽出<br />やり方を変える<br />テンプレートでショートカットする<br />shimizukawaテンプレート @ Sphinx-users<br />常に書き換える (Wiki 方式)<br />無理なく、楽しく、続けられるドキュメントであること<br />
  10. 10. ここまでのまとめ<br />設計/運用のためのドキュメントを書こう<br />書くだけじゃダメ、更新もしなくちゃ。<br />無理なく、続けられる方法が必要<br />Sphinx を使おう<br />テンプレート化していこう<br />Excel 方眼紙は止めよう<br />ここのツールを作った<br />
  11. 11. Inside blockdiag (と仲間たち)<br />
  12. 12. blockdiag<br />テキストから画面遷移図を生成するツール<br />コマンドライン / Sphinx 拡張として動作<br />悪名高きExcel 方眼紙がイヤで作った<br />並べ替えるのが面倒、ずれる 、etc…<br />
  13. 13. blockdiagの特徴<br />定義ファイル(テキスト)から画像(PNG, SVG)を生成<br />Graphvizっぽい文法 (DOT like 文法)<br />自動的にレイアウトしてくれる<br />追加/削除が簡単<br />ずれたりしない<br />日本語 (UTF-8) 対応<br />easy_installblockdiagでインストール可能<br />
  14. 14. blockdiag の使い方<br />遷移図の定義を作ります<br />diagram {<br /> A -> B -> C;<br /> B -> D;<br />}<br />blockdiagコマンドで画像を生成<br />% blockdiag –o sample.png input.diag<br />
  15. 15. Inside blockdiag<br />blockdiagは 4つのパートから構成される<br />パーサ<br />レイアウトエンジン<br />描画エンジン<br />ノードレンダラー<br />
  16. 16. Inside blockdiag:パーサ<br />DOT 文法 (graphviz由来) をまねた文法を採用<br />diagram {<br /> A -> B -> C;<br /> B -> D;<br />}<br />テキストでもわかりやすい (like reST!)<br />ノード間の関係や属性をわかりやすく表現できる<br />funcparserlibを利用してパーサを生成<br />依頼して Python 2.4 でも動くようにしてもらった<br />
  17. 17. Inside blockdiag:レイアウトエンジン<br />レイアウトエンジン<br />X 軸(横方向)、Y 軸(縦方向) の順に並べている<br />説明が大変なので中身は割愛します<br />自分がきれいだと思うようにレイアウト<br />完全にヒューリスティック<br />「見やすさ」は感覚的なもので正解はない<br />イマイチなものを見かけたら教えて下さい<br />
  18. 18. Inside blockdiag:描画エンジン<br />blockdiagは PNG/SVG/PDF 形式で出力できる<br />バックエンドには PIL/SVGdraw.py/reportlabを利用<br />
  19. 19. Inside blockdiag:描画エンジン<br />PIL っぽいインターフェースで中間層を作っている<br />line, rectangle, arc, ellipse などの API がそろってる<br />手がかかってる部分<br />PIL で点線を書けるようにした<br />SVG でテキスト折り返し<br />影のぼかし部分<br />
  20. 20. Inside blockdiag:レンダラー<br />ノードの形状は差し替え可能になっている<br />プラグインを書くことで形状を追加することができる<br />
  21. 21. Inside blockdiag:レンダラー<br />新しいシェイプを足す場合はプラグインを書く<br />図形を書く、塗る、ラベルを配置する、接点を調整する<br />図形の組み合わせで簡単に作れる<br />来週あたりにプラグインの書き方を公開するつもり<br />是非作って下さい<br />
  22. 22. Inside blockdiag:周辺ツール<br />Interactive shell<br />デモツールとして大好評<br />Appengine上で動いている<br />フォームを書き換える度にリクエストしている<br />Appengineでは PIL が動かないので SVG 出力してる<br />問題点:blockdiagそのものだと勘違いされてる気がする<br />
  23. 23. Inside blockdiag:周辺ツール<br />Web クローラー<br />Pycon mini JP のデモ用に作成<br />デザイナーさんからキャプチャ画像で遷移図を作るという話を聞いたので作ってみた<br />urllib + lxmlでスクレイプ + クローリング<br />便利なクローラーライブラリを教えて下さい<br />PyQtでキャプチャ取得 (by ransui先生)<br />生成される図がでかすぎて閲覧不能<br />デモ用と割り切って作り捨てることに。<br />
  24. 24. Inside blockdiag:周辺ツール<br />Sphinx<br />言わずもしれた便利なアイツ<br />Sphinx 拡張を使うと reSTに直接埋め込むことができる<br />.. blockdiag::<br /> diagram {<br /> A -> B -> C;<br /> B -> D;<br /> }<br />Sphinx との組み合わせは超便利 (らしい)<br />
  25. 25. seqdiag<br />テキストからシーケンス図を生成するツール<br />コマンドライン / Sphinx 拡張として動作<br />@shimizukawa師匠の指示で作らされた作った<br />
  26. 26. ある日のできごと<br />このイラストは実在の団体とは関係ありません<br />Sphinx のドキュメントにシーケンス図を埋め込みたい<br />sdeditを使ったら? -> Java 入れるのイヤ。<br />作って。なう。<br />
  27. 27. blockdiag の使い方<br />シーケンス図の定義を作ります<br />diagram {<br /> browser => server;<br />}<br />seqdiagコマンドで画像を生成<br />% seqdiag –o sample.png input.diag<br />
  28. 28. Inside seqdiag<br />blockdiagコアを利用して 2時間でプロトタイプ作成<br />1週間かけてちゃんと作り込んだ<br />以降、絶賛放置中<br />バグつぶしをしたら開発終了の予定<br />シンプルに書いて、それっぽい図ができる<br />Blockdiagと同じような周辺ツールがある<br />Interactive Shell<br />Sphinx 拡張<br />
  29. 29. schema2rst<br />DB スキーマから定義書を生成する<br />Foreign Key から ER 図っぽいものも生成できる<br />サンプル<br />以前作った schema2excel.rb を Sphinx 向けにリファイン<br />Rails 風の DB Migration システムと相性がいい気がする<br />作りながらスキーマを随時拡張していく<br />
  30. 30. Inside schema2rst<br />スキーマ情報の抽出<br />Information_Schemaからごりごり SELECT してるだけ<br />MySQLでコメントを付けておくと表現がリッチに<br />他の DBMS への対応はそのうち考えます<br />ER 図の生成<br />dot ファイルを生成して Graphvizに渡してる<br />テーブルが多すぎると図が大きくなって見づらい (体験談)<br />面倒なので bitbucketで公開してるだけ<br />
  31. 31. ここまでのまとめ<br />blockdiagは謎の技術で動いているわけじゃない<br />普通の Python スクリプト<br />素直なコードが多いので読みやすいはず<br />但しレイアウトエンジンを除く<br />要するに…<br />Contributer募集。<br />ブロック図とか UML とか好きな人<br />ドキュメントを楽して書くために苦労できる人<br />道のりが遠すぎて燃え尽きそうです。助けて<br />
  32. 32. 次の目標<br />ブロック図を作る<br />機能構成とかシステム構成を表現する図<br />http://twitter.com/#!/tk0miya/status/36083686684377088<br />文書テンプレートの作成<br />みんなが使ってるドキュメントからいいところを抽出<br />いろんな人から意見を聞きたい!<br />書くのが面倒くさくない / メンテするのにちょうどいい量<br />@shimizukawaを巻き込んで、まとめていきます<br />興味がある人は声かけてください<br />
  33. 33. まとめ<br />ドキュメントは楽して楽しく書こう<br />自分のために。誰かのために<br />書いて終わりではなく、メンテできる大きさが大事<br />ツールややり方を工夫するとドキュメントは辛くない<br />Excel 方眼紙はもはや化石<br />Sphinx は冴えた一つのやり方<br />もちろん blockdiag, seqdiagもね<br />楽するためには知恵と経験が必要<br />テンプレート、ツール群<br />知識やアイディアください (@tk0miya まで)<br />

×