Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOSアプリを安全にローカライズする
Search
Yuya Hirayama
February 21, 2023
Technology
1
450
iOSアプリを安全にローカライズする
potatotips #81
Yuya Hirayama
February 21, 2023
Tweet
Share
More Decks by Yuya Hirayama
See All by Yuya Hirayama
LLMエージェント時代に適応した開発フロー
hiragram
1
510
Deep Dive into ~/.claude/projects
hiragram
14
20k
iOSアプリ開発もLLMで自動運転する
hiragram
7
2.6k
iOSアプリの定期リリースとその自動化@potatotips#90
hiragram
1
450
Xcode Cloud事例紹介
hiragram
1
500
iPhoneXのTrueDepthカメラでVRMを動かす
hiragram
2
14k
生きた仕様書としてのUIカタログアプリ運用 構想編
hiragram
1
1.4k
waiwai-swiftc-lazy.pdf
hiragram
0
300
Protocol Oriented WebAPI Abstraction
hiragram
0
380
Other Decks in Technology
See All in Technology
AWSで推進するデータマネジメント
kawanago
0
900
Bye-Bye Query Spaghetti: Write Queries You'll Actually Understand Using Pipelined SQL Syntax
tobiaslampertlotum
0
120
Grafana MCPサーバーによるAIエージェント経由でのGrafanaダッシュボード動的生成
hamadakoji
1
1.1k
生成AI時代に必要な価値ある意思決定を育てる「開発プロセス定義」を用いた中期戦略
kakehashi
PRO
1
260
「魔法少女まどか☆マギカ Magia Exedra」の必殺技演出を徹底解剖! -キャラクターの魅力を最大限にファンに届けるためのこだわり-
gree_tech
PRO
0
470
フィンテック養成勉強会#56
finengine
0
100
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
460
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
9
3.6k
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
1
540
Figma + Storybook + PlaywrightのMCPを使ったフロントエンド開発
yug1224
10
3.8k
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
18
8.1k
RSCの時代にReactとフレームワークの境界を探る
uhyo
9
2.6k
Featured
See All Featured
Gamification - CAS2011
davidbonilla
81
5.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Done Done
chrislema
185
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Unsuck your backbone
ammeep
671
58k
Faster Mobile Websites
deanohume
309
31k
Side Projects
sachag
455
43k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Transcript
安全にローカライズする @hiragram 2023-02-21 potatotips #81
iOSアプリのローカライズは難しい
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ◦ 抜け漏れ耐性が低い ◦ 目視に優しくない
縦に遠くて見 づらい typoの チェック機構がな い 抜け漏れの チェック機構がな い
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ◦ 抜け漏れ耐性が低い ◦ 目視に優しくない
• 呼び出す側をいい感じにするのが難しい ◦ typo耐性が低い ◦ パラメータ渡すのが難しい
LocalizedStringKey の typo 引数の順番間違い
もっと安全にやりたい
既存のソリューション: R.swift Localizable.strings を元 にコードを生成して、静的 解析できるようにする。 Localizable.strings その ものの管理は自分でやる ことになる
🤔
課題を解決する仕組みを作りました
ローカライズ便利ツール Honya - https://github.com/nana-music/Honya - とりあえずプロダクトから切り出して置いただけなので、参考程度に - ymlでローカライズの定義をして、それを元にLocalizable.string と静的に扱える コードを生成するツール
- 人間が管理するにはだるいファイルを ymlから生成するというのは、 XcodeGenから影響をうけたア イデア
• ローカライズ対象の言語を指定する。 • ローカライズ項目を記述する。 • 上述の対象言語はすべて書かれている 必要があり、足りないとツール実行時に エラーになる。 抜け漏れ耐性が 高まった
yml enumの定義 + Localizable.strings
typo耐性が 高まった typoすると コンパイルエラー
• 外から引数として受け取れるパラメータ を定義する。型はCVarArg準拠型の み。 • 変数を埋め込むことができる 引数を渡せるようにする
引数を渡せるようにする 引数を間違え にくくなった
おさらい
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ▪ Localizable.strings を人間が直接触る必要が無くなり、解決 ◦
抜け漏れ耐性が低い ▪ ymlからの生成時に、すべての言語が揃っているかチェックされるようになり、解決 ◦ 目視に優しくない ▪ 定義が1つのymlにまとまったことで、目視もレビューもしやすくなり、解決 • 呼び出す側をいい感じにするのが難しい ◦ typo耐性が低い ▪ enumとして定義することで、コンパイル時にチェックできるようになり、解決 ◦ パラメータ渡すのが難しい ▪ assoc value付きのcaseにすることで、ラベルと型がついて間違えにくくなり、解決
• @hiragram / 平山裕也 • 株式会社nana music / iOS lead
/ PdM / 色々 • 10周年を迎えた音楽SNSアプリnanaをゼロから作り直しています • 1000万ユーザーを抱えるサービスを生まれ変わらせる仕事に興味ある人いたらぜ ひ声かけてください。TwitterDMでもいいです。iOS/Android問わず。 自己紹介と宣伝 このへんの話もで きます