検証
blume validate はコンテンツ内のすべてのリンク(ページ、アンカー、アセット、オプションで外部 URL)をチェックし、壊れたリンクがあれば CI を失敗させます。
blume validate はビルドと同じ方法でコンテンツを読み込み、見つかったすべてのリンクをチェックします。何も生成・ビルドしないため、blume build の前に置く高速なゲートとして使えます。
blume validate
- 内部ページリンク(
/guides/intro、./sibling)は、実在するページに解決される必要があります。壊れたリンクはエラーとして報告されます。コンポーネントの文字列のhref(<Card href="./install">)も同じようにチェックされますが、href={…}式はチェックされません。 - アンカーリンク(
#section、/guides/intro#setup)は、リンク先ページのアンカーと一致する必要があります。アンカーとは、見出しの id(自動生成されたもの、または固定したもの)か、生の HTML 要素のid属性のことです。一致しないものは警告として報告されます。コードブロック、インラインコード、HTML コメント、<Prompt>ブロック内の id は対象外です。 - アセットリンクは、ファイルの置き場所に応じてチェックされます。絶対パス(
/logo.png)はpublic/ディレクトリを基準に、相対パスの画像埋め込み()はそのページ自身のフォルダーを基準にチェックされます。相対パスへの通常のリンクは、引き続きサイトのルートとして解決されます。画像パイプラインを通るのは画像埋め込みだけです。 - 外部リンクは
--externalを指定した場合にのみチェックされます(ネットワークが必要なため、デフォルトではオフです)。リンク切れ(404/410/到達不能)はエラーになり、レート制限や一時的なレスポンス(403/429/5xx/タイムアウト)は警告になります。
ページとして扱われるもの
リンクは Markdown ページだけでなく、ビルドされたサイトが配信するすべてのものに対して解決されます。対象には、カスタムの .astro ページ、生成された変更履歴のインデックス、設定されたすべてのリダイレクトが含まれます。多言語サイトでは、未翻訳ページが各ロケールで使うフォールバック URL も含まれます。パースに失敗したページは、リンクの検出結果と一緒に報告されます。読み込まれないページは問題のない結果ではなく、リンク検証の死角になるためです。
フラグ
--external— 外部のhttp(s)リンクもネットワーク経由でチェックします。--strict— 警告があった場合も 0 以外のコードで終了します。info レベルの通知は、引き続き参考情報として扱われます。--json— 診断結果をターミナル向けのレポートではなく、JSON として stdout に出力します。
診断
| コード | 重大度 | 意味 |
|---|---|---|
BLUME_BROKEN_LINK |
error | 内部リンクが、どのページも配信していないルートを指しています。 |
BLUME_BROKEN_ANCHOR |
warning | ページは存在しますが、フラグメントに一致するアンカーがありません。 |
BLUME_BROKEN_ASSET |
warning | 絶対パスのファイルが public/ に存在しないか、相対パスで埋め込んだ画像がページと同じフォルダーにありません。 |
BLUME_ASSETS_UNCHECKED |
info | public/ ディレクトリがないため、絶対パスのアセットはチェックされませんでした。 |
BLUME_DEAD_LINK |
error または warning | 外部リンク(--external 指定時)が 404/410 を返したか到達不能だった(error)、または一時的な 403/429/5xx/タイムアウトだった(warning)ことを示します。 |
判定の基準になるのは終了コードです。エラーがあると 0 以外のコードで終了し、--strict を指定すると警告でも同様に終了します。
JSON 出力
--json を指定すると、blume validate(および blume doctor)は 1 つのオブジェクトを stdout に書き出します。このオブジェクトには、diagnostics リストと、重大度ごとの件数をまとめた summary が含まれます。diagnostics の各エントリには、code、severity、message、suggestion、そのコードを説明するページを指す docsUrl、そしてプロジェクトルートからの相対パスである file が含まれます。検出結果に位置情報がある場合は、line と column も含まれます。終了コードは変わらないため、同じ呼び出しを CI のゲートとエディター連携の両方に使えます。