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

Kotlin補完計画 〜KMP(Kotlin Multiplatform)とAIが導く越境と補...

Avatar for Takuya Ohsawa Takuya Ohsawa
June 30, 2025
70

Kotlin補完計画 〜KMP(Kotlin Multiplatform)とAIが導く越境と補完の未来〜

Avatar for Takuya Ohsawa

Takuya Ohsawa

June 30, 2025
Tweet

Transcript

  1. Takuya Osawa Takuya Osawa X(@t_osawa_009) X(@t_osawa_009) 株式会社askenモバイルテックリード 株式会社askenモバイルテックリード 主な仕事 主な仕事

    食事管理アプリ「あすけん」のiOS版の開発 食事管理アプリ「あすけん」のiOS版の開発 趣味 趣味 野球観戦 野球観戦 自己紹介 2
  2. 序章:補完計画の再定義 序章:補完計画の再定義 第1章:越境の基盤 — Kotlin Multiplatformによる技術補完 第1章:越境の基盤 — Kotlin Multiplatformによる技術補完

    第2章:AI伴走開発フェーズ(AI-assisted phase) 第2章:AI伴走開発フェーズ(AI-assisted phase) 第3章:AI補完設計 — 知識の外部化と循環 第3章:AI補完設計 — 知識の外部化と循環 第4章:AI自立開発フェーズ(AI-autonomous phase) 第4章:AI自立開発フェーズ(AI-autonomous phase) 第5章:組織補完 — 越境的チーム構築 第5章:組織補完 — 越境的チーム構築 終章:補完計画完了とその先へ 終章:補完計画完了とその先へ アジェンダ 3
  3. 従来の開発における課題 従来の開発における課題 技術的断絶 技術的断絶 プラットフォーム間の知識ギャップ プラットフォーム間の知識ギャップ 各プラットフォーム固有の仕組み理解が必要 各プラットフォーム固有の仕組み理解が必要 人的依存 人的依存

    スキルを持つ個人への過度な依存 スキルを持つ個人への過度な依存 iOS/Android固有の技術スタックに依存 iOS/Android固有の技術スタックに依存 学習コスト 学習コスト 新しい技術習得の時間的負担 新しい技術習得の時間的負担 新しい言語習得のハードル 新しい言語習得のハードル なぜ「補完」なのか? 5
  4. 技術補完 技術補完 KMPによるiOS/Androidのロジックの統一 KMPによるiOS/Androidのロジックの統一 共通コードによる開発効率化 共通コードによる開発効率化 AI補完 AI補完 知識の外部化と自動化 知識の外部化と自動化

    開発者の能力を拡張 開発者の能力を拡張 組織補完 組織補完 チーム全体の能力向上 チーム全体の能力向上 集合知の活用 集合知の活用 補完計画の目指す姿 6
  5. iOS URLSession iOS URLSession Android Retrofit + OkHttp Android Retrofit

    + OkHttp コード重複 コード重複 各プラットフォームで同じような実装を行う 各プラットフォームで同じような実装を行う 品質差 品質差 プラットフォーム間での実装差異が出ることがある プラットフォーム間での実装差異が出ることがある 従来の実装 導入前の課題 12
  6. KMPによる統一 KMPによる統一 Ktor + kotlinx.serialization Ktor + kotlinx.serialization アーキテクチャ アーキテクチャ

    KMPはレイヤードアーキテクチャで設計 KMPはレイヤードアーキテクチャで設計 iOSとAndroidはKMPから生成した共通モジュールを呼び出し iOSとAndroidはKMPから生成した共通モジュールを呼び出し KMPによる解決策 13
  7. 共通化 共通化 通信のI/Fの実装は1つになる 通信のI/Fの実装は1つになる 開発速度 開発速度 通信のI/F実装は1人で行い、実装が1回済む 通信のI/F実装は1人で行い、実装が1回済む 各プラットフォーム間での仕様調整や設計がなくなる 各プラットフォーム間での仕様調整や設計がなくなる

    品質向上 品質向上 ユニットテストをKMP側で行い、想定されない挙動は減る ユニットテストをKMP側で行い、想定されない挙動は減る -> 学習コスト削減のため「Kotest」を導入し、テストフレームワークをバッ -> 学習コスト削減のため「Kotest」を導入し、テストフレームワークをバッ クエンドと揃える クエンドと揃える 導入後の改善効果 16
  8. 従来の開発フロー 従来の開発フロー 要件定義 → 設計 → 実装 → テスト →

    デプロイ 要件定義 → 設計 → 実装 → テスト → デプロイ AI伴走開発フロー AI伴走開発フロー 要件定義 → AI対話設計 → 実装 → AIレビュー → テスト → デプロイ 要件定義 → AI対話設計 → 実装 → AIレビュー → テスト → デプロイ AIとの協働による開発革新 18
  9. 実装段階でのAI活用 実装段階でのAI活用 コード生成 コード生成 既存実装を参考にして、新規の実装をする。 既存実装を参考にして、新規の実装をする。 7-8割の完成度のコードをAIが生成し、細かい微調整は人間が修正 7-8割の完成度のコードをAIが生成し、細かい微調整は人間が修正 ユニットテストの生成にも活用 ユニットテストの生成にも活用

    パターン適用 パターン適用 ベストプラクティスの自動適用 ベストプラクティスの自動適用 I/Fの設計やユニットテストはパターン化することで生成の精度を上げる I/Fの設計やユニットテストはパターン化することで生成の精度を上げる デバッグ支援 デバッグ支援  エラーの原因特定と解決策提案  エラーの原因特定と解決策提案 具体的な活用例 20
  10. 知識の外部化プロセス 知識の外部化プロセス 1. 1. 開発履歴の蓄積 開発履歴の蓄積 プロンプトやノウハウ、ドキュメントを作成し、知識を貯める プロンプトやノウハウ、ドキュメントを作成し、知識を貯める 2. 2.

    ガイドラインの整備 ガイドラインの整備 守るべきコーディングルールなどを定義 守るべきコーディングルールなどを定義 組織知識の集約 22
  11. 自立開発の段階 自立開発の段階 1. 1. 初期段階 初期段階 人間の指示による開発 人間の指示による開発 2. 2.

    自立段階 自立段階 要件から自動実装 要件から自動実装 3. 3. 進化段階 進化段階 自己改善による最適化 自己改善による最適化 人間の役割の変化 人間の役割の変化 指示者 指示者 → → 協働者 協働者 → → 戦略立案者 戦略立案者 AIが自律的に開発する 26
  12. 直面している問題 直面している問題 仕様理解 仕様理解 サービス仕様などのドキュメントの整備が足りない部分の設計 サービス仕様などのドキュメントの整備が足りない部分の設計 -> AIのインプットや人間の理解のため -> AIのインプットや人間の理解のため

    学習不足 学習不足 チームメンバーのAI活用の理解や経験不足 チームメンバーのAI活用の理解や経験不足 統合困難 統合困難 既存システムとの結合や連携 既存システムとの結合や連携 iOS側KMPのObjective-C変換コードによる開発負荷が上がる iOS側KMPのObjective-C変換コードによる開発負荷が上がる 現在の課題 37
  13. 解決に向けた取り組み 解決に向けた取り組み サービス仕様理解 サービス仕様理解 ドキュメントの整備 ドキュメントの整備 教育プログラム 教育プログラム エンジニア全体の取り組み ->

    AI縛りで一日作業する日を設定 エンジニア全体の取り組み -> AI縛りで一日作業する日を設定 ペアプロやモブプロの実施 ペアプロやモブプロの実施 フィードバックループ フィードバックループ AIが実装しやすいための継続的な改善や計画的なリファクタリング AIが実装しやすいための継続的な改善や計画的なリファクタリング 辛い部分を吸収するための設計改善 辛い部分を吸収するための設計改善 iOSでは「SKIE」というライブラを導入し、Swiftへの変換をサポート iOSでは「SKIE」というライブラを導入し、Swiftへの変換をサポート 38