Go言語でMarkdown・HTMLのリンクを爆速チェックするコマンド書いた


動機

ReadmeとかドキュメンテーションとかよくMarkdownで書くと思いますが、リンクが切れてないか手作業で点検するのがだるいので自動チェックするコマンド書きました。爆速です(当社比)。

名前はliche

こんな感じで動きます

機能

<a/>href<img/>src属性に指定されているURLに対してHTTPリクエストを送りチェックします。相対パスや絶対パスもチェックできますが、絶対パスをチェックするときはドキュメントルートディレクトリの指定が必要です。

他の機能としては、

  • 再帰的にディレクトリを廻ってMarkdown・HTMLファイルを探す
  • HTTPリクエストの並列度を調整する
  • HTTPリクエストのタイムアウトを設定する
  • チェックが成功したリンクも表示する

などです。

> liche --help
Link checker for Markdown and HTML

Usage:
    liche [-c <num-requests>] [-d <directory>] [-r] [-t <timeout>] [-v] <filenames>...

Options:
    -c, --concurrency <num-requests>  Set max number of concurrent HTTP requests. [default: 512]
    -d, --document-root <directory>  Set document root directory for absolute paths.
    -r, --recursive  Search Markdown and HTML files recursively
    -t, --timeout <timeout>  Set timeout for HTTP requests in seconds. Disabled by default.
    -v, --verbose  Be verbose.

実装

  • Markdown・HTMLファイルを探す処理
  • ファイル内のURLをチェックし結果をまとめる処理
  • URLをチェックする処理

の3つの処理をgoroutineで並列に回し、channelでつなげています。これによって上のターミナルキャプチャのようにチェックが終わったファイルの結果がどんどん表示されていきます。

まとめ

Markdown・HTMLファイル内のリンクを爆速チェックするコマンドlicheを書きました。CIとかで走らせるのが手間もかからずよいと思います。

また、ulimit -nでリミット解除し、--concurrencyをギリギリまで上げるとパソコンをいじめられます。ぜひお試しください。