hasiponpages

サーバ展開ツールmirrormanとマスタデータのgit管理について

この記事は、KLab Advent Calendar 2020 の12/4分です。

はじめに

今年は、CEDEC2020で『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン ~より安定したサービス提供を目指して~を発表することができました。スライドはKLablogでも公開されています。

この記事では、CEDECで発表したgod環境へ、サーバ展開をするためのツールであるmirrormanを紹介します。また、mirrorman活用の前提の一つとなっている、マスタデータのgit管理も紹介します。

注:この記事は前述のCEDECでの発表内容を前提としています。

mirrormanとは

mirrormanはローカルにあるbaseリポジトリ(git)とgod環境を操作するためのプログラムです。god環境を使う上では、各個人に割り当てられたgod環境へのサーバ展開は各自で行う必要があります。サーバ展開時にはgod環境上で各種処理を実行する必要がありますが、その作業を容易にするために、mirrormanというプログラムを用意しています。これによって、非開発者もgod環境を使えるようにするという体制になっています。

mirrormanを使うには、基本的に、ローカルgitに展開したい状態をcommitしておく必要があります。mirrormanは、ローカルgitのHEADをgod環境へgit pushして、god上でgit checkout・各種自動生成の実行・サーバの再起動を実行します。ちなみに、pbagクライアント機能もmirrormanに入っています。

mirrormanはGo言語で実装されています。非開発者も使うツールなので、実行バイナリを配るだけにして言語処理系を入れなくてもいいようにしたい、というのと、人によってwindowsだったりmacだったりlinuxだったりする環境なので、各OS向けの実行バイナリを作りたい、というのがGo言語を選択した主な理由です。

mirrormanはコマンドラインアプリケーションで、最初はmirrormanを操作するためのUnityプラグインを用意してGUI化しようとしていましたが、結局コマンドライン操作が必要になることが多かったり、エラー出力が読みにくかったりで、mirrormanを操作するためのGUIは廃れてしまいました。

マスタデータのgit管理について

マスタデータはtsv形式でbaseリポジトリにcommitするという運用をしています。多様な需要を満たせるようにgod環境を増やすということをしていますが、マスタデータの変更は多様な需要として代表的なものです。

gitブランチによって、多様なマスタデータに対応するという問題が解決されます。また、git管理にすることで、マスタデータのスキーマ変更への対応やマスタデータへの自動テストが容易になる、などの利点もあります。

非開発者にもgitの学習コストがかかる、というのが当初の懸念でしたが、マスタデータを作る企画者がmirrormanからコマンドラインに慣れていって最終的には下手な開発者よりgitを使いこなしているのを見ると杞憂だったと思っています。

git管理の前はGoogleスプレッドシートでマスタデータを管理していて、様々な手法で同様の問題に対処していましたが、git管理に移行することで問題を単純にすることができたと考えています。

おわりに

CEDECでの発表では話の流れと時間の関係でmirrormanの紹介を削ってしまったので、Advent Calendarという場で公開することができて良かったです。