はじめに
使ってますか Super Linter
私の記事で何度も紹介していますが、
GitHub Actions でありとあらゆる静的解析を実行してくれる、頼もしいツールです
ざっくり説明すると、
汚いコードや潜在バグらしきコード、リスクのあるインフラ設定などをチェックし、
リポジトリーの品質を保ってくれるツールです
リポジトリーの .github/workflows/lint.yml
に以下のような設定をすることで、
プルリクエスト作成時に自動チェックが実行され、悪いコードが含まれる場合はマージを阻止できます
---
name: lint
on: [pull_request]
jobs:
super-lint:
name: Lint Code Base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Install Modules
run: yarn
- name: Lint Code Base
uses: github/super-linter@v4
env:
VALIDATE_ALL_CODEBASE: false
VALIDATE_ANSIBLE: false
LINTER_RULES_PATH: .
DEFAULT_BRANCH: main
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
eslint や pylint などなど、各言語の Linter をどんどん追加しているため、
特に細かい指定をせずとも標準的なチェックを実行してくれます
(必要であれば細かくカスタマイズ可能)
Super Linter を導入しているか否かで、コードの品質(主に可読性)がかなり違ってきます
Public リポジトリーならいくらでも無料で使える上、 Private であっても 毎月 2,000 分までは無料です
宣伝はここまでにして、今回は更にお得に Super Linter を使う方法を紹介したいと思います
Super Linter の実行時間
プルリクエストや、リポジトリーの Actions タブから Super Linter の実行結果を見ることができます
左にジョブの一覧が表示され、ジョブを選択すると、ジョブ内の各ステップが右側に表示されます
ステップ毎に右端に表示されているのが実行時間です
Super Linter の場合、 Pull ghcr.io/github/super-linter:xxx
と Lint Code Base
に時間が掛かっています
Pull ghcr.io/github/super-linter:xxx
は Super Linter のコンテナ(実行環境)を Pull してきています
Lint Code Base
がチェックの実行です
「チェック自体」(1m5s)よりも「チェック用のコンテナ準備」(3m27s)の方に多く時間が掛かっています
なぜ時間が掛かるのか
Super Linter はありとあらゆる言語のチェックを行うため、そのコンテナ内に様々な言語の実行環境を含んでいます
その結果、コンテナのサイズが圧縮状態で 1.91 GB 、展開状態で 6.48 GB と巨大になっており、
それを Pull するだけでもかなり時間が掛かっているのです
毎月 2,000 分は無料で使えますが、それを超過すると追加購入するまで GitHub Actions を動かせません
1回あたり 4 分の場合、 500 回 Super Linter を実行できる計算です
500 回と言うと多いような気がしますが、業務で 10 リポジトリー並列開発している場合、
1ヶ月にそれぞれ 50 回というのは少な過ぎます
1日に 2,3 回しかプルリクエストが投げられません
当然、 GitHub Actions が実行中の間はマージできないため、待ち時間も発生してしまいます
Super Linter の実行時間は短いに越したことはなく、特に Pull している時間はもったいないわけです
Slim Image
Slim Image はその名の通り、一部の Linter を削ることでスリムになったコンテナイメージです
実際に Docker で Pull してみると、 Slim Image は 2.32 GB も軽量化されています
$ docker image ls | grep super
github/super-linter slim-v4.9.4 e0060ce4f379 5 weeks ago 4.16GB
github/super-linter v4.9.4 d9a6dce41feb 5 weeks ago 6.48GB
ただし、削られた Linter を使っているリポジトリーでは、
チェックができなくなるので Slim Image は使用できません
- rust linters
- dotenv linters
- armttk linters (Azure Resource Manager = Azure の IaC)
- pwsh linters (PowerShell)
- c# linters
私の場合、フロントエンドは JS 、バックエンドは Python がメインなので、
注意するのは Rust を使うときくらいです
ちなみに Elixir はそもそも未対応
Elixir をチェックする場合は個別に GitHub Actions を組むしかありません
ついでに言うと、 Swift も未対応
Slim Image の使用方法
使い方は簡単
GitHub Actions の設定ファイルを1行変更するだけです
- 変更前
uses: github/super-linter@v4
- 変更後
uses: github/super-linter/slim@v4
@
の前に /slim
を追加するだけで、 Slim Image を使用できます
Slim Image の効果測定
実際に Slim Image を使ってみました
- 通常
- Slim Image
なんと 2 分 13 秒も Pull の時間が短縮されました
半減以下です
100 回実行すれば 200 分も差が出ます
チェックを待つ時間が短縮されれば、開発効率も上がります
おわりに
以前から Slim Image の存在は知っていたものの、まだ使っていなかったので、
今回使ってみて効果の大きさに驚いています
機械を見て既存リポジトリーの Super Linter を Slim に変えていこうと思います