サードパーティパッケージ

Go言語 サードパーティパッケージ

Goは人気のあるプログラミング言語で、さまざまな機能を提供する標準ライブラリが付属しています。

しかし、時には開発者は自分の要求を満たすために外部のパッケージを使う必要があります。幸い、Goにはコード内でサードパーティパッケージをインポートして使用するための使いやすいメカニズムが用意されています。

この記事では、rsc.io/quoteパッケージを使用する方法を例として紹介します。

rsc.io/quoteパッケージの使用

プロジェクト用の新しいディレクトリを作成し、ターミナルでそのディレクトリに移動します。

mkdir packer
cd packer

そして、以下のコマンドを実行して、新しいGoモジュールを初期化します。

go mod init example.com/packer

これにより、example.com/packerという名前の新しいモジュールが作成され、プロジェクトディレクトリにgo.modファイルが生成されます。

rsc.io/quoteパッケージは、格言集を提供するシンプルなGoパッケージです。Goのコード内でこのパッケージを使うには、ファイルの先頭に次の行を追加します。

import "rsc.io/quote"

この行は、rsc.io/quoteからquoteパッケージをインポートするようにGoに指示します。

サードパーティのパッケージをプロジェクトにインポートするとき、そのパッケージを含むモジュールがgo.modファイルにリストされている必要があります。リストされていない場合、go buildやgo runはエラーになるため、後述するgo mod tidyやgo getでgo.modファイルに追加します。

依存関係を管理するには、go modコマンドを使用します。最も便利なコマンドの一つにgo mod tidyがあります。このコマンドはコードのimportをスキャンして、足りない依存関係をgo.modファイルに追加し、使われていない依存関係を削除します。

go mod tidyコマンドを使うには、プロジェクトディレクトリに移動して、次のコマンドを実行します。

go mod tidy

これはgo.modファイルに足りない依存関係を追加して未使用の依存関係を削除し、必要な各モジュールのバージョンのチェックサムをgo.sumファイルに記録します。これにより、ダウンロードした依存関係が改ざんされていないことを確認できるようになります。

Note: go.modファイルは、モジュールの依存関係を指定するテキストファイルで、各依存関係のバージョン番号も含まれています。これは、Goがプロジェクト内のすべての依存関係を追跡するために使用する中心的なファイルです。go.modファイルは、go mod initコマンドを実行すると、Goによって自動的に作成されます。

Note: go.sumファイルはテキストファイルで、各依存関係のチェックサムのリストを含んでいます。Goはこのファイルを使用して、ダウンロードした依存関係が改ざんされていないことを確認します。依存関係は、ダウンロードしたファイルをハッシュ化し、go.sumファイル内のチェックサムと比較することで検証されます。チェックサムが一致した場合、その依存関係は検証済みとみなされます。

go mod tidyが実行されると、rsc.io/quoteというモジュールを見つけ出し、go.modファイルに追加してダウンロードします。Goコマンドは、既定ではproxy.golang.orgというモジュールプロキシを経由してrsc.io/quoteモジュールをダウンロードします。こうすることで、ローカル環境においてquoteパッケージを使用することができるようになります。

パッケージをインポートした後は、そのパッケージが提供する任意の関数を使用することができます。例えば、Goに関する格言を表示したい場合、以下のようにquote.Go()関数を呼び出すことができます。

package main

import "rsc.io/quote"

func main() {
    println(quote.Go())
}

上記のコードは、quote.Go()関数が返す固定の格言を出力します。

最後に、ターミナルでプロジェクトのディレクトリに移動し、以下のコマンドを実行することで、プログラムをビルドして実行することができます。

go run .

これによってプログラムがビルドされて実行され、有名なGoの引用文がコンソールに出力されるはずです。

他のインストール方法

Goで、サードパーティーパッケージをインストールする他の方法を紹介します。

go getコマンドを使用する

最も一般的な方法は、go getコマンドを使用して依存関係を追加する方法です。例えば、以下のコマンドを使用して、rsc.io/quoteモジュールをプロジェクトに追加できます。

go get rsc.io/quote

このコマンドを実行すると、モジュールがダウンロードされ、go.modファイルとgo.sumファイルに追加されます。go.modファイルには、モジュールのパスとバージョンが自動的に追加されます。なお、Go 1.18以降のgo getは、パッケージのビルドやインストールを行いません。

go installコマンドを使用する

もう一つの方法は、go installコマンドを使用して、CLIツールなどの実行ファイルをインストールする方法です。この方法では、go.modファイルとgo.sumファイルに変更を加えません。例えば、以下のコマンドを使って、Goの言語サーバーであるgoplsをインストールできます。

go install golang.org/x/tools/gopls@latest

@latestのようにバージョンを付けると、現在のモジュールのgo.modファイルとは関係なく、指定したバージョンがインストールされます。go installでインストールできるのはmainパッケージだけなので、rsc.io/quoteのようなライブラリはgo installではインストールできません。

このように、コード内で使うライブラリはgo getコマンドで依存関係に追加し、CLIツールはgo installコマンドでインストールします。go getコマンドを使用する場合は、go.modファイルとgo.sumファイルが自動的に更新されるため、より簡単に依存関係を管理できます。

一方で、go installコマンドを使用する場合は、go.modファイルとgo.sumファイルは更新されないため、開発環境に影響を与えない形でパッケージをインストールさせることができます。例えば、開発のコード内では使用しないようなCLIツールなどをパッケージとしてインストールする場合に便利です。

Goの世界ではこの他にも、たくさんのサードパーティーパッケージが有志によって提供されています。サードパーティーパッケージはこちらのサイトで公開されており、ドキュメントも充実しているので、気になるパッケージがある場合には是非調べて実際に使ってみてください。

https://pkg.go.dev/

この記事を書いた人

著者の画像

Jeffry Alvarado

Ex-Facebook Engineer 大学ではコンピュータサイエンスを専攻し、在学中に複数のインターンシップを経験。コンピュータサイエンスが学習できるプラットフォームRecursionを創業し、CTOとしてカリキュラム作成、ソフトウェア開発を担当。