読んでいるページに貼られているリンクが使えなくなっていると、 少なからず不快な気持ちになってしまうものです。 しかし、リンク切れの確認には時間も手間も掛かるものです。

Contents

Jekyllのビルドリンク切れの確認GitLab schedulesで定期実行 することで、 面倒なリンク切れの確認を自動化できます。

現在、使用しているバージョンは下記のとおりです。

  • jekyll (4.1.1)
  • html-proofer (3.16)

HTML Proofer

Rubyライブラリの HTMLProofer は、 HTMLファイルを検証するためのオールインワンチェッカーです。 リンクの確認をはじめ、画像参照が正当か、ALTタグの確認などの テストが実行できます。

インストール

Gemfileに以下を追記しbundle installしてインストールします。

# Gemfile
group :test do
  gem 'html-proofer', '~> 3.16'
end

テストの実行

Jekyllのビルドを実行し、

bundle exec jekyll build --destination=./_site

生成されたサイトをテストします。

bundle exec htmlproofer ./_site --assume-extention

User-Agent

HTML Prooferのテスト時のUser-Agentです。

Mozilla/5.0 (compatible; HTML Proofer/3.15.3; +https://github.com/gjtorikian/html-proofer)

–typhoeus-configで User-Agentを変更できます。

オプション

HTML Prooferには様々な オプションが 用意されています。なかでも良く使いそうなものを挙げておきます。

  • --disable-external: 外部リンクの確認をしない

    デフォルトではテストのたびに外部リンクの確認を行うので、 繰り返しテストをする時には指定した方が良い。

  • --allow-hash-href: href="#"を無視する

    <a href="#">Back to top</a>などでhref="#"を使用している場合

  • --alt-ignore: alt属性の確認をしない (パターンで指定)

    alt属性の確認をさせたい 1 が、 アフィリエイトなどのリンクで編集したくない場合

  • --file-ignore: 特定のパターンのファイルのテストを行わない

    エラーの修正ができないファイルがある場合。 例えばGoogle Site VerificationのHTMLファイルをテストから除外したいなど

  • --check-html: HTMLの整合性のチェックを行う (デフォルトでは行わない)

    レイアウトの変更を頻繁に行っている場合

GitLab Suchedules

内部リンクなら、ページの名前を変更した時やサイトの構成を変更した時に リンクチェックをすれば良いのでしょうが、外部リンクのリンク切れについては 定期的に確認する他はありませんので、

GitLab Suchedules を使って HTML Prooferを定期的に実行します。

.gitlab-ci.yml

GitLab Suchedulesで実行するJobを.gitlab-ci.ymlに記載します。

image: jekyll/jekyll

variables:
  JEKYLL_ENV: production

test:
  stage: test
  before_script:
  - bundle install
  - JEKYLL_ENV=$JEKYLL_ENV bundle exec jekyll build --destination=./_site
  script:
  - bundle exec htmlproofer ./_site --assume-extention
  only:
  - schedules

Job の登録

リポジトリ 2 のサイドメニューから CI / CD > Schedules を開き、 New schedule でJobの登録ができます。

テストは外部リンクへのアクセスを伴ないますので、他のサイト運営者様に迷惑を かけないように適切な頻度を設定します。

テストの結果

テストに失敗するとGitLabに登録しているメールアドレスに 下記のようなタイトルのメールが届きますので、内容を確認して対応します。

myblog | Pipeline #193175828 has failed for master | ad09b00b

すべてのテストの結果は、リポジトリのサイドメニューから CI / CD > Pipelines で確認できます。

  1. alt属性の確認をしない場合は--empty-alt-ignoreを指定 

  2. GitLabではProject