究極のバッチフレームワーク(予定)



     (株)JCGS 痴山 紘史
動機


     1
プログラマなら誰でも考えること




 楽をするためならどんな
   苦労も厭わない




                  2
究極は、
 ボタン一つで
 全ての操作が
自動で行えるように
   する

            3
そのために
徹夜でがんばる!!


            4
いやまあ、一度作ればずっと
楽できるじゃないですか。




                5
事例紹介


       6
写真:Wikipedia
               7
JCGS Launcher



    • アプリケーションランチャ
    • プロジェクト固有の情報を管理
      –   サーバー名
      –   命名規則
      –   環境変数
      –   プラグイン




                   8
JCGS Launcher




 Core + UI
                9
コマンドライン版 JCGS Launcher




>python JCGSLauncherCmd.py testXML maya "2011 amd64 English"

                                                               10
スタートアップスクリプトの実行も、
 共通のインターフェースを提供



                11
12
Batch


• バッチ処理用フレームワーク
• オペレータをプラグインとして
  用意
• XMLでオペレータの処理順序
  を記述
• スタンドアロン/アプリケー
  ション用ツールどちらでも動作
• JCGSLauncher同様、Coreと
  UIが分かれている



                    13
Batch




• プロセスをまたいだバッチ処
  理が可能
• 3dsmax から Maya を起動
  したり
• 再帰的に Batch を実行する




                   14
15
アプリケーションが絡んだ
テストはものすごくメンドクサイ



                  16
たとえば


  Maya2009~2013、
   Max2009~2013、
Softimage2009~2013、
      32bit/64bit
   全ての環境でテスト

                      17
testSuite



• テストの中からアプリケーションを起動
• アプリケーション上でテストを実行
• 実行結果を元のテストに返す
• 成功/失敗だけでなく、traceback 情報も返す!!
 →通常のテストと同じ感覚で扱える




                            18
testSuite


• テストの中からアプリケーション
  を起動
• アプリケーション上でテストを実
  行
• 実行結果を元のテストに返す
• 成功/失敗だけでなく、
  traceback 情報も返す!!




                      19
テストの例
import os                                                       import os
from JCGS.util import testSuite
                                                                import unittest
import unittest
                                                                class Test_test_maya_util(unittest.TestCase):
class TestUtil(unittest.TestCase):                                 def test_createWorkspace(self):
   def setUp(self):                                                  DCCTools.util.createWorkspace(wsPath)
     self.d = os.path.dirname(__file__)                              self.assertEqual(True, os.path.exists(wsPath))

  def test_maya_util2011(self):                                 def run():
    f = os.path.join(self.d, 'test_maya_util.py')                 suite = unittest.TestSuite([
    ret = testSuite.run_test('maya', '2011 amd64 English', f)      unittest.TestLoader().loadTestsFromTestCase(
    self.assertEqual(True, ret)                                       Test_test_maya_util),])

  def test_maya_util2012(self):                                    output = os.path.join(os.environ['JCGSTOOLDIR'], 'build',
    f = os.path.join(self.d, 'test_maya_util.py')               'testResult')
    ret = testSuite.run_test('maya', '2012 amd64 English', f)      runner = xmlrunner.XMLTestRunner(output=output)
    self.assertEqual(True, ret)
                                                                  ret = runner.run(suite)

                                                                   return ret
                                                                if __name__ == '__main__':
                                                                   run()




                                                                                                                               20
以上、実例でした。



            21
まとめ




•   全て JCGS Launcher がベース
•   強固な土台を作った上で派生させていくことが大事
•   自動処理システムを作ると人生が豊かになる(要出典)
•   ムダなことをして働きたくない!!




                                22
働くなら、価値を生む
部分で働きましょう!!


              23
課題 & Future work



• 作ったけど使いこなせてないよ!!
 – 要素技術はガンガン使ってるけど。。。
• GUIが絡むとまだまだ面倒
• DCCツールの自動処理を更に推し進める
• リリースパッケージ自動テストシステム



                         24
Q&A


      25

究極のバッチフレームワーク(予定)