最近発表されたGithubチームが開発しているsuperlinter
ちょっと記事だけでわかりにくかったので試してみました
TL;DR
- Github Actionsで実行するよ
- 実行したいlinterだけ選ぶこともできるよ
- 設定ファイルをリポジトリに置けば、linterがそのルールで実行するよ
super linterとは
Githubチームが開発した、複数linterを実行してくれます
リポジトリはこちら↓
https://github.com/github/super-linter
方法
- Github Actions
- dockerのimageが用意されているので、そのイメージをプルしてローカルで試す
今回はGithub Actionsで試しました
実行するには
Github Actionsにファイルを置いてプッシュするだけ
テンプレを置いてくれてます↓
###########################
###########################
## Linter GitHub Actions ##
###########################
###########################
name: Lint Code Base
#
# Documentation:
# https://help.github.com/en/articles/workflow-syntax-for-github-actions
#
#############################
# Start the job on all push #
#############################
on:
push:
branches-ignore:
- 'master'
###############
# Set the Job #
###############
jobs:
build:
# Name the Job
name: Lint Code Base
# Set the agent to run on
runs-on: ubuntu-latest
##################
# Load all steps #
##################
steps:
##########################
# Checkout the code base #
##########################
- name: Checkout Code
uses: actions/checkout@v2
################################
# Run Linter against code base #
################################
- name: Lint Code Base
uses: docker://github/super-linter:v2.2.0
env:
VALIDATE_ALL_CODEBASE: false
VALIDATE_ANSIBLE: false
とりあえず実行させてみよう
基本的に、実行させる・させたくないは、環境変数で選択するようですね
今回実行させたファイルは下記です。
name: Super Lint Code Base
# Documentation:
# https://github.com/github/super-linter
on:
push:
branches-ignore:
- 'master'
- 'production' #やる必要のないブランチがあれば追記しましょう
jobs:
build:
name: Lint Code Base
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Lint Code Base
uses: docker://github/super-linter:v2.2.0
env:
VALIDATE_ALL_CODEBASE: true
VALIDATE_ALL_CODEBASE
の環境変数ですべてのファイルがlint対象にしました
VALIDATE_ALL_CODEBASE: true
=> 全ファイルがlint対象
VALIDATE_ALL_CODEBASE: false
=> 変更・新規作成ファイルのみがlint対象
すべてlintにかける必要なければ、false
にしましょう
すべて実行された結果、
Typescript200個弱、mdファイルなど合わせて300個ぐらいで、38分かかってました
2回目以降は新規・変更対象のみ&linterを絞って実行してみると、19秒ぐらいで終わっていて、
そのブランチの変更したファイルだけが、linterにかけられてました
~(省略)
- name: Lint Code Base
uses: docker://github/super-linter:v2.2.0
env:
VALIDATE_ALL_CODEBASE: false
VALIDATE_YAML: true
VALIDATE_JSON: true
VALIDATE_MD: true
VALIDATE_TYPESCRIPT_ES: true
VALIDATE_DOCKER: true
ACTIONS_RUNNER_DEBUG: true
カスタムしたいときはどうするか
各linterの設定ファイルを読み取って実行してくれているようです
eslintであれば、.eslintrc.yml
とか。
linterのconfigファイルのテンプレも置いてくれてます↓
https://github.com/github/super-linter/tree/master/TEMPLATES
感想
ただdockerで複数のlintを実行しているだけですが、これは自分にとって新しい視座を与えてくれました
今まで、なにかプロジェクトを始める時、ハンズオンを行う時、コードを書き始める前、prettierだったり、eslint、dockerをこしらえる時間もだんだんと多くなってきました
しかし、この考え方・実行方法にのっとれば、設定ファイルだけあれば、node_modules
などローカルにインストールされていなくても、CIで実行できますね
linterやfomatterは即時性が大事ですが、最悪pushをされないようにするには
CIの実装だけでまずはいいはずで、Github Actionsのファイルとlintの設定ファイルあれば、スモールスタートを切れるような世界がくるのかな・・・
ローカルの開発はVSCodeのみで、開発を補助するコンテナが立ち上がり、Gitのライフサイクルにのっとって、コンテナが立ち上がり、実行されるとか。そして、今やlintにかけるべきものがたくさんあるってことなんですね〜