Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現...

iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地 - Flutterがメインになって見えた景色と現在の醍醐味 / Dual-Platform Mobile Engineer Shifts to Flutter & TypeScript - The View and Real Thrill of Going Flutter-First

登壇者名:酒井 文也
登壇したイベントタイトル:iOS/Androidの二刀流エンジニアがFlutter & TypeScriptへ越境後の現在地
登壇したイベントのURL:https://mobiletechflex.connpass.com/event/391245/

More Decks by 株式会社ビットキー / Bitkey Inc.

Other Decks in Technology

Transcript

  1. 自己紹介 酒井 文也 Sakai Fumiya @fumiyasac 2 ※長いのでモバイルアプリエンジニアになってからを抜粋して紹介します 2016.09 30歳の誕生日からiOSアプリ開発の勉強をスタート

    この時はまだWebエンジニアをしていました ソーシャルゲームやWebサービスの開発に従事 仕事→iOSアプリ開発の勉強 or 勉強会参加の毎日 2019.03 数社でiOSアプリ開発を経験した後に独立 iOSアプリ開発を軸に据えて様々な開発現場を経験 2021年からはAndroidアプリ開発にも挑戦 2023.01 国内最大級のハンドメイドマーケットアプリの開発に シニアエンジニアとして従事 iOS&Androidアプリ開発を中心に幅広く新機能開発や 既存機能改善に携わっていました Now 2026年2月にビットキーに入社 homehub開発部 homehub Mobileに所属 現在は「homehub」のモバイルアプリ開発を担当 Flutter歴 = 社歴
  2. 今日お話しすること iOS/Android二刀流からFlutter & TypeScriptへ越境した実体験をもとに、技術的な越境の醍醐味と実践する上でのポイントについてお話ししま す。 6 1. 越境前後の技術スタックの変化 - 何がどう変わったのか

    2. 越境で直面した壁と苦労 - 技術面より大変だったこと 3. ブレイクスルーのきっかけ - 全体像が見えた 2つの転機 4. 過去の経験が生きた瞬間 - 越境前の武器が活きる場面 5. ドメイン知識を深めるための取り組み 6. 越境する上での心構えと醍醐味 - 未知を楽しむために - 自分なりのナレッジを蓄積する営み
  3. 越境前後の技術スタックの変化 越境前後の技術スタックの変化 • • 8 Before → After レイヤー 越境前

    越境後 モバイル iOS / Android Flutter バックエンド PHP / Ruby TypeScript データベース MySQL Firestore インフラ AWS Google Cloud プロダクト特性 C to C / B to C B to B to C × デバイス連携 越境のインパクト 👉 個人的に素振りはしていた • 使う言語・フレームワークが全面的に変化 • https://github.com/fumiyasac/riverpod_firestore_example • プロダクト特性もアプリ完結型からデバイス連携型へ • https://github.com/fumiyasac/searchable_combobox • 入社前に小さめのFlutterサンプル開発で準備はしていた • Riverpod・UnitTest・主要パッケージの基礎知識は事前にキャッチアップ済み
  4. 越境で直面した壁と苦労 技術面よりも大変だったこと 業務の中でその背景・経緯・ドメイン知識・現行仕様を理解した上で機能開発を進めていく必要がある • 10 技術の越境 vs ドメイン知識の越境 観点 技術の越境

    ドメイン知識の越境 事前準備 個人開発・素振りで軽減可能 業務に入らないと得られない 学習曲線 既知の概念との対応付けで加速 断片的にしか積み上がらない つまずくポイント 言語仕様・FWの違い 影響範囲の考慮・背景理解 キャッチアップ速度 比較的コントロールしやすい 時間がかかることを受け入れる必要あり • 事前準備で言語・FWへの抵抗感はある程度軽減できていた • しかしなぜこの仕様になっているのか、この変更で何に影響するか は業務でしか得られない知識
  5. 越境で直面した壁と苦労 苦労その1:ドメイン知識の壁 • • 断片的な理解のまま進めてしまうリスク • レビューで指摘される : 仕様の背景や経緯を理解しきれていないまま実装を進めた結果、意図と異なる実装になってしまう •

    QA評価で NGになる : 影響範囲の考慮が甘く、テスト時に意図しない挙動が発覚するケース 複数レイヤーにまたがる影響の把握 homehubアプリの開発では、 1つの変更がモバイル・バックエンド・ DBの各層に波及する場面があります。 Flutter側の状態管理への影響 変更起点 TypeScriptバックエンドのAPI仕様への影響 Firestoreのデータ構造・コレクションへの影響 11 • 全体を俯瞰して事象を整理する必要性を痛感する場面が多い • 特にhomehubはIoTデバイス × 不動産 × 認証とドメイン知識がかなり幅広くかつ複雑
  6. 越境で直面した壁と苦労 苦労その2:AI活用の落とし穴とB to B to Cの難しさ • AI活用の試行錯誤 • 仕様理解が甘い状態で

    AIを利用する → 調査段階でズレてしまう経験を何度も ... • AIは強力なツールだが、土台がなければ方向性の誤りに気づけない あくまで最後に確認するのは開発者である。この意識はいかなる時でも持ち続ける事が重要である。 • 12 B to B to Cプロダクト特有の難しさ 観点 以前の経験 / C to C・B to C 現在 / B to B to C デバイス連携 なし あり。スマートロック・リーダー等 必要な知識 アプリ完結の範囲 運用ルール・商習慣の理解も必要 技術の重なり SWのみ SW × FW × HW の関わり合い • デバイスが絡むプロダクト開発は初めての経験 • ソフトウェア・ファームウェア・ハードウェアがどう関わり合っているかの理解が求められる
  7. ブレイクスルーのきっかけ ブレイクスルーその1:新製品対応で見えた全体像 断片的なタスクでは見えなかった繋がりが、一連の流れを通じて初めて線になった • • 14 その過程で見えてきたこと 観点 見えてきた内容 アプリ

    ↔ デバイス 自分が手を入れた箇所がデバイスとどう関わるか 機能 ↔ データ アプリ内の機能がデバイスや Firestoreのデータとどう関連するか SW ↔ FW ↔ HW ソフトウェア・ファームウェア・ハードウェアがどの様に関わり合っているか 具体的に得られた学び • BLE通信を介したデバイス操作のフローが体験として理解できた • Flutterアプリ側の状態管理がデバイスの状態変化にどう追従するかが見えた • QA評価戻り調査では、なぜこの挙動になるのかを追う過程でコードベースの理解が一気に深まった
  8. ブレイクスルーのきっかけ ブレイクスルーその2:お問い合わせ対応でのドメイン理解 問題の報告 👉 ドメイン知識に基づく切り分け 👉 仮説の立案 👉 検証 👉

    対応 • • 15 なぜドメイン理解が加速するのか ポイント 内容 実データと向き合う Firestoreの実データ構造・コレクションのリレーションを実際に追う 仮説検証のサイクル この条件ならこうなるはず → 検証 → 理解の修正、を高速で回せる 複数層を横断する アプリ → バックエンド → DB を一気に追う必要がある 既存仕様の深掘り なぜこの実装になっているのかを追う過程で仕様の背景が分かる 早い段階で取り組むことをおすすめする理由 • ドメイン知識不足による理解の甘さは大きな落とし穴 になりかねない • ジョインから早い段階でドメイン知識・業務知識を自分でも整理しておくに越した事はない
  9. 過去の経験が生きた瞬間 過去の経験が生きた瞬間その1:ネイティブの知識 • Flutterアプリにおけるネイティブ実装の位置付け homehubアプリでは、BLE通信やDFU等の機能で、一部 iOS (Swift) / Android (Kotlin)のネイティブ実装が絡む部分があります。

    Flutter Dart層 • Method Channel NordicDFU Swift SDK 等 ble-central ライブラリ 等 iOS側 (Swift) Android側 (Kotlin) 問題発生時の切り分けに過去の経験が活きた 問題が発生した際に、 Flutter側の問題なのかネイティブ実装側の問題なのか切り分けが必要な場面がありました。 • ネイティブ側の知識があったことで原因の早期発見 → 素早い対応 に繋げることができた • iOS/Android双方のネイティブ実装を読み解ける力は、Flutter開発でも強力な武器になる • スマートロックならでは、ビットキーならではと言える経験 越境前の知識は捨てるものではなく、新しいフィールドで別の形で活きてくる 17
  10. 過去の経験が生きた瞬間 過去の経験が生きた瞬間その2:バックエンド経験 • • 言語は変わったが開発姿勢は変わらない 観点 越境前 越境後 言語 PHP

    / Ruby TypeScript DBの操作 MySQL + ActiveRecord + Eloquent Firestore + AlloyDB + BigQuery API設計 REST API REST API + Firestore インフラ AWS Google Cloud 開発姿勢 モバイル + バックエンド並行 モバイル + バックエンド並行 → ここは同じ! 越境前の経験が橋渡しになるケース • homehubのモバイル + バックエンド並行開発というスタイルにも自然に馴染めた • バックエンド開発自体への抵抗感がなかった のは大きかった 完全な未経験と、言語は違うが経験ありとでは 越境のハードルが大きく異なる 18
  11. ドメイン知識を深めるための取り組み ドメイン知識を深める取り組みその1:業務知識を整理する • • 自分なりのナレッジを蓄積する 取り組み 内容 効果 習得した知識のドキュメント化 調査過程で得た知識を構造化して記録

    後から振り返れる自分用のナレッジベースに お問い合わせ対応時の整理 問題の切り分け〜解決までのプロセスを記録 類似事象の調査速度が向上 生成AIを活用した作成 AIの力を借りて質の良いドキュメントを作成 作成コストが以前と比べて大幅に低下 ドキュメント化の実践例 ドメイン知識の整理として、以下のようなドキュメントを個人的に作成しています。 • 不具合の根本原因分析ドキュメント - 発生メカニズム・影響範囲・修正方針・周辺のドメイン知識を構造化 • 機能フローの全体像ドキュメント - アプリ側・バックエンド側・Firestoreのデータ構造を横断的に整理 • 調査手順のガイド - Cloud Logging / BigQuery / Firestoreを横断する調査手順を再現可能な形で記録 業務と並行しながら自分のナレッジベースを育てていく営みは、地味だが確実にドメイン理解を深めてくれる 20
  12. ドメイン知識を深めるための取り組み ドメイン知識を深める取り組みその2:リポジトリ還元 • Flutterリポジトリへの技術ドキュメント追加 ドキュメントテーマ 狙い 旧→新アーキテクチャ移行ガイド 新規開発・改修時の実装先判断を迷わず行える状態に Firestoreリアルタイム同期とキャッシュ戦略 デバイスが表示されない等の調査コストを削減

    API通信・認証リカバリーガイド 認証切れ等のインシデント調査を迅速に 整備が進めばClaude Code等のSKILLS作成やコンテキスト提供の足掛かりにもなる • 日常的に実践していること • Draft PRで早めに共有 - アイデアレベルでもコードとして形にして出す。モノがある上での議論がしやすい • ノートによる言語化 - 知識や会話の断片を自分の言葉でまとめる習慣。約6年間継続中 ◦ • 21 Android着手2ヶ月の振り返り / ノートと一緒に振り返る 一人で抱え込まない - 慣れない事の連続でも、早めに相談して認識のズレを最小限にする
  13. 越境する上での心構えと醍醐味 スキルセットが変わった時の心構え • 未知の領域を楽しむ ◦ 知らない事への抵抗感をどう減らすか?その工夫が大切 ◦ 自分もAndroid開発では過去に 2回挫折している。 3度目の挑戦で軌道に乗った

    ▪ • • 23 きっかけは「まず概念を整理 → 小さく試す → 業務と繋げる」のサイクルを回せたこと これまで培ったもののエッセンスとリンクさせる ◦ 「XXXの場合はYYYだったけど、AAAの場合はBBBに近いかも」みたいな イメージベース の気づき が意外と大切 ◦ 例: UIKitのDelegate/DataSource → FlutterのCallback設計、ActiveRecordのORM → Firestoreのデータ設計 ◦ 既知の概念との類推が、新しい技術の理解を加速させてくれる 知見を深める機会を自分で作る ◦ 概念・理論の整理 → 小さく試す → 業務との繋がりを理解する ◦ 参考: 個人の Flutter素振りリポジトリ
  14. 越境する上での心構えと醍醐味 越境する機会の活用 • • DroidKaigi公式アプリへの Contribution / 2023〜2025年 年度 取り組み内容

    2023年 公式iOSアプリへのContributionに初挑戦 👉 Footprints about Contribution of DroidKaigi 2023 2024年 iOSアプリ側のContribution経験を登壇資料として整理 👉 DroidKaigi2024公式アプリ iOS側Contribution裏話 2025年 Claude Codeを活用してセッション検索画面を改善 👉 DroidKaigi2025公式iOSアプリに Contributionをしてみた話 方針と学び • Androidアプリ側の仕様を読み解き、iOSアプリ側の開発に応用するという方針で進めた • 2025年はClaude Codeを活用し、改修を小さなステップに分割 → AIとの協働で工数削減を実現 • OSSへのContributionは他プラットフォームのコードを読む絶好の機会 越境の機会は業務だけではなく、OSSコントリビューションや個人開発にも転がっている 24
  15. 越境する上での心構えと醍醐味 越境の醍醐味 • • • 25 できる事が増える楽しみ ◦ 理解して自分のものにするまでには苦労や困難がある ◦

    しかし乗り越えた先に得られる知識・スキル・知見は、後から振り返ると自分を助けてくれた場面が数多くあった ◦ Flutter側の実装をしながらバックエンド側の影響も見渡せるようになった時、越境してよかったと実感する 仕事での達成感や成長実感 ◦ 業務知識やドメイン知識も一緒に深めていくことで、越境する楽しみが更に増していく ◦ お問い合わせ対応で自力で問題を切り分けられるようになった時の達成感 ◦ コードレビューで影響範囲を自信を持って議論できるようになった時の成長実感 みんな違ってみんな良い ◦ 自分自身もFlutter歴 = 社歴ではありますが、日々成長を実感しています ◦ 越境は一度きりのイベントではなく、 継続的な学びのプロセス
  16. まとめ&伝えたいメッセージ まとめ — 本セッションの要点 越境で大切だと感じた事を振り返ります。 26 ポイント キーメッセージ 技術より大変なのはドメイン知識 言語・FWの変化は事前準備で軽減できるが、業務背景の理解は業務でしか得られない

    全体像を掴む機会を大切に 新製品対応・お問い合わせ対応がブレイクスルーのきっかけになった 過去の経験は必ず活きる ネイティブ知識・バックエンド経験が越境先で武器になった 知識のドキュメント化を習慣に 自分のナレッジベースを作る営みが確実にドメイン理解を深めてくれる リポジトリへの還元 暗黙知の形式知化がチーム全体の開発効率向上にも繋がる 一人で抱え込まない チームの環境に感謝しつつ、早めに相談する姿勢を忘れない 未知を楽しむマインド 越境の先にある成長と達成感を味わおう