Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Pythonを中心としたチーム開発

7,255 views

Published on

CEDEC 2015
Technical Artist Bootcamp 2015 vol.2 (前半)

http://cedec.cesa.or.jp/2015/session/VA/2720.html

Published in: Technology
  • Be the first to comment

Pythonを中心としたチーム開発

  1. 1. Technical Artist Bootcamp 2015 vol.2 Pythonを中心としたチーム開発 - 個の力を組織の力に - スマイルテクノロジーユナイテッド株式会社 代表取締役社長 高橋涼
  2. 2. Technical Artist Bootcamp 2015 vol.2 はじめに
  3. 3. Technical Artist Bootcamp 2015 vol.2 TAによる効率化 → 同じツールの改良ばかり?
  4. 4. Technical Artist Bootcamp 2015 vol.2 TAを集めて大規模ツールを開発 → なぜか進捗が悪い。やりにくい。
  5. 5. Technical Artist Bootcamp 2015 vol.2 属人化
  6. 6. Technical Artist Bootcamp 2015 vol.2 アイデアと実行力
  7. 7. Technical Artist Bootcamp 2015 vol.2 チームでツール開発するためのルール
  8. 8. Technical Artist Bootcamp 2015 vol.2 できるだけPythonで書く
  9. 9. Technical Artist Bootcamp 2015 vol.2 内訳 • コマンドラインツール • スタンドアロンGUIツール • PySide • ウェブアプリ • Flask • Django • DCCツールプラグイン • Autodesk Maya • Adobe Photoshop • Autodesk 3dsMax • Foundry MODO
  10. 10. Technical Artist Bootcamp 2015 vol.2 ルール 1. SCMで内製ツール管理 2. PEP8準拠のコードスタイル 3. テストコード 4. 自動化
  11. 11. Technical Artist Bootcamp 2015 vol.2 1. SCMで内製ツール管理
  12. 12. Technical Artist Bootcamp 2015 vol.2 ファイルサーバー直接参照 絶対に禁止
  13. 13. Technical Artist Bootcamp 2015 vol.2 USERTA 開発からリリースの流れ develop master
  14. 14. Technical Artist Bootcamp 2015 vol.2 ディレクトリ構成 ├─jenkins ├─maya │ ├─2016 │ │ ├─icons │ │ ├─plug-ins │ │ ├─python │ │ │ ├─stu │ │ │ └─testsuite │ │ └─scripts │ └─testsuite ├─photoshop └─setup
  15. 15. Technical Artist Bootcamp 2015 vol.2 Fabric==1.10.1 Jinja2==2.7.3 Pillow==2.7.0 PySide==1.2.2 flake8==2.2.4 Flask==0.10.1 lxml==3.4.0 nose==1.3.4 pathlib==1.0.1 pep8==1.5.7 py2exe==0.6.10a1 pycrypto==2.6 pyflakes==0.8.1 python-dateutil==2.4.0 python-docx==0.7.6 python-pptx==0.5.6 PyOpenGL==3.1.1a1 requests==2.5.0 simplejson==3.6.4 xlrd==0.9.3 Python環境の統一 • サードパーティ製モジュールはpipでインストール • PyPIから指定したバージョンをダウンロードしてインストール してくれる 引用:https://pypi.python.org/pypi requirements.txtの例
  16. 16. Technical Artist Bootcamp 2015 vol.2 すんなりとは行かなかった • 問題 • .whlを用意していないモジュールが少なからず存在する • MayaのdistutilsではPyPIからインストールできないモジュー ルがある • .pydをMayaで読み込むためにはマニフェスト情報が必要 • 解決策 • 自前で.whlファイルを用意してSCMに入れておく
  17. 17. Technical Artist Bootcamp 2015 vol.2 • Pythonのインストール • PATHに「C:Python27; C:Python27Scripts」を追加 • サードパーティ製モジュールのインストール • C:Python27 • C:Program FilesAutodeskMaya2016Python セットアップスクリプトの作成 % python get-pip.py % python –m pip install –r requirements.txt –f wheelhouse/ % “C:Program FilesAutodeskMaya2016binmayapy.exe” get-pip.py % “C:Program FilesAutodeskMaya2016binmayapy.exe” –m pip install –r requirements.txt –f wheelhouse/ % msiexec /i python-2.7.10.amd64.msi /qn
  18. 18. Technical Artist Bootcamp 2015 vol.2 2. PEP8準拠のスタイル
  19. 19. Technical Artist Bootcamp 2015 vol.2 • ソースコードの読みにくさの原因は コードスタイルの違い • インデント • 行の長さ • 命名規則 等 • コミュニティによって議論された標 準コードスタイルがPEP8 • 行の長さは99文字までOK PEP8とは? 引用:http://pep8-ja.readthedocs.org/ja/latest/
  20. 20. Technical Artist Bootcamp 2015 vol.2 メソッドがどのモジュールで定義されているか分からない インデントに一貫性がないた め、コピペで問題が起こる 変数名の命名規則に一貫性がない スペースの使い方に一貫 性がなくてイライラする
  21. 21. Technical Artist Bootcamp 2015 vol.2 pep8.py と pyflake.py • pep8.py • コードスタイルチェック • pyflake.py • 簡単な静的解析 • 同時に両方実行してくれるflake8を使用 % flake8 rename_all_joints_bad.py rename_all_joints_bad.py:14:1: W191 indentation contains tabs rename_all_joints_bad.py:14:10: E201 whitespace after '(' rename_all_joints_bad.py:14:13: E251 unexpected spaces around keyword / parameter equals rename_all_joints_bad.py:14:20: E202 whitespace before ')' rename_all_joints_bad.py:15:1: W191 indentation contains tabs rename_all_joints_bad.py:18:1: W191 indentation contains tabs rename_all_joints_bad.py:18:23: E201 whitespace after '(' rename_all_joints_bad.py:18:45: E202 whitespace before ')' rename_all_joints_bad.py:19:25: E901 IndentationError: unindent does not match any outer indentation level rename_all_joints_bad.py:19:34: E901 IndentationError: unindent does not match any outer indentation level
  22. 22. Technical Artist Bootcamp 2015 vol.2 3. テストコード
  23. 23. Technical Artist Bootcamp 2015 vol.2 テストコードの例 ジョイントをリネームするスクリプト (アプリケーション層とライブラリ層) ライブラリ層のテストコード mbの読み込み 実行してFalseが返ってこなければ例外発生
  24. 24. Technical Artist Bootcamp 2015 vol.2 noseをコマンドラインで実行 % nosetests.exe testsuite/ (省略. . . ) ---------------------------------------------------------------------- Ran 2 tests in 37.296s FAILED (failures=1) • testsuite/以下の • test_で始まるモジュールの • unittest.TestCaseの派生クラスの • test_で始まるメソッドを • 全てテストケースとして自動的に実行してくれる • 全バージョンのMayaのmayabatch.exeを呼び出してテストしている
  25. 25. Technical Artist Bootcamp 2015 vol.2 Maya上でのnose実行例
  26. 26. Technical Artist Bootcamp 2015 vol.2 testdir = ur”C:CEDEC2015_workspacedevelopmaya2016pythontestsuite” test_program = nose.core.main(defaultTest=testdir, exit=False) if test_program.success: print(u"TESTSUITE (SUCCESS) : all testsuites") else: print(u"TESTSUITE (FAIL) : any testsuites")
  27. 27. Technical Artist Bootcamp 2015 vol.2 コツは、無い • 他人のコードを読もう • 設計が綺麗なコードはテストしやすい。テストしにくいという ことは設計に難がある • ファイル入出力などデバイス依存はアプリケーション層(上位レベル)で行う • 複数のことを行ってしまう関数はテストケースが膨大に膨れ上がる • Mayaではシーン情報をJSONファイルに出力し、答えJSONとの 比較で済ますと比較的楽(結合テスト)
  28. 28. Technical Artist Bootcamp 2015 vol.2 4. 自動化
  29. 29. Technical Artist Bootcamp 2015 vol.2 Jenkins • 継続的インテグレーションツール • 一定時間毎に指定したジョブを実行する • 結果をウェブインターフェイスでグラフィカルに表示できる • 定番プラグイン • Build Pipeline Plugin • Parameterized Trigger plugin
  30. 30. Technical Artist Bootcamp 2015 vol.2 jenkinsで自動化 全テストコード の実行 Setupスクリプト をミラーリング develop master
  31. 31. Technical Artist Bootcamp 2015 vol.2 使用するbatもSCMで管理 ├─jenkins │ 001_sync.bat │ 101_mirror_setup.bat │ 201_unittest.bat
  32. 32. Technical Artist Bootcamp 2015 vol.2 隕石が落ちてきても大丈夫 引用:2013年2月15日にロシアで発生した隕石落下の映像 https://www.youtube.com/watch?t=23&v=iCawTYPtehk
  33. 33. Technical Artist Bootcamp 2015 vol.2 細かなルール
  34. 34. Technical Artist Bootcamp 2015 vol.2 テキストエディター
  35. 35. Technical Artist Bootcamp 2015 vol.2 必要な機能 • シンタックスに応じたカラースキーム • 自動補完・タブのスペース化などの言語サポート • マルチバイトエンコーディング • 外部コマンド実行 • できれば、マルチプラットフォーム
  36. 36. Technical Artist Bootcamp 2015 vol.2 エディタとデバッガー • 導入が楽なので推奨 • PyCharm • MayaのPythonをリモートデバッグ • VisualStudio + PTVS • PyCharm • VisualStudio + PTVS • Sublime Text • Vim
  37. 37. Technical Artist Bootcamp 2015 vol.2 pymel • maya.cmds禁止 • 結果がすべて文字列で返ってくる • 独自ラッパークラスだらけになってしまう • pymelはMELとAPIをうまく組み込んだクラスを定義してくれて いるので非常に使いやすい • ただし • ジオメトリを頂点単位で処理する等ループが多数発生するツール、またはAPIメソッ ドによりUndoが困難な処理は素直にC++で書く • アトリビュートのシフト演算子(>>,<<)は使用禁止
  38. 38. Technical Artist Bootcamp 2015 vol.2 Qt • GUIはすべてQt(PySide)で作成する • .uiファイルをQtDesignerで作成 • レイアウトのみ • シグナル関連はpythonコードで定義(.uiと.pyに分散してしまうのを防ぐため) • 再利用可能な最小単位で.uiを作成 • ダイアログ • リストアイテム • .pyに変換してから使う
  39. 39. Technical Artist Bootcamp 2015 vol.2 共有ライブラリの例:デコレータ
  40. 40. Technical Artist Bootcamp 2015 vol.2 デコレータとは?
  41. 41. Technical Artist Bootcamp 2015 vol.2 @keep_selection
  42. 42. Technical Artist Bootcamp 2015 vol.2 関数が呼び出される前後の処理を定義 • セレクション状態を元に戻す • 単位(unit)を元に戻す • UndoChunkを管理する • 例外をキャッチしてダイアログ表示したりログに保存したり • 等々・・・応用範囲は非常に広く、共有しやすい。
  43. 43. Technical Artist Bootcamp 2015 vol.2 with文で使うコンテキストも便利
  44. 44. Technical Artist Bootcamp 2015 vol.2 コミュニティ
  45. 45. Technical Artist Bootcamp 2015 vol.2 モジュールに不具合があったら自分で直す
  46. 46. Technical Artist Bootcamp 2015 vol.2 コミュニティへの還元 • pep8.py,simplejsonのBOMサポートパッチ作成 • 実装とテストコードがあれば、英語力が低くても気持ちは伝わる • 無事マージされた
  47. 47. Technical Artist Bootcamp 2015 vol.2 おまけ
  48. 48. Technical Artist Bootcamp 2015 vol.2 C++を中心としたチーム開発 • C++11 • noseでpython経由の結合テスト • コードスタイル • Google C++ Style Guide • cpplint.py JavaScriptを中心としたチーム開発 • 環境構築 • Node.js + gulp • コードスタイル • Google JavaScript Style Guide • gjslint • jshint
  49. 49. Technical Artist Bootcamp 2015 vol.2 まとめ • コミュニティで議論されている規約には乗っかる • 議論の規模が違う • 標準規格に則ったツールの導入 • 徹底した自動化 • コードスタイルチェック • 設定作業の自動化による環境統一 • 内製ツールの動作確認 • 属人性を排除しメンテナンス性を高めることが 新しいチャレンジへの第1歩
  50. 50. Technical Artist Bootcamp 2015 vol.2 ご清聴ありがとうございました スマイルテクノロジーユナイテッド株式会社 代表取締役社長 高橋涼 ryo.takahashi@smiletechnology.jp

×