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
謎の現象を発見してプチ英雄になりました
Search
ichimura
February 19, 2026
Technology
190
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
520
Other Decks in Technology
See All in Technology
SnowflakeCoCoでデータエンジニアリング!
foursue
0
180
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
1
400
モダンフロントエンド 開発研修
recruitengineers
PRO
1
330
Goでデータパイプラインを作ろう
sansantech
PRO
0
240
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
370
最高のシステムプロンプトを作るためにフィードバック機能を導入した話
alchemy1115
1
330
Flutterをカメラで動かしたかった話
sony
0
120
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
150
AIQAのナレッジ構築について
qatonchan
1
160
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
310
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
190
ラジオの科学
frievea
0
210
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Building an army of robots
kneath
306
46k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
270
Between Models and Reality
mayunak
4
380
Designing for humans not robots
tammielis
254
26k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Into the Great Unknown - MozCon
thekraken
41
2.7k
The agentic SEO stack - context over prompts
schlessera
0
860
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とモバイルの知識の境界の問題解決って難しい • モバイル以外の知識も要求され、幅広く知識をつけていく意識が芽生えた