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
160
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
150
Google/IO 2025 "Build adaptive Android apps that shine across form factors"の紹介
ichir438
0
470
Other Decks in Technology
See All in Technology
Agent Skills設計で柔軟性と硬さのバランスが難しい話
nassy20
0
150
フィジカル版Github Onshapeの紹介
shiba_8ro
0
290
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
270
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
280
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
340
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
240
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.3k
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
160
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
100
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
徹底討論!ECS vs EKS!
daitak
0
470
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
Balancing Empowerment & Direction
lara
6
1.2k
Scaling GitHub
holman
464
140k
Believing is Seeing
oripsolob
1
150
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
260
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
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とモバイルの知識の境界の問題解決って難しい • モバイル以外の知識も要求され、幅広く知識をつけていく意識が芽生えた