23
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ディップAdvent Calendar 2020

Day 23

配属直後に go get したのに command not found で躓いた話

Last updated at Posted at 2020-12-23

忙しい人向け

解決策①: パスを通す

$ export GOPATH=$HOME/go;
$ export PATH=$PATH:$GOPATH/bin;

単純にパスが通っていないだけであればこれで解決するだろう。

解決策②: go get で $GOPATH/bin に落としたバイナリを $GOROOT/bin にコピーする

しかし、こっちが本記事の結論。

今回は、Goのバージョンを切り替えやすくするために $GOROOT にシンボリックリンクを貼っていて、実行環境にバイナリ(実行ファイル)を go get できていなかった。

解決策はこちら

経緯

当時の私は新たな MacBook PRO を手に入れ(貸与され)、配属先でGo製のAPIを開発することになっていたため、ワクワクしながらGoの開発環境を構築していた。

(後々躓くことも知らずに)言われるがままに環境構築を行い、ビルド、手元でユニットテストを回した。
通った!
「よし、これで開発者としてチームの一員になれるぞ...」
その日はそのまま退勤。「明日から頑張るぞ!」という決意と共に会社を後にした。

さらに、参画することになっているプロジェクトでは sqlboiler というORMを使っているという情報を手に入れていた。生のSQLならまだしも、ActiveRecord以外のORMをまともに扱ったことがないこともあり、早速 sqlboiler を触ってみようと考えていた。

やってみる

上を参考に、必要なパッケージを go get していく。

$ go get -u -t github.com/volatiletech/sqlboiler
$ go get github.com/volatiletech/sqlboiler/drivers/sqlboiler-psql

あらかた必要になりそうなもののインストールは済んだので、 sqlboiler コマンドの実行!

$ sqlboiler psql

しかしここでなぜか sqlboiler がないと怒られる

$ sqlboiler psql
-bash: sqlboiler: command not found

command not found ... ?
んん ... ? go get したんだけどなと思いつつ確認する。

$ ls $GOPATH/bin
sqlboiler-psql*    sqlboiler*    その他省略

あれ?あるぞ?なぜ?
その後もあーだこーだしてるうちに時間が溶けてゆく。

原因を探る

まずはGOPATHの確認

$ echo $GOPATH
/Users/y-kanai/go

ふむ。
GOROOTは?

$ echo $GOROOT
/Users/y-kanai/goroot

goroot...? ってのはなんだ?
そんなもの知らんぞ?ってことで、

$ ls -la
drwxr-xr-x   5 y-kanai  931577470     160  7 19 23:21 go/
drwxr-xr-x@ 21 y-kanai  931577470     672 12 23 16:51 go1.13.14/
lrwxr-xr-x   1 y-kanai  931577470      25  8  4 12:11 goroot@ -> /Users/y-kanai/go1.xx.xx/

あ!シンボリックリンクを貼ってるやんけ!完全理解!!!

ってことは、$GOROOT/bin に sqlboiler がないんだろうな..と

$ ls $GOROOT/bin
シーン ...

つまり、今回の原因はGoのバージョンを切り替えやすくするために $GOROOT にシンボリックリンクを貼っていて、実行環境にバイナリを go get できていなかったことにありました。

用意されたドキュメントをコピーしてペロって貼ってると中々気づかないものですね。

解決策

go get$GOPATH/bin に落としたバイナリ(実行ファイル)を、$GOROOT/bin にコピーする!

$ cp $GOPATH/bin/sqlboiler $GOROOT/bin/
$ cp $GOPATH/bin/sqlboiler-psql $GOROOT/bin/

$ ls $GOROOT/bin/
go*             gofmt*          sqlboiler*      sqlboiler-psql*

sqlboiler コマンドを実行!

$ sqlboiler psql
.
.
.

よし、ひとまず解決!
ここまで辿り着くのに1時間近くかかってしまいました。

振り返り

脳死コピーはダメですね。反省。

Goの複数バージョンを切り替えながら使っている方、
他に良い方法があれば、ぜひご教授願います。以上!

23
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?