SlideShare uma empresa Scribd logo
1 de 50
Technical Artist Bootcamp 2015 vol.2
Pythonを中心としたチーム開発
- 個の力を組織の力に -
スマイルテクノロジーユナイテッド株式会社
代表取締役社長 高橋涼
Technical Artist Bootcamp 2015 vol.2
はじめに
Technical Artist Bootcamp 2015 vol.2
TAによる効率化
→ 同じツールの改良ばかり?
Technical Artist Bootcamp 2015 vol.2
TAを集めて大規模ツールを開発
→ なぜか進捗が悪い。やりにくい。
Technical Artist Bootcamp 2015 vol.2
属人化
Technical Artist Bootcamp 2015 vol.2
アイデアと実行力
Technical Artist Bootcamp 2015 vol.2
チームでツール開発するためのルール
Technical Artist Bootcamp 2015 vol.2
できるだけPythonで書く
Technical Artist Bootcamp 2015 vol.2
内訳
• コマンドラインツール
• スタンドアロンGUIツール
• PySide
• ウェブアプリ
• Flask
• Django
• DCCツールプラグイン
• Autodesk Maya
• Adobe Photoshop
• Autodesk 3dsMax
• Foundry MODO
Technical Artist Bootcamp 2015 vol.2
ルール
1. SCMで内製ツール管理
2. PEP8準拠のコードスタイル
3. テストコード
4. 自動化
Technical Artist Bootcamp 2015 vol.2
1. SCMで内製ツール管理
Technical Artist Bootcamp 2015 vol.2
ファイルサーバー直接参照
絶対に禁止
Technical Artist Bootcamp 2015 vol.2
USERTA
開発からリリースの流れ
develop
master
Technical Artist Bootcamp 2015 vol.2
ディレクトリ構成
├─jenkins
├─maya
│ ├─2016
│ │ ├─icons
│ │ ├─plug-ins
│ │ ├─python
│ │ │ ├─stu
│ │ │ └─testsuite
│ │ └─scripts
│ └─testsuite
├─photoshop
└─setup
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の例
Technical Artist Bootcamp 2015 vol.2
すんなりとは行かなかった
• 問題
• .whlを用意していないモジュールが少なからず存在する
• MayaのdistutilsではPyPIからインストールできないモジュー
ルがある
• .pydをMayaで読み込むためにはマニフェスト情報が必要
• 解決策
• 自前で.whlファイルを用意してSCMに入れておく
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
Technical Artist Bootcamp 2015 vol.2
2. PEP8準拠のスタイル
Technical Artist Bootcamp 2015 vol.2
• ソースコードの読みにくさの原因は
コードスタイルの違い
• インデント
• 行の長さ
• 命名規則 等
• コミュニティによって議論された標
準コードスタイルがPEP8
• 行の長さは99文字までOK
PEP8とは?
引用:http://pep8-ja.readthedocs.org/ja/latest/
Technical Artist Bootcamp 2015 vol.2
メソッドがどのモジュールで定義されているか分からない
インデントに一貫性がないた
め、コピペで問題が起こる
変数名の命名規則に一貫性がない
スペースの使い方に一貫
性がなくてイライラする
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
Technical Artist Bootcamp 2015 vol.2
3. テストコード
Technical Artist Bootcamp 2015 vol.2
テストコードの例
ジョイントをリネームするスクリプト
(アプリケーション層とライブラリ層)
ライブラリ層のテストコード
mbの読み込み
実行してFalseが返ってこなければ例外発生
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を呼び出してテストしている
Technical Artist Bootcamp 2015 vol.2
Maya上でのnose実行例
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")
Technical Artist Bootcamp 2015 vol.2
コツは、無い
• 他人のコードを読もう
• 設計が綺麗なコードはテストしやすい。テストしにくいという
ことは設計に難がある
• ファイル入出力などデバイス依存はアプリケーション層(上位レベル)で行う
• 複数のことを行ってしまう関数はテストケースが膨大に膨れ上がる
• Mayaではシーン情報をJSONファイルに出力し、答えJSONとの
比較で済ますと比較的楽(結合テスト)
Technical Artist Bootcamp 2015 vol.2
4. 自動化
Technical Artist Bootcamp 2015 vol.2
Jenkins
• 継続的インテグレーションツール
• 一定時間毎に指定したジョブを実行する
• 結果をウェブインターフェイスでグラフィカルに表示できる
• 定番プラグイン
• Build Pipeline Plugin
• Parameterized Trigger plugin
Technical Artist Bootcamp 2015 vol.2
jenkinsで自動化
全テストコード
の実行
Setupスクリプト
をミラーリング
develop
master
Technical Artist Bootcamp 2015 vol.2
使用するbatもSCMで管理
├─jenkins
│ 001_sync.bat
│ 101_mirror_setup.bat
│ 201_unittest.bat
Technical Artist Bootcamp 2015 vol.2
隕石が落ちてきても大丈夫
引用:2013年2月15日にロシアで発生した隕石落下の映像
https://www.youtube.com/watch?t=23&v=iCawTYPtehk
Technical Artist Bootcamp 2015 vol.2
細かなルール
Technical Artist Bootcamp 2015 vol.2
テキストエディター
Technical Artist Bootcamp 2015 vol.2
必要な機能
• シンタックスに応じたカラースキーム
• 自動補完・タブのスペース化などの言語サポート
• マルチバイトエンコーディング
• 外部コマンド実行
• できれば、マルチプラットフォーム
Technical Artist Bootcamp 2015 vol.2
エディタとデバッガー
• 導入が楽なので推奨
• PyCharm
• MayaのPythonをリモートデバッグ
• VisualStudio + PTVS
• PyCharm
• VisualStudio + PTVS
• Sublime Text
• Vim
Technical Artist Bootcamp 2015 vol.2
pymel
• maya.cmds禁止
• 結果がすべて文字列で返ってくる
• 独自ラッパークラスだらけになってしまう
• pymelはMELとAPIをうまく組み込んだクラスを定義してくれて
いるので非常に使いやすい
• ただし
• ジオメトリを頂点単位で処理する等ループが多数発生するツール、またはAPIメソッ
ドによりUndoが困難な処理は素直にC++で書く
• アトリビュートのシフト演算子(>>,<<)は使用禁止
Technical Artist Bootcamp 2015 vol.2
Qt
• GUIはすべてQt(PySide)で作成する
• .uiファイルをQtDesignerで作成
• レイアウトのみ
• シグナル関連はpythonコードで定義(.uiと.pyに分散してしまうのを防ぐため)
• 再利用可能な最小単位で.uiを作成
• ダイアログ
• リストアイテム
• .pyに変換してから使う
Technical Artist Bootcamp 2015 vol.2
共有ライブラリの例:デコレータ
Technical Artist Bootcamp 2015 vol.2
デコレータとは?
Technical Artist Bootcamp 2015 vol.2
@keep_selection
Technical Artist Bootcamp 2015 vol.2
関数が呼び出される前後の処理を定義
• セレクション状態を元に戻す
• 単位(unit)を元に戻す
• UndoChunkを管理する
• 例外をキャッチしてダイアログ表示したりログに保存したり
• 等々・・・応用範囲は非常に広く、共有しやすい。
Technical Artist Bootcamp 2015 vol.2
with文で使うコンテキストも便利
Technical Artist Bootcamp 2015 vol.2
コミュニティ
Technical Artist Bootcamp 2015 vol.2
モジュールに不具合があったら自分で直す
Technical Artist Bootcamp 2015 vol.2
コミュニティへの還元
• pep8.py,simplejsonのBOMサポートパッチ作成
• 実装とテストコードがあれば、英語力が低くても気持ちは伝わる
• 無事マージされた
Technical Artist Bootcamp 2015 vol.2
おまけ
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
Technical Artist Bootcamp 2015 vol.2
まとめ
• コミュニティで議論されている規約には乗っかる
• 議論の規模が違う
• 標準規格に則ったツールの導入
• 徹底した自動化
• コードスタイルチェック
• 設定作業の自動化による環境統一
• 内製ツールの動作確認
• 属人性を排除しメンテナンス性を高めることが
新しいチャレンジへの第1歩
Technical Artist Bootcamp 2015 vol.2
ご清聴ありがとうございました
スマイルテクノロジーユナイテッド株式会社
代表取締役社長 高橋涼
ryo.takahashi@smiletechnology.jp

Mais conteúdo relacionado

Mais procurados

OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
 
3DCGMeetup08_MayaRigSystem_mGear
3DCGMeetup08_MayaRigSystem_mGear3DCGMeetup08_MayaRigSystem_mGear
3DCGMeetup08_MayaRigSystem_mGearue_ta
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術Unity Technologies Japan K.K.
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例Naoya Kishimoto
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUI
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUIAR / VR / MRの世界に、置けるUI、置けないUI、置くべきUI
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUIKoichi Tanaka
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法Yoshifumi Kawai
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?com044
 
ゼロから学ぶIoTハンズオン資料
ゼロから学ぶIoTハンズオン資料ゼロから学ぶIoTハンズオン資料
ゼロから学ぶIoTハンズオン資料Masaru Takahashi
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜Teppei Sato
 
ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例gree_tech
 

Mais procurados (20)

OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
3DCGMeetup08_MayaRigSystem_mGear
3DCGMeetup08_MayaRigSystem_mGear3DCGMeetup08_MayaRigSystem_mGear
3DCGMeetup08_MayaRigSystem_mGear
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUI
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUIAR / VR / MRの世界に、置けるUI、置けないUI、置くべきUI
AR / VR / MRの世界に、置けるUI、置けないUI、置くべきUI
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解した
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
 
ゼロから学ぶIoTハンズオン資料
ゼロから学ぶIoTハンズオン資料ゼロから学ぶIoTハンズオン資料
ゼロから学ぶIoTハンズオン資料
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
 
ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例
 

Destaque

開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理慎一 古賀
 
WWDCを120%楽しむ
WWDCを120%楽しむWWDCを120%楽しむ
WWDCを120%楽しむKuma Arakawa
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Yoshito Tabuchi
 
海外のユーザー向け プロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~
海外のユーザー向けプロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~海外のユーザー向けプロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~
海外のユーザー向け プロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~Azumi Wada
 
kintoneの開発プロセスとプロジェクト管理ツール
kintoneの開発プロセスとプロジェクト管理ツールkintoneの開発プロセスとプロジェクト管理ツール
kintoneの開発プロセスとプロジェクト管理ツールYuki Okada
 
Infra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, NetworkInfra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, NetworkKuma Arakawa
 
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!jpid
 
GCPとBigQueryを用いたIoT基盤の構築
GCPとBigQueryを用いたIoT基盤の構築GCPとBigQueryを用いたIoT基盤の構築
GCPとBigQueryを用いたIoT基盤の構築Kuma Arakawa
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
Sl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibataSl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibataNaoki Shibata
 
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~Recruit Technologies
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のりRecruit Lifestyle Co., Ltd.
 
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4shakezo
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京Koichi Hamada
 

Destaque (14)

開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
 
WWDCを120%楽しむ
WWDCを120%楽しむWWDCを120%楽しむ
WWDCを120%楽しむ
 
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
Xamarin 紹介:Windows Phone / iOS / Android アプリ同時開発のススメ 2015/8/20 版
 
海外のユーザー向け プロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~
海外のユーザー向けプロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~海外のユーザー向けプロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~
海外のユーザー向け プロダクト開発 ~現場のリアルな工夫&ガチな悩みを語る~
 
kintoneの開発プロセスとプロジェクト管理ツール
kintoneの開発プロセスとプロジェクト管理ツールkintoneの開発プロセスとプロジェクト管理ツール
kintoneの開発プロセスとプロジェクト管理ツール
 
Infra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, NetworkInfra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, Network
 
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!
越境まちづくり・ラボ~経営資源の日本から新興国へリサイクル活用!
 
GCPとBigQueryを用いたIoT基盤の構築
GCPとBigQueryを用いたIoT基盤の構築GCPとBigQueryを用いたIoT基盤の構築
GCPとBigQueryを用いたIoT基盤の構築
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
Sl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibataSl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibata
 
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~
リクルートにおけるVDI導入 ~働き方変革とセキュリティ向上の両立を目指して~
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり
 
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4
プロトタイプで終わらせない死の谷を超える機械学習プロジェクトの進め方 #MLCT4
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 

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

新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ慎一 古賀
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu Hidaka
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要Tatsuhiko Tanaka
 
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来decode2016
 
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Naoyuki Sano
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発GoAzure
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Microsoft Tunnel 概要
Microsoft Tunnel 概要Microsoft Tunnel 概要
Microsoft Tunnel 概要Yutaro Tamai
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたYou&I
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2openrtm
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーションYuta Matsumura
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編株式会社 NTTテクノクロス
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 

Semelhante a Pythonを中心としたチーム開発 (20)

新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
Python Autotest pdc2008w
Python Autotest pdc2008wPython Autotest pdc2008w
Python Autotest pdc2008w
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要
 
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
 
Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化Bat vb script_power_shellの単体テスト自動化
Bat vb script_power_shellの単体テスト自動化
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
 
Go azure tfs_service
Go azure tfs_serviceGo azure tfs_service
Go azure tfs_service
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Microsoft Tunnel 概要
Microsoft Tunnel 概要Microsoft Tunnel 概要
Microsoft Tunnel 概要
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 

Último

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Último (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

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

  • 1. Technical Artist Bootcamp 2015 vol.2 Pythonを中心としたチーム開発 - 個の力を組織の力に - スマイルテクノロジーユナイテッド株式会社 代表取締役社長 高橋涼
  • 2. Technical Artist Bootcamp 2015 vol.2 はじめに
  • 3. Technical Artist Bootcamp 2015 vol.2 TAによる効率化 → 同じツールの改良ばかり?
  • 4. Technical Artist Bootcamp 2015 vol.2 TAを集めて大規模ツールを開発 → なぜか進捗が悪い。やりにくい。
  • 5. Technical Artist Bootcamp 2015 vol.2 属人化
  • 6. Technical Artist Bootcamp 2015 vol.2 アイデアと実行力
  • 7. Technical Artist Bootcamp 2015 vol.2 チームでツール開発するためのルール
  • 8. Technical Artist Bootcamp 2015 vol.2 できるだけPythonで書く
  • 9. Technical Artist Bootcamp 2015 vol.2 内訳 • コマンドラインツール • スタンドアロンGUIツール • PySide • ウェブアプリ • Flask • Django • DCCツールプラグイン • Autodesk Maya • Adobe Photoshop • Autodesk 3dsMax • Foundry MODO
  • 10. Technical Artist Bootcamp 2015 vol.2 ルール 1. SCMで内製ツール管理 2. PEP8準拠のコードスタイル 3. テストコード 4. 自動化
  • 11. Technical Artist Bootcamp 2015 vol.2 1. SCMで内製ツール管理
  • 12. Technical Artist Bootcamp 2015 vol.2 ファイルサーバー直接参照 絶対に禁止
  • 13. Technical Artist Bootcamp 2015 vol.2 USERTA 開発からリリースの流れ develop master
  • 14. Technical Artist Bootcamp 2015 vol.2 ディレクトリ構成 ├─jenkins ├─maya │ ├─2016 │ │ ├─icons │ │ ├─plug-ins │ │ ├─python │ │ │ ├─stu │ │ │ └─testsuite │ │ └─scripts │ └─testsuite ├─photoshop └─setup
  • 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. Technical Artist Bootcamp 2015 vol.2 すんなりとは行かなかった • 問題 • .whlを用意していないモジュールが少なからず存在する • MayaのdistutilsではPyPIからインストールできないモジュー ルがある • .pydをMayaで読み込むためにはマニフェスト情報が必要 • 解決策 • 自前で.whlファイルを用意してSCMに入れておく
  • 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. Technical Artist Bootcamp 2015 vol.2 2. PEP8準拠のスタイル
  • 19. Technical Artist Bootcamp 2015 vol.2 • ソースコードの読みにくさの原因は コードスタイルの違い • インデント • 行の長さ • 命名規則 等 • コミュニティによって議論された標 準コードスタイルがPEP8 • 行の長さは99文字までOK PEP8とは? 引用:http://pep8-ja.readthedocs.org/ja/latest/
  • 20. Technical Artist Bootcamp 2015 vol.2 メソッドがどのモジュールで定義されているか分からない インデントに一貫性がないた め、コピペで問題が起こる 変数名の命名規則に一貫性がない スペースの使い方に一貫 性がなくてイライラする
  • 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. Technical Artist Bootcamp 2015 vol.2 3. テストコード
  • 23. Technical Artist Bootcamp 2015 vol.2 テストコードの例 ジョイントをリネームするスクリプト (アプリケーション層とライブラリ層) ライブラリ層のテストコード mbの読み込み 実行してFalseが返ってこなければ例外発生
  • 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. Technical Artist Bootcamp 2015 vol.2 Maya上でのnose実行例
  • 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. Technical Artist Bootcamp 2015 vol.2 コツは、無い • 他人のコードを読もう • 設計が綺麗なコードはテストしやすい。テストしにくいという ことは設計に難がある • ファイル入出力などデバイス依存はアプリケーション層(上位レベル)で行う • 複数のことを行ってしまう関数はテストケースが膨大に膨れ上がる • Mayaではシーン情報をJSONファイルに出力し、答えJSONとの 比較で済ますと比較的楽(結合テスト)
  • 28. Technical Artist Bootcamp 2015 vol.2 4. 自動化
  • 29. Technical Artist Bootcamp 2015 vol.2 Jenkins • 継続的インテグレーションツール • 一定時間毎に指定したジョブを実行する • 結果をウェブインターフェイスでグラフィカルに表示できる • 定番プラグイン • Build Pipeline Plugin • Parameterized Trigger plugin
  • 30. Technical Artist Bootcamp 2015 vol.2 jenkinsで自動化 全テストコード の実行 Setupスクリプト をミラーリング develop master
  • 31. Technical Artist Bootcamp 2015 vol.2 使用するbatもSCMで管理 ├─jenkins │ 001_sync.bat │ 101_mirror_setup.bat │ 201_unittest.bat
  • 32. Technical Artist Bootcamp 2015 vol.2 隕石が落ちてきても大丈夫 引用:2013年2月15日にロシアで発生した隕石落下の映像 https://www.youtube.com/watch?t=23&v=iCawTYPtehk
  • 33. Technical Artist Bootcamp 2015 vol.2 細かなルール
  • 34. Technical Artist Bootcamp 2015 vol.2 テキストエディター
  • 35. Technical Artist Bootcamp 2015 vol.2 必要な機能 • シンタックスに応じたカラースキーム • 自動補完・タブのスペース化などの言語サポート • マルチバイトエンコーディング • 外部コマンド実行 • できれば、マルチプラットフォーム
  • 36. Technical Artist Bootcamp 2015 vol.2 エディタとデバッガー • 導入が楽なので推奨 • PyCharm • MayaのPythonをリモートデバッグ • VisualStudio + PTVS • PyCharm • VisualStudio + PTVS • Sublime Text • Vim
  • 37. Technical Artist Bootcamp 2015 vol.2 pymel • maya.cmds禁止 • 結果がすべて文字列で返ってくる • 独自ラッパークラスだらけになってしまう • pymelはMELとAPIをうまく組み込んだクラスを定義してくれて いるので非常に使いやすい • ただし • ジオメトリを頂点単位で処理する等ループが多数発生するツール、またはAPIメソッ ドによりUndoが困難な処理は素直にC++で書く • アトリビュートのシフト演算子(>>,<<)は使用禁止
  • 38. Technical Artist Bootcamp 2015 vol.2 Qt • GUIはすべてQt(PySide)で作成する • .uiファイルをQtDesignerで作成 • レイアウトのみ • シグナル関連はpythonコードで定義(.uiと.pyに分散してしまうのを防ぐため) • 再利用可能な最小単位で.uiを作成 • ダイアログ • リストアイテム • .pyに変換してから使う
  • 39. Technical Artist Bootcamp 2015 vol.2 共有ライブラリの例:デコレータ
  • 40. Technical Artist Bootcamp 2015 vol.2 デコレータとは?
  • 41. Technical Artist Bootcamp 2015 vol.2 @keep_selection
  • 42. Technical Artist Bootcamp 2015 vol.2 関数が呼び出される前後の処理を定義 • セレクション状態を元に戻す • 単位(unit)を元に戻す • UndoChunkを管理する • 例外をキャッチしてダイアログ表示したりログに保存したり • 等々・・・応用範囲は非常に広く、共有しやすい。
  • 43. Technical Artist Bootcamp 2015 vol.2 with文で使うコンテキストも便利
  • 44. Technical Artist Bootcamp 2015 vol.2 コミュニティ
  • 45. Technical Artist Bootcamp 2015 vol.2 モジュールに不具合があったら自分で直す
  • 46. Technical Artist Bootcamp 2015 vol.2 コミュニティへの還元 • pep8.py,simplejsonのBOMサポートパッチ作成 • 実装とテストコードがあれば、英語力が低くても気持ちは伝わる • 無事マージされた
  • 47. Technical Artist Bootcamp 2015 vol.2 おまけ
  • 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. Technical Artist Bootcamp 2015 vol.2 まとめ • コミュニティで議論されている規約には乗っかる • 議論の規模が違う • 標準規格に則ったツールの導入 • 徹底した自動化 • コードスタイルチェック • 設定作業の自動化による環境統一 • 内製ツールの動作確認 • 属人性を排除しメンテナンス性を高めることが 新しいチャレンジへの第1歩
  • 50. Technical Artist Bootcamp 2015 vol.2 ご清聴ありがとうございました スマイルテクノロジーユナイテッド株式会社 代表取締役社長 高橋涼 ryo.takahashi@smiletechnology.jp

Notas do Editor

  1. 本日はテクニカルアーティストブートキャンプということで、主にTAの方々に少しでも役に立つお話が出来ればということでやってまいりました。 ただ、TAと限定するつもりはなく、デザイナーの方でも、プログラマの方でも少しは役に立つようなネタを持って帰っていただけるように分かりやすく解説するつもりです。 30分という限られた時間ですので駆け足になるかもしれませんが、どうぞよろしくお願いします。
  2. 最近はTAというセクションの認知度も上がり、優秀なTAの方も増えてきたように感じます。 Mayaのスクリプト・プラグインを作って作業の効率をアップさせるというのは、ウェブ上の情報や書籍も増え、敷居がだいぶ下がってきました。 しかしながら、メンバーが100名を超えるような大規模プロジェクトにおいては、開発したツールを使用する人数は非常に多く、また使用期間も長くなります。 作って終わり、ではなく、継続的に仕様変更・機能追加を行っていきます。 気が付くと同じツールの改良ばかりで、新しいツールの開発してなくて、フラストレーションを感じるということもありました。
  3. 数年前まで会社員をしておりましたが、そのころ、ツールプログラマチームで開発を取りまとめていました。 大規模なツールを開発する必要がある場合は複数のツールプログラマを集めて対応していました。 私自身もプログラマとして作業に当たっていたのですが、どうにもやりにくい。 進めば進むほど、「この機能は誰々さん担当だから」 「あの人手が早いからこれもやってもらおう」などと、メンバー毎の作業量にばらつきが出てきたり、 助けようと思ってもソースコードが読めなくて断念したり、そういうモヤモヤすることが多かったように感じます。 もちろん、全員が全力を出した結果です。 さきほどのツールメンテナンスのフラストレーションと、この、大規模ツール開発のやりにくさ、 この二つの問題は、同じ原因なんじゃないかなぁ、と推測しています。
  4. これらはすべて、属人化がもたらしている弊害なのだと思います。 作業負担がかたより、あるひとはずっといそがしい。その結果、手が足りなくて永遠に放置されるバグが現れたりします。
  5. 私はTAに必要な素質とは、 アイデアと実行力だと考えています。 アイデアはどこからくるのか? 実行できるスキルと時間はどうやって捻出するのか? 今回お話しするのは、保守可能なツール開発を継続的に行うために策定している弊社のルールについてになります。
  6. 弊社で行っているルールなどを、Mayaのツール開発を中心にご説明していきます。
  7. まず、大前提になりますが、本日のタイトルにも入っているように、できるだけpythonで作成することにしています。 プログラム言語というのは他にも選択肢はあるとは思うのですが、特に理由がない場合はpythonを自然に選択します。 結果、95%くらいPython。
  8. このような内訳になります。 こういった足しに渡るプログラム間で、サードパーティ製モジュールやデバッガーが使え、自分のコードの共有もできます。 特に3DCGアプリケーションは幸いなことにpythonをサポートしているものがほとんどなので、かなりの共有が行えます。 たとえば、 ファイル名のチェックを行うコードをすべてのアプリケーションで使いまわせます。
  9. 前半で、根幹となるルールを説明します。 後半は時間のある限り、tipsを紹介できればと思います。
  10. まずはツールの管理方法になります。 SCM、いわゆるバージョン管理システムでツールを管理しています。 プロジェクトにもよりますが、GitかPerforceで管理しています。
  11. 絶対にファイルサーバーを直接参照して共有してはいけません。 ツールに不具合が混入すると全員に影響してしまいます。バージョン管理ツール経由であれば、落としてこなければ即座には影響しませんし、バグが発見されたらひとつ前のリビジョンを取得しなおせば作業が止まることは避けられます。 また、ファイルサーバーは遅いです。
  12. 図で表すとこのような形で管理しています。 master リリース用 develop 開発作業用 の二つのブランチで運用します。 こういった複雑なやり取りを行うので、リビジョン追跡がまともな、バージョン管理システムが必要になります。 一般的にはこの二つになります。データ管理も同時にしようと思ったらperforce1択になります。
  13. シンプルなディレクトリ構成の例です。 Photoshopの中はmayaと似た構成です。ツールに必要なファイルと、testsuiteディレクトリがあります。 Setupは初期設定用のファイルなどが入ります。 これらが丸ごと、masterとdevelopブランチに存在します。 では、Setup/に何を格納するのかという話をします。
  14. さて、SCMを使うことで、コードの反映とリリース環境が整いました。 必要なサードパーティ製モジュールのインストールも自動化が必要です。 サードパティ製のモジュールもバージョンを統一して自動化しないと、動作が一致しません。 不具合が発生した場合も再現性がなくなってしまいます。 Pipというパッケージ管理ツールが標準化されていますのでそれを使用します。 SCMで管理するのは、 requirements.txt 各種wheelファイル になります。
  15. モジュールはpypiから直接インストールしてもいいのですが、wheelファイルが用意されていないモジュールや、Maya向けにマニフェスト情報を修正したモジュールはローカルにwheelファイルを用意しています。
  16. これらをバッチファイルにまとめておき、setupに格納しておきます。必要なrequirements.txtとwhlファイルも格納しておきます。 これでバッチファイルのダブルクリックだけで、ユーザーも開発者も同じpython環境にできます。
  17. 読めるコード 人それぞれのスタイルで書いていたのでは読みづらくて仕方がない。 プログラムのソースコードは、書くよりも読まれる回数が多いということを前提に、Pythonは可読性を重要視しているプログラム言語です。この点も気に入っているところです。 Pythonの推奨スタイルはPEP8という名で定義されています。 弊社ではPEP8を基本にしています。 このようなスタイルのことです。 これはダメ、これは良い。 世界標準に乗っ取ることで、スタイルチェッカーもオープンなツールを使用することができます。 pep8.py です。 修正作業に取り掛かる際にはまずは読むところから始めます。
  18. テストコードを義務としています。 まず弊社ではテストコードのないツールはリリースを禁じています。 なぜか? ツールというものは作って終わりということがあり得ないからです。 不具合が起こって修正作業が必要な場合もあれば、 新しい機能を追加することもある。 これは言い切っていい、確実に改変と動作確認は発生します。 世の中には動作確認をせずにリリースしてしまうワイルドな方もいらっしゃいますが、それは論外として、、、 なんども動作確認が必要になるからです。 つまり、同じことを何度も何度も行う必要があるからです。 そもそもツールってどうして作ってるんでしょう? 多くの場合、自動化が目的ではないでしょうか? しかし、動作確認は自動化しないなんてナンセンスです。 手作業で動作確認しているようなアナログな人はテクニカルではない。 簡単なテストコードの例と、Maya上での実行方法をお見せします
  19. 手作業の動作確認で行っていることをコードに落とし込むだけ! 同じような手順が多いので、コードの再利用で簡略化
  20. ライブラリの単体テスト ツールの結合テスト 慣れてしまえばいいのだが、めんどくさいのは事実。人間だれしも自分は失敗しない、不具合なんて発生させない、と信じてしまうもの。めんどくさいです。 ですので、簡単に済ませたい。 正しい結果のジオメトリ情報をJSONファイルにダンプしておけば、単純なデータの比較で済ませてます。 ジオメトリ情報を詳細に出力するツールを作って使いまわし。 法線の編集ツールのテストだが、うっかりUVが変更されてしまっている、ということも防げる。
  21. テストコードによって手作業の動作確認は無くなりました。 しかし、ライブラリを共有することで、予想外の不具合発生も考えられます。 自動でテストするようにしないと、せっかくのテストコードが無駄になることもあります。 私も過去、このツールはもう使うことがないからテストも回す必要ないだろう、という思い込みにより、痛い目にあったことがあります。 半年ほどしてまた使うということになった際に、他のツールやライブラリの度重なる仕様変更によりまったく動かなくなっており、修正個所が膨大な数になっていて使えるようになるまで時間がかかってしまったということがありました。 仕様変更のたびに修正していれば簡単な話だったのに、積もり積もったことによって大変な思いをしたわけです。 自動化は必須です。
  22. 今はjenkinsというオープンなツールがありますので、これを使用することが多いです。 例です。 Gitリポジトリを1時間おきにチェックし、 ・setupスクリプトをファイルサーバーにミラーリングするジョブ ・全てのテストコードを実行する ・すべてのソースをflake8でチェック ・データ解析 というジョブを仕込んであります。 先ほどお見せしたMaya上でのnose実行ですが、jenkinsに実行させる場合はmayabat.exe経由で実行します。 これにはもう一つ恩恵があって、ウッカリミスとしてよくあるのが、ハイパーシェードに紐づくmelコマンドをスクリプトで使用してしまうという例です。 ハイパーシェード関連MELコマンドはGUIが無いと使えないので、バッチ処理に対応していません。Mayabat.exe経由で実行することで、そのエラーを検知できます。
  23. 001_syncではjenkinsプラグインのp4やgitで同期し、子供ジョブを呼び出すようにしています。 セットアッププログラムのミラーリング、ユニットテストも同じですが、バッチファイルに行う処理をすべて書いておき、SCMで管理します。 ユニットテストであれば、先ほど出てきたnosetestsコマンドが書いてあるわけです。
  24. ここまでやれば、属人性はかなり薄れています。 隕石が突然オフィスを破壊したとしても、開発作業を継続できることでしょう。 気兼ねなく飲みにも行けるし、親の死に目にも会えます。
  25. 言わないととんでもないエディタで作業してる人がいるのでこれにも触れないわけには行けません。テキストエディタについても推奨しています。
  26. 私が考える、まともなエディタとは シンタックスに応じたカラースキーム 自動補完 タブのスペース化などのpythonサポート マルチバイトエンコーディングサポート PEP8などのチェッカーを実行できる できれば、マルチプラットフォーム といった機能を持っているのが条件になります。 PyCharm VisualStudio + PTVS Sublime Text Vim
  27. Pythonのおかげでデバッガーを使えることも大きな恩恵の一つです。MELではprint文デバッグしかできませんでした。 基本的にはPyCharmをおススメ。エディタも兼ねているので導入が楽。 VisualStudio + PTVS Maya等リモートデバッグをする際に必要 このあたりまでがガチガチに固めているルールになります。
  28. Maya.cmds禁止 なぜか? Pymelはよりpythonicであると言ってます。 文字列が返ってきてしまう。 クラスのインスタンスで返ってくるので、そのままインスタンスメソッドとして各種MELコマンドやAPIメソッドを呼ぶことができるため、オブジェクト指向的と言えます。 ただし 頂点単位の処理等、ループが多数発生するツール メッシュのジオメトリ情報を変更するツール はC++でプラグイン化するようにしています。
  29. すぐにでも取り入れて欲しいのがデコレータライブラリの導入です。 Mayaのスクリプトで面倒なんだけどやらないと不便な処理として UndoChunk管理 セレクションの復元 エラーメッセージのウインドウ表示 などがあるかと思います。
  30. ここまででチームでの取り組みを説明してきましたが、すべては個人スキルを延ばし、想像もしないような新しい発想をもってツール開発を行うためです。 コミュニティからの恩恵と、コミュニティへの還元を行いたいから
  31. プログラムのスキルを上げるには プログラムを読む プログラムを書く これしかありません。 良質なプログラムを読むことで、様々なテクニックを学ぶことができます。 Pythonやライブラリは広くコミュニティで使用されているため、コードが洗練されているものが多いです。 コードを読み、不具合を修正する、ことでスキルアップ
  32. Pythonを使うことで、Python自体もそうですが、オープンなライブラリによる恩恵を受けることができます。 これもPythonを使うメリットです。 コミュニティに還元しましょう。 弊社では pep8 simplejson BOM対応の修正パッチを送っています。 BOMとはバイトオーダーマークの略なんですが、UTF-8で書いてあるテキストファイルの先頭に付く数バイトのデータです。これによりUTF-8エンコードであることが分かるようになっているのですが、マルチバイト圏の人しか使うことがないため、英語圏の方々はサポートしてくれていないことが多く、私は気づくたびに修正してパッチを送っています。 Githubによって修正からパッチ送付までが非常に楽に行えるようになっています。 テストコードの恩恵はここでもあり、ソースコードとテストコードがあれば、何が不具合で、どう直したか?が伝わります。英語力が低くても何とかなってしまいます。
  33. Pythonを中心に話してきましたが、現実問題として、Pythonだけを使ってすべてのツールを賄えるわけではありません。 プロジェクト開始時に使用するセットアップスクリプト等は当然Pythonのインストールを行うことも含まれますのでPythonスクリプトでは書けません。まだインストールされていません。 そのためそのようなセットアップスクリプトは、Windowsにおいてはバッチファイルやexeファイルにするしかないわけですが、弊社ではWindowsScriptHostを選択しています。従ってJavaScriptで書くことになります。 また、先ほど触れたように、頂点単位の処理等、ループが多数発生するツールについてはC++でプラグイン化することを現時点での最善策としています。 JavaScript、C++についても規約を設けています。
  34. この結果、時間ができるはず。 アイデアを得る時間もできます、実行力を発揮できるだけの時間もできます。