ダウンロード済みの結果は再利用し、状態不明のものは再利用しません。
依存関係キャッシュは、ロックファイルのダイジェスト、Xcodeバージョン、アーキテクチャ単位で再利用できます。DerivedData、一時キーチェーン、書き出しディレクトリ、未コミットの変更はリポジトリ間で直接共有しません。
MiniDebug M4は、他の注文とデバイスの計算リソースを共有しない専有物理マシンです。実際のタスクに沿って入力、実行手順、出力、よくある失敗ポイントを分解し、既存のiOS、CI、AI、クリエイティブワークフローに適しているか判断できるようにします。
安定した自動ビルドは、単一のコマンドだけでは実現できません。ソースコードのバージョン、依存関係の状態、Xcodeの選択、署名入力、書き出しパラメータ、成果物の保存先を固定し、どの失敗もログから特定できるようにする必要があります。
入力:リポジトリURL、ブランチ、コミットハッシュ、ビルド設定、対象Scheme。Webhookやキュータスクは識別子だけを渡し、スクリプト内でブランチを推測しません。
失敗ポイント:コミットが存在しない、サブモジュールが同期されていない、権限不足、または同じタスクが変化中のブランチ先端を読み込む。
入力:Package.resolved、Podfile.lock、その他のロックファイル。キャッシュキーには少なくとも依存関係ロックのダイジェスト、Xcodeバージョン、対象アーキテクチャを含めます。
失敗ポイント:ロックファイルのずれ、ツールチェーンとキャッシュの不一致、プライベート依存関係の認証情報失効、またはディスク容量不足。
入力:WorkspaceまたはProjectのパス、Scheme、Configuration、Destination、アーカイブパス。まずツールのバージョンを出力してからアーカイブを実行します。
失敗ポイント:コンパイルエラー、テスト失敗、対象バージョン非対応、DerivedDataの汚染、またはビルドスクリプトがローカルの絶対パスに依存している。
入力:必要最小限の証明書、プロビジョニングプロファイル、環境変数。情報はタスク開始時に注入し、終了後に削除します。
失敗ポイント:証明書とプロビジョニングプロファイルの不一致、権限範囲の誤り、有効期限の問題、または複数タスクが同じ一時キーチェーンを誤って使用している。
入力:アーカイブファイルとExportOptions設定。書き出し後は、ディレクトリの存在だけで判断せず、ファイル名、サイズ、チェックサム、生成時刻を記録します。
失敗ポイント:書き出し方法と署名設定の競合、出力ディレクトリへの権限不足、またはスクリプトがゼロ以外の終了コードを握りつぶしている。
出力:ビルド成果物、アーカイブファイル、テストレポート、ビルドログ、コミットハッシュ、タスク番号。作業ディレクトリはアップロード成功後に削除します。
失敗ポイント:アップロード中断、成果物名の衝突、ログへの機密フィールド混入、または結果確認前のクリーンアップ。
ビルドファームの要点は、タスクを同時実行することではありません。キュー、ノードタグ、キャッシュ境界、結果の返却を説明可能にすることです。1台のMiniDebug M4は管理された実行経路に適しており、同時実行タスクは別注文に対応する物理ノードへ割り当てます。
依存関係キャッシュは、ロックファイルのダイジェスト、Xcodeバージョン、アーキテクチャ単位で再利用できます。DerivedData、一時キーチェーン、書き出しディレクトリ、未コミットの変更はリポジトリ間で直接共有しません。
待機、実行、アップロード、完了はスケジューリング状態です。コンパイル成功、テスト失敗、署名失敗はタスク結果です。分けて記録することで、容量の問題かプロジェクトの問題かを判断できます。
Runnerの登録は接続作業にすぎません。安定性を左右するのは、タグの正確さ、単一マシンの同時実行制御、タスク終了時のクリーンアップ、失敗ログを対応するワークフロー実行記録へ戻せるかどうかです。
システムタグは保持し、長期運用できる能力タグとして macos、arm64、xcode-current 、 signing-readyなどを追加します。一時的なプロジェクト名や短期ブランチをノードタグに含めないでください。
runs-on:
- self-hosted
- macos
- arm64
- xcode-current登録前にRunnerの所属範囲、リポジトリへのアクセス境界、作業ディレクトリを確認します。実行アカウントにはビルドに必要な権限だけを付与し、通常のリモート操作と共用せず、長期認証情報をスクリプトへ直接記述しません。
同じ作業ディレクトリで書き込みを伴うタスクを2つ同時に実行しないでください。開始前に残存プロセスとディスク容量を確認し、終了後にソースコードのコピー、一時書き出しファイル、一時キーチェーン、プロジェクト単位の環境変数を削除します。
同時実行が必要な場合は、署名、アーカイブ、クリーンアップが同じディレクトリを上書きしないよう、タスクごとに別の物理ノードへ割り当てます。
失敗時もログ収集ステップを継続し、少なくともxcodebuildの出力、テスト結果、ディスク空き容量、ツールバージョン、タスク識別子を返します。アップロード前にトークン、秘密鍵の内容、証明書パスワード、リポジトリの機密変数を削除します。
Runnerオフライン、タスクタイムアウト、スクリプト終了、成果物アップロード失敗を区別し、すべての問題を「ビルド失敗」とだけ表示しないようにします。
個人開発者は、すべての手順を一度に自動化する必要はありません。GUI操作とコマンドラインタスクの受け渡し地点を明確にし、修正、検証、アーカイブ、TestFlight前の成果物準備をいつでも戻せるようにするのが堅実です。
コード修正、基本テスト、コミットを完了し、固定ブランチへプッシュします。検証するデバイス条件と期待結果も記録します。
出力:コミットハッシュ、変更内容、テスト範囲Scheme、対象バージョン、プロジェクト設定を確認し、目視判断が必要な警告に対応します。署名設定が今回のリリースに必要な範囲を指していることも確認します。
出力:確認済みのプロジェクト状態とリリースパラメータスクリプト化したアーカイブ、書き出し、検証を実行し、完全なログを保持します。問題が発生したら対応する入力へ戻り、失敗したマシン上で不明な状態を手動修正し続けないでください。
出力:アーカイブファイル、書き出しパッケージ、チェックサムGUIは人手の判断が必要な設定と確認だけを担当し、アーカイブ、書き出し、再試行、成果物の命名はスクリプトに任せます。手動調整のたびにプロジェクト変更をコミットするか差分を記録し、次回のビルドを再現できなくなるのを防ぎます。
MiniDebug M4はM4、16GB RAM、256GB SSD構成です。実験ではまずモデルとデータがこのリソース範囲に適しているか確認し、読み込み、メモリ、継続推論、出力品質を記録します。異なるパラメータの結果を混在させないでください。
モデル形式、量子化バージョン、ランタイムバージョン、コミットハッシュ、入力サンプル、乱数パラメータを記録します。モデルファイルはチェックサムで識別し、同名で内容が異なる事態を防ぎます。
初回ロードにはモデル読み込みと初期化が含まれるため、安定稼働フェーズと合算できません。各テストでは入力長、バッチサイズ、反復回数、サンプリングパラメータを統一します。
量子化バージョンは速度だけで比較しません。同じ入力に対する出力、タスク品質の評価、エラーサンプル、環境情報も保存し、最後に機械可読な結果と人による結論を出力します。
{
"machine": "MiniDebug M4 / M4 / 16GB / 256GB",
"model_variant": "project-defined",
"input_set": "fixed-evaluation-set",
"measurements": [
"load_time",
"first_output_time",
"total_time",
"peak_memory"
],
"artifacts": ["result.csv", "runtime.log", "notes.md"]
}
音声・動画タスクのボトルネックは、素材転送、プラグイン互換性、リモート画面、ディスク容量、書き出しパラメータにある可能性があります。工程を分離すれば、接続の遅延をホストの計算性能の問題と誤認せずに済みます。
まず素材一覧を作成し、ファイル数、合計サイズ、ディレクトリ構成、チェックサムを記録します。現在の段階で必要なプロキシまたはソース素材だけを同期し、完了後に欠落項目を確認します。
チェックポイント:プロジェクトパスがローカルドライブレターに依存せず、メディア参照を再配置でき、256GBの標準SSDにプロジェクトキャッシュと書き出し用の空きがあること。
GUI接続でプロジェクトを開き、フォント、プラグイン、メディアリンク、サンプリング設定、出力先を確認します。低速なネットワークでは工程の出力パラメータを変えず、リモート画質と解像度を下げます。
チェックポイント:リモートプレビューの品質と最終ファイルの品質を区別します。プラグインが不足している場合は不完全な結果を避けるため、一括タスクを停止します。
書き出しプリセット、ファイル名、保存先を固定してからタスクリストに沿って実行します。各タスクの終了状態、所要時間、出力サイズ、エラー情報を保存します。
チェックポイント:長時間タスクの開始前にディスク空き容量を確認します。同時実行数はメモリ、素材読み込み、エンコード負荷に応じて段階的に検証します。
画面、音声トラック、長さ、解像度、ファイルヘッダーを抜き取り確認し、チェックサムを生成します。ローカルで完全に受信したことを確認してから、クラウド上の一時ファイルを削除します。
出力:最終ファイル、書き出しログ、失敗一覧、チェックサム、ローカル受信記録。
ノードはチームの所在地だけで選びません。コードリポジトリ、依存関係の取得元、リモート操作者、最終納品先も同時に考慮します。以下は選択の目安であり、ネットワーク結果を保証するものではありません。実際の接続性能は、利用者のローカルネットワークと地域間経路に左右されます。
| ノード | 優先して検討するチーム所在地 | リポジトリと依存関係の所在地 | 代表的な納品先 | 注文前の確認 |
|---|---|---|---|---|
| シンガポール | 東南アジアのチームまたは地域横断の協働メンバー | リポジトリ、成果物、依存サービスが主に東南アジアにある場合に優先してテスト | 東南アジアチームの日常ビルド、リモート開発、結果返却 | リポジトリ取得、依存関係のダウンロード、リモートGUI接続をテスト |
| 日本(東京) | 日本および周辺の東アジアチーム | コードと依存関係へのアクセス経路が日本に近い場合に優先してテスト | 日本チームのiOSビルド、署名確認、リモートXcode操作 | ローカルからノードへの操作安定性と大容量ファイルのアップロードを検証 |
| 韓国(ソウル) | 韓国および北東アジアの協働チーム | 韓国方面からリポジトリや社内リソースへ直接アクセスしやすい場合に検討 | 継続的インテグレーション、セルフホストRunner、地域内の成果物配布 | Runnerの再接続、依存関係の取得、ログのアップロードを検証 |
| 香港 | 華南と東南アジア間で協働するチーム | コード、素材、操作者が華南と東南アジアに分散している場合に優先比較 | 地域横断の開発協業、リモートGUIタスク、素材処理 | オフィスネットワークと家庭ネットワークの接続経路を個別にテスト |
| 米国東部 | 北米東部および西欧と協働するチーム | リポジトリ、CIコントロールプレーン、納品システムが北米東部にある場合に検討 | 北米の稼働時間帯におけるビルドキュー、結果返却、協業確認 | リポジトリ、成果物ストレージ、リモート操作者の3経路をテスト |
以下のスニペットはスクリプト構成のたたき台であり、すべてのプロジェクトでそのまま使える完全な設定ではありません。リポジトリに保存する前に、プロジェクトの種類に応じてWorkspace、Scheme、Xcodeバージョン、書き出し設定、署名情報、Runnerタグ、成果物ディレクトリを確認してください。
set -euo pipefail
PROJECT_ROOT="/path/to/project"
WORKSPACE="$PROJECT_ROOT/Example.xcworkspace"
SCHEME="Example"
ARCHIVE_PATH="$PROJECT_ROOT/output/Example.xcarchive"
xcodebuild -version
xcodebuild \
-workspace "$WORKSPACE" \
-scheme "$SCHEME" \
-configuration Release \
-destination "generic/platform=iOS" \
-archivePath "$ARCHIVE_PATH" \
clean archive
プロジェクトパス、Workspace、Scheme、Configuration、Destination、アーカイブディレクトリを置き換えます。スクリプトはゼロ以外の終了コードを保持し、実行前に必要なXcodeバージョンを確認します。
lane :build_release do
setup_ci
build_app(
workspace: "Example.xcworkspace",
scheme: "Example",
configuration: "Release",
output_directory: "output"
)
sh("shasum -a 256 output/*")
end
プロジェクトに合わせてWorkspace、Scheme、出力ディレクトリ、書き出し設定を置き換えます。署名情報は管理された変数またはタスク単位の注入で提供し、Fastfileへ直接記述しないでください。
name: ios-build
on:
workflow_dispatch:
jobs:
archive:
runs-on:
- self-hosted
- macos
- arm64
- xcode-current
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: ./scripts/archive.sh
- name: Collect diagnostics
if: always()
run: ./scripts/collect-diagnostics.sh
実際のRunnerタグ、リポジトリポリシー、スクリプトパスに合わせて調整します。使用するアクションのバージョンを固定し、タスクのタイムアウトを設定し、ビルド失敗時も診断情報の収集を続行させます。
固定コミット、単一タスク実行、ログのアーカイブ、成果物の検証から始め、キャッシュ、署名情報の注入、キュー制御を段階的に追加します。日・週・月・四半期単位でレンタルでき、注文は米ドル(USD)で決済されます。
支払い方法はUSDT-TRC20とVisa / Mastercard / Amex(Stripe経由)のみです。利用可能な決済ゲートウェイは管理画面の表示に従います。