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
謎の現象を発見してプチ英雄になりました
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ichimura
February 19, 2026
Technology
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
謎の現象を発見してプチ英雄になりました
ichimura
February 19, 2026
More Decks by ichimura
See All by ichimura
EncryptedSharedPreferenceの後継OSSライブラリDataStore Cryptoを紹介
ichir438
0
160
Google/IO 2025 "Build adaptive Android apps that shine across form factors"の紹介
ichir438
0
550
Other Decks in Technology
See All in Technology
IoTデバイスを繋げるプロトコルMatterをAndroidで使用する方法
harutiro
0
120
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
340
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
210
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
1
150
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
280
[2026 Oracle Technical Deep Dive] OCI AI Resilience -OCIのセキュリティ対策機能をきちんと使いこなす- (2026年9月17日開催)
oracle4engineer
PRO
0
130
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
260
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
420
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
290
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
160
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
150
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
The browser strikes back
jonoalderson
0
1.8k
Bash Introduction
62gerente
615
220k
Designing for Timeless Needs
cassininazir
1
520
KATA
mclloyd
PRO
35
16k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
So, you think you're a good person
axbom
PRO
2
2.2k
How to Talk to Developers About Accessibility
jct
2
560
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
From π to Pie charts
rasagy
1
390
Transcript
謎現象の解決手段を発見して プチ英雄になりました Cybozu株式会社 市村 凌久
None
市村 凌久 • サイボウズの25卒Androidアプリエンジニア • kintone開発チーム • 2025年は勉強会に20~30回くらい行ってたらしい 本LTはkintone Mobileの開発チームでのお話です
自己紹介
別チームからこんな連絡が来ました 「React版にしたらモバイルの機能動かなくなったんですけど」
🤔
kintoneの本体とモバイルの関係 kintone本体は • 弊社、kintone本体のコードをReact版に刷新中 • モバイルはWebViewベース、モバイルビューを用意 kintoneモバイルアプリは • 部分的にネイティブ領域を実装することで、モバイル端末の体験を向上 •
webViewの addJavascriptInterface を用いてコールバックを公開し、 Web側から呼び出すことでネイティブ機能を展開
今までは通常通り動いていた 旧バージョン kintoneモバイルビュー kintone Android ②JSInterface ①操作 ③ネイティブ機能起動
刷新後の動作 React版 kintoneモバイルビュー kintone Android ②JSInterface ①操作 ③不発
刷新後の動作 React版 kintoneモバイルビュー kintone Android ②JSInterface ①操作 ③不発 ちなみにiOS版だと問題なく動作していた
刷新後の動作 React版 kintoneモバイルビュー kintone Android ②JSInterface ①操作 ③不発 ちなみにiOS版だと問題なく動作していた これってどっちが原因なんだ?
考えられる要因 本体 • Reactではモバイル側のJSInterfaceをうまく参照できてない? • React版で導入されたzod(バリデーションの仕組み)が悪さしている? ◦ 依頼チームが削除してみたが結局疎通しなかった Android側 •
WebViewがReactやzodと相性が悪い? • JSInterfaceの設計が悪い?
本LTの内容 AndroidのWebViewでReactサイト(?)を扱う時に 気をつけるべきこと
前提の共有 • 僕自身Web技術に特別詳しいわけではないです • もしかすると事実と異なる理解をしているかもですがご容赦を
モバイルチームを代表して原因究明を進める 🏃
まずは環境を再現 • Reactでwebページをローカルに用意 ◦ ほぼ初期テンプレートの実装 ◦ ボタンを押したらJSInterfaceを呼び出す実装(zodは未使用) ◦ ローカルホスティングで androidでもアクセスできるように設定
• Androidも再現用のアプリを最低限の実装で用意 ◦ WebViewを表示 ◦ JSInterfaceでネイティブ画面に遷移する いざ、確認
ちゃんと動作する • ReactとAndroidの相性が悪いわけではない
より実際の実装に寄せていく Web側 • TypeScriptへ置き換え • Zodを利用した呼び出しを使う Android側 • JSInterfaceをクラス内でobject定義 •
Handlerでラップし、mainスレッド実行に いざ、確認
きた、呼び出せない! やはりzodが影響していた?
出力エラーから関連するissueを発見
原因 プロパティアクセスと呼び出しが分離する ことが問題 • chromium(WebViewのベース)の仕様で、参照と実行が同時でないと JSInterfaceのメソッドをWeb側が実行できない • zodはバリデーション時に一度参照するため、この条件に引っ掛かる • zodを使わずとも、参照を返す実装ではJSInterfaceメソッドを実行できない
原因 プロパティアクセスと呼び出しが分離する ことが問題 と、ClaudeCodeさんが解説してくれました(重要) • chromium(WebViewのベース)の仕様で、参照と実行が同時でないと JSInterfaceのメソッドをWeb側が実行できない • zodはバリデーション時に一度参照するため、この条件に引っ掛かる •
zodを使わずとも、参照を返す実装ではJSInterfaceメソッドを実行できない
回避策 Web側でJSInterfaceの参照を渡す時、無名関数でラップする window // グローバルなブラウザアクセス .AndroidApp // JSInterfaceで決めた名前 .openNativeScreen() //
JSInterfaceで定義したメソッド名 ❌ return window.AndroidApp.openNativeScreen ⭕ return () => { window.AndroidApp.openNativeScreen() } とにかく、JSInterfaceへのアクセスを実行する寸前まで触れてはいけないみたい
zodでやりたかったバリデーションはどうする? • 今回対応したケースでは、手動で実装した • 数行増える程度だが、毎回チェックを手動はめんどくさそう
結論 WebViewからJSInterfaceを公開する時 Webは参照と実行を分けてはいけない
感想 • webとモバイルの知識の境界の問題解決って難しい • モバイル以外の知識も要求され、幅広く知識をつけていく意識が芽生えた