LoginSignup
2
0

More than 1 year has passed since last update.

Super Linter は Slim Image を使おう

Last updated at Posted at 2022-07-07

はじめに

使ってますか 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 の実行結果を見ることができます

スクリーンショット 2022-07-06 13.06.17.png

左にジョブの一覧が表示され、ジョブを選択すると、ジョブ内の各ステップが右側に表示されます

ステップ毎に右端に表示されているのが実行時間です

Super Linter の場合、 Pull ghcr.io/github/super-linter:xxxLint 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 はそもそも未対応 :sweat_smile:
Elixir をチェックする場合は個別に GitHub Actions を組むしかありません

ついでに言うと、 Swift も未対応 :cry:

Slim Image の使用方法

使い方は簡単

GitHub Actions の設定ファイルを1行変更するだけです

  • 変更前
        uses: github/super-linter@v4
  • 変更後
        uses: github/super-linter/slim@v4

@ の前に /slim を追加するだけで、 Slim Image を使用できます

Slim Image の効果測定

実際に Slim Image を使ってみました

  • 通常

NotSlim.png

  • Slim Image

Slim.png

なんと 2 分 13 秒も Pull の時間が短縮されました

半減以下です

100 回実行すれば 200 分も差が出ます

チェックを待つ時間が短縮されれば、開発効率も上がります

おわりに

以前から Slim Image の存在は知っていたものの、まだ使っていなかったので、
今回使ってみて効果の大きさに驚いています

機械を見て既存リポジトリーの Super Linter を Slim に変えていこうと思います

2
0
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
2
0