Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
React Native と WebView を堅実に連携させる
Search
cm-ayf
April 24, 2026
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React Native と WebView を堅実に連携させる
cm-ayf
April 24, 2026
Other Decks in Programming
See All in Programming
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
1.4k
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
150
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
370
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
160
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
170
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.1k
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
1.1k
contenteditable と日本語入力に向き合う
colorful12
0
220
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
590
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
4 Signs Your Business is Dying
shpigford
187
23k
Documentation Writing (for coders)
carmenintech
77
5.6k
Thoughts on Productivity
jonyablonski
76
5.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Site-Speed That Sticks
csswizardry
13
1.6k
Done Done
chrislema
187
17k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Transcript
©HEARTBEATS Inc.All rights reserved React Native と WebView を 堅実に連携させる
株式会社 HEARTBEATS(旧商号:株式会社 ventus) 岩田風多 (cm-ayf)
©HEARTBEATS Inc.All rights reserved 電子トレカ®コレクションサービス ORICAL® をガワネイティブでストアに配信 • ウェブアプリとして活発に運用されているサービス ◦
御歳6歳のレガシーなコードベース ◦ 20以上あるコンテンツごとに UI をカスタマイズ ◦ Weekly のリリーススケジュール • iOS / Android アプリとして配信したい ◦ ストアで配信したい ◦ アプリ内課金・リワード広告などを実装したい ◦ (昔は React Native で二重実装していた) • ガワネイティブにしよう ◦ WebView で Web アプリを表示 ◦ アプリ側から Web アプリに 安定したインターフェースを提供
©HEARTBEATS Inc.All rights reserved React Native でアプリを実装して WebView と型を共有しながら連携 •
React Native と bridge.js、bridge.js と Web アプリの間で型を共有 ◦ React Native が WebView に注入する bridge.js も型チェック • React Native のツールチェーンで bridge.js もビルド ◦ Babel プラグインで import によってコード文字列を得る ◦ Metro の dev サーバーでちゃんとリロードできる • 実際に Firebase Auth を簡単・安全に連携している ◦ bridge.js から Persistence を提供するだけで連携
©HEARTBEATS Inc.All rights reserved • 環境の境界とリポジトリの境界を別の場所に置いている ◦ 環境の境界は型が安定していない ◦ リポジトリ・リリースの境界は安定したインターフェースが必要
• 下図の全体で1つの型定義を共有することができる React Native と bridge.js、bridge.js と Web アプリの間で型を共有 React Native bridge.js Web アプリ アプリのリポジトリ Web のリポジトリ WebView 上で実行 Hermes で実行 リポジトリ・リリースの境界 (安定したインターフェース ) 環境の境界 (Comlink over postMessage)
©HEARTBEATS Inc.All rights reserved • bridge.js は React Native 内では文字列として扱う
◦ WebView の injectedJavaScript に渡すため ◦ default import で文字列が得られるように Babel でトランスパイルする • Reload on save や *.{ios,android}.js に対応 ◦ import はあくまで Metro が解決するため React Native のツールチェーンで bridge.js もビルド // window.AppBridge を定義 import './bridge'; window.AppBridge.LoggerService .addListener((level, log) => { console[level](log); }); // window.AppBridge を定義 import $1 from './bridge'; export default $1 + `window.AppBridge.LoggerService .addListener((level, log) => { console[level](log); });`; アプリのリポジトリに commit injectedJavaScript に変換
©HEARTBEATS Inc.All rights reserved • Firebase Auth の認証情報ストアを React Native
に委託する ◦ React Native 側と同じ認証情報を参照・永続化 ◦ https://firebase.google.com/docs/auth/web/auth-state-persistence?hl=ja • bridge.js で interface Persistence を実装するクラスを提供 ◦ Web アプリ側では global に生えているクラスを指定するだけ ◦ Comlink だけでは同期的に new Persistence() できない 実際に Firebase Auth を簡単・安全に連携 // bridge.js /** @implements PersistenceInternal */ class ProxiedPersistence { async _isAvailable() { /* call bridge */ } async _get(key) { /* call bridge */ } async _set(key, value) { /* call bridge */ } async _remove(key) { /* call bridge */ } } window.AppBridge.ProxiedPersistence = ProxiedPersistence; // Web アプリ側 if (window.AppBridge?.ProxiedPersistence) { initializeAuth(app, { persistence: window.AppBridge.ProxiedPersistence, }) }
©HEARTBEATS Inc.All rights reserved • これまで:細々と保守してまいりました ◦ 2024年9月リリースから安定して稼働中 ◦ 2025年2月に古い
React Native 製アプリをリプレース • これから:欲しいと言われたらすぐにアプリを提供できます ◦ 2026年3月にも新しいアプリをリリース ◦ 短いリードタイム・少ない工数で新しいアプリをリリースできる これまでとこれから
©HEARTBEATS Inc.All rights reserved • 当アプリの保守・新規アプリリリース等 ◦ https://collection.ultraman-cardgame.com/ など •
別の「普通の」React Native アプリの新規開発・保守 • 採用窓口: https://hrmos.co/pages/heartbeats/jobs/0022059 ↓ • 技術ブログ:https://zenn.dev/p/ventus ◦ 私が全然 React Native じゃない記事を上げてます アプリエンジニアを募集しています!