GoでCLIツールを作ってinstallする

GoでCLIを自作してinstallするまでの一連の流れを紹介します。

ツールを作る

例えば、次のようなechoコマンドと同じような動作をするmyechoを作成します。

package main

import (
    "flag"
    "fmt"
)

func main() {
    flag.Parse()
    args := flag.Args()
    cmd := ""
    for _, arg := range args {
        cmd += arg + " "
    }
    fmt.Println(cmd)
}

この時点では次のように実して動作を確認できます。

$ go run *go hoge fuga
hoge fuga

インストールする

modulesを設定しておきます。
例えばmyechoというツール名にしたい場合は、次のようにmodulesを設定します。
ここで設定した名前がツールを使うときに呼び出すコマンドになります。
(modulesを設定していない場合、main.goが置かれているディレクトリ名がツール名になるようです)

$ go mod init myecho

次のコマンドでビルド&インストールします。
GOPATHを設定している場合は$GOPATH/bin、設定していない場合は$HOME/go/binがインストール先になります。

$ go install

実行する

以下のように実行できれば成功です。

$ myecho hoge fuga
hoge fuga

次のようにエラーが出る場合はPATHが通っていない可能性があるので、PATHを通す必要があります。

bash: myecho: command not found

$HOME/go/binにPATHを通す場合は、~/.bash_profilePATH=$PATH:$HOME/go/binのように記載することでPATHを通します。
記入後、次のようにコマンドを実行して設定を有効にします。

$ source ~/.bash_profile