【golangci-lint】静的解析ツールgolangci-lintの使い方とインストール方法について【まとめ】
こんにちは!たけのこです。
今回は、Go言語の開発において必須とも言えるツール「golangci-lint」について詳しく解説します。
golangci-lintは、コードの品質向上やコーディングスタイルを統一させる際に
非常に役に立つツールです!
開発現場でもよく見かえるので、どんなツールなのか順番に紹介していきます!
- golangci-lintとは何か?
- golangci-lintの基本的な使い方
- golangci-lintのちょっと高度な使い方
では、早速行きましょう!
1. golangci-lintとは
golangci-lintとは、Go言語のコードを解析し、
さまざまなコード品質の問題を検出してくれるツールです。
複数のリンター(検出処理)を一つのコマンドで実行できるため、
1つひとつのコードを人が確認するよりも、
はるかに短い時間で指摘事項をまとめてくれます。
golangci-lintを導入するメリットをまとめると、以下の4つのような感じですかね!
- コードのスタイルチェック
- 潜在的なバグの検出
- パフォーマンスの向上提案
- コードの可読性向上
golangci-lintを使うことで、
その人自身だけにメリットがあるだけでなく、
プロジェクト全体の品質向上にも繋がりますので
導入しているプロジェクトもかなり多い印象ですね!
2.インストール方法
では、次にgolangci-lintのインストール方法について解説していきます。
現状、開発しているプロジェクトにインストールするには
以下のコマンドを実行します。
1go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
これだけで、インストール作業は完了です!
あとは、正しくインストールされたのか確認してみましょう!
1golangci-lint --version
このコードを再度ターミナルで実行して
バージョン情報が表示されれば、問題なくインストールされています!
3.使用方法
次に、基本的な使用方法ですね~
golangci-lintの使用方法もかなりシンプルです!
プロジェクトのルートディレクトリで以下のコマンドを実行すると
プロジェクト内全てのGoファイルがチェックされます
1golangci-lint run
特に検知されなければ、何も表示されずにすり抜けてしまいますが
もし、問題点が見つかれば、ターミナルに一覧で表示してくれます。
3-1.特定のファイルをチェック
特定のファイルだけをチェックしたい場合は、ファイル名を指定してあげると
そのファイルだけチェックしてくれます。
1// 実行例
2golangci-lint run path/to/file.go
4.設定ファイルの使用
golangci-lintでは、より細かい設定をすることもできます。
設定ファイル(.golangci.yml)をプロジェクトルートに作成し、
以下のように記述を追加してみましょう。
1# .golangci.yml
2linters:
3 enable:
4 - errcheck
5 - staticcheck
6
7
後は、以下のコードを実行して設定ファイルの内容をプロジェクトに反映させます。
1golangci-lint run --config .golangci.yml
5.主なチェック内容について
「いや…設定ファイルは分かったけど、どんな設定をしているのか全く分からん。。」
って感じだと思いますので
今回、例で設定したリンターの内容と
開発でよく使われるリンターについて、いくつか紹介していきます!
5-1.errcheck
まずは、例でも設定していたerrcheckです。
errcheckは、エラーハンドリングが漏れていないかをチェックします。
Goではエラーチェックが重要ですが、つい見逃してしまうこともありますので
このリンターで、そのような見逃しを防ぐことができます。
5-2.staticcheck
次も、例として設定ファイルに書いていた、staticcheckです。
staticcheckは、コードのバグや非効率なコードパターンを検出してくれます。
例えば、未使用の変数や定数、無意味な条件式などを検知して指摘してくれます。
5-3.gosimple
次は、gosimpleについてです。
gosimpleは、簡素化できるコードを検出します。
また検知するだけでなく、シンプルで効率的な書き方を提案します。
5-4.deadcode
お次は、deadcodeですね~
deadcodeは、使用されていないコードを検出します。
不要なコードはコードベースを複雑にしたり、無駄にメモリを喰ってしまうので
見つけ次第、潰していきたいコーディング不良の1つですね~
5-5.ineffassign
次にineffassignです!
ineffassignは、不要な変数への代入を検出します。
こちらもdeadcodeと同様に、コードのパフォーマンスを低下させる可能性があります。
5-6.goconst
goconstです。
goconstは、同じ文字列や数値リテラルが複数回使われている箇所を検出し、定数に置き換えることを提案します。
何度も使う数字などは定数にするだけで、誤った書き換えなどが発生せず
コードの保守性向上に繋がります。
5-7.gofmt
最後に、gofmtです。
gofmtは、コードのフォーマットをチェックします。
Go言語の標準的なフォーマットに従っていない箇所を報告し、一貫したスタイルを保っているかどうかのチェックをしてくれます!
主なリンターを紹介するとは書いたけど、
思いのほか多かった。。。
まとめ
といったような、golangci-lintの紹介でした!
名前だけ見ると難しそうに見えましたが、
- golangci-lintをインストール
- 設定ファイルを作成&反映
- golangci-lintの実行
という、たった3ステップで
コーディング不良チェックをしてくれる神ツールの紹介でした!
Go言語の勉強用プロジェクトなどに導入して使い方を
ぜひ勉強してみてください!
というわけで、今回はこの辺りで!ありがとうございました!