1K Views
November 02, 25
スライド概要
2025.11.2に鎌倉で開催された [Kanagawa.swift #2](https://japan-region-swift.connpass.com/event/365671/) での発表資料です。
フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰
スマホからAI駆動iOS開発したい Kanagawa.swift #2
自己紹介: 堤 修一 • フリーランスiOSエンジニア • ID: shu223(GitHub, Docswell, X, Zenn, Qiita, note, blog, YouTube, Podcast) • 著書: 商業出版4冊、個人出版多数 • 鎌倉在住 • 元カヤック(2010.2〜2012.12)
鎌倉に家を買いました • 2025年6月より新居 • 材木座の海寄り → 駅寄りに • 駅まで徒歩13分(鎌倉で は駅近) • 海まで自転車で2分 !
鎌倉FAQ: 観光で行くイメージしかない けど住むってどうなの?
A: むしろ生活してこそ最高
• 海と山が近く、古都の空気感もありつつ、都内まで通える 稀有な環境 • 生活に困るほど田舎でもなく、店やインフラは一通り揃っている • 複雑な路地や個性的な家、隠れ家的な店も多く、どこを歩いても楽しい • 観光客多いのは小町・由比ヶ浜・長谷など一部 • 都心よりは全然安い
これまで住んだ鎌倉のエリアの所感 • 雪ノ下2丁目 • 店や学校がたくさんあり住みやすい • 駅方面へは八幡宮の境内 → 段葛 or 小 町通り商店街を抜けるというコース • 小町2丁目 • 鎌倉の中心地に近く便利でありつつ も、一本裏に入れば閑静 • 材木座 • 海も山も近い • 海近でも雰囲気は落ち着いていて40代 後半の子育て世代にはちょうどいい
ぜひ鎌倉へ!
本題
スマホからAI駆動iOS開発したい
「スマホでバイブコーディング」する方法 1 クラウド上のAI × GitHub • GitHub上にあるコードをAIが編集し、PRを出させる • GitHubのスマホアプリから差分の確認やPRのマージ・クローズを操作
「スマホでバイブコーディング」する方法 1 クラウド上のAI × GitHub • GitHub上にあるコードをAIが編集し、PRを出させる • GitHubのスマホアプリから差分の確認やPRのマージ・クローズを操作 → (フリーランスとしては)お客さんのリポジトリでガチャガチャやりた くない
「スマホでバイブコーディング」する方法 2 ローカルマシン上のAI × GitHub • 常時起動のローカルマシンで自動でAIを走らせつつ、PRを出させる • GitHubのスマホアプリから差分の確認やPRのマージ・クローズを操作 e.g. 「Mac miniとcodexで自動リファクタリングPRを量産する仕組み」 by noppeさん
「スマホでバイブコーディング」する方法 2 ローカルマシン上のAI × GitHub • 常時起動のローカルマシンで自動でAIを走らせつつ、PRを出させる • GitHubのスマホアプリから差分の確認やPRのマージ・クローズを操作 e.g. 「Mac miniとcodexで自動リファクタリングPRを量産する仕組み」 by noppeさん → やっぱり最終成果物はGitHubのPR(自分の要件には合わない)
個人的に抱えている課題感 • 17時ぐらいから食事の用意 → 家族で食事 → お風呂 → 20時ぐら いから子供といっしょに布団に入って寝かしつけ • 子供は21時〜22時には寝る • そこから起きあがって作業しにいく気力はもうない (ベッドでダラダラスマホ見てる) → スマホでポチポチ作業したい
要件(やりたいこと)の整理 • 対象はiOSアプリ開発 • Web上にデプロイしたりするわけではない • ローカルマシンはXcodeの入ったMac • GitHub上ではなくローカルマシン上での作業にとどめたい • 同一ネットワークを前提とするのはOK
スマホ ↔ ローカルマシンでバイブコーディングする方法 • Termiusを使う • CLIベースのAIコーディングエージェントなら何でもOK • VibeTunnelを使う • 同じくCLIベースのAIなら汎用的に使えるが、Claude Codeで特 に便利 • SSH等の面倒なセットアップも不要
スマホ ↔ ローカルマシンでバイブコーディングする方法 • Termiusを使う • CLIベースのAIコーディングエージェントなら何でもOK • VibeTunnelを使う ← 今回はこっち • 同じくCLIベースのAIなら汎用的に使えるが、Claude Codeで特 に便利 • SSH等の面倒なセットアップも不要
VibeTunnel • Mac側で vt claude を実行するだけでスマホから接続できる • オープンソース / MITライセンス • Tailscale等を使えば外出先から も接続可能
接続までの手順 1. Mac側でVibeTunnelアプリを起動 → URLが 表示される 2. Mac側ターミナルで vt claude → Claude Codeが起動(VibeTunnelアプリ に "Active Sessions" として検知される) 3. iPhone側でブラウザから1のURLにアクセス → Active Sessions一覧から選んで操作
iOSネイティブアプリも • リポジトリ内の ios フォルダ配下に プロジェクトがあるので自分でビル ドして使用する(App Storeにはな い) • サーバー設定を記憶しておける → 同じネットワーク環境化であれば 起動してワンタップで利用可能
めちゃくちゃ便利そう!
しかし色々と問題が...
ブラウザ版の問題点 (ブラウザ版)
ブラウザ版の問題点 どこをタップしてもキーボード が出てこない つまり一切の入力ができない ! (ここから何もできない...)
iOSネイティブアプリ版の問題点
iOSネイティブアプリ版の問題点 • 日本語入力できない
iOSネイティブアプリ版の問題点 • 日本語入力できない • 日本語出力の表示がバグっている
iOSネイティブアプリ版の問題点 • 日本語入力できない • 日本語出力の表示がバグっている • Shift+Tab できない(=plan mode切り替え手段がない) カスタムキーボードに esc や ctrl や tab はあるが、shift が ない
iOSネイティブアプリ版の問題点 • 日本語入力できない • 日本語出力の表示がバグっている • Shift+Tab できない(=plan mode切り替え手段がない) • 上にスクロールできない(=出力 内容を確認できない)
実用はなかなか厳しい...?
問題なし! やりようは色々ある • OSSなので使い方わからない部分はコードを読む/バグって る部分は自分で直す • プロンプトは音声入力 or コピー&ペーストで貼り付け • カスタムスラッシュコマンドを整備して /+ カーソル操作だ けで色々作業できるようにする
Shift+Tab できない問題の修正 Shift+Tab(BackTab)の定義を追加 struct TerminalInput: Codable { ... enum SpecialKey: String { ... case backTab = "\u{1B}[Z" BackTab用のボタンを追加 struct TerminalToolbar: View { ... var body: some View { ... ToolbarButton(label: "⇤") { ... onSpecialKey(.backTab) }
上にスクロールできない問題の修正 (割愛、シンプルにバグなので本家にPR出します)
日本語入力、出力の問題 • VibeTunnelが内部で利用している SwiftTerm 側の問題っぽい • 設定からターミナルレンダラを xterm.js に切り替えることでと りあえず日本語入力/出力の問題どちらも解決する しかしこっちはこっちで挙動が怪しい...
ひととおり解決 ✅ 日本語入力できない 日本語出力の表示がバグっている Shift+Tab できない(=plan mode切り替え手段がない) 上にスクロールできない(=出力内容を確認できない)
まとめ • 鎌倉生活最高なのでみんな住もう! • スマホで(ローカルマシンと繋いで)AI駆動iOS開発するに はVibeTunnelが便利そう • Mac側で vt claude してiOSアプリから接続するだけ! • 色々問題はあるが問題ない
ご清聴ありがとうございました!