Astroで作ったサイトのビルドに astro check && astro build と書いておけば、型のエラーがあるとビルドは止まる。そう考えていても、型チェックそのものが走らずに「成功」と扱われていたら、エラーは本番まで素通りします。Astro 7.4.5までは、@astrojs/check か typescript がプロジェクトに入っていないとき、CIでの astro check がエラーを出しながら終了コード0で終わっていました。
この不具合は、2026年11月5日公開のAstro 7.4.6で直りました。本記事では、編集部の作業環境で7.4.5と7.4.6を同じ条件で動かした結果をもとに、何が変わり、何が変わっていないかを整理します。Astroのパッチ版の確かめ方は、Astro 7.4.5の環境変数の不具合の記事でも扱いました。
7.4.6で直ったこと
Astroの変更履歴(packages/astro/CHANGELOG.md)の7.4.6には、次の1行があります。
astro checkexiting with code 0 when@astrojs/checkortypescriptis not installed. The command now exits with code 1 so CI fails instead of silently skipping type checking.
修正のコミット(402c0fa、2026年11月2日)で変わったのは、packages/astro/src/cli/check/index.ts の1行です。2つのパッケージが読み込めなかったときにエラーを表示したあと、何も返さずに終わっていた処理(return;)が、失敗を返す処理(return true;)に変わりました。CLIはこの戻り値を見て終了コードを1にします。
修正に付いたテストは、環境変数 CI=true を付けた子プロセスで確かめています。テストの注記には、CIの環境では足りないパッケージを入れるかどうかを尋ねず、読み込めなかったものとして扱う、と書かれています。
2026年11月11日の時点で、npmの最新版は7.4.10(11月10日公開)です。7.4.7〜7.4.10の変更履歴に astro check の項目はありません。7.4.8ではCLIの引数の読み取り方が変わりましたが、7.4.10のソースでも、2つのパッケージが読み込めないときに失敗を返す処理は7.4.6と同じでした。ただし、7.4.7以降の版は動かしていません。
同じ条件で動かした結果
編集部の作業環境(Linux、Node.js 22.23.4)で、空のディレクトリに astro だけを入れたプロジェクトを2つ作りました。片方は7.4.5、もう片方は7.4.6です。ページは1枚で、const count: number = "not a number"; という、わざと型が合わない1行を入れています。各条件で1回ずつ実行しました。
| 条件 | 7.4.5 | 7.4.6 |
|---|---|---|
CI=true、2つのパッケージなし | 終了コード 0 | 終了コード 1 |
| CIの指定なし、標準入力なし、2つのパッケージなし | 終了コード 0 | 終了コード 0 |
| 2つのパッケージあり、型エラーあり | 終了コード 1 | 終了コード 1 |
| 2つのパッケージあり、型エラーなし | 終了コード 0 | 終了コード 0 |
CI=true のときの表示は、どちらの版でも同じでした。
To continue, Astro requires the following dependency to be installed: @astrojs/check. Packages cannot be installed automatically in CI environments.
[ERROR] [check] The `@astrojs/check` and `typescript` packages are required for this command to work. Please manually install them into your project and try again.
7.4.5は、この [ERROR] を表示したうえで終了コード0を返しました。ログを読めばエラーに気づけますが、&& でつないだ次の astro build は動き、ビルド全体は成功になります。7.4.6では同じ表示のあとに終了コード1で止まりました。

CIと判定されない環境では、まだ0で終わる
表の2行目は、7.4.6でも終了コード0でした。CIの環境変数がなく、標準入力もつながっていない状態で実行すると、Astroは「npm i @astrojs/check typescript を実行してよいか」という確認を表示し、答えを受け取れないまま終わります。このときの終了コードは、どちらの版も0でした。
ソースを見ると、CIかどうかの判定には ci-info というパッケージを使っています(packages/astro/src/cli/install-package.ts)。CIと判定されたときだけ、確認を出さずに「読み込めなかった」と扱います。今回の修正はこの経路の終了コードを直したもので、確認を出す経路は変わっていません。
ビルドを動かすサービスやスクリプトが、ci-info にCIとして認識される環境変数を設定しているかどうかは、サービスごとに異なります。編集部が試したのは、CI=true を付けた場合と、何も付けない場合の2通りだけです。自社のビルド環境でどちらになるかは、実際に確かめる必要があります。
TypeScript 7を入れると、型チェックは止まる
typescript の npm の最新版(latest)は、2026年11月11日時点で7.0.2です。一方、@astrojs/check の最新版0.9.12が対応する typescript は ^5.0.0 || ^6.0.0 です。
npm i @astrojs/check typescript を実行すると、npm はこの条件に合う6.0.3を選びました。7.4.6のプロジェクトで、あえて typescript@7.0.2 を入れて astro check を実行すると、次の表示とともに終了コード1で止まりました。
[ERROR] [check] astro check does not currently support TypeScript 7.0. To continue using astro check, install TypeScript 6 instead.
この表示は、2026年9月17日のコミット(cf5d72f)で加わったものです。表示の続きには、astro check は今後の版で非推奨になる予定であること、TypeScript 7.1以降で .astro ファイルの型を調べる試験的な方法として @astrojs/ts-content-mapper があることが書かれています。npmでは、7.1は2026年11月11日時点でまだベータ版(7.1.0-beta)です。TypeScriptの版を上げる計画があるサイトでは、型チェックの方法も合わせて見直すことになります。
パイプでつなぐと、エラーがあっても成功になる
7.4.6には、astro check | head のように出力を途中で閉じる読み手につないだとき、スタックトレースを出して落ちていた不具合の修正も入っています。編集部の環境では、7.4.5は Error: write EPIPE を表示して終了コード1、7.4.6は表示なしで終了コード1でした。
注意したいのは、パイプ全体の終了コードです。型エラーがある状態で astro check | tail -3 を bash -c で実行すると、パイプ全体の終了コードは0でした。bash -o pipefail -c で同じことをすると1です。パイプの終了コードは、pipefail がない限り最後のコマンドのものになるためです。
GitHub Actionsのワークフローの構文のドキュメントには、sh と bash には既定で set -e が付き、shell: bash を明示したときに -o pipefail も付く、と書かれています。ログを短くするために出力を加工する場合は、シェルの指定を確かめます。
自社のサイトで確かめること(編集部の提案)
ここからは、上の結果をもとにした編集部の提案です。
@astrojs/checkとtypescriptをpackage.jsonに明記する。実行時に入れてもらう前提にしない。弊社のコーポレートサイトは、この2つをdependenciesに入れています(package-lock.jsonの版は@astrojs/check0.9.10、typescript5.8.2)。devDependenciesに入れる場合は、型チェックを走らせる環境で開発用の依存が省かれていないかも確かめます。npmは、環境変数NODE_ENVがproductionのとき、既定で開発用の依存を入れません(設定omitの既定値がdevになる)。- Astroを7.4.6以降に上げる(2026年11月11日時点の最新は7.4.10)。
- ビルド環境で一度、わざと型エラーを入れたブランチを作り、ビルドが止まることを確かめる。「エラーが表示された」ではなく「次の工程に進まなかった」ことを見る。
astro checkの出力をパイプで加工しているなら、pipefailの有無を確かめる。- TypeScript 7へ上げる前に、型チェックの方法を決めておく。
AstroのCSPの修正で確かめたように、パッチ版でも挙動が変わる部分はあります。Astro 7.4.3のCSP修正の記事もあわせて参考にしてください。
確認した範囲
2026年11月7日に、withastro/astro の変更履歴(7.4.5〜7.4.7)、修正のコミット 402c0fa とそのテスト、
packages/astro/src/cli/check/index.ts・install-package.tsの現行の原稿、npm のレジストリのastro・@astrojs/check・typescriptの版の情報を確認しました(資料調査)。あわせて、編集部の作業環境(Linux、Node.js 22.23.4)で astro 7.4.5・7.4.6、@astrojs/check 0.9.12、typescript 6.0.3・7.0.2 を使い、上の各条件を1回ずつ実行しました(実機検証)。2026年11月11日に、変更履歴(7.4.10まで)と@astrojs/checkの変更履歴、7.4.10のソース、npm の版の情報、GitHub Actions のドキュメントを確認し直しました。astro.build のブログには、7.4.6の告知は見当たりませんでした。7.4.7〜7.4.10での実行、Windows・macOS、Cloudflare Workers Builds・GitHub Actions などのビルドサービス上での実行は試していません。
Astroのサイトのビルドや保守の仕組みづくりは、グリームハブの開発・AI・自動化のご相談で承っています。構成によって確かめる点が変わるため、お問い合わせからご相談ください。
参考資料
- withastro/astro — packages/astro/CHANGELOG.md
- withastro/astro — commit 402c0fa(Exit with code 1 when @astrojs/check or typescript packages are missing)
- withastro/astro — packages/astro/src/cli/check/index.ts
- withastro/astro — packages/astro/src/cli/install-package.ts
- npm — @astrojs/check
- npm Docs — config(omit)
- GitHub Docs — Workflow syntax for GitHub Actions(defaults.run.shell)









