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 のマネージメントの比重が高い
- 人は、体験の意図・品質基準・最終判断に集中する
最後に
この辺りは「全体の決まりはまだ無い」という話のとおり、自分でもまだ手探りの途中。続けながら、少しずつアップデートしていきたいと思っています。
お誘いいただいて、本当にありがとうございました。
