様々な開発言語に適用できると思うので自分用にメモ。
読みづらいのは勘弁してください。
この記事では業務で開発しているGoのプロジェクト用に開発環境を構築していきます。
VSCodeの拡張機能Remote-Container
をインストール
Remote-Containerで設定ファイルを作成する。
一覧の中からGo用のDockerfileを作成するオプションを選択する。
以下の箇所を編集して、開発コンテナ内でpre-cimmit
を使えるようにします。
golangci-lintのインストールはすでにDockerfileに明記されていたので特に書き加えません。
### カスタマイズ
# pre-commit
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python \
&& pip install pre-commit
.pre-commit.yaml
を作成します。git commit
した際の設定を書いています。
ざっくりで言うと、
- jsonファイルのフォーマットの整形や有効性のチェック
- パスワードなどのGitに登録すべきでない情報がコミットされていないか?
- yamlのフォーマットの整形
- GoのLinterを複数まとめて実行
- Goのテストコードを実行
などがあります。
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.2.3
hooks:
- id: pretty-format-json
args: [--autofix, --no-ensure-ascii]
- id: check-json
- id: detect-private-key
- id: check-yaml
- repo: https://github.com/golangci/golangci-lint
rev: v1.23.8
hooks:
- id: golangci-lint
- repo: https://github.com/tekwizely/pre-commit-golang
rev: master
hooks:
- id: go-test-repo-mod
.golangci.yml
を作成します。
有効化しているLinterはこちらのGoogleのプロジェクトを参考にしました。
linters:
disable-all: true
enable:
- bodyclose
- deadcode
- dogsled
- goconst
- gocritic
- goimports
- golint
- goprintffuncname
- gosimple
- govet
- ineffassign
- interfacer
- maligned
- nakedret
- rowserrcheck
- staticcheck
- structcheck
- stylecheck
- typecheck
- unconvert
- unparam
- unused
- varcheck
- whitespace
ここまで設定したら開発用コンテナをビルドして立ち上げます。
立ち上がったら、
pre-commit install
を実行し、gitのコミットフックを作成させます。
(すでにローカル側でコミットフックを生成していた場合は不要)
設定は以上です。
あとはコードを書いてコミットする際にpre-commitが良い仕事をしてくれるようになります。