はじめに
「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」、記念すべき1日目は、Goのpackageやmoduleについての理解を深めます。
さて...私自身、Goの環境構築が済んで、とりあえずコードを動かしてみたい!と思ったものの、コードの動かし方がわからず、諦めてしまった経験があります...(笑)
動かし方を調べて、とりあえず「Hello Worldしよう!」としたのですが、go mod init や package main といったフロントエンド勢の見慣れない構文が登場し、ただコマンドをなぞるだけになってしまった記憶もあります(笑)
この記事では、Goのmoduleやpackageを意識しつつ、Goの世界に「Hello World」する方法をコード付きで解説して、振り返ってみようと思います。
- Go言語の環境構築は終えたけれど、次のステップがわからない方
-
go runはできるけれど、プロジェクトの始め方やファイルの作り方に迷っている方 - JavaScriptの
package.jsonのように、Goのプロジェクト管理がどうなっているか知りたい方
私が見事に上記に当てはまったので、ぜひ同じように悩んでいる方の学びになれば幸いです。
packageとmoduleってなに?
Goのコードを正しく動かすためには、「パッケージ」と「モジュール」という2つの概念を理解することが不可欠です。
JavaScriptでも「パッケージ」と「モジュール」という概念はありますが、Goでの概念とどう違うのか、具体的に見ていきます。
パッケージ (package) とは?
A Tour of Go には以下のように定義されていました。
Every Go program is made up of packages.
Programs start running in packagemain.
つまり「パッケージ」は、全てのGoにおけるプログラムが属する単位だと言えます。
同じディレクトリにあるGoファイルは、同じパッケージに属します。
「フォルダ=パッケージ」と思っていいみたいです。
Goでは、package main が特別です。このパッケージに含まれる main 関数 (func main()) は、プログラムの実行が開始されるエントリーポイントとなります。実行可能なプログラムを作るには、必ず package main と func main() のペアが必要です。
モジュール (module) とは?
公式の考え方は、以下でした。
A module is a collection of packages that are released, versioned, and distributed together. Modules may be downloaded directly from version control repositories or from module proxy servers.
「モジュール」は、関連するパッケージの集合体です。
イメージするなら「GitHubのリポジトリ=モジュール」が近いと思います。
プロジェクト全体のサードパーティーのライブラリ管理を行ったりする単位も「モジュール」です。
go.mod ファイル: go mod init コマンドでプロジェクトを初期化すると、go.mod というファイルが作成されます。このファイルにはモジュールの名前や、プロジェクトが依存する他のモジュールとそのバージョン情報を記録されます。Node.jsで例えると package.json のような役割を果たします。
ちなみに...JavaScriptは、ファイルの単位をモジュール、配布物の単位をパッケージと扱うそうなのですが、GoやJavaなどのバックエンド言語は呼び方が逆みたいなので、混同しないように気をつけたいです。
【実践】 Goプロジェクトを始めよう
それでは、実際にGoのプロジェクトを立ち上げて、「Hello, World」を実行していきます。
ここでは、Goの開発環境が揃っていることを前提とします。
まだの方は、公式サイトなどからインストールを済ませてください。
(個人的には、Goのバージョン管理ツールなどを介するのがおすすめです)
STEP 1:プロジェクトディレクトリの作成
まず、ソースコードを保存するためのディレクトリを作成し、そのディレクトリに移動します。
# どこか好きな場所にプロジェクトディレクトリを作成する
mkdir -p ~/go-dev/hello-world
cd ~/go-dev/hello-world
STEP 2:Goモジュールの初期化 (go mod init)
次に、このディレクトリをGoのモジュールとして初期化します。
ターミナルで以下のコマンドを実行してください。
# "hello-world" という名前のモジュールとして初期化する
go mod init hello-world
go mod init の後ろに指定する hello-world は、このモジュールの名前(モジュールパス)です。将来的にはGitHubのリポジトリ名(例: github.com/username/hello-world)などを指定することが一般的です。
このコマンドを実行すると、ディレクトリ内に go.mod というファイルが作成されます。
中身は以下のようになっているはずです。
module hello-world
go 1.21.5
(Goのバージョンは個々の開発環境によって異なります)
これで、「モジュール」の作成ができました!
STEP 3: "Hello, World!"コードの作成 (main.go)
次に、実行するGoのソースファイルを作成します。main.go という名前でファイルを作り、以下のHello, World!コードを記述していきましょう。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
-
package main: 前述の通り、エントリーポイントが含まれる最初のパッケージです -
import "fmt":fmtという名前の標準ライブラリ(パッケージ)をインポートしています -
func main(): プログラムが実行されたときに、最初に呼び出される関数(エントリーポイント)です
STEP 4: コードの実行 (go run)
コードを保存したら、ターミナルで以下のコマンドを実行してプログラムを動かしてみましょう。
go run main.go
ターミナルに「Hello, World!」と表示されれば成功です!!
go run コマンドは、ファイルのコンパイルと実行を一度に行なってくれます。
VS Codeで開発環境をさらに快適にするには
Go Team at Googleが提供している公式のVS Code拡張機能は、予測変換や文法エラーが表示されて、とても便利です。
おわりに
本記事では、Go言語のプロジェクトを動かす上で不可欠な「パッケージ」と「モジュール」の概念について解説し、実際に「Hello World」プログラムを実行するまでを体験しました。
今までなんとなくの概念で終わらせていたpackageやmoduleの理解を深めていくことができて、私も勉強になりました。
最後までお読みいただき、ありがとうございました!
この「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」では、GoやJavaを使い、APIの作り方、データベースとの接続、テストやDockerといった気になったバックエンド技術の基本を振り返った学びを共有しています。
ぜひ他の記事もチェックして、筆者がこのひとりアドカレを完遂することができるか、確認してみてください(^^)
学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025
それでは、明日の「学生ひよこ界隈が送るGo/Javaで実現する「はじめてのバックエンド」Advent Calendar 2025」の記事もお楽しみに!
参考文献
