Extension DC 2026 Day1行ってきた。

( tech )

きっかけ

お誘いいただいて、Extension DC 2026 Day1 で発表してきました。

内容

枠は15分だったのだけど、話したいことはそれ以上あって、内容としては40分ぶんくらいになってしまった。ステーマはサブタイトルのとおり「AI に任せて、一人で回す」。AI を補完ツールとして使う、ではなく、役割を持った仮想チームとして育てて、iOS アプリ開発を一人で回している、という話。

以下、5部構成の順にざっと振り返っておきます。

1. 一人のエンジニアが見ている範囲

  • スタートアップ・少人数・久々の開発という条件だと、Front-End / Design / Server Side / Security / Infrastructure / Mobile を、モバイルエンジニア起点で見るしかない
  • 例として二段階認証の対応を挙げた。iOS・Web・サーバー・インフラを横断して、一人で対応した話
  • Web 版をベースにしつつ、iOS は別軸でモバイルらしい体験をつくる方針

2. AI を仮想チームとして置く

  • 曖昧に「任せる」のではなく、役割ごとに「入力・完了条件・検証・引き継ぎ」の4点を決める。仕様判断や体験の良し悪しは人が決める
  • Claude Code のサブエージェント(ios/.claude/agents)で、役割を分けて回している
    • planner: 依頼を仕様書と受け入れ基準に広げる
    • architect: 設計だけ。コードは書かない
    • builder: 実装と自己評価
    • evaluator: ビルド・テスト・シミュレータで、受け入れ基準ごとに pass/fail
    • fixer: 最小変更で直す
  • 同じスプリントで3回 fail したら人に上げる。merge するのは自分

3. AI に渡す仕事は4層

  • 毎回読む: CLAUDE.md と rules
  • 必要なとき読む: 自前スキル12本、借りたスキル52本(ハッシュ固定)
  • 役割として動く: orchestrator が回す
  • 動かして確かめる: シミュレータ・テスト、DebugHarness、E2E 21ケースは夜間

4. 現状やれていること

  • アーキテクチャは5層の MVVM。ViewModel 48本(@Observable 49ファイル)。Design System の共通部品15種はトークンで揃えている
  • API の型は swagger から自動生成。チャット本文は SSE、カードの進捗は ActionCable
  • SSE の受け口は URLSessionDataDelegate の上に自前の SSEParser を置いた。テストできる形にしたかったので、既製ライブラリは入れなかった
  • Unit と UI でテスト 282 ファイル・2,266 本、#Preview 334。共通部品はスナップショット、VRT の基準画像は S3、E2E は夜間に回す。「AI が書いた差分は、ここを通って初めて信じる」
  • 計測は PostHog(イベント定義34種・セッション録画)と Crashlytics

5. まだ課題に上がっていること

  • 動きの仕様の言語化。仕様に書いた 0.8 秒が実際は 0.2 秒、というズレが起きる。静止画は CI が比べられるが、動きはまだ人が録画を見て判断している
  • アニメーション。アイテムは Lottie、Ken Burns 効果はモバイル用に最適化した動画を生成、複雑なものは SwiftUI の keyframe/transition。人間との同時並行が必要になっている
  • AI に渡す判断と、人が持つ判断の分け方。合否と差し戻しは AI、rule を足すのと merge は人。全体の決まりはまだ無い
  • 仮想チームの成果の引き受け手。最後に merge するのは自分。一人だからこそ成り立っている

まとめ

  • iOS エンジニアの守備範囲は、事業側まで広がる
  • AI は補完ではなく、役割と検証条件を持つ仮想チームとして育てる。最近は AI のマネージメントの比重が高い
  • 人は、体験の意図・品質基準・最終判断に集中する

最後に

この辺りは「全体の決まりはまだ無い」という話のとおり、自分でもまだ手探りの途中。続けながら、少しずつアップデートしていきたいと思っています。

お誘いいただいて、本当にありがとうございました。