ブログ記事にリンク切れがないかチェックする GitHub Action を定期実行するようにしてみました。
使ったのは、Lychee Broken Link Checker です。Markdown、HTMLやテキストファイルに含まれるリンクをチェックしてくれます。リンク切れがあると、Issue を作成するように設定できます。やり方は、Usage にある通り、リンクをチェックしたいレポジトリに GitHub Action のワークフローファイルを作成します。
ワークフローの作成
リポジトリの .github/workflows/ ディレクトリに、以下の内容を任意のファイル名(例: check-links.yml)で配置します。
ワークフローの解説
このワークフローは、4つのステップで実行されます。
Step 1: コードのチェックアウト
actions/checkout を使い、リポジトリのコードを読み込みます。
Step 2: 認証トークンの生成 (オプション)
actions/create-github-app-token を使い、このワークフロー専用の認証トークンを生成します。
このステップはオプションです。
GITHUB_TOKEN(GitHub が自動で提供するトークン)の代わりに GitHub App のトークン を使うことで、GitHub App(例: MyLinkCheckBot)の名義で実行することができます。
Step 3: リンクのチェック (lychee-action)
lycheeverse/lychee-action を使って、リンクチェックを実行します。
-
args: 'content/**/*.md'lycheeにスキャン対象のファイルを指定します。ここでは、content/ディレクトリ配下の Markdown ファイルに限定しています。 -
fail: falseリンク切れを検出してもワークフローを「失敗」扱いせず、停止させないための設定です。リンク切れが見つかっても、必ず後続の Step 4(Issue 作成)が実行されるようになります。
Step 4: Issue の作成 (連携)
peter-evans/create-issue-from-file を使い、Step 3 の結果を Issue として投稿します。
-
if: steps.lychee.outputs.exit_code != 0「Step 3(id: lychee)の実行結果(outputs.exit_code)が0以外(=リンク切れがあった)の場合のみ、このステップを実行する」という条件分岐です。 -
content-filepath: ./lychee/out.mdlychee(Step 3) が出力したレポートファイル (./lychee/out.md) を、Issue の本文として使用します。
まとめ
記事が増えてくると、外部サイトの閉鎖や URL 変更によるリンク切れは避けられません。このワークフローを導入することで、ブログの品質維持に非常に役立ちます。