初めまして、トイロジック1年目プログラマーのOです。
本記事では、プロジェクトで作成したゲームのパッケージ管理を効率化するために作ったツールについて振り返りとともに解説をしたいと思います。(ツール作成にはPython2.7を使用しています)

なぜツールを作ったか

筆者の所属しているプロジェクトでは、チーム内のテストプレイなどで共通のビルドを使うために毎日パッケージを作成し、共有のドライブに保存しています。

テストプレイ参加者は

  1. 圧縮されたビルドをローカルにコピー
  2. コピーしたビルドを展開
  3. ビルド起動用のbatをたたく

上記の手順を踏んでビルドを起動する必要がありますが、毎回これをやるのは正直面倒です。一回だけなら気にならないかもしれませんが、パッケージを使う機会は開発する上ではかなり多いですし、パッケージを使う人数が増えれば増えるほど塵積で時間の損失は大きくなります。そこで少しでも時間を節約するために、上記の1~3をボタン一回でやってくれるツールを作ろう、ということになりました。

ツールの解説

ツールの解説

ツールの見た目は画像のようになっています。共有ドライブにおいてあるパッケージがビルド欄に一覧表示され、その中の任意のものを選択してダウンロード・実行ができるというものです。ターゲット選択欄でビルド欄に表示されるパッケージの種類を選択できます。筆者の所属プロジェクトではUE4を採用しているのでここではDevelopment、Test、Shippingを選択できるようにしてあります。

「ダウンロード」ボタンを押すと、ビルド欄で選択しているパッケージを保存先のパスへコピー・展開します。「実行」ボタンはダウンロードボタンの処理に加えて、パッケージに含まれている起動batを叩きます。

「ローカルのビルドを全削除」ボタンを押すと保存先のフォルダ内のパッケージをすべて削除します。パッケージがPC容量を圧迫してきたときに1ボタンでパッケージを消せるようにこの機能を用意しました。(なくてもいいかもしれません)

「ログ出力」ボタンを押すと選択したパッケージのログを共有ドライブにアップロードします。テストプレイで出た不具合調査のため、ログを共有するときに使います。

基本的にはツール起動 > ビルド選択 > 実行ボタンの3クリックでパッケージ起動ができるものとなっています。どんなタイトルかにもよりますが、マルチプレイができるタイトルであれば同一パッケージを複数起動してマルチプレイのテストが1クリックでできるようなボタンを追加すると、より時間の短縮につながるかもしれません。

Pythonでの実装について

GUIツールを作成するにあたって、今回はTkinterとttkというモジュールを使用しています。
上の画像のようなGUIであれば以下のようなコードを書けば実装できます。

#ツール左側のフレーム作成-----------------------------------------------------------------------------------
self.leftFrame_ = TK.Frame(frame,width="400",height="400")
self.leftFrame_.pack(anchor=TK.NW,side=TK.LEFT,fill=TK.BOTH,expand=1)

#保存先入力欄のフレーム作成---------------------------------------------------------------------------------
self.localPathEntryFrame_ = TK.Frame(self.leftFrame_,width="280",height="50")
self.localPathEntryFrame_.pack(side=TK.TOP,anchor=TK.NW,pady=5,fill=TK.X,expand=1)
#「保存先」ボタン作成
self.explorerButton_ = TK.Button(self.localPathEntryFrame_,text="保存先", command=lambda : explorer())
self.explorerButton_.pack(side=TK.LEFT,anchor=TK.W)
#保存先入力欄作成
self.localPathEditBox_ = TK.Entry(self.localPathEntryFrame_,width=37)
self.localPathEditBox_.pack(side=TK.LEFT,anchor=TK.W,fill=TK.X,expand=1)

#ターゲット選択フレーム作成----------------------------------------------------------------------------------
self.targetFrame_ = ttk.LabelFrame(self.leftFrame_,width="100",height="50",text="ターゲット",padding=5)
self.targetFrame_.pack(anchor=TK.W,side=TK.TOP,pady=5)
#ターゲット選択用コンボボックス作成
self.targetCB_ = ttk.Combobox(self.targetFrame_,width="40",height="50")
self.targetCB_.pack(side=TK.LEFT)

#ビルド選択フレーム作成--------------------------------------------------------------------------------------
self.buildFrame_=ttk.LabelFrame(self.leftFrame_,width="300",height="400",text="ビルド",padding=5)
self.buildFrame_.pack(anchor=TK.NW,side=TK.TOP,pady=5,fill=TK.Y,expand=1)
#ビルド選択リスト用スクロールバー作成
yscroll = TK.Scrollbar(self.buildFrame_,orient=TK.VERTICAL)
yscroll.pack(side=TK.RIGHT,fill=TK.Y,expand=1)
#ビルド選択リスト作成
self.buildList_ = TK.Listbox(self.buildFrame_,width=40,height=20,selectmode=TK.BROWSE)
self.buildList_["yscrollcommand"]=yscroll.set
yscroll.config(command=self.buildList_.yview)
self.buildList_.pack(side=TK.TOP,anchor=TK.N,fill=TK.BOTH,expand=1)

#ボタン作成------------------------------------------------------------------------------------------------
#実行、コピーボタン作成
self.buttonFrame_ = TK.Frame(frame,width="200",height="150")
self.buttonFrame_.place(relx="0.65",rely="0.93")

self.executeButton_ = TK.Button(self.buttonFrame_,text="実行",command=lambda: self.submitted_to_execute())
self.executeButton_.pack(side=TK.RIGHT,anchor=TK.SE,padx=2)
self.copyButton_ = TK.Button(self.buttonFrame_,text="ダウンロード",command=lambda: self.submitted_to_copy())
self.copyButton_.pack(side=TK.RIGHT,anchor=TK.SE,padx=2)
self.deleteButton_ = TK.Button(self.buttonFrame_,text="ローカルのビルドを全削除",command=lambda: self.delete_local_file())
self.deleteButton_.pack(side=TK.RIGHT,anchor=TK.SE,padx=2)

コンボボックスやボタンなど基本的なGUIは用意されているので、それを並べるだけでツールの見た目は実装できます。あとは各ボタンをクリックしたときの処理を実装すればツールができる、という感じです。

最後に

いかかでしたでしょうか?PythonにはGUI用のモジュールが用意されているのでこのようなツールは比較的簡単に作成できます。筆者が作ったものもまだまだ機能やデザインなど改善の余地があると思うので、より効率化につながるものにしていきたいと思います。

著者紹介 O
2020年トイロジック新卒入社。UE4を用いたプロジェクトでギミック、UI、ツール実装を担当。
積みゲーが多すぎて無くなる気配がない。

【7/2(土)オンラインにて中途採用説明会開催決定!】


▲詳細確認、エントリーはこちら