go

【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の紹介でした!

名前だけ見ると難しそうに見えましたが、

  1. golangci-lintをインストール
  2. 設定ファイルを作成&反映
  3. golangci-lintの実行

という、たった3ステップ

コーディング不良チェックをしてくれる神ツールの紹介でした!

Go言語の勉強用プロジェクトなどに導入して使い方を

ぜひ勉強してみてください!

というわけで、今回はこの辺りで!ありがとうございました!

スポンサーリンク
ABOUT ME
たけのこ
たけのこ
自由奔放エンジニア
現役でエンジニアをやっています! 開発現場で経験したコーディング実装例、実装アーキテクチャの解説などを記事に書き起こしています!
記事URLをコピーしました