9.9K Views
May 21, 25
スライド概要
[Mobile勉強会 #20 ウォンテッドリー × チームラボ × Sansan - connpass](https://wantedly.connpass.com/event/350442/) での発表資料です。
フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰
Cursor × iOS開発 私はこうやってます 2025年5月版
自己紹介 • • • 堤 修一 @shu223 (GitHub, Zenn, Qiita, note, Docswell, 𝕏, YouTube, Podcast, etc...) 書籍(商業出版4冊、個人出版多数 @BOOTH):
どんな感じでiOSアプリ開発にAIを 使ってますか? 私の事例を共有するので、みなさんのもぜひ教えてください
前提 • 個人での利用を想定した話です • 会社/仕事での利用ではない • プロジェクトの規模感:小〜中(Swiftコード行数2万+/ Swiftファイル数300+) • iOS開発歴は長い(> 10年)
私の使い方 - 2025年1月版
いろいろ併用していた
2025年5月現在 • Cursor:Agentモードで利用。エディタはほぼ使わない。 • Xcode :自分でコード書くときはこっち。サジェストに CopilotForXcode も利用。
2025年5月現在 • Cursor:Agentモードで利用。エディタはほぼ使わない。 • Xcode :自分でコード書くときはこっち。サジェストに CopilotForXcode も利用。 → Cursor + Xcode に落ち着いた
現状のワークフロー 1. CursorでAI(Agentモード)にタスクを依頼 1. 方針を考えてもらう(ここでラリーすることも) 2. 実装してもらう 3. とりあえずacceptする 2. Xcode側でAIが書いたコードやビルドエラーを確認 → 必要に応じて 人力修正
「とりあえずAIに書かせ、人力修正」
背景にある考え: 「重い腰を上げる」ことこそが人生のボトルネック
背景にある考え: ! • 無限にある選択肢の中から「これでいく」というソリューションを 考えるのは意志力を要する • 腰が重くなる・・・ここをAIに任せる コードやビルドエラーを見ると 1 「違う、そうじゃない」がエン ジニアの反射反応として浮かぶ ここからの人力対応は容易 1 もちろんAIが提案してきた実装が最初からバッチリなケースもある 2 つまり基本的にAIパネルだけ使ってる(なのでAlex Sidebarも気になってる) 2
CursorとXcodeの併用、切り替え面倒じゃない? → 従来もXcodeでコード書きつつたまにブラウザ立ち上げてで ググる程度のことはやっていたはず。個人的には気にならな い。
Xcodeと併用する際のポイント • プロジェクトはもちろんフォルダ参照 • Xcode側での修正を同期するためにCursor側でのインデックスの更 新はしょっちゅうやる
その他の細かい話 • モデルはGemini 2.5 Proを使うことが多い • SpecStoryプラグインでチャット履歴を保存している • 実装が頭に明確に浮かんでいて、「プロンプト書く時間 > 自分でコード書く時 間」となりそうなときは最初から人力で書く • Cursor側では基本コードいじってない。Cursorのエディタでコードを開くのは、 選択範囲をしぼってチャットにコンテキストとして渡したいときぐらい 2 2 つまり基本的にAIパネルだけ使ってる(なのでAlex Sidebarも気になってる)
ルール・AI向けドキュメントの整備 • ルール(User Rules, Project Rules)を随時追加 • Docs・・・必要なドキュメントを随時登録 • AI向けドキュメント・・・RulesやDocs以外に、ローカルにAI向け ドキュメント(.md)を置くことも 3 • .specstory フォルダ(=チャット履歴)はノイズになるの で .cursorignore に登録している 3 PDFで提供されたドキュメントを自作コンバータで .md に変換したりしている
アホな回答やクソコードが生成されたときは改善チャンス! → どういうコンテキストを供給していればAIはこのタスクを完遂でき ただろうか?を考える • /Generate Cursor Rules コマンドで会話内容からルール生成 • (AIが役に立たなかったときの)SpecStoryログファイルを控えてお いて、あとで検討する
コンテキストウィンドウ問題 Cursorは(非MAXモードでは)モデルのコンテキストウィンドウを制限 7 している → AI向けに整備したルールやドキュメントを無視されることもしばしば。 7 具体的な数値は公表されていないが、調べると推測値が色々と出てくる
コンテキストウィンドウへの配慮 • .mdc 形式でルールを構造化して定義 • • チャットが長くなりすぎないよう、わりとすぐ新しいのを作る • • 8 「コンテキスト圧縮としてのRules」を意識する ひと区切りついた場合、イマイチな流れになってしまった場合、etc.. MAXモードへの課金、Claude CodeのMaxプランへの移行も検討中 CursorからClaude Codeへの乗り換えを検討したメモ 8
二段階のリポジトリ構成 .cursor、.specstory などを本体リ ポジトリに混ぜたくない → 対AI用の別リポジトリを外側に作 成 このフォルダをCursorで開く 4 4 . ├── 本体リポジトリ │ ├── .git │ ├── ... │ ├── ... │ └── ... ├── .git ├── .cursor ├── .cursorignore ├── .specstory └── ... チームでAI開発環境を育てていくなら .cursor フォルダは共有したいので、この構成は取らないと思う
この手法の欠点 @Git コンテキストが使えない 5 → 0.50でサポートされた "multi-root workspaces" で解決しそう 6 5 現在開いているフォルダのトップ階層にある .git しか見に行ってくれないため 6 複数フォルダをワークスペースとして登録できるようになった
まとめ • 2025年5月現在の「私はこうやってます」をまとめました • みなさんの「私はこうやってます」もぜひ教えてください
ご清聴ありがとうございました!