【Go言語学習|豆知識】Go開発の必須作法!「go fmt」でコードの美しさと品質を保つ方法

導入

Go言語での開発において、コードの「見た目」はチーム全体の生産性に直結します。開発者によってインデントや改行のルールが異なると、コードレビュー時に本質的ではない「スタイルの修正」に時間が割かれてしまいます。これを解決するのが標準ツール「go fmt」です。本記事では、なぜGoがコードの整形を言語仕様レベルで重視しているのか、その仕組みと活用方法を解説します。

基礎知識

「go fmt」は、Go言語が提供する標準のソースコード整形ツールです。最大の特徴は、独自のスタイル設定(eslintやprettierのような複雑な設定ファイル)が存在しないことです。「Goの公式スタイルこそが唯一の正解」という哲学のもと、全Goエンジニアが同じルールでコードを書くことを強制します。

内部的には「AST(抽象構文木)」という仕組みを利用しています。ASTとは、ソースコードをプログラムが理解できる「木構造」に変換したデータのことです。go fmtはこのASTを解析し、構造を維持したまま、Goの標準規約に従ってソースコードを再出力(再生成)することで、完璧な整形を実現しています。

実装/解決策

開発現場では、手動でコマンドを打つのではなく、エディタの保存時(OnSave)に自動実行させるのが一般的です。これにより、「整形を忘れる」というミスを物理的に排除できます。

・VS Codeの場合:設定(settings.json)に “editor.formatOnSave”: true を追加するだけで自動化されます。
・コマンドラインの場合:プロジェクト直下で go fmt ./… を実行することで、配下の全パッケージを再帰的に整形可能です。

サンプルプログラム

以下のコードは、あえてインデントを崩した状態です。これを「go fmt」に通すことで、自動的にGoの標準スタイルへ変換されます。

// 整形前の乱れたコード例
package main
import “fmt”
func main() {
val := 10
if val > 5 {
fmt.Println(“値は5より大きいです”)
}
}

// — go fmt 実行後の結果 —
package main

import “fmt”

func main() {
// インデントが自動的に適切なタブ幅に調整されます
val := 10
if val > 5 {
fmt.Println(“値は5より大きいです”)
}
}

応用・注意点

現場で役立つ補足として、より厳密なチェックを行いたい場合は「goimports」の利用を推奨します。goimportsは、go fmtの機能に加えて「不要なインポートの削除」や「不足しているパッケージの自動追加」まで行ってくれます。

また、陥りやすい注意点として、「生成コード(Protobufなど)」に対してgo fmtをかける際は注意が必要です。自動生成されたコードを書き換えると、次回の生成時に差分が発生してしまいます。必要に応じて、.gitignoreやフォーマット対象外設定を活用し、手書きのコードのみを対象にする運用を心がけましょう。チーム開発では、CI環境でも go fmt -l . を実行し、整形漏れがある場合にエラーを出すように設定するのが、クリーンなコードベースを維持する秘訣です。

コメント

タイトルとURLをコピーしました