LoginSignup
7
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-23

動機

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

名前はliche

こんな感じで動きます

asciicast

機能

<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をギリギリまで上げるとパソコンをいじめられます。ぜひお試しください。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4