Mac: Homebrew/Golang/Revel のインストール手順

メモ。

Xcode のインストール

Golang のシステム要件に Xcode 付属の gcc が含まれている。
ターミナルで以下のコマンドを実行して、インストールされていることを確認しておこう。

$ gcc -v

まだ一度も使用していない場合、ここでライセンス条件への同意が要求される。

Homebrew のインストール

下記ページを参照。

実行の様子は以下のとおり。途中で Enter の入力が要求される。

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir /usr/local
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 235189, done.
remote: Compressing objects: 100% (373/373), done.
remote: Total 235189 (delta 248), reused 0 (delta 0), pack-reused 234815
Receiving objects: 100% (235189/235189), 30.46 MiB | 911.00 KiB/s, done.
Resolving deltas: 100% (176342/176342), done.
From https://github.com/Homebrew/homebrew
 * [new branch]      master     -> origin/master
Checking out files: 100% (3499/3499), done.
HEAD is now at ac4e213 passenger: update 5.0.2 bottle.
==> Installation successful!
==> Next steps
Run `brew doctor` before you install anything
Run `brew help` to get started
$

以下のコマンドでバージョンを確認できる。

$ brew -v
Homebrew 0.9.5
$

Golang のインストール

以下のコマンドでインストール。

$ brew install go

インストールの様子は以下のとおり。

$ brew install go
==> Downloading https://homebrew.bintray.com/bottles/go-1.4.2.yosemite.bottle.1.
######################################################################## 100.0%
==> Pouring go-1.4.2.yosemite.bottle.1.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
🍺  /usr/local/Cellar/go/1.4.2: 4566 files, 155M
$ 

以下のコマンドでバージョンを確認できる。

$ go version
go version go1.4.2 darwin/amd64
$

Go の環境変数設定

Go インストール中に以下のように表示されていた。

As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

環境変数 GOPATH は、自分が Go の開発に使用するディレクトリを表す。以下の 3 つのサブディレクトリを作って使うことになっている。実際にどこにするかは、自分で自由に決めてよい。公式サイトのチュートリアルでは $HOME/go を使う例が載っている。GOPATH を設定しなくても Go のコンパイルができないというわけではないが、go get を使うために必要なので、実質的には必須と言える。

src
自分がソースを書くためのサブディレクト
pkg
ビルドしてできたライブラリの配置先。go get コマンドで入手したライブラリもここに置かれる
bin
ビルドしてできたコマンドの配置先。go get コマンドで入手したコマンドもここに置かれる

なお、GOPATH は自由に決めてよいと書いたが、Go のインストール先と同じにしたり、Go のインストール先のサブディレクトリにしたりしてはいけない。

[2017-06-08 追記] Go バージョン 1.8 以降、環境変数 GOPATH の設定は必須ではなくなった。ない場合はデフォルトで $HOME/go が使われる。ただし、$GOPATH/bin にあたる $HOME/go/bin にパスを通すのは引き続き必要。[2017-06-08 追記ここまで]

環境変数 GOROOT は、Go のインストール先を示す環境変数だが、現在では設定する必要がないらしい。Go 自身がインストール先を知っているからだ。

$ go env GOROOT
/usr/local/Cellar/go/1.4.2/libexec
$ 

最後に PATH についてだが、Brew で Go をインストールした時点で、標準のコマンド (go/godoc/gofmt) については /usr/local/bin にシンボリックリンクが置かれているので、わざわざパスを通す必要はない。
ということで、まとめると、環境変数まわりで設定するべきなのは以下の 2 つ。

  • 作業ディレクトリを作成して、GOPATH に設定する
  • 今後コマンドが置かれるであろう $GOPATH/bin にパスを通す

ということで、$HOME/.bash_profile に以下のように書く (このファイルがない場合は新規作成)。

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

繰り返すが、GOPATH で指定するパスは自分で好きなように決めてよい (Go のインストール先ディレクトリの外でさえあれば)。上記はあくまで例である。

[2017-06-08 追記] 上の方にも追記したが、Go バージョン 1.8 以降、環境変数 GOPATH の設定は必須ではなくなった。ない場合はデフォルトで $HOME/go が使われる。ただし、$GOPATH/bin にあたる $HOME/go/bin にパスを通すのは引き続き必要。

export PATH=$PATH:$(go env GOPATH)/bin

[2017-06-08 追記ここまで]

設定したら、ターミナルを開き直すか、以下を実行するかして変更を反映する。

$ . ~/.bash_profile

Mercurial のインストール

Revel のインストールに必要なので、以下のコマンドで Mercurial を先にインストールする。

$ brew install hg

実行の様子は以下のとおり。

$ brew install hg
==> Downloading https://homebrew.bintray.com/bottles/mercurial-3.3.yosemite.bott
######################################################################## 100.0%
==> Pouring mercurial-3.3.yosemite.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions

Python modules have been installed and Homebrew's site-packages is not
in your Python sys.path, so you will not be able to import the modules
this formula installed. If you plan to develop with these modules,
please run:
  mkdir -p /Users/sardine/Library/Python/2.7/lib/python/site-packages
  echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/sardine/Library/Python/2.7/lib/python/site-packages/homebrew.pth
==> Summary
🍺  /usr/local/Cellar/mercurial/3.3: 366 files, 4.9M
$

Revel のインストール

以下のコマンドでインストールする。

$ go get github.com/revel/cmd/revel

実行してもコンソールには何も出力されないが、$GOPATH$GOPATH/bin に revel コマンドがインストールされている。引数なしで revel コマンドを実行するとヘルプが表示される。

$ revel
~
~ revel! http://revel.github.io
~
usage: revel command [arguments]

The commands are:

    new         create a skeleton Revel application
    run         run a Revel application
    build       build a Revel application (e.g. for deployment)
    package     package a Revel application (e.g. for deployment)
    clean       clean a Revel application's temp files
    test        run all tests from the command-line

Use "revel help [command]" for more information.
$ 

また、$GOPATH/src にライブラリのソースが配置され、ビルド結果が $GOPATH/pkg に格納されている。

Revel のサンプルアプリを試す

公式サイトの Quick Start に、以下のコマンドでサンプルのチャットアプリケーションが起動できるとある。

$ revel run github.com/revel/revel/samples/chat

実行の様子は以下のとおり。"Listening on :9000" の行が出たら起動完了。止めたくなったら Ctrl-C を押せばよい。

$ revel run github.com/revel/revel/samples/chat
~
~ revel! http://revel.github.io
~
2015/03/08 00:27:07 revel.go:326: Loaded module static
2015/03/08 00:27:07 revel.go:326: Loaded module testrunner
2015/03/08 00:27:07 run.go:57: Running chat (github.com/revel/revel/samples/chat) in dev mode
2015/03/08 00:27:07 harness.go:165: Listening on :9000

ここでブラウザから http://localhost:9000 にアクセスすると、簡単なチャットアプリが表示される。

Revel アプリの新規作成と実行

revel コマンドで、スケルトン (ひな形) からアプリを新規作成することができる。

$ revel new <パス> <スケルトン>

引数で指定するのは Go の import パス。 とりあえずのお試しなら適当な名前を与えればよいが、例えば GitHub に置くつもりならそれに応じたパスを指定することになる。スケルトンを省略するといわゆる Hello World 的なシンプルなアプリが生成される。

実行の様子は以下のとおり。今回はお試しなので適当な名前を指定した。 の部分には、実際には $GOPATH の値が出力されている。

$ revel new helloapp
~
~ revel! http://revel.github.io
~
Your application is ready:
   /Users/sardine/go/src/helloapp

You can run it with:
   revel run helloapp
$ 

上記で出力されているとおり、revel run <パス> でアプリを実行できる。止めるには Ctrl-C を押す。

$ revel run helloapp
~
~ revel! http://revel.github.io
~
INFO  2015/03/08 00:48:28 revel.go:326: Loaded module testrunner
INFO  2015/03/08 00:48:28 revel.go:326: Loaded module static
INFO  2015/03/08 00:48:28 run.go:57: Running helloapp (helloapp) in dev mode
INFO  2015/03/08 00:48:28 harness.go:165: Listening on :9000

ブラウザから http://localhost:9000 にアクセスすると、"It Works!" というメッセージが表示されるはずだ。
その他に http://localhost:9000/@tests にアクセスすると、テストを実行するためのページが表示される。このシンプルなアプリを新規作成した時点では 1 つしかテストがないが、ボタンを押して実行することができる。これは Revel に用意されているテストフレームワークによるもので、アプリの内容によって自由に増やしていくことができる。
なお、$GOPATH/src/<指定したパス>/README.md に、生成されたファイルの内容が書かれている。