Upgrade to Pro — share decks privately, control downloads, hide ads and more …

タクシーアプリの多言語対応・ローカライズにおける課題と解決策

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for GO Inc. dev GO Inc. dev
September 04, 2023

 タクシーアプリの多言語対応・ローカライズにおける課題と解決策

iOSDC japan 2023で発表した資料です。
開発チームとして単一言語対応のアプリを多言語対応させる際にどのような作業を行ったのか、また仕組み化して継続的に多言語対応を進めるためにどのような対応を行ったのかなど、多言語対応に関わる内容やノウハウについて発表しました。

Avatar for GO Inc. dev

GO Inc. dev

September 04, 2023

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2023.09.01 16:40〜 Track A 開発本部 ソフトウェア開発統括部 ユーザーシステム開発部

    ユーザーシステム1グループ / 髙橋秀宗 GO株式会社 タクシーアプリの多言語対応・ ローカライズにおける課題と解 決策
  2. © GO Inc. • SwiftのDictionaryのようなイメージで、言語ごとにKeyと文言を登録しておけ る 日本語: [“common_send_button_text” : “送信する"]

    英語: [“common_send_button_text” : “Send”] • Strings形式のファイルを出力することができ、アプリ内部に組み込んで利用で きる 文言管理ツールについて 6
  3. © GO Inc. 多言語対応で目指すところ(ゴール) 9 現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応 ↓

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用 + 日本語に加えて英語も対応
  4. © GO Inc. アプリの全ての文言で文言管理ツールを利用するための取り組み 10 1. アプリ側のソースコードから多言語対応していないString を抽出 2. スプレッドシートでまとめて整理

    3. 各Stringに対してユニークなキーを定義してチーム内に共有 • iOS / Androidで共通のキーを利用するため 4. 文言管理ツールに新しく定義した文言を登録 5. アプリ側のソースコードを多言語対応に適用させる
  5. © GO Inc. Before: 文言管理ツールを利用しないコード 11 let attributedStrings = [

    NSAttributedString(string: "車両をお探しの上、", attributes: planeTextAttributes), NSAttributedString(string: "\(dateFormatter.string(from: deadline))まで", attributes: heavyTextAttributes), NSAttributedString(string: "にご乗車ください", attributes: planeTextAttributes) ]
  6. © GO Inc. After: 文言管理ツールを利用するコード 12 let attributedStrings = [

    NSAttributedString(string: R.string.arrival_onboard_request_onboard_prefix(), attributes: planeTextAttributes), NSAttributedString(string: R.string.arrival_onboard_request_onboard_value(dateString)), attributes: heavyTextAttributes), NSAttributedString(string: R.string.arrival_onboard_request_onboard_suffix(), attributes: planeTextAttributes) ]
  7. © GO Inc. 多言語対応で目指すところ(ゴール) 19 現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応 ↓

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用 + 日本語に加えて英語も対応 ✅
  8. © GO Inc. 多言語対応で目指すところ(ゴール) 20 現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応 ↓

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用 + 日本語に加えて英語も対応 今後の開発においても多言語対応を進める必要があるため、仕組み化を行う ✅
  9. © GO Inc. 仕組み化する上で検討するべき点 22 • 文言管理ツールにキーが登録されていないと、既存コードにキーを適用できない • 開発と並行して文言管理ツールの文言が更新されることへの影響 ◦

    PdMをメインに、文言を更新する必要がある際に、任意のタイミングで更新作業を 行っていた • 文言管理ツールに文言を登録・更新するコスト ◦ 現状の『GO』では2000以上のキーが登録済 ◦ 多い施策では100以上のキーを更新 ⇒ 文言管理ツールの運用コストを抑えつつ、文言管理ツール側を意識せずに開発が 進められるような仕組み
  10. © GO Inc. 事前準備 • スプレッドシートに紐づいたGoogle App Scriptに認証情報等を設定 更新作業 1.

    スプレッドシートに文言を記入 2. スプレッドシート上のインポートボタンを押す 3. スプレッドシート上の反映ボタンを押して手動で反映 → 文言管理ツールが更新される 今までの更新フロー 23
  11. © GO Inc. 今までの更新フロー 認証情報設定 25 • スプレッドシートで正しく更新できるよう認 証情報・設定等を適切に入力する必要がある ◦

    アクセストークン ◦ プロジェクトID ◦ スプレッドシート名 ◦ …etc • プロジェクト開発ごとに差し替える必要もあ る
  12. © GO Inc. 新しい更新フロー 事前準備 • なし 更新作業 1. GitHubのmainブランチからtopicブランチを作成

    2. topicブランチ上のjsonファイルを更新 3. PRを作成して、topicブランチにマージ 4. 機能開発が完了したら、topicブランチをmainブランチにマージ → GitHub Actionsが更新を検知して、文言管理ツールが更新される 26
  13. © GO Inc. GitHub Actionsを利用した文言管理ツールの更新自動化 29 main topic feature 日本語を更新

    project 作成 main project 英語を更新 GitHub 文言管理 ツール project 更新 project 更新 project を マージ&削除 GitHub Actions で自動化
  14. © GO Inc. Before • 多言語対応を実施した段階では、文言管理ツールの更新作業が属人化 ◦ 更新ツールの設定にかなりの習熟が必要 ▪ 設定を間違えると意図せぬプロジェクトが更新されるなどの大きな問題が容易に

    発生 ◦ 結果、特定の個人に更新タスクが集中 After • エンジニアの誰でも文言管理ツールを安全に更新できるようになった • 更新作業をエンジニアチームが実施できるようになった 特徴①: 文言管理ツールを安全に更新できるようにし、非属人化 30
  15. © GO Inc. Before • 今までのやり方では参照するファイルが違うことによるリスクや、更新内容の チェックがないことによるリスクがあった ◦ 文言管理ツールの更新ミスが発生 After

    • 操作するファイルを1つに絞ることで作業者の負荷を低減 • PRでのレビューを必須とすることで更新ミスの可能性を低減 特徴②: 作業者の負荷を低減し、ヒューマンエラーのリスクを低減 31
  16. © GO Inc. Before • スプレッドシートの設定に、かなりの習熟と慣れが必要 ◦ 特定のメンバーに更新作業が集中することを誘発する状況だった ◦ 複数の新機能開発を進める際、文言管理ツールの更新作業が滞る恐れがあった

    After • スプレッドシートの設定に相当する作業をGitHub Actions側で吸収し、作業者 の作業負荷を低減 • スムーズに複数の新機能開発を実施できる体制を構築 特徴③: 複数の新機能開発への対応 32
  17. © GO Inc. 現状の課題 34 • gitの利用スキルが必要 ◦ 暗黙的にエンジニアがターゲットになってしまっていて、PdM・デザイナー・Bizな どの非エンジニア職が文言配信に参加する際の障壁となっている

    • 文言管理ツールとの連携に問題があり、ドキュメント通り作業しても更新に失敗 するケースが有る ◦ 回復ドキュメントを整備して、個別対応 • 文字装飾の仕組みが言語の語順に依存してしまっている ◦ 将来別言語対応のときにハードルになる可能性がある
  18. © GO Inc. 多言語対応を進めてみて 36 • 自アプリが置かれている状況を踏まえて、多言語化を進めていく • その一方で、出てきた課題に対しては1つ1つ対処していく事が大事 ◦

    今回採用している方法では将来別言語対応しようとしたときに破綻してしまう可能性 があるので、改善を進めていく