$30 off During Our Annual Pro Sale. View Details »

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

GO Inc. dev
September 04, 2023

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

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

GO Inc. dev

September 04, 2023
Tweet

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc.
    2023.09.01 16:40〜 Track A
    開発本部 ソフトウェア開発統括部 ユーザーシステム開発部 ユーザーシステム1グループ / 髙橋秀宗
    GO株式会社
    タクシーアプリの多言語対応・
    ローカライズにおける課題と解
    決策

    View Slide

  2. © GO Inc.
    2022年12月に入社。タクシーアプリ『GO』のiOSアプリ
    開発を担当
    趣味はギターとカメラ
    好きなバンドはUNISON SQUARE GARDENと[Alexandros]
    2
    自己紹介
    プロフィール写真
    GO株式会社
    ユーザーシステム1グループ / 髙橋秀宗
    @h1d3mun3

    View Slide

  3. Index
    © GO Inc.
    1. 文言管理ツールについて
    2. 多言語対応について
    3. 仕組み化について
    4. 現状の課題
    5. 多言語対応を進めてみて
    6. まとめ
    3

    View Slide

  4. © GO Inc.
    今まで『GO』アプリでは日本語のみの単一言語をサポートしていましたが、2023年
    2月のリリースで英語もサポートし多言語に対応しました。
    本日は多言語対応の際に開発チームとして取り組んできた内容や、ノウハウについて
    お話いたします。
    本日お話すること
    4

    View Slide

  5. © GO Inc.
    文言管理ツールにつ
    いて
    01

    View Slide

  6. © GO Inc.
    ● SwiftのDictionaryのようなイメージで、言語ごとにKeyと文言を登録しておけ

    日本語: [“common_send_button_text” : “送信する"]
    英語: [“common_send_button_text” : “Send”]
    ● Strings形式のファイルを出力することができ、アプリ内部に組み込んで利用で
    きる
    文言管理ツールについて
    6

    View Slide

  7. © GO Inc.
    文言管理ツールについて
    7

    View Slide

  8. © GO Inc.
    多言語対応について
    02

    View Slide

  9. © GO Inc.
    多言語対応で目指すところ(ゴール)
    9
    現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用
    + 日本語に加えて英語も対応

    View Slide

  10. © GO Inc.
    アプリの全ての文言で文言管理ツールを利用するための取り組み
    10
    1. アプリ側のソースコードから多言語対応していないString を抽出
    2. スプレッドシートでまとめて整理
    3. 各Stringに対してユニークなキーを定義してチーム内に共有
    ● iOS / Androidで共通のキーを利用するため
    4. 文言管理ツールに新しく定義した文言を登録
    5. アプリ側のソースコードを多言語対応に適用させる

    View Slide

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

    View Slide

  12. © 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)
    ]

    View Slide

  13. © GO Inc.
    日本語に加えて英語も対応する
    13
    ● 文言管理ツールに英語の文言を適用する
    ● 日本語と英語の文法の違いによる課題

    View Slide

  14. © GO Inc.
    日本語に加えて英語も対応する
    14
    ● 文言管理ツールに英語の文言を適用する
    ● 日本語と英語の文法の違いによる課題

    View Slide

  15. © GO Inc.
    日本語と英語の文法の違いによる課題
    15
    ● 言語ごとに装飾するべき箇所が異なる
    ● 言語ごとに語順が異なる
    → 言語間での違いを吸収する仕組みの構築が必要

    View Slide

  16. © GO Inc.
    日本語と英語の文法の違いによる課題
    16
    車両をお探しの上、16:44までにご乗車ください
    arrival_onboard_request_onboard_prefix
    arrival_onboard_request_onboard_value
    arrival_onboard_request_onboard_suffix

    View Slide

  17. © GO Inc.
    日本語と英語の文法の違いによる課題
    17
    🤔
    arrival_onboard_request_onboard_prefix
    arrival_onboard_request_onboard_value
    arrival_onboard_request_onboard_suffix
    Look for the vehicle and board by HH:MM

    View Slide

  18. © GO Inc.
    日本語と英語の文法の違いによる課題
    18
    英語の場合
    arrival_onboard_request_onboard_suffix キーに設
    定する文言がないため、半角スペースを配信するこ
    とで表示を解決

    View Slide

  19. © GO Inc.
    多言語対応で目指すところ(ゴール)
    19
    現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用
    + 日本語に加えて英語も対応

    View Slide

  20. © GO Inc.
    多言語対応で目指すところ(ゴール)
    20
    現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応

    ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用
    + 日本語に加えて英語も対応
    今後の開発においても多言語対応を進める必要があるため、仕組み化を行う

    View Slide

  21. © GO Inc.
    仕組み化について
    03

    View Slide

  22. © GO Inc.
    仕組み化する上で検討するべき点
    22
    ● 文言管理ツールにキーが登録されていないと、既存コードにキーを適用できない
    ● 開発と並行して文言管理ツールの文言が更新されることへの影響
    ○ PdMをメインに、文言を更新する必要がある際に、任意のタイミングで更新作業を
    行っていた
    ● 文言管理ツールに文言を登録・更新するコスト
    ○ 現状の『GO』では2000以上のキーが登録済
    ○ 多い施策では100以上のキーを更新
    ⇒ 文言管理ツールの運用コストを抑えつつ、文言管理ツール側を意識せずに開発が
    進められるような仕組み

    View Slide

  23. © GO Inc.
    事前準備
    ● スプレッドシートに紐づいたGoogle App Scriptに認証情報等を設定
    更新作業
    1. スプレッドシートに文言を記入
    2. スプレッドシート上のインポートボタンを押す
    3. スプレッドシート上の反映ボタンを押して手動で反映
    → 文言管理ツールが更新される
    今までの更新フロー
    23

    View Slide

  24. © GO Inc.
    今までの更新フロー 文言更新画面
    24

    View Slide

  25. © GO Inc.
    今までの更新フロー 認証情報設定
    25
    ● スプレッドシートで正しく更新できるよう認
    証情報・設定等を適切に入力する必要がある
    ○ アクセストークン
    ○ プロジェクトID
    ○ スプレッドシート名
    ○ …etc
    ● プロジェクト開発ごとに差し替える必要もあ

    View Slide

  26. © GO Inc.
    新しい更新フロー
    事前準備
    ● なし
    更新作業
    1. GitHubのmainブランチからtopicブランチを作成
    2. topicブランチ上のjsonファイルを更新
    3. PRを作成して、topicブランチにマージ
    4. 機能開発が完了したら、topicブランチをmainブランチにマージ
    → GitHub Actionsが更新を検知して、文言管理ツールが更新される
    26

    View Slide

  27. © GO Inc.
    JSONファイルについて
    27

    View Slide

  28. © GO Inc.
    JSONファイルについて
    28

    View Slide

  29. © GO Inc.
    GitHub Actionsを利用した文言管理ツールの更新自動化
    29
    main
    topic
    feature
    日本語を更新
    project 作成
    main
    project
    英語を更新
    GitHub
    文言管理
    ツール
    project 更新 project 更新
    project を
    マージ&削除
    GitHub Actions
    で自動化

    View Slide

  30. © GO Inc.
    Before
    ● 多言語対応を実施した段階では、文言管理ツールの更新作業が属人化
    ○ 更新ツールの設定にかなりの習熟が必要
    ■ 設定を間違えると意図せぬプロジェクトが更新されるなどの大きな問題が容易に
    発生
    ○ 結果、特定の個人に更新タスクが集中
    After
    ● エンジニアの誰でも文言管理ツールを安全に更新できるようになった
    ● 更新作業をエンジニアチームが実施できるようになった
    特徴①: 文言管理ツールを安全に更新できるようにし、非属人化
    30

    View Slide

  31. © GO Inc.
    Before
    ● 今までのやり方では参照するファイルが違うことによるリスクや、更新内容の
    チェックがないことによるリスクがあった
    ○ 文言管理ツールの更新ミスが発生
    After
    ● 操作するファイルを1つに絞ることで作業者の負荷を低減
    ● PRでのレビューを必須とすることで更新ミスの可能性を低減
    特徴②: 作業者の負荷を低減し、ヒューマンエラーのリスクを低減
    31

    View Slide

  32. © GO Inc.
    Before
    ● スプレッドシートの設定に、かなりの習熟と慣れが必要
    ○ 特定のメンバーに更新作業が集中することを誘発する状況だった
    ○ 複数の新機能開発を進める際、文言管理ツールの更新作業が滞る恐れがあった
    After
    ● スプレッドシートの設定に相当する作業をGitHub Actions側で吸収し、作業者
    の作業負荷を低減
    ● スムーズに複数の新機能開発を実施できる体制を構築
    特徴③: 複数の新機能開発への対応
    32

    View Slide

  33. © GO Inc.
    現状の課題
    04

    View Slide

  34. © GO Inc.
    現状の課題
    34
    ● gitの利用スキルが必要
    ○ 暗黙的にエンジニアがターゲットになってしまっていて、PdM・デザイナー・Bizな
    どの非エンジニア職が文言配信に参加する際の障壁となっている
    ● 文言管理ツールとの連携に問題があり、ドキュメント通り作業しても更新に失敗
    するケースが有る
    ○ 回復ドキュメントを整備して、個別対応
    ● 文字装飾の仕組みが言語の語順に依存してしまっている
    ○ 将来別言語対応のときにハードルになる可能性がある

    View Slide

  35. © GO Inc.
    多言語対応を進めて
    みて
    05

    View Slide

  36. © GO Inc.
    多言語対応を進めてみて
    36
    ● 自アプリが置かれている状況を踏まえて、多言語化を進めていく
    ● その一方で、出てきた課題に対しては1つ1つ対処していく事が大事
    ○ 今回採用している方法では将来別言語対応しようとしたときに破綻してしまう可能性
    があるので、改善を進めていく

    View Slide

  37. © GO Inc.
    まとめ
    06

    View Slide

  38. © GO Inc.
    まとめ
    38
    ● 多言語対応を進めるために、まずプログラムで文言管理ツールを利用できるよう
    に改修
    ● 多言語対応は継続して実施することに意味があるので、チームとして無理なく継
    続的な多言語対応を進められるやり方を模索し、チームに導入
    ● 発生している課題については1つ1つ解決していく

    View Slide

  39. © GO Inc. 39
    タクシーアプリ『GO』の開発を一緒にしませんか
    https://hrmos.co/pages/
    goinc/jobs

    View Slide

  40. © GO Inc. 40
    後夜祭 iOSDC Japan 2023 のご参加お待ちしています
    2023年09月26日 19:00 ~ 20:30
    https://hey.connpass.com/event/290854/

    View Slide

  41. 文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。
    © GO Inc.

    View Slide