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
【登壇資料】翻訳辞書にも型がほしい:ypecriptで考えるi18n
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
エブリー
June 12, 2026
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【登壇資料】翻訳辞書にも型がほしい:ypecriptで考えるi18n
2026/06/12 TSKaigi2026〜アフターパーティー〜
エブリー
June 12, 2026
More Decks by エブリー
See All by エブリー
【登壇資料】Claude全社導入で加速したAI活用とこれからの展望.pdf
everypr
0
49
エンジニア職向け会社紹介資料
everypr
0
4k
【登壇資料】データ基盤をTreasureData + Databricksから Databricksへ統一する話
everypr
0
520
【登壇資料】Goにジェネリックメソッドが入るとどうなるか
everypr
0
110
【登壇資料】ドキュメント駆動開発から考える AI 駆動開発
everypr
0
130
【登壇資料】GoとWasmでつくる 軽量ブラウザUI
everypr
0
32
【登壇資料】google/jsonschema-go のこれまでとこれから
everypr
0
1.6k
【登壇資料】LLMのSDKに渡すためのJSON Schemaを Goのstructから良い感じに生成したい
everypr
0
110
【登壇資料】Goのエラー管理を振り返ってみる
everypr
0
130
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.9k
Evolving SEO for Evolving Search Engines
ryanjones
0
230
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The agentic SEO stack - context over prompts
schlessera
0
830
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Ethics towards AI in product and experience design
skipperchong
2
320
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
Tell your own story through comics
letsgokoyo
1
980
Producing Creativity
orderedlist
PRO
348
40k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Transcript
翻訳辞書にも型がほしい:TypeScriptで考えるi18n michika.kurotaka / 株式会社エブリー
Copyright © 2015 every, Inc. All rights reserved. 2 自己紹介
/ 会社紹介 自己紹介 Michika Kurotaka / 黒髙未知可 # 株式会社エブリー # 新卒2年目 # デリッシュキッチンの開発 # Go, Next.js, AIエージェント, 料理 # 業務のTypeScript歴は3ヶ月
3 Copyright © 2015 every, Inc. All rights reserved. every
- Company Profile 会社名 設立 株式会社エブリー 東京都港区六本木 3-2-1 住友不動産六本木グランドタワー 38F 133.3億円 所在地 2015年9月1日(6月決算) 累計調達 主要株主 KDDI、伊藤忠食品、加藤産業、旭食品、セイノーホー ルディングス、味の素、 DCMベンチャーズ、グロービス・ キャピタル・パートナーズ、 WiL、DBJキャピタル、 SMBCベンチャーキャピタル、 SBIインベストメント他 エブリーは 3つの領域で日本最大級のメディアを運営! 生活に寄り添ったサービスを提供しています。
Copyright © 2015 every, Inc. All rights reserved. 4 5,600万人以上の”食”と”健康”を支える、多様なプロダクト展開
レシピ動画サービス『デリッシュキッチン』 媒体 月間総利用者数 約 5,700万 1,320万以上 497万人 52万人 161万人 133万人 393万人 88万人 6媒体合計フォロワー数 「だれでもおいしく簡単に 作れるレシピ」を毎日配信 するレシピ動画メディア 『デリッシュキッチン』 デリッシュキッチンが プロデュースする健康の ための食事記録・体重管理 アプリ『ヘルシカ』 冷凍宅配弁当サービス『 Meals』 食トレンド分析ツール『デリッシュリサーチ』
5 Copyright © 2015 every, Inc. All rights reserved. エブリーが提供しているプロダクト、ソリューション一覧
エブリーではマルチプロダクトを展開し、あらゆる暮らしの最適化に向き合っています 「インフルエンサーと熱狂を共 創する」SNS・動画のプロ フェッショナルチーム 「熱狂を、仕掛ける。世の中 を、揺さぶる。」 SNS・動画の プロフェッショナルチーム WEB
Copyright © 2015 every, Inc. All rights reserved. 6 はじめに
TSKaigiお疲れ様でした! 🙌 いろんなトピックがありました TypeScript7, tsgo, … OXlint, Biome, … Branded Types, …
Copyright © 2015 every, Inc. All rights reserved. 7 はじめに
国際化に関するセッションもありました 型で頑張るプロダクト国際化 i18nextにおいてSelector APIを使うお話でした https://2026.tskaigi.org/talks/12
Copyright © 2015 every, Inc. All rights reserved. 8 はじめに
今回のテーマ ちょうど導入中だけど、確かに辞書管理は煩雑かも🤔 もう少し型で頑張れば 今後の多言語対応も楽になる...? → 辞書管理にもっと型を導入できないか?の話をします
Copyright © 2015 every, Inc. All rights reserved. 9 はじめに
目次 1. 国際化について 2. 導入後に感じた問題点 3. 型でどこまで縛れるか? 4. まとめ
10 国際化について
Copyright © 2015 every, Inc. All rights reserved. 11 国際化について
i18nとは? W3Cによる internationalization = 特定の言語だけに閉じず、後から別の言語・地域向けに適用しやすいようにアプリ ケーションを設計・実装しておくこと https://www.w3.org/International/questions/qa-i18n
Copyright © 2015 every, Inc. All rights reserved. 12 国際化について
今回はnext-intlライブラリを利用 next-intl Next.js向けのi18nライブラリ 主な機能 • locale(言語・地域)ごとのmessages(テキスト)を切り替え • Server Components / Client Components から翻訳を利用できる ※react-i18next, next-i18next とは別系統
Copyright © 2015 every, Inc. All rights reserved. 13 国際化について
一般的にはJSON辞書で管理
Copyright © 2015 every, Inc. All rights reserved. 14 国際化について
一般的にはJSON辞書で管理
15 導入後に感じた問題点
Copyright © 2015 every, Inc. All rights reserved. 16 導入後に感じた問題点
当初の運用方針 プロジェクト立ち上げ時に決めたこと 1. next-intlライブラリを用いてJSON管理します 2. 文字列は埋め込まない、必ず t('help’) のように呼び出してください → とりあえず導入だけ決めて CLAUDE.md でルール化 最初は一言語のみ対応のため、実装や動作上でネックになることはなかった
Copyright © 2015 every, Inc. All rights reserved. 17 導入後に感じた問題点
改めて今の辞書ファイルを見てみると...
Copyright © 2015 every, Inc. All rights reserved. 18 導入後に感じた問題点
何が問題か? 1. 同じ「ページ」なのに辞書の形が揃っていない 2. localeが増えた時に対応漏れが起きそう 3. 存在しないキーを呼び出しても気づきにくい
Copyright © 2015 every, Inc. All rights reserved. 19 導入後に感じた問題点
1. 同じ「ページ」なのに辞書の形が揃っていない Home, RecipePage, Compony はページを 表すが... • pageTitle とtitle がある • description もあれば metadata.description もあればそもそ もない場合も
Copyright © 2015 every, Inc. All rights reserved. 20 導入後に感じた問題点
2. localeが増えた時に対応漏れが起きそう • RecipePage.ingredients の欠落 • instructions →instruction のtypo
Copyright © 2015 every, Inc. All rights reserved. 21 導入後に感じた問題点
3. 存在しないキーを呼び出しても気づきにくい
Copyright © 2015 every, Inc. All rights reserved. 22 導入後に感じた問題点
何が問題か? このまま開発が進むと余計カオスになるのでは... → 共通化するような同じキーも型で頑張って綺麗に 揃えてみよう! AIもエラーを検知できて実装しやすいはず!
23 型でどこまで縛れるか?
Copyright © 2015 every, Inc. All rights reserved. 24 型でどこまで縛れるか?
1. next-intl は messages を JavaScript object として扱える • JSONをオブジェクトで表現 • オブジェクトの型でMessageSchema を定義
Copyright © 2015 every, Inc. All rights reserved. 25 型でどこまで縛れるか?
2. AppConfig.Messages で辞書キーを型付けできる → 存在しないキーでIDEエラーが出せる
Copyright © 2015 every, Inc. All rights reserved. 26 型でどこまで縛れるか?
3. satisfies で構造を検査できる ja が en 側の MessageSchema を満たしているかチェック
Copyright © 2015 every, Inc. All rights reserved. 27 型でどこまで縛れるか?
3. satisfies で構造を検査できる → help がないとエラー → 存在しないキーはエラー
Copyright © 2015 every, Inc. All rights reserved. 28 型でどこまで縛れるか?
ここまででもいい感じ! → ページで共通する情報だけでもさらに型で表したい! ライブラリ標準機能 + satisfies でほぼ達成したが、これは未解決
Copyright © 2015 every, Inc. All rights reserved. 29 型でどこまで縛れるか?
+α さらに型を追加してみる
Copyright © 2015 every, Inc. All rights reserved. 30 型でどこまで縛れるか?
Copyright © 2015 every, Inc. All rights reserved. 31 型でどこまで縛れるか?
+α さらに型を追加してみる → Page を表す辞書で独自の構造を強制できた!
32 まとめ
Copyright © 2015 every, Inc. All rights reserved. 33 まとめ
JSON辞書ファイル→TypeScriptへ 辞書オブジェクトで構造が見やすく 型強制も追加
Copyright © 2015 every, Inc. All rights reserved. 34 まとめ
とはいえ、トレードオフ コードの分量やファイル数は増えている
Copyright © 2015 every, Inc. All rights reserved. 35 まとめ
とはいえ、トレードオフ JSON管理のメリット = 協業に向いている • シンプル・共有しやすい • コードから切り離しやすい • 翻訳管理ツールと相性が良い next-intlも「典型的にはJSON」と言及 今回はエンジニアの管理前提なのでTypeScriptを採用したが、ユー スケースによりそう Typescript instead of json for message dictionaries? · amannn next-intl · Discussion #157 · GitHub
Copyright © 2015 every, Inc. All rights reserved. 36 まとめ
最後に JSON辞書データを型で縛ることで構造を伝えやすくしてみた → AIの実装でも型を強制し、新規ページやlocaleでも対応漏れを防止できる → 今後の多言語対応でも安心して合わせられる基盤ができた 型で表せそうな部分は今のうちにやっておくと運用が楽になるかも!
37 採用情報
38 Copyright © 2015 every, Inc. All rights reserved. every
- Recruit Info 🔍 エブリー 採用 🔍 エブリー テックブログ 🔍 エブリー オウンドメディア メディア / ブログ 開発部 公式 @every_engineerで技術的な発信を行っています。 エンジニアリングに関する発信やイベント情報などをお 知らせしますので、フォローお願いします! 『every.thing』では、エブリーではたらく人、サービス・ 事業、開催イベント、働き方まで、社内の出来事をぜん ぶお伝えしています。 『テックブログ』では、エブリーの開発の裏側や技術的 な挑戦、エンジニアの知見を発信しています。 採用HP エブリーでは働く仲間を大募集中です! 「中の人と話してみたい」「まずはざっくばらんにエブ リーのことを知りたい」「選考に進むか悩んでいる」など など、 まずは面談にて気軽にお話しましょう!!