Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

© GO Inc. ● SwiftのDictionaryのようなイメージで、言語ごとにKeyと文言を登録しておけ る 日本語: [“common_send_button_text” : “送信する"] 英語: [“common_send_button_text” : “Send”] ● Strings形式のファイルを出力することができ、アプリ内部に組み込んで利用で きる 文言管理ツールについて 6

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

© 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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

© GO Inc. 多言語対応で目指すところ(ゴール) 20 現状: アプリ内の一部の文言で文言管理ツールを利用 + 日本語のみの対応 ↓ ゴール: アプリの全ての機能で利用される文言で文言管理ツールを利用 + 日本語に加えて英語も対応 今後の開発においても多言語対応を進める必要があるため、仕組み化を行う ✅

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

© GO Inc. 現状の課題 04

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

© GO Inc. まとめ 06

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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