【iOS】GoogleスプレッドシートとFastlaneを使って、App Store説明文を自動更新してラクする手順を書いてみる。
大変なことはなるだけ機械に任せたい。
当たり前ですが、iOSアプリを更新するにはアップデートの内容文なども更新する必要があります。
これまで自分は、運営さんがGoogleスプレッドシートに入力してくれた説明文を、一個一個、App Store Connectにコピー&ペーストしていました。
たまになら問題ないですが、多くなってくるとちと大変です。自動化してラクしたい。ラクしたい。ラクできた!
というわけで、うまく行ったので、GoogleスプレッドシートとFastlaneを使ってApp Store説明文の更新を自動化する手順を書いておきます。
1. 用意するもの
- App Store説明文を入力したGoogleスプレッドシート
-
fastlane v2.158.0
- fastlaneは事前にインストールしておくこと
- google-drive-ruby v3.0.5
- Google Cloud Platformのサービスアカウントキー(JSONファイル)
- Google Drive APIを有効
- Google Spreadsheet APIを有効
2. App Store説明文を入力したGoogleスプレッドシートを作る
今回は、この内容のスプレッドシートからApp Storeの文言を取得する例として書きます。
言語別にシートは分けてください(シート名は、日本語は「ja」、英語は「en-US」とします)
日本語
アプリ名 | サブタイトル | プロモーション | 詳細 | アップデート内容 | キーワード |
---|---|---|---|---|---|
全自動肩揉み機 | 血流改善にどうぞ | ぜひ使ってください。 | これはとても健康的なアプリです。 | 軽微な修正を施しました | 全自動、 マッスィーン |
英語
アプリ名 | サブタイトル | プロモーション | 詳細 | アップデート内容 | キーワード |
---|---|---|---|---|---|
Full Auto Shoulder massager | Please improve blood flow. | Please use it. | It's a very healthy app. | bugfix | Full Auto、 Let's |
3. Google Cloud Platformで「Google Drive API」と「Google Spreadsheet API」を使えるように設定する
Googleスプレッドシートから文言を取得するには「Google Drive API」と「Google SpreadSheet API」を叩く必要があります。
そして、これらのAPIをCIから叩くには、GCPでサービスアカウントを作成する必要があります。
-
Google Cloud Platform にアクセスしてプロジェクトを作りましょう。
-
APIとサービス>認証情報に移動して「認証情報を作成」をクリックし、サービスアカウントをクリックします。
-
名前、ID、サービスアカウントの説明を記入して、作成ボタンをクリックします。
-
サービスアカウントの権限を決めます。今回、Googleスプレッドシートを読み込たいので閲覧者に(適時、適切な権限を選んでください)して続行ボタンをクリックします。
-
完了ボタンをクリックします。
-
サービスアカウントの欄に新たな項目が追加されるのでクリックします。
-
鍵を追加をクリックして、新しい鍵の作成をクリックします。
-
JSONを指定して作成をクリックします。
保存したJSONファイルは、config.jsonにリネームしてください。
あとは、APIサービス > APIライブラリから「Google Drive API」と「Google Spreadsheet API」にを検索し、それぞれのAPIを有効にすれば設定は完了です。
4. 独自Fastlane Actionを作る
Fastfileに書いてしまっても良いのですが、Fastfileを肥大化させないためにも、独自Actionを作って処理を分けます。
以下のコマンドを叩きます。
bundle exec fastlane new action
名前を聞かれるので適当な名前を当てます。 metadata とでもしておきましょうか。
[20:28:11]: Name of your action: metadata
fastlane/action/metadata.rb
というファイルが生成されます。
5. 「google-drive-Ruby」を使って、GoogleスプレッドシートからApp Store説明文を読み込む
下準備
Googleスプレッドシートを読み込むために、google-drive-rubyというgemを使います。
Gemfile
に以下を追加します。
gem "google_drive"
インストール。
bundle install
fastlane/action/
に先ほどGoogle Cloud Platformで生成したサービスアカウントキー(config.json)を置きます(サービスアカウントキーを置きたくない方はここへジャンプ)
コードを書く
fastlane/action/metadata.rb
の先頭に、以下を追加します。
require "google_drive"
self.run(params)
に以下のコードを書いていきます。
冒頭に書いたスプレッドシートの内容を以下の定数に指定します。
- LANGUAGESはシート名を指定
- COLUMNSは左から各項目別のFastlaneのテキストファイル名を指定(各テキストファイル名はdeliverを参考に)
LANGUAGES = ["ja", "en-US"]
COLUMNS = ["name", "subtitle", "promotional_text", "description", "release_notes", "keywords"]
サービスアカウントキーファイルのパスとスプレッドシートIDを指定して、スプレッドシートを読み込みます。
session = GoogleDrive::Session.from_config("config.json")
spreadsheet = session.spreadsheet_by_key("スプレッドシートのID")
あとは、各言語別のシートの最終行から各カラムごとのテキストを引っ張って、各テキストファイルに保存するだけ。
LANGUAGES.each do |language|
spreadsheet.worksheet_by_title(language).rows.last.each_with_index do |text, i|
File.open("#{FastlaneCore::FastlaneFolder.path}metadata/#{language}/#{COLUMNS[i]}.txt", mode = "wb") do |f| f.write(text) end
end
end
コード全文
require "google_drive"
module Fastlane
module Actions
class MetadataAction < Action
def self.run(params)
LANGUAGES = ["ja", "en-US"]
COLUMNS = ["name", "subtitle", "promotional_text", "description", "release_notes", "keywords"]
session = GoogleDrive::Session.from_config("config.json")
spreadsheet = session.spreadsheet_by_key("スプレッドシートのID")
LANGUAGES.each do |language|
spreadsheet.worksheet_by_title(language).rows.last.each_with_index do |text, i|
File.open("#{FastlaneCore::FastlaneFolder.path}metadata/#{language}/#{COLUMNS[i]}.txt", mode = "wb") do |f| f.write(text) end
end
end
end
def self.description
"A short description with <= 80 characters of what this action does"
end
def self.details
"You can use this action to do cool things..."
end
def self.available_options
[]
end
def self.authors
["Your GitHub/Twitter Name"]
end
def self.is_supported?(platform)
platform == :ios
end
end
end
end
6. Fastfileで実行
あとは、Fastfile上でmetadataを実行すれば、各テキストファイルにGoogleスプレッドシートから読み込んだ項目を保存します。
その次に、deliver(skip_metadata: false)
を実行すればApp Storeの説明文を更新してくれます。
lane :deploy_appstore do
metadata
deliver(skip_metadata: false)
end
ちなみに、diffが出たらプルリクエストを作るようにすれば、前のバージョンの違いが一目瞭然となるのでおすすめです。
7. Fastlane Pluginにして公開してみた
ここまで説明して何ですが、Fastlane Pluginにしてみました。
他にも同じ目的のプラグインはありましたが、 これは、サービスアカウントキーファイルをGit管理したくなかったので環境変数で指定できるようにしています。 あと、deliverがmetadata更新に使用していないテキストファイル名をcolumsに指定すれば、そこのカラムは無視する様にもしています。
こんな感じで使えます。
fetch_metadata_from_google_sheets(
languages: ["ja", "en-US"],
columns: ["version", "name", "subtitle", "release_notes", "promotional_text", "description", "keywords"],
spreadsheet_id: ENV["TEST_APP_STORE_METADATA_SPREADSHEET_ID"],
project_id: ENV["TEST_GCP_PROJECT_ID"],
service_account_private_key_id: ENV["TEST_GCP_SERVICE_ACCOUNT_PRIVATE_KEY_ID"],
service_account_private_key: ENV["TEST_GCP_SERVICE_ACCOUNT_PRIVATE_KEY"],
service_account_client_email: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_EMAIL"],
service_account_client_id: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_ID"],
service_account_auth_uri: ENV["TEST_GCP_SERVICE_ACCOUNT_AUTH_URI"],
service_account_token_uri: ENV["TEST_GCP_SERVICE_ACCOUNT_TOKEN_URI"],
service_account_auth_provider_x509_cert_url: ENV["TEST_GCP_SERVICE_ACCOUNT_AUTH_PROVIDER_X509_CERT_URL"],
service_account_client_x509_cert_url: ENV["TEST_GCP_SERVICE_ACCOUNT_CLIENT_X509_CERT_URL"]
)
詳しくは、以下のリボジトリを参考にしてください。
8. さいごに
これまでは、コピー&ペーストする度に間違いがないかハラハラしてましたが、自動更新してからは間違うこともなく随分ラクになりました。
ぜひ、同じくお困りの方はお試しください。
こんな記事もどうぞ。
Discussion