ツナ缶雑記

ぐうたらSEのブログです。主にマイクロソフト系技術を中心に扱います。

Markdown の linter を Azure Pipelines から実行する (GitHub Super-Linter を使う)

f:id:masatsuna:20210704195049p:plain

前回、 Azure Pipelines を使って Mkdocs を用いた静的サイトの生成を行いました。

tsuna-can.hateblo.jp

今回は、この Azure Pipelines の YAML をさらに拡張して、 Markdown ファイルの Linter を実行できるようにしていきます。

Linter とは

簡単に言うと、ソースコードフォーマットチェックを自動的に実行してくれるツールです。 特にチームで開発を行う場合、ソースコード開発時に、コードフォーマットのルールを定めることが良くあります。 そういったときに Linter を用いることで、ソースコードのフォーマットが開発者間で統一されているかどうかを自動的にチェックできるようになります。

Java の場合は CheckStyle .NET の場合は StyleCop など、Linter と呼ばれるものには、言語によってさまざまな種類があります。 今回対象とする Markdown の場合は、 Markdownlint が有名です。 Visual Studio Code の拡張機能 としても提供されていて、使い勝手も非常に良いものになっています。

チーム開発を行う場合、このような構文チェックを随時実行し続けることが非常に重要です。 随時実行する、ということは、 CI の中で構文チェックを自動的に実行し続けるようにしてあげる必要があります。 そうしないと、私のような怠惰な開発者は、故意かどうかは別として、フォーマット違反を無視してコミットしてしまうわけです。

Markdown の Linter を実行する手段

Mkdocs を利用すると、 MarkdownYAML ファイルを利用することになります。 チーム開発を考えたとき、これらのファイルについても Linter を適用したくなります。 そういったときに有用なツールが、 GitHub Super-Linter です。

github.com

このツールには、 GitHub Actions で実行するための様々な Linter が組み込まれています。 2021 年 7 月現在、 45 の言語に対応しています。

今回はこのツールを Azure Pipelines から実行して、 Markdown の Linter を実行しようと思います。

YAML の改造と実行

以前以下の記事で紹介した YAML を改造して、 mkdocs を実行する前に、 GitHub Super-Linter を実行するようにしていきます。

tsuna-can.hateblo.jp

GitHub Super-Linter は、 Docker 上で実行できるように、イメージが公開されています。 このイメージを Azure Pipelines 内で使うように構成し、GitHub Super-Linter を実行します。

pool:
  vmImage: ubuntu-latest

steps:
  - task: Bash@3
    displayName: 'GitHub Super-Linter によるスキャン'
    inputs:
      targetType: 'inline'
      script: |
        docker pull github/super-linter:latest
        docker run -e RUN_LOCAL=true -v $(System.DefaultWorkingDirectory):/tmp/lint github/super-linter

今回も前回同様、 ubuntu-latest のマシンを使用してパイプラインを実行します。 GitHub Super-Linter を実行するタスクは非常にシンプルで、上記のように docker イメージをプルして実行するだけです。 YAML をこのように設定して、 markdownlint で警告の出る状態の markdown をコミットし、パイプラインを実行してみます。

f:id:masatsuna:20210704174334p:plain

実行すると、このように markdownlint の警告が報告され、パイプライン自体がエラーで終了するようになります。 この例では、 markdownlint のルール MD025 に違反する Markdown ファイルをコミットしてみました。 しっかりその部分を認識して、エラーを通知してくれています。

GitHub Super-Linter の Docker イメージに関する詳細は、以下をご覧ください。

super-linter/run-linter-locally.md at master · github/super-linter · GitHub

環境変数を使って、いろいろ設定を変更することができます。 docker run コマンドに、 -e または -env オプションをつけると環境変数を設定することができるので、ほとんどのケースでイメージを再作成する必要はありません。

サンプルソースについて

本稿で解説したソースコード一式は、 GitHub で公開しています。

github.com

まとめ

今回は GitHub Super-Linter を利用して、 Markdown の Linter を Azure Pipelines から実行する方法について解説しました。 個別の Linter を準備するより手間なく適用できる点も魅力的なポイントですね。

また GitHub Super-Linter は、様々なファイル形式に対応しており、 Markdown 以外にもいろいろな Linter を一括で実行することができます。 Docker 上で実行できるため、ローカル開発環境でも利用できるメリットがあります。 うまく開発プロセスに組み込むことで、チーム開発に役立てることができそうですね。