今回はGolangでパッケージ管理をする方法についてご紹介します。Golangではgo get
のコマンドでライブラリをインストールしてimportするだけで手軽に外部ライブラリを利用できます。これらのライブラリを管理するツールとして標準でModulesというものが用意されています(バージョン1.11以上)。Node.jsのnpmやPythonのpipにあたるものです。実際の例と一緒にやっていきましょう。
Go Modulesが便利な理由
まず始めにGo Modulesが便利な理由について説明します。Golangはフレームワークなどを用いなくてもWebサーバーの立ち上げやアプリの作成ができるほど標準ライブラリの機能が高く、外部ライブラリも充実しています。しかし、複数のプロジェクトを立ち上げて、それぞれで異なるライブラリを使用している際や、チーム開発をして使用するライブラリとそのバージョンを統一する際にライブラリが複数あると混乱を招きかねません。そこで、ライブラリを管理するGo Modulesなどが活躍するのです。Go Modulesを用いることでgo build
コマンド時にプロジェクトで使用しているパッケージを自動でインストールしてくれたり、使用していないパッケージを削除してくれます(go mod tidy
コマンド)。これらの情報が記述されている.modファイルをgithubなどで管理することで、チーム全体でのパッケージ管理も容易にできます。
実際にModulesを使ってみる
それでは実際に使ってみましょう。今回は用意した外部ライブラリをGo Modulesを使って管理してみます。以下のような手順で実装してみます。
- Go Modulesの初期化
- main.goの作成
- 外部ライブラリのインストール
- 外部ライブラリの実行
- コンパイル
また、今回使用したコードはcode-databaseのgithubリポジトリにありますのでそちらも活用してみてください。今回使用した外部ライブラリもcode-databaseのgithubリポジトリにあげてあります。
Go Modulesの初期化
それではまずGo Modulesをインストールします。プロジェクトのルートフォルダを作成し、プロジェクトのルートディレクトリでgo mod init
コマンドでGo Modulesをインストールしましょう。
$ go mod init 作成するモジュールの名前
引数には作成するモジュールの名前を入れますが、プロジェクトの名前などが適切かと思います。今回はmainという名前のモジュール名にします。
$ mkdir golang_mod $ cd golang_mod $ go mod init main
するとgo.modとgo.sumというファイルが作成され、go.modファイル内は以下のようになっているはずです。
module main go 1.14
作者のGoのバージョンが1.14
ですが、ここは使用するGoのバージョンに一致します。これでGo Modulesのインストールは完了です。
main.goの作成
次にmain.goを用意して、外部ライブラリを使用する準備をしましょう。Golangについての基本的なルール(package名やmain関数など)は割愛します。
$ touch main.go
(mian.go)
package main import ( "log" "github.com/geek-line/sum" ) func main() { result := sum.Sum(2, 3) log.Print(result) }
sumモジュールないのSum関数は引数二つを合計した値を返すだけというとてもシンプル(意味のない)関数です。外部ライブラリという役割を果たすためだけに存在しています(可哀想)。そして、main関数はそこに2と3を代入して結果(5に決まっている)を出力するだけというこれまた外部ライブラリを使用することだけを意味している関数です。
外部ライブラリのインストール
今回はsumという外部ライブラリを使用しているので、これをインストールします。ちなみにここでわざわざインストールしなくてもあとでビルドされる際にも入っていないライブラリについては自動でインストールされます。インストールは以下のようにgo get
コマンドを使用します。
$ go get github.com/geek-line/sum
こうするとgo.modファイル内にsumライブラリの記述が追加されているはずです。
module main go 1.14 require github.com/geek-line/sum v0.0.0-20200505092840-383b88996b90
これでライブラリのインストールは完了です。
コンパイルして動作確認
最後にコンパイルをして動作を確認してみましょう。
$ go build main.go
go build
コマンドでmian.goファイルをビルドしたら。
$ source ./main.go
source
コマンドで実行してみましょう。出力が以下のようになったら成功です!
この記事のまとめ
本記事ではGo Modulesを用いたGolangのパッケージ管理について紹介しました。最後に記事の要点についてまとめておきます。
- Go Modulesを用いることでプロジェクトごとにパッケージの管理ができる
- Go Modulesはバージョン1.11以上に標準搭載されている機能
- .modファイルと.sumファイルでパッケージとバージョンの情報を記述している
皆さんもGo Modulesでスマートなパッケージ管理をしましょう!