LoginSignup
3
3

More than 5 years have passed since last update.

Go入門したときに開発環境を考えた話

Last updated at Posted at 2017-01-30

続き書きました。 続: Go入門したときに開発環境を考えた話

Goを初めて1時間の人間のメモです。ベストプラクティスやご指摘等あればよろしくお願いします。

Goを書き始めるにあたって以下のことがしたかったです。

  • さっくり関数を書いて、単体テストを通すことでGoの勉強がしたい
  • GOPATHに依存したくない
  • 本コードとテストをキッチリ分けたい

まず、GOPATH自体には特に問題なく受け入れることができました。Goには、便利なCUIツールが多く存在するので、そう言った目的では、昔からGo(go get)を利用してきました。しかし開発時に、$GOPATH/src下にプログラムを書いていくのは、受け入れることができませんでした。常に本格的な開発をするならば、とてもいい機構だと思いますが、現状のような初心者ではグローバル空間を汚染しながらプログラムを書くのは気が引けます。もっと気軽に書いて消してを繰り返したいと考えました。

テストコードを書くに辺り公式マニュアルを漁っていたところHow to Write Go Codeという素晴らしいリンクを発見しました。そこには、局所的にGOPATHとコマンドサーチパスを変更・追加する手法が載っていました。しかし、気軽に作って消してを繰り返したい自分としては毎回、環境変数の「状態」を意識するのはツライなあと思いました。

$ export GOPATH=$HOME/work
$ export PATH=$PATH:$GOPATH/bin

さらに、ビルドやtestの度にパッケージを指定するのは面倒です。

$ go build github.com/user/stringutil

そして見つけたツールが、gbでした。とっても良いツールです。トップページにはシンプルに以下のような一文が書いてあります。

A project based build tool for the Go programming language.

これで、GOPATHから解放されて、テストを楽に書く生活ができそうですね?

gbはプロジェクトベースのツールなので、ディレクトリ構造を強制されます。と言ってもすごい単純です。srcを掘ってファイルを配置するだけです。

スクリーンショット 2017-01-30 18.25.27.png

以下のように、依存ライブラリを管理することも出来るようです。

$ gb vendor fetch [依存ライブラリ]
$ gb vendor restore

配置が終えたら、テストを実行するだけです。特にテストの位置やbuildなどを気にすることなく、サクッと実行出来てしまいました。

$ gb test -v
stringutil
=== RUN   TestReverse
--- PASS: TestReverse (0.00s)
PASS

最後になりますが、一つ不満が残りました。本コードとテストコードを分けて書くことが出来ませんでした。以下が理想の書き方です。しかし、現状では大きなものは書かずに、細々としたものを書かないので問題ないかもしれません。ある程度大きなものを書こうとしたときは、どうするんでしょう?と疑問は残っています・・・。

$ tree .
.
└── src
    ├── main
    │   └── stringutil
    │       └── reverse.go
    └── test
        └── stringutil
            └── reverse_test.go
3
3
2

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
3
3