メインコンテンツへスキップ
#Web制作 約6分で読めます

Astro 7.1の--ignore-lockで複数devサーバーを同時に立てる

Astro 7.0で導入されたロックファイルが複数プロジェクトの同時開発を妨げていた問題を、7.1の--ignore-lockフラグで解消する方法

Turborepoで3つのAstroプロジェクトを並べて開発していたら、2つ目のastro devが「Another astro dev server is already running」と言って起動しなくなった。ポートも変えているのに。犯人は、Astro 7.0で入ったロックファイルだった。

ロックファイルが邪魔をする仕組み

Astro 7.0はAIコーディングエージェント向けのバックグラウンドモードを導入した。astro dev --backgroundでdevサーバーをバックグラウンドプロセスとして起動し、エージェントがターミナルを占有されずに作業を続けられる、という機能だ。

この仕組みの根幹にあるのが.astro/dev.jsonというロックファイルで、起動中のサーバーのURL・ポート・PIDを記録する。エージェントが2つ目のサーバーを立てようとしたとき、既存のインスタンス情報を返して重複起動を防ぐ——エージェント用途では理にかなっている。

問題は、このロックファイルがAIエージェント以外の場面でも効いてしまうこと。モノレポで別プロジェクトのdevサーバーを立てようとしたり、同じプロジェクトでポート違いの2つ目を起動しようとすると、ロックファイルに阻まれる。GitHub Issue #17324でこの問題が報告され、メンテナのMatthew Phillipsが「ロックチェックをスキップするフラグを追加しよう」と応じた。

--ignore-lockの使い方

Astro 7.1(2026年7月16日リリース)--ignore-lockフラグが追加された。使い方は単純で、2つ目以降のサーバーにこのフラグを付けるだけ。

# 1つ目は普通に起動(ロックファイルが作られる)
astro dev --port 4321

# 別ターミナルで2つ目を起動
astro dev --port 4322 --ignore-lock

--ignore-lockを付けたサーバーはロックファイルの読み書きを一切しない。だから既存のロックファイルがあっても起動できるし、自分自身のロックファイルも残さない。

モノレポで使うなら、各プロジェクトのpackage.jsonにポートとフラグをセットで書いておくのが楽だった。

{
  "scripts": {
    "dev": "astro dev --port 4321",
    "dev:secondary": "astro dev --port 4322 --ignore-lock"
  }
}

Turborepoのturbo.jsonで各プロジェクトのdevタスクを並列に走らせるなら、メインのプロジェクト以外に--ignore-lockを付ける。メインの1つだけがロックファイルを管理し、残りは独立して動く形になる。

制約を把握しておく

--ignore-lockで立てたサーバーはロックファイルの管理外になるので、いくつか使えないコマンドがある

  • astro dev stop — ロックファイルを参照して停止するため、--ignore-lockで起動したサーバーには効かない。Ctrl+Cかkillで止める
  • astro dev status / astro dev logs — 同様に追跡対象外

また、--ignore-lock--background--forceと併用できない。バックグラウンドモードはロックファイルに依存して動くため、組み合わせると矛盾する。明確にエラーが出るので気づかず壊れることはない。

# これはエラーになる
astro dev --background --ignore-lock
# → Error: --ignore-lock cannot be combined with --background

自分のモノレポでの運用

実際にやってみて感じたのは、メイン1台+--ignore-lockのサブという構成が一番扱いやすいということ。メインはロックファイルで管理されるからastro dev stopで止められるし、statusでポートやPIDも確認できる。サブはフォアグラウンドで動かしてターミナルタブで管理する。

3プロジェクトを同時に立てても、ポートさえ分ければ干渉はなかった。ただし、同じnode_modulesを共有しているモノレポだとViteのキャッシュが衝突することがあった。--ignore-lockの問題ではなく、Viteの.viteキャッシュディレクトリが各プロジェクトで分離されていないケース。各プロジェクトのastro.config.mjsvite.cacheDirを明示的に分けたら解消した。

// astro.config.mjs
import { defineConfig } from 'astro/config';

export default defineConfig({
  vite: {
    cacheDir: './node_modules/.vite-project-a',
  },
});

エージェント検出のバックグラウンドモードを使わない人間の開発者にとっては、ロックファイル自体が邪魔になる場面のほうが多いかもしれない。自動検出を無効にするには環境変数ASTRO_DEV_BACKGROUND=0を設定する。ただ、--ignore-lockが入った今は、ロックファイルの存在を意識する場面自体がほぼなくなった。

検証環境: macOS Sequoia / Node.js 22.15 / Astro 7.2.4 / 2026年8月

参考リンク

#Astro #devサーバー #モノレポ #開発効率化
シェア