こんにちは。よっしーです(^^)
今日は、Golangにおけるアプリケーションのコンパイルとインストールについてご紹介します。
前提条件
前回の記事では、テストコードの作成についてご紹介しました。
今回の記事では、アプリケーションをコンパイルしてインストールする方法についてご紹介します。go runコマンドは、頻繁に変更を加える場合にプログラムをコンパイルして実行するための便利なショートカットですが、バイナリ実行ファイルを生成するわけではありません。
この記事では、コードを構築するための2つの追加コマンド(go build、go install)を紹介します。
下記の記事が実行できる環境にあることを前提にしています。
利用方法
作業ディレクトリを作成して、移動する。
mkdir 11_learn-golang-compile-install
cd 11_learn-golang-compile-install
asdfコマンドで使用するGolangのバージョンを指定します。
すでにGolangが実行できる状態にある方は、このコマンドをスキップしても問題ありません。
asdf local golang 1.20.5
前回の記事のソースコードを作業ディレクトリにコピーします。
cp -r ../10_learn-golang-test/greetings .
cp -r ../10_learn-golang-test/hello .
helloディレクトリのコマンドラインから、go buildコマンドを実行して、コードを実行ファイルにコンパイルします。
cd hello
go build
helloディレクトリのコマンドラインから、新しいhello実行ファイルを実行し、コードが動作することを確認します。
./hello
下記のような結果になっていれば成功です。
% ./hello
map[Darrin:Hail, Darrin! Well met! Gladys:Hail, Gladys! Well met! Samantha:Hi, Samantha. Welcome!]
アプリケーションを実行ファイルにコンパイルして、実行できるようにしました。しかし、現在実行するためには、プロンプトが実行ファイルのディレクトリにあるか、実行ファイルのパスを指定する必要があります。
次に、実行ファイルをインストールすることで、パスを指定せずに実行できるようにします。
goコマンドで現在のパッケージがインストールされるGoインストールパスを検出します。
次の例のように、go listコマンドを実行することで、インストールパスを発見することができます。
go list -f '{{.Target}}'
たとえば、コマンドの出力に /home/gopher/bin/hello と表示された場合、バイナリが /home/gopher/bin にインストールされたことを意味します。このインストール・ディレクトリは、次のステップで必要になります。
Goのインストールディレクトリをシステムのシェルパスに追加します。
そうすれば、実行ファイルがある場所を指定しなくても、プログラムの実行ファイルを実行することができるようになります。
LinuxやMacでは、次のコマンドを実行します。
export PATH=$PATH:/path/to/your/install/directory
シェルのパスを更新したら、go installコマンドを実行して、パッケージをコンパイルしてインストールします。
go install
アプリケーションの名前を入力するだけで、アプリケーションを実行することができます。新しいコマンドプロンプトを開いて、どこか別のディレクトリでhello実行ファイル名を実行してみてください。
helloディレクトリと同じ結果を得られれば成功です。
% cd ~/
% ./hello
map[Darrin:Hail, Darrin! Well met! Gladys:Hail, Gladys! Well met! Samantha:Hi, Samantha. Welcome!]
補足
シェルのパスに$HOME/binのようなディレクトリが既にあり、そこにGoプログラムをインストールしたい場合は、go envコマンドでGOBIN変数を設定することで、インストール先を変更することもできます。
go env -w GOBIN=/path/to/your/bin
そのため、現在のシェルのパスを変更せずに、installすることができます。
解説
go build
go build
は、Goプログラムをビルドして実行可能なバイナリファイルを生成するためのコマンドです。Go言語では、ソースコードをコンパイルしてバイナリファイルを生成することでプログラムを実行します。
go build
コマンドは、以下のような形式で使用します。
go build [ビルドオプション] [パッケージ名]
ビルドオプション
には、ビルドに関するさまざまな設定やフラグを指定することができます。一般的に使用されるオプションには以下のようなものがあります。
-o <ファイル名>
: 生成されるバイナリファイルの名前を指定します。デフォルトでは、カレントディレクトリ内にパッケージ名と同じ名前のバイナリファイルが生成されます。-v
: ビルド時の詳細な出力を表示します。-x
: 実行中に実行されるコマンドを表示します。-ldflags "<フラグ>"
: リンカに渡すフラグを指定します。
パッケージ名
は、ビルドするGoプログラムのパッケージのパスを指定します。通常、プログラムのエントリポイントであるmain
パッケージを指定します。
例えば、以下のようなコマンドを使用してビルドを実行します。
go build -o myprogram main.go
これにより、main.go
というファイルからmyprogram
という名前のバイナリファイルが生成されます。
なお、go build
コマンドは、ビルドと同時に依存関係の解決も行います。必要なパッケージや外部ライブラリが自動的にダウンロードされ、ビルドに含まれます。また、ビルドが成功すると、生成されたバイナリファイルを直接実行することもできます。
go install
go install
は、Goプログラムをビルドして実行可能なバイナリファイルを生成し、それを指定されたディレクトリにインストールするためのコマンドです。go install
を使用すると、ビルドされたバイナリファイルがGoのバイナリインストールディレクトリ(通常は$GOPATH/bin
)に配置されます。
go install
コマンドは、以下のような形式で使用します。
go install [インストールオプション] [パッケージ名]
インストールオプション
には、インストール時の挙動や設定を指定することができます。主なオプションには以下があります。
-v
: インストール時の詳細な出力を表示します。-x
: 実行中に実行されるコマンドを表示します。
パッケージ名
は、インストールするGoプログラムのパッケージのパスを指定します。通常、プログラムのエントリポイントであるmain
パッケージを指定します。
例えば、以下のようなコマンドを使用してインストールを実行します。
go install mypackage
これにより、mypackage
というパッケージがビルドされ、生成されたバイナリファイルが$GOPATH/bin
ディレクトリにインストールされます。
また、go install
コマンドは、go build
と同様に依存関係の解決も行います。必要なパッケージや外部ライブラリが自動的にダウンロードされ、ビルドとインストールの対象となります。
一般的に、go build
は単純なバイナリファイルの生成に使用され、go install
は実行可能なバイナリをインストールするために使用されます。インストールされたバイナリファイルは、後で直接実行したり、他のプロジェクトからインポートして使用することができます。
おわりに
この記事では、アプリケーションをコンパイルしてインストールする方法についてご紹介しました。
本記事で使用したコードは下記のリポジトリにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント