ストア申請作業にかける時間がもったいないので自動化を導入することにしました。プロジェクトでfastlaneのセットアップが完了していることが前提です!
目次
編集するファイルについて
編集するファイルはmetadataディレクトリです。ここにストアで編集できる項目に該当するファイルが言語別で格納されています。

今回は下記3つを自動化してみたいと思います
・プロモーションテキスト
・概要
・リリースノート
実装手順
自分のアプリは日本で利用されることがメインのためjaディレクトリ内のファイルを編集し、多言語への翻訳はChatGPTを利用して翻訳させる対応を行います。
Bitriseでシークレットキーを登録
OpenAIのAPIキーをBitriseのシークレットに登録します。

ChatGPTをRubyで呼び出すスクリプトを作成
まずはプロジェクトのfastlane直下にscriptsディレクトリを作成します。

scripts内にchatgpt_translate_from_ja.rbという名前でRubyファイルを作成します。

AIに依頼したRubyファイルの内容は下記となります。
Ruby
require "net/http"
require "json"
require "fileutils"
API_KEY = ENV["OPENAI_API_KEY"]
raise "OPENAI_API_KEY not set" unless API_KEY
METADATA_DIR = File.expand_path("fastlane/metadata", __dir__)
# 翻訳対象の言語
target_langs = {
"en-US" => "English",
"fr-FR" => "French",
"de-DE" => "German",
"es-ES" => "Spanish",
"ru" => "Russian",
"zh-Hant" => "Traditional Chinese"
}
# 翻訳対象ファイル
FILES_TO_TRANSLATE = [
"description.txt", # 概要
"release_notes.txt", # リリースノート
"promotional_text.txt" # プロモーションテキスト
]
# ChatGPT翻訳関数
def translate(text, lang)
uri = URI("https://api.openai.com/v1/chat/completions")
headers = {
"Content-Type" => "application/json",
"Authorization" => "Bearer #{API_KEY}"
}
body = {
model: "gpt-4o-mini",
messages: [
{ role: "system", content: "You are a professional app store localization translator." },
{ role: "user", content: "Translate this from Japanese to #{lang}. Keep line breaks and tone natural.\n\n#{text}" }
]
}
res = Net::HTTP.post(uri, body.to_json, headers)
JSON.parse(res.body).dig("choices", 0, "message", "content")
end
# 翻訳処理
FILES_TO_TRANSLATE.each do |filename|
path = File.join("#{METADATA_DIR}/ja", filename)
next unless File.exist?(path)
ja_content = File.read(path)
target_langs.each do |folder, lang|
translated = translate(ja_content, lang)
output_dir = File.join(METADATA_DIR, folder)
FileUtils.mkdir_p(output_dir)
File.write("#{output_dir}/#{filename}", translated)
puts "✅ Translated #{filename} -> #{folder}"
end
end
puts "🎉 Translation complete!"
FILES_TO_TRANSLATEに指定したファイルを元に各言語に翻訳して保存されます。試しにローカル環境で実行して確認してみてください。
本当AI感謝です…泣
Fastfileにlaneを作成
Fastfileにlaneを作成してBitrise上から呼び出せるようにします。
Ruby
lane :release do
translate_metadata
upload_to_app_store
end
lane :upload_to_app_store do
deliver(
force: true, # 常にアップロード
skip_metadata: false, # メタデータも更新
skip_screenshots: true, # スクショはスキップ
automatic_release: true # 承認後自動でリリース
)
end
lane :translate_metadata do
# ストアメタデータの翻訳スクリプトを実行
sh "ruby fastlane/scripts/chatgpt_translate_from_ja.rb"
endこのlaneをBitrise上から呼び出すことで自動翻訳が実行された状態となります。