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
92
0
Share
謎の現象を発見してプチ英雄になりました
ichimura
February 19, 2026
More Decks by ichimura
See All by ichimura
EncryptedSharedPreferenceの後継OSSライブラリDataStore Cryptoを紹介
ichir438
0
130
Google/IO 2025 "Build adaptive Android apps that shine across form factors"の紹介
ichir438
0
360
Other Decks in Technology
See All in Technology
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
170
契約書からの情報抽出を行うLLMのスループットを、バッチ処理を用いて最大40%改善した話
sansantech
PRO
3
340
Kiro Meetup #7 Kiro アップデート (2025/12/15〜2026/3/20)
katzueno
2
280
LLMに何を任せ、何を任せないか
cap120
11
6.9k
Kubernetesの「隠れメモリ消費」によるNode共倒れと、Request適正化という処方箋
g0xu
0
170
脳が溶けた話 / Melted Brain
keisuke69
1
1.2k
AIエージェント時代に必要な オペレーションマネージャーのロールとは
kentarofujii
0
280
【Oracle Cloud ウェビナー】データ主権はクラウドで守れるのか?NTTデータ様のOracle Alloyで実現するソブリン対応クラウドの最適解
oracle4engineer
PRO
3
130
VSCode中心だった自分がターミナル沼に入門した話
sanogemaru
0
890
Tour of Agent Protocols: MCP, A2A, AG-UI, A2UI with ADK
meteatamel
0
190
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
690
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
170
How to Talk to Developers About Accessibility
jct
2
170
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.4k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
440
RailsConf 2023
tenderlove
30
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.4k
Visualization
eitanlees
150
17k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
240
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とモバイルの知識の境界の問題解決って難しい • モバイル以外の知識も要求され、幅広く知識をつけていく意識が芽生えた