はじめに
こんにちは。
寺島です。
普段はマイニフティチームでスマホアプリ(マイ ニフティ)の開発に携わっています。
最近はAIでの開発が活発になってきましたね!
私は主にClaude Codeでの開発を行っています。
基本的には、快適に開発をお任せしている状況なのですが、
Claude CodeでiOSアプリの開発を行う中で、とてもネックになる部分が出てきました。
- ビルドがうまくできない
- 新規グループやファイルの追加が、Xcodeで認識されない
上記の2点で本当によく詰まってしまい、開発体験が著しく下がってしまう状況でした。
ビルドは、対象のシミュレーターを起動してみたいなことが苦手のようで、延々と転け続けていましたし、ファイル追加は、Xcodeprojの操作が苦手なようで既存の構成を壊してしまっていました。
最近は公式のMCPなどで解決ができるようなのですが、もっと手軽にスクリプトで解決する方法がありますので、ご紹介させていただければと思います。
この記事では、プロジェクトルートの.claude/配下にscripts/ディレクトリを配置し、CLAUDE.mdやSKILLS.mdから呼び出すパターンを紹介します。
scriptsの解説
.claude/scripts/ディレクトリにプロジェクト固有のスクリプトを配置します。
今回は、CLAUDE.mdなどから相対パスで呼び出す形で実現します。
嬉しいこと
- ビルドで失敗することがなくなります
.xcodeprojを編集を代わりにやってくれます
ディレクトリ構成
|
1 2 3 4 5 6 |
your-project/ └── .claude/ ├── CLAUDE.md # 「./.claude/scripts/on_build.shや./.claude/scripts/on_new_file を実行」と記載 └── scripts/ ├── on_build.sh # ビルド実行スクリプト └── on_new_file.sh # ファイル作成スクリプト |
1. ビルドスクリプト(.claude/scripts/on_build.sh)
実装例(iOS/Xcode):
※ 指定するシミュレーターは必ず利用できるシミュレーターを指定してください
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash # iOS: Xcodeビルド # 環境に応じて以下を変更してください: # - ワークスペース/プロジェクト名 # - スキーム名 # - ターゲットデバイス xcodebuild -workspace YourApp.xcworkspace \ -scheme YourScheme \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 17 Pro' \ -derivedDataPath ./.build \ build |
実行権限を付与:
|
1 |
chmod +x .claude/scripts/on_build.sh |
2. ファイル作成スクリプト(.claude/scripts/on_new_file.sh)
環境固有の部分があります。:
Dir.glob('*.xcodeproj').first– プロジェクトファイルの検索パターン(環境に応じて変更が必要)project.targets.first– ターゲットの選択(複数ターゲットがある場合は適宜変更が必要)
実装例(Xcodeプロジェクトへの自動登録):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/bin/bash # iOS: Xcodeプロジェクトにファイルを追加するフック # 前提: xcodeproj gem がインストール済み(gem install xcodeproj) # 使用例: ./.claude/scripts/on_new_file.sh app/Module/Feature/NewFile.swift FILE_PATH="$1" if [ -z "$FILE_PATH" ]; then echo "使い方: $0 <ファイルパス>" exit 1 fi if [ ! -f "$FILE_PATH" ]; then echo "エラー: ファイルが存在しません: $FILE_PATH" exit 1 fi # Rubyスクリプトを実行してXcodeプロジェクトに追加 ruby -r xcodeproj <<RUBY def find_or_create_group(project, path_components) current_group = project.main_group path_components.each do |component| next_group = current_group.children.find { |child| child.is_a?(Xcodeproj::Project::Object::PBXGroup) && child.display_name == component } if next_group.nil? next_group = current_group.new_group(component, component) end current_group = next_group end current_group end begin project_path = Dir.glob('*.xcodeproj').first if project_path.nil? puts "エラー: Xcodeプロジェクトが見つかりません" exit 1 end project = Xcodeproj::Project.open(project_path) file_path = '${FILE_PATH}' path_parts = file_path.split('/') file_name = path_parts.pop group_path = path_parts group = find_or_create_group(project, group_path) # ファイルの重複チェック existing_file = group.children.find { |child| child.is_a?(Xcodeproj::Project::Object::PBXFileReference) && child.display_name == file_name } if existing_file puts "エラー: ファイルは既にプロジェクトに存在します: #{file_path}" exit 1 end # 新規ファイルの追加 file_ref = group.new_file(file_name) project.targets.each do |target| target.add_file_references([file_ref]) end project.save puts "✅ ファイルを全ターゲットに追加しました: #{file_path}" rescue => e puts "エラー: #{e.message}" exit 1 end RUBY |
実行権限を付与:
|
1 |
chmod +x .claude/scripts/on_new_file.sh |
CLAUDE.md/SKILL.mdでの活用方法
プロジェクトルートの.claude/CLAUDE.md等に以下を記載することで、Claudeにスクリプトの存在を伝えられます:
ビルド手順
コード変更後は必ず以下を実行してビルドを確認してください:./.claude/scripts/on_build.sh
ビルドエラーが発生した場合は、エラーメッセージを確認して修正してください。
新規ファイル作成時
新規ファイルを作成した場合、以下を実行してプロジェクトに登録してください:./.claude/scripts/on_new_file.sh <作成したファイルのパス>
まとめ
scriptsパターンは、Claude Codeにおける「プロジェクト固有の処理」を一箇所に集約し、プロンプトをシンプルに保つための設計パターンです。
設計の利点:
- Claudeは標準化されたインターフェース(スクリプト)を呼び出すだけ
- チームでリポジトリ共有するだけで環境構築が完了
この仕組みにより、Claude CodeでのiOS開発がより快適になります。
おわりに
色々な実行方法がある中で、今回は選択肢の一つとして.shで管理する方法をご紹介しました。
もっと快適にするために、サブエージェントから呼び出したりなど様々あると思います。
色々試すものの一つになれると幸いです。


