Slide 1

Slide 1 text

Takuya Osawa Kotlin補完計画 〜KMP(Kotlin Multiplatform)と AIが導く越境と補完の未来〜 asken tech talk vol.12 1

Slide 2

Slide 2 text

Takuya Osawa Takuya Osawa X(@t_osawa_009) X(@t_osawa_009) 株式会社askenモバイルテックリード 株式会社askenモバイルテックリード 主な仕事 主な仕事 食事管理アプリ「あすけん」のiOS版の開発 食事管理アプリ「あすけん」のiOS版の開発 趣味 趣味 野球観戦 野球観戦 自己紹介 2

Slide 3

Slide 3 text

序章:補完計画の再定義 序章:補完計画の再定義 第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

Slide 4

Slide 4 text

序章:補完計画の再定義 4

Slide 5

Slide 5 text

従来の開発における課題 従来の開発における課題 技術的断絶 技術的断絶 プラットフォーム間の知識ギャップ プラットフォーム間の知識ギャップ 各プラットフォーム固有の仕組み理解が必要 各プラットフォーム固有の仕組み理解が必要 人的依存 人的依存 スキルを持つ個人への過度な依存 スキルを持つ個人への過度な依存 iOS/Android固有の技術スタックに依存 iOS/Android固有の技術スタックに依存 学習コスト 学習コスト 新しい技術習得の時間的負担 新しい技術習得の時間的負担 新しい言語習得のハードル 新しい言語習得のハードル なぜ「補完」なのか? 5

Slide 6

Slide 6 text

技術補完 技術補完 KMPによるiOS/Androidのロジックの統一 KMPによるiOS/Androidのロジックの統一 共通コードによる開発効率化 共通コードによる開発効率化 AI補完 AI補完 知識の外部化と自動化 知識の外部化と自動化 開発者の能力を拡張 開発者の能力を拡張 組織補完 組織補完 チーム全体の能力向上 チーム全体の能力向上 集合知の活用 集合知の活用 補完計画の目指す姿 6

Slide 7

Slide 7 text

KMPを含めた技術スタック KMPを含めた技術スタック 7

Slide 8

Slide 8 text

リアーキで刷新部分 リアーキで刷新部分 現在、PHPからKotlinにリアーキ進行中 8

Slide 9

Slide 9 text

第1章:越境の基盤 — Kotlin Multiplatformによ る技術補完 9

Slide 10

Slide 10 text

2023年後半 プロジェクト始動 10

Slide 11

Slide 11 text

通信周りの共通化 通信周りの共通化 API通信処理 API通信処理 データ変換処理 データ変換処理 エラーハンドリング エラーハンドリング あすけんでのKMP活用:通信部分の共通化 11

Slide 12

Slide 12 text

iOS URLSession iOS URLSession Android Retrofit + OkHttp Android Retrofit + OkHttp コード重複 コード重複 各プラットフォームで同じような実装を行う 各プラットフォームで同じような実装を行う 品質差 品質差 プラットフォーム間での実装差異が出ることがある プラットフォーム間での実装差異が出ることがある 従来の実装 導入前の課題 12

Slide 13

Slide 13 text

KMPによる統一 KMPによる統一 Ktor + kotlinx.serialization Ktor + kotlinx.serialization アーキテクチャ アーキテクチャ KMPはレイヤードアーキテクチャで設計 KMPはレイヤードアーキテクチャで設計 iOSとAndroidはKMPから生成した共通モジュールを呼び出し iOSとAndroidはKMPから生成した共通モジュールを呼び出し KMPによる解決策 13

Slide 14

Slide 14 text

KMPのアーキテクチャ 14

Slide 15

Slide 15 text

関心の分離 関心の分離 テスタビリティの向上 テスタビリティの向上 よく知られているアーキテクチャ よく知られているアーキテクチャ オンボーディングしやすい オンボーディングしやすい レイヤードアーキテクチャの利点 15

Slide 16

Slide 16 text

共通化 共通化 通信のI/Fの実装は1つになる 通信のI/Fの実装は1つになる 開発速度 開発速度 通信のI/F実装は1人で行い、実装が1回済む 通信のI/F実装は1人で行い、実装が1回済む 各プラットフォーム間での仕様調整や設計がなくなる 各プラットフォーム間での仕様調整や設計がなくなる 品質向上 品質向上 ユニットテストをKMP側で行い、想定されない挙動は減る ユニットテストをKMP側で行い、想定されない挙動は減る -> 学習コスト削減のため「Kotest」を導入し、テストフレームワークをバッ -> 学習コスト削減のため「Kotest」を導入し、テストフレームワークをバッ クエンドと揃える クエンドと揃える 導入後の改善効果 16

Slide 17

Slide 17 text

第2章:AI伴走開発フェーズ(AI-assisted phase) 17

Slide 18

Slide 18 text

従来の開発フロー 従来の開発フロー 要件定義 → 設計 → 実装 → テスト → デプロイ 要件定義 → 設計 → 実装 → テスト → デプロイ AI伴走開発フロー AI伴走開発フロー 要件定義 → AI対話設計 → 実装 → AIレビュー → テスト → デプロイ 要件定義 → AI対話設計 → 実装 → AIレビュー → テスト → デプロイ AIとの協働による開発革新 18

Slide 19

Slide 19 text

設計段階でのAI活用 設計段階でのAI活用 アーキテクチャ検討 アーキテクチャ検討 複数パターンの比較分析 複数パターンの比較分析 技術選定や検証 技術選定や検証 簡単なものをAIを使って、実装し、比較検討 簡単なものをAIを使って、実装し、比較検討 調査 調査 仕様調査や不具合調査で活用 仕様調査や不具合調査で活用 具体的な活用例 19

Slide 20

Slide 20 text

実装段階でのAI活用 実装段階でのAI活用 コード生成 コード生成 既存実装を参考にして、新規の実装をする。 既存実装を参考にして、新規の実装をする。 7-8割の完成度のコードをAIが生成し、細かい微調整は人間が修正 7-8割の完成度のコードをAIが生成し、細かい微調整は人間が修正 ユニットテストの生成にも活用 ユニットテストの生成にも活用 パターン適用 パターン適用 ベストプラクティスの自動適用 ベストプラクティスの自動適用 I/Fの設計やユニットテストはパターン化することで生成の精度を上げる I/Fの設計やユニットテストはパターン化することで生成の精度を上げる デバッグ支援 デバッグ支援  エラーの原因特定と解決策提案  エラーの原因特定と解決策提案 具体的な活用例 20

Slide 21

Slide 21 text

第3章:AI補完設計 — 知識の外部化と循環 21

Slide 22

Slide 22 text

知識の外部化プロセス 知識の外部化プロセス 1. 1. 開発履歴の蓄積 開発履歴の蓄積 プロンプトやノウハウ、ドキュメントを作成し、知識を貯める プロンプトやノウハウ、ドキュメントを作成し、知識を貯める 2. 2. ガイドラインの整備 ガイドラインの整備 守るべきコーディングルールなどを定義 守るべきコーディングルールなどを定義 組織知識の集約 22

Slide 23

Slide 23 text

開発実践 → 知識蓄積&ドキュメント化 → 開発支援 → 新たな実践 開発実践 → 知識蓄積&ドキュメント化 → 開発支援 → 新たな実践 循環システムの構築 23

Slide 24

Slide 24 text

うまく行ったプロンプトをドキュメントにまとめて共有し、生成の精度向上 うまく行ったプロンプトをドキュメントにまとめて共有し、生成の精度向上 Corsorルールの整備 Corsorルールの整備 具体例 24

Slide 25

Slide 25 text

第4章:AI自立開発フェーズ(AI-autonomous phase) 25

Slide 26

Slide 26 text

自立開発の段階 自立開発の段階 1. 1. 初期段階 初期段階 人間の指示による開発 人間の指示による開発 2. 2. 自立段階 自立段階 要件から自動実装 要件から自動実装 3. 3. 進化段階 進化段階 自己改善による最適化 自己改善による最適化 人間の役割の変化 人間の役割の変化 指示者 指示者 → → 協働者 協働者 → → 戦略立案者 戦略立案者 AIが自律的に開発する 26

Slide 27

Slide 27 text

AIエージェントの導入 AIエージェントの導入 Devinのセットアップ Devinのセットアップ 品質保証システム 品質保証システム CI/CDの整備、レビューガイドライン CI/CDの整備、レビューガイドライン 実現に向けた技術基盤 27

Slide 28

Slide 28 text

指示による実装完了 指示による実装完了 簡単なAPIの仕様をInputにして人間の指示だけでKMPの実装完了 簡単なAPIの仕様をInputにして人間の指示だけでKMPの実装完了 人間の役割の変化 人間の役割の変化 実装者から設計・指示・レビュー担当への移行 実装者から設計・指示・レビュー担当への移行 具体例:Devinによる自立開発 28

Slide 29

Slide 29 text

開発速度 開発速度 並行で開発可能 並行で開発可能 人間は設計、レビューや結合部分に注力 人間は設計、レビューや結合部分に注力 品質向上 品質向上 人間のミスを大幅削減 人間のミスを大幅削減 リソースのアップ リソースのアップ 少ない人数で作業を回せる 少ない人数で作業を回せる 期待される効果 29

Slide 30

Slide 30 text

第5章:組織補完 — 越境的チーム構築 30

Slide 31

Slide 31 text

個人スキル重視 個人スキル重視 知識の属人化 知識の属人化 リソースの確保が難しい リソースの確保が難しい 従来のチーム構造 31

Slide 32

Slide 32 text

AI活用による越境支援 AI活用による越境支援 集合知の活用 集合知の活用 ガイドラインやドキュメントの整備によって、コード生成の質を担保 ガイドラインやドキュメントの整備によって、コード生成の質を担保 知識の民主化 知識の民主化 個人のスキルに依存せずに開発ができるための環境を整備 個人のスキルに依存せずに開発ができるための環境を整備 フラットな協働 フラットな協働 AIを駆使して、バックエンド、iOS、Androidという技術スタックは関係ない AIを駆使して、バックエンド、iOS、Androidという技術スタックは関係ない 越境的チーム構造 32

Slide 33

Slide 33 text

具体的な越境事例 具体的な越境事例 CI/CDを整備して、KMPの成果物をDeploy可能にする CI/CDを整備して、KMPの成果物をDeploy可能にする AndroidエンジニアがiOS向けのモジュールを準備 AndroidエンジニアがiOS向けのモジュールを準備 iOSエンジニアがAIを使って、KMPの修正commitを行う iOSエンジニアがAIを使って、KMPの修正commitを行う リアーキ部分はバックエンドエンジニアがKMPを実装 リアーキ部分はバックエンドエンジニアがKMPを実装 33

Slide 34

Slide 34 text

終章:補完計画完了とその先へ 34

Slide 35

Slide 35 text

技術的目標 技術的目標 KMPによるクロスプラットフォーム統一 KMPによるクロスプラットフォーム統一 AI伴走開発の定着 AI伴走開発の定着 AI自立開発の実現 AI自立開発の実現 並列で自立開発 並列で自立開発 達成目標の再確認 35

Slide 36

Slide 36 text

組織的目標 組織的目標 越境的チーム文化の形成 越境的チーム文化の形成 知識の民主化 知識の民主化 AI技術の進歩に合わせた開発手法の更新 AI技術の進歩に合わせた開発手法の更新 達成目標の再確認 36

Slide 37

Slide 37 text

直面している問題 直面している問題 仕様理解 仕様理解 サービス仕様などのドキュメントの整備が足りない部分の設計 サービス仕様などのドキュメントの整備が足りない部分の設計 -> AIのインプットや人間の理解のため -> AIのインプットや人間の理解のため 学習不足 学習不足 チームメンバーのAI活用の理解や経験不足 チームメンバーのAI活用の理解や経験不足 統合困難 統合困難 既存システムとの結合や連携 既存システムとの結合や連携 iOS側KMPのObjective-C変換コードによる開発負荷が上がる iOS側KMPのObjective-C変換コードによる開発負荷が上がる 現在の課題 37

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

3つの補完の相乗効果 3つの補完の相乗効果 技術補完 技術補完 Kotlinおよび、KMPによる統一基盤 Kotlinおよび、KMPによる統一基盤 AI補完 AI補完 知識の外部化と自動化 知識の外部化と自動化 組織補完 組織補完 チーム全体の能力向上 チーム全体の能力向上 まとめ 補完計画の核心 39

Slide 40

Slide 40 text

AIは開発者を置き換えるのではなく、開発者を補完し、組織全 体を進化させる 40

Slide 41

Slide 41 text

ありがとうございました 41