一般的な環境設定については、Environment Configuration を参照してください。構文の詳細については、YAML Reference を参照してください。
build の失敗をデバッグする
ステップ 1: ビルドのステータスを確認する
| ステータス | 意味 | 対応 |
|---|---|---|
| Success | すべて正常に完了した | 対応不要 — マシンイメージの準備は完了しています |
| Partial | コアのビルドは成功したが、一部の repo は失敗した | どの repo が失敗したかを確認してください。該当するセッションに問題がある可能性があります |
| Failed | ビルド自体が失敗した | 失敗したステップのログを確認してください |
| Cancelled | より新しいビルドによってこのビルドが置き換えられた | 正常です — 必要に応じて新しいビルドを開始してください |
| Skipped | 設定変更が検出されなかった | 対応不要 — ビルドは必要ありませんでした |
ステップ 2: ビルドログを確認する
- Shared setup — Enterprise + org-wide のコマンド
- Clone — リポジトリ のクローン
- Repo setup — リポジトリ ごとのコマンド
- Finalize — ヘルスチェックとイメージの作成
name フィールドを含む expanded form を利用した場合、ログにはどのステップが失敗したかが正確に表示されます。これは、ステップに名前を付ける大きな利点の 1 つです。
ステップ 3: 失敗パターンを特定する
クローン失敗
- リポジトリへのアクセスが設定されていない — Enterprise Settings > Integrations を確認してください
- 非公開リポジトリには認証トークンが必要です
- リポジトリの名前が変更された、または削除された
- ネットワーク接続の問題 (VPN またはプロキシが必要)
依存関係のインストール失敗
npm install、pip install、または同様の処理で発生します。
よくある原因:
- 非公開パッケージレジストリで認証が必要 — Secrets にトークンを追加する
- パッケージのバージョン競合 — 特定のバージョンに固定する
- ネットワークのタイムアウト — VPN が必要か確認する
- レジストリ URL の設定ミス
maintenance セクションにレジストリ認証を追加します。非公開レジストリのパターンについては、Configuration 使用例 を参照してください。
タイムアウトによる失敗
- 対話型プロンプトが入力待ちになっている —
-yフラグを追加し、DEBIAN_FRONTEND=noninteractiveを利用する - 非常に大きな依存関係のインストールに時間がかかりすぎている
- コマンドが1時間のタイムアウトを超えている
initialize に移し、ビルド時にのみ実行されるようにします (すべてのセッションではなく) 。
権限エラー
- システムパッケージのインストール時に
sudoを付けていない - 保護されたディレクトリに書き込もうとしている
- 前回のビルドで別のユーザーが所有者になったファイルが残っている
apt-get、/etc/ への書き込みなど) では sudo を利用します。ユーザーレベルのパッケージマネージャー (npm、pip、cargo) では、通常 sudo は不要です。
“Command not found” エラー
initialize でインストールしたツールが、maintenance またはそれ以降のステップで利用できません。
よくある原因:
- ツールが
PATHに含まれていないディレクトリにインストールされている - シェルプロファイル (
.bashrc) への変更が、後続のステップで反映されていない
$ENVRC を使ってツールのディレクトリを PATH に追加します:
ステップ4: 調整を繰り返す
- YAML 設定を修正する
- 保存する — 新しいビルドが自動的に自動的に開始される
- 新しいビルドのログを確認する
よくあるエラー早見表
| エラー | 主な原因 | 対処方法 |
|---|---|---|
command not found | ツールがインストールされていない、または PATH が通っていない | initialize に追加するか、$ENVRC で PATH に追加する |
Permission denied | sudo が付いていない | システムパッケージには sudo apt-get install を利用する |
npm ERR! 404 | 非公開パッケージで、認証が設定されていない | maintenance にレジストリの認証トークンを追加する (使用例) |
E: Unable to locate package | 最初に apt-get update を実行していない | apt-get install の前に sudo apt-get update -qq を追加する |
| Timeout | インストールに時間がかかっている、または対話式プロンプトがある | initialize に移し、-y と DEBIAN_FRONTEND=noninteractive を追加する |
| セッション開始後に設定ファイルが空になる | 認証情報を initialize に書き込んでいる | 認証情報の設定手順を maintenance に移す |
| ビルドは成功するがセッションが正常に使えない | セッション開始時に maintenance コマンドが失敗している | セッション内で maintenance コマンドを手動でテストする |
対話型セットアップからの移行
移行の仕組み
- 切り替えが ON (既定) — すべてのセッションでレガシースナップショットが利用されます。影響はありません。
- 切り替えが OFF — すべてのセッションで宣言的スナップショットが利用されます。
移行手順
設定を準備する
現在の対話型セットアップで使っているコマンドを確認し、YAML の各セクションに対応付けます。
| レガシーウィザードの手順 | 宣言的設定での対応先 |
|---|---|
| Git pull | 自動 (組み込み) |
| Secrets を設定 | Secrets (変更なし) |
| 依存関係をインストール | initialize セクション |
| 依存関係を維持 | maintenance セクション |
| lint を設定 | 名前が lint の knowledge エントリ |
| テストを設定 | 名前が test の knowledge エントリ |
| ローカルアプリを実行 | 名前が startup の knowledge エントリ |
| 補足メモ | 名前が notes の knowledge エントリ |
YAML を作成する
Settings > Devin’s Environment に移動し、対象のリポジトリを選択します。レガシー環境のコマンドを次のように対応付けます。または、Devin のセッションを開始してリポジトリのセットアップを依頼するだけでもかまいません。Devin が設定を自動生成できます。
切り替え前にテストする
全員を移行する前に、manual override を使って個別のセッションで宣言的セットアップをテストしてください。これにより、設定を調整している人だけが宣言的スナップショットを利用し、それ以外のユーザーは引き続きレガシースナップショットを利用できます。宣言的セットアップがレガシー環境と完全に同等になるまで、設定を繰り返し調整してください。
Enterprise への移行
- まず Enterprise レベルの YAML を設定します — VPN、証明書、プロキシ設定などの共有インフラを対象とします。
- org は 1 つずつ移行します。 各 org には個別のレガシートグルがあるため、他のチームに影響を与えずに段階的に移行できます。
- テスト用の org を検討します。 大規模な Enterprise では、本番 org に展開する前に、宣言的な設定を検証するための専用のテスト組織を作成します。
- 大規模展開には Devin を利用します。 Devin は並列セッションで repo を設定できます — repo ごとに 1 つのセッションを起動すると、Devin が設定提案を自動生成します。これは 10〜100 以上の repo のオンボーディングに適しています。
古いスナップショットはどうなりますか?
主な違い
| 機能 | レガシー (対話型) | 宣言的 (YAML) |
|---|---|---|
| 再現性 | 状態を保持 — スナップショットに変更が時間とともに蓄積される | YAML から完全に再現可能 |
| マルチrepo | 一度に1つの repo のみ | 1回のビルドで複数の repo を同時にクローン可能 |
| メンテナンス | 手動の「依存関係のメンテナンス」ステップ | 自動 — maintenance がセッション開始時に実行される |
| Enterprise/org レイヤー | 非対応 | 3 層階層 (Enterprise → Org → Repo) |
| Devin の提案 | ウィザード内のみ | セッション内 — Devin が設定の更新を提案可能 |
| コスト | ウィザードのセッションで ACU を利用 | セットアップ セッションは約 1〜3 ACU、ビルドは無料 |
よくある質問
一般
initialize と maintenance はいつ使い分けるべきですか?
initialize は、1回限りのツールのインストール (apt-get install、言語ランタイムのセットアップ、グローバル CLI ツール) に利用します。maintenance は、常に最新の状態を保つ必要がある依存関係のインストール (npm install、pip install、uv sync) に利用します。
環境変数を追加するにはどうすればよいですか?
$ENVRC に書き込みます:
initialize セクションで sudo apt-get install を利用してください。対話式のプロンプトが表示されないよう、常に DEBIAN_FRONTEND=noninteractive と -y フラグを利用してください。
repoごとに異なる Node バージョンが必要な場合はどうすればよいですか?
repo単位の設定で nvm を利用してください。
ビルド固有
Enterprise 固有
既知の制限事項
- ビルドプレビュー/サンドボックスなし — 設定を変更するたびにフルビルドがトリガーされます。まずセッションでコマンドをテストしてください。
- リポジトリのセットアップは順次実行 — リポジトリ単位のセットアップは、一度に 1 つのリポジトリずつ実行されます (アルファベット順) 。リポジトリ数が多いほど、ビルドに時間がかかります。
- YAML に条件分岐ロジックなし — この形式は if/else をサポートしていません。必要に応じて、コマンド内でシェルの条件分岐を利用してください (例:
[ -f package.json ] && npm install) 。 - ビルドログの検索不可 — ビルドログは手動でスクロールする必要があります。名前付きステップを利用すると、失敗箇所を見つけやすくなります。
