本文へ移動
技術を、自社の仕事に。
判断と実行を助けるメディア

記事を検索

astro checkが型を見ずに成功していた 7.4.6の修正を試す

目次 · 8項目

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 check exiting with code 0 when @astrojs/check or typescript is 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.57.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で止まりました。

astro checkの終了コードの比較図。CI=trueで2つのパッケージがないとき、7.4.5は0、7.4.6は1を返す。CIと判定されず、標準入力もないときは、どちらの版もインストールの確認の表示で止まり0を返す。パイプでつなぐと、pipefailがない限りパイプ全体の終了コードは後ろのコマンドのものになる

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 も付く、と書かれています。ログを短くするために出力を加工する場合は、シェルの指定を確かめます。

自社のサイトで確かめること(編集部の提案)

ここからは、上の結果をもとにした編集部の提案です。

  1. @astrojs/check と typescript を package.json に明記する。実行時に入れてもらう前提にしない。弊社のコーポレートサイトは、この2つを dependencies に入れています(package-lock.json の版は @astrojs/check 0.9.10、typescript 5.8.2)。devDependencies に入れる場合は、型チェックを走らせる環境で開発用の依存が省かれていないかも確かめます。npmは、環境変数 NODE_ENV が production のとき、既定で開発用の依存を入れません(設定 omit の既定値が dev になる)。
  2. Astroを7.4.6以降に上げる(2026年11月11日時点の最新は7.4.10)。
  3. ビルド環境で一度、わざと型エラーを入れたブランチを作り、ビルドが止まることを確かめる。「エラーが表示された」ではなく「次の工程に進まなかった」ことを見る。
  4. astro check の出力をパイプで加工しているなら、pipefail の有無を確かめる。
  5. 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・自動化のご相談で承っています。構成によって確かめる点が変わるため、お問い合わせからご相談ください。

参考資料

この記事を共有XFacebook
鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

この記事のテーマを、自社の次の一歩へ

Webサイトで、実現したいことから。

使う人の目的、必要な機能、更新の体制を整理し、制作・改善で最初に取り組むことを考えます。

  • サイトの目的
  • 機能と使いやすさ
  • 公開後の運用
Web制作・改善を相談する

構想段階からご相談いただけます。この記事の情報を相談フォームに引き継ぎます。

最新記事をメールで受け取る・Web制作ガイドを読む
無料ダウンロード

Web制作 費用・発注・集客 完全ガイド【2026年版】

費用相場・制作会社の選び方・集客戦略をPDFにまとめました。

The PDF and newsletter emails are currently in Japanese.

メルマガにも登録されます。いつでも解除可能です。