Googleスプレッドシートでメッセージ管理してGitHubへの更新を自動化した話

はじめに

こんにちは、会員管理システムSMOOSYの開発と運用を担当している大橋です。

エンジニアの主な仕事は、システムやサービスを作ることです。そしてどのシステムでもたくさんの文言が使われます。小規模なシステムなら使われる文言を画面や機能ごとのソース(定数クラスなど)の中で定義することもありますが、規模の大きいシステムであれば、それら全てを外部のプロパティファイルにまとめるという管理方法がよく使われています。アトラスもこの方法を使ってメッセージを管理しています。

一般的なメッセージ管理の仕組み

今時のシステム開発はGitHubなどを使ってバージョン管理をしているケースが多く、システム自体が多言語に対応することもあります。例えば、日本語と英語に対応している場合、message_ja.propertiesmessage_en.propertiesの2つのファイルを用意する必要があります。さらに中国語やスペイン語などに対応しようとすると、その分プロパティファイルが増えます。そうなると、たった1つのメッセージプロパティを変更するだけでも、対応言語分のプロパティファイルを修正しなければいけません。

flow1

※ Gitの知識が必要になるので、Gitについて詳しくない方はまずこちらをご覧ください。

これを全部手動でやると、効率が悪い上にミスや修正漏れも発生しやすくなります。また、開発者だけではなく、プロマネや翻訳担当もメッセージを確認・編集したいという要望もありました。複数のプロパティファイルを一元的に管理・自動更新でき、色々な人がメッセージを編集できる仕組みが必要です。

アトラスのメッセージ管理の仕組み

というわけで、今回はアトラス流のメッセージ管理の仕組みをご紹介します。

アトラスのシステム開発では、GitHubでバージョンを管理し、Google Appsでドキュメントを作成・管理しています。その前提でGoogleスプレッドシートを使ってメッセージプロパティを一括管理し、Google Apps Scriptで更新を自動化する方法を考えました。流れは下図のとおりです。

flow2

※ Google Apps Scriptについては過去の記事をご覧ください。

「メッセージ修正」は全てスプレッドシートで行い、「リモートブランチへ反映」の部分をGoogle Apps Scriptで自動化します。マージまで全自動にすることもできますが、人の目による確認を入れた方が良いという理由で、自動化はプルリクエスト作成までとしています。

スプレッドシートの構成は大きく2つのパーツに分かれます。

spreedSheet

スプレッドシートからメッセージプロパティを更新できるように、カスタムメニューを追加しています。これはGoogle Apps Scriptによって実現できます。この「メッセージプロパティ更新」をクリックするだけで、自動でGitHubのプルリクエスト作成まで実行してくれます。

menu

メッセージ更新を自動化するためのGoogle Apps Script

メニューバーのツール -> スクリプトエディタを開き、5つのステップに分けてこの機能を作っていきます。

1. スプレッドシートからメッセージプロパティを取得

  1. シートの中の範囲を指定し、値を加工します。ちなみにJavaのプロパティファイルの場合、文字コードはUTF-8ではないので変換する必要があります。
  2. 加工した値を変数に格納し返却します。

2. メッセージプロパティファイル更新の関数を作成

  1. リポジトリ上のメッセージプロパティファイルのURLを定義し、ファイルのSHAを取得します。
  2. 引数messageをJSON式のデータに加えます。
  3. APIを呼び出してファイルを更新します。

3. プルリクエストを作成するメソッド

  1. プルリクエストに必要なパラメータを定義します。(title, head, base, body)
  2. パラメータが入ったJSON式のデータを作成します。
  3. プルリクエストを作成します。

4. 関数を呼び出して実行

5. メニューバーにカスタムメニューを追加

スクリプトの作成に少し時間が掛かるかもしれませんが、 一度作ればどのプロジェクトでも使いまわせます。もしメッセージプロパティの管理に困っているのであれば、是非作ってみてください。