#1 Goで学ぶ環境構築の基本
Go(Golang)は、Googleが開発したシンプルさと実行速度を両立した言語です。文法が読みやすく整理されているため、学習の最初でつまずきにくい言語のひとつと言われています。とはいえ、実際に手を動かしてみると「コマンドが見つからない」「go.modってどこに置くの?」といった小さなつまずきは誰にでも起こります。この記事では、Goの環境構築の手順に加えて、実際によく遭遇するエラーとその対処法、初心者が疑問に思いやすいポイントまで、少し踏み込んで紹介します。
Goのインストール
公式サイト(go.dev)からインストーラーをダウンロードして実行するだけで、環境構築が完了します。インストール後、ターミナルで次のコマンドを実行し、正しく入っているか確認しましょう。
go version
ここでバージョン番号(例: go version go1.22.0 windows/amd64)が表示されれば成功です。もし何も表示されずエラーになった場合は、次の「よくあるエラー」で原因を確認してみてください。
プロジェクトを作って実行する
Goでは、プロジェクトごとに`go.mod`という管理ファイルを作るのが基本です。フォルダを作成したら、その中で次のコマンドを実行します。
go mod init サンプル
あとは`.go`という拡張子のファイルにコードを書き、次のコマンドで実行するだけです。
go run ファイル名.go
コンパイルして実行ファイルを作る
`go run`はその場で実行するコマンドですが、配布用の実行ファイルを作りたい場合は次のコマンドを使います。
go build ファイル名.go
実行するたびにコンパイルし直す必要がなく、生成されたファイルをそのまま他のパソコンでも動かせるのがGoの強みです。
実際によく出会うエラーと対処法
ここからは、Go初心者が実際の画面でよく目にするエラーメッセージを取り上げます。エラー文をそのまま検索窓に貼り付けて調べる癖をつけると、原因の切り分けが早くなります。
「go: command not found」「'go' は、内部コマンドまたは外部コマンド...」
インストール自体は成功しているのに、ターミナルを開き直すと`go`コマンドが反応しないことがあります。これは、Goの実行ファイルがある場所(パス)が、OSの「どこにコマンドがあるか探す設定(環境変数PATH)」に登録されていないために起こります。多くの場合はインストーラーが自動で設定してくれますが、反映にはターミナルの再起動が必要です。一度ターミナルやPCを再起動しても直らない場合は、インストール時にPATH追加のチェックが外れていた可能性があるので、公式サイトのインストール手順を見直すとよいでしょう。
「go.mod file not found in current directory or any parent directory」
`go run`や`go build`を実行したときにこのエラーが出たら、そのフォルダ(またはその親フォルダ)に`go.mod`がまだ存在しないというサインです。Goのコマンドは「今どのプロジェクトの中にいるか」を`go.mod`の有無で判断しているため、`go mod init`を先に実行し忘れると発生します。一度`go mod init サンプル`を実行してから、もう一度コマンドを試してみてください。
「imported and not used: "fmt"」「declared and not used: x」
これはコードの中で読み込んだのに使っていないimportや、宣言したのに使っていない変数がある場合に出るエラーです。他の言語では警告どまりのことが多いのですが、Goではコンパイルエラーとして扱われます。最初は厳しく感じるかもしれませんが、「使われていないコードを残さない」というGoらしい設計思想の表れでもあります。該当のimportや変数を削除するか、実際に使う処理を書き足せば解消します。
「cannot find module providing package ...」
外部のライブラリ(パッケージ)をimportしたのに、まだ`go.mod`に登録されていないと出るエラーです。Goでは使いたいパッケージを一度`go get パッケージ名`で取得し、`go.mod`と`go.sum`という2つのファイルに記録する必要があります。`go.mod`が「どのパッケージのどのバージョンを使うか」という設計図、`go.sum`が「そのパッケージの中身が改ざんされていないかを確認するための記録」だとイメージすると分かりやすいです。
つまずきやすいポイント・よくある質問
手順どおりに進めていても、頭の中に「?」が浮かぶ瞬間は多いはずです。よくある疑問をQ&A形式でまとめました。
Q. 「モジュール」って結局なに?
ざっくり言うと、モジュールは「このプロジェクトが使う外部の部品(パッケージ)一式をまとめて管理する仕組み」です。`go mod init`を実行すると生成される`go.mod`ファイルに、プロジェクト名や使用するGoのバージョン、依存パッケージの情報がテキストで記録されます。これにより、別のパソコンで同じプロジェクトを開いても、同じ環境を再現しやすくなります。
Q. GOPATHの設定は今も必要?
以前のGoでは「GOPATH」という決まった場所にすべてのコードを置く方式が主流でした。現在はプロジェクトごとに`go.mod`で管理する「モジュールモード」が標準になっているため、初心者のうちはGOPATHを意識しなくても困ることはほとんどありません。古い記事や書籍でGOPATHの設定手順が出てきたら、「今はもう必須ではない、少し前の方式なんだな」くらいに捉えておけば十分です。
Q. エディタは何を使えばいい?
絶対の正解はありませんが、無料で使えてGo公式の拡張機能(Go extension)が用意されているVisual Studio Codeは、情報量が多く迷ったときに調べやすいという点で選ばれることが多い印象です。拡張機能を入れると、コード補完やエラーの下線表示、保存時の自動整形などが一通り揃うため、最初の一本を選ぶという意味では有力な候補になります。もちろん、使い慣れたエディタがあればそれを使いながら少しずつ慣れていくのでも問題ありません。
Q. 実行ファイルをダブルクリックしても動かない
`go build`で作った実行ファイルを別のパソコンに移して実行しようとした際、「開発元を確認できません」といった警告が出たり、Mac/Linuxでは「Permission denied」と表示されたりすることがあります。これはセキュリティ機能や実行権限の設定によるもので、Macなら`chmod +x ファイル名`で実行権限を付与する、Windowsならセキュリティの警告画面で許可する、といった手順が必要になる場合があります。
Goならではの注意点
Goには「使っていない変数やimportがあるとエラーになる」という、他の言語には見られない厳格なルールがあります。最初は面倒に感じるかもしれませんが、これは無駄なコードが増えるのを防ぎ、常に整理されたコードを保つための仕組みです。エディタの自動整形機能(`gofmt`)と組み合わせて使うと、書き方の癖に迷うことも少なくなります。
他の言語の環境構築と比べて
PythonやNode.jsに触れたことがある方は、「仮想環境(venv)」や「node_modules」のような、依存関係を切り分ける仕組みに馴染みがあるかもしれません。Goのモジュールも役割としては近い部分がありますが、大きな違いは「実行するときに何が必要か」です。PythonやNode.jsで書いたプログラムを他のパソコンで動かすには、そのパソコンにもPythonやNode.jsの実行環境が入っている必要があります。一方Goは`go build`で作った実行ファイルの中にすべてが詰め込まれているため、配布先のパソコンにGo自体が入っていなくても動かせます。どちらが優れているというよりは、「開発中の柔軟さ」を重視するか「配布のしやすさ」を重視するかで設計思想が違う、と捉えると理解しやすいでしょう。
まとめ
Goの環境構築は公式インストーラーを実行するだけで完了する、非常にシンプルなものです。`go run`でその場実行、`go build`で実行ファイル作成という2つの使い分けを覚えておくと、学習だけでなく実際の開発でもスムーズに使いこなせます。エラーに出会ったときは焦らず、エラーメッセージをよく読んで「go.modがあるか」「importや変数が使われているか」を確認する習慣をつけると、つまずきの多くはすぐに解決できるはずです。
本ページはプロモーションを含みます。
参考書籍(PR)
Goをもっと学びたい方には「Go言語入門」がおすすめです。
コメント
コメントを投稿