やりたいこと
ubuntu 上に GAE/go の開発を eclipse でできるようにする。ウチの環境は
- ubuntu:
- 12.04 LTS x64
- eclipse:
- Juno Release / Build id: 20120614-1722
- gdb:
- GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
ここで導入するもの
- goコンパイラ:
- google 製の go コンパイラ(gc) 1.0.2
- Google App Engine for go (GAE/g):
- 1.7.1
- goclipse:
- 0.2.4 (for gae/g)
gc と gccgo、どっちがいいのか
GAE/g の開発をするなら選択肢は gc しかない。手順をつらつらと
-
go 言語を導入する
まずは go 言語を利用できるようにする。
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable
Ubuntu - go-wiki -
gocode をインストールする
gocode は go 言語の開発環境に、自動補完を提供するツール。
今回は eclipse から利用するために導入する。
git を導入する
sudo apt-get install git-core
gocode を導入する
sudo su -
※ /usr/lib/go/bin に gocode が作られる
export GOROOT=/usr/lib/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
go get -u github.com/nsf/gocode
exit
nsf/gocode - GitHub -
GAE/g をインストールする
今回の実行環境である Google App Engine for go (GAE/g) を導入する。
gae/g をダウンロードする
Google App Engine SDK for Goからlinux x64 のバイナリ、go_appengine_sdk_linux_amd64-1.7.1.zipをダウンロードする。
Google App Engine を $HOME に解凍する
/usr/local
などに解凍すると、パーミッションの設定の関係でソースやツールが利用できなくなるため、$HOME
上に解凍する。
unzip go_appengine_sdk_linux_amd64-1.7.1.zip -d ~/
gocodeを GAE/g の環境に組み込む
google_appengine/goroot/bin に gocode のシンボリックリンクを作成する。
ln -s /usr/lib/go/bin/gocode ~/google_appengine/goroot/bin/gocode
必要な環境変数を設定する
.profile を編集し、以下の設定を追加する。
GAE=$HOME/google_appengine
export GOROOT=$GAE/goroot
export GOARCH=amd64
export GOOS=linux
export PATH=$GAE:$PATH:$GOROOT/bin
※ ここで go コンパイラを google_appengine のものに切り替える
※ 2012/08/31 現在、google_appengine の go コンパイラのバージョンはgo1.0.2 (appengine-1.7.1)
と表示される
再ログインして、.profile の設定を反映する。
-
goclipseをインストールする
goclipse は eclipse で go 言語による開発を支援するための eclipse アドイン。
0.7.2
と0.2.4
があるが、今回は GAE/g 用である0.2.4
を導入する。
eclipseにgoclipseを読み込む
eclipse Help
>Install New Software...
を選択。- update site URL に
http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/r60
を指定し、Add
ボタンをクリックする。 - Name にはわかりやすい名称をつける。今回は
goclipse 0.2.4 (for gae/g)
とした。 Go Plug-in for Eclipse
にチェックをつけ、Next
ボタンをクリックする。- 以降、ライセンスなどを承諾しインストールを進める。
eclipse の preference/go を設定する
※ 以下、/home/user/ は $HOME と同じパスに読み替えること。
- GOROOT path:
- /home/user/google_appengine/goroot
- GOOS:
- linux
- GOARCH:
- amd64
- Go Compiler path:
- /home/user/google_appengine/goroot/pkg/tool/linux_amd64/6g
- Go Linker path:
- /home/user/google_appengine/goroot/pkg/tool/linux_amd64/6l
- Go Packer path:
- /home/user/google_appengine/goroot/pkg/tool/linux_amd64/pack
- Code formatter path:
- /home/user/google_appengine/goroot/bin/gofmt
- Testing tool path:
- (空にしておく) ※ 2012/08/31 現在は gotest を導入していない
eclipse の preference/go/debugger を設定する
- GDB Path:
- /usr/bin/gdb ※which gdb で確認したパス
-
GAE の開発サーバを起動する
Linux 上では、GAE/g (GAE/python などでも同じだけど) の GUI 管理コンソールがない。
このため、コマンドで GAE の開発サーバを起動する必要がある。
GAE の開発サーバを起動するには、以下の方法がある。
コマンドラインからGAE の開発サーバを起動する
コマンドラインから起動する方法は以下の通り。
dev_appserver.py <app.yaml を置いているディレクトリ> The Go Development Server
dev_appserver.py にはオプションがあり、- ポート番号の指定
- --port=9999
- データストアのクリア
- --clear_datastore
- データストアの場所の指定
- --datastore_path=/tmp/myapp_datastore
- データストアに SQLite を使用する
- --use_sqlite
eclipse から GAE の開発サーバを起動する
- External Tools Configurations ウィンドウを開く
- Name にわかりやすい名前をつける。今回は
Run GAE App
を指定する - Location に
/home/user/google_appengine/dev_appserver.py
を指定する - Working Directory に
${project_loc}/src
を指定する - Arguments に
.
(ピリオド)を指定する
あとは、External Tools から起動すればよい。
これでおしまい
これで、開発環境の構築は OK。メソッドなどの自動補完もバッチリ。
スタンドアロンアプリであれば、eclipse 上でブレイクポイントも効くし、変数の中身も見れる。
問題は GAE/g で起動した時に、ブレイクポイントが効かないことと、go test のための設定ができていないことかな。
とりあえず、
- GAE 以外のロジックの確認はスタンドアロンアプリでやる
- html の結果はダミーの html を準備して、css, javascript を確認する
- 最後に GAE で動作確認
あとは Go 言語の知識があれば…www
後記
今回、初めての ubuntu, 初めての go 言語っていう中、ずいぶん試行錯誤をしてしまった。The Go Programming Languageを頼りに Go 言語をインストール。
Go言語サポートが新たに追加された「GDB 7.5」リリースなんて記事が記憶に残ってたから、gdb の最新も導入してみた。
で、この組み合わせでままごとのデバッグのしてみると、ブレイクポイントは設定できるものの、変数の中身が全く見えない。
どこか忘れたけど、『gccgo は完全に gdb をサポートしてる』と書いてある記事を見つけて、gccgo のインストールもしてみた。
ubuntu 初心者というスキルには、gccgo の導入の壁は大きかったなぁ。
gcc に含まれる多数のライブラリから更新する必要があり、その作業に失敗して何度も OS から入れ直すハメに陥ったし。
VMWare のスナップショットのおかげで作業は最小だったとは言え、ホント大変だった。
ubuntu にコンパイル済みのバイナリは公開されていたものの、コマンド一発でサクッと入るものでもなく、必要なパッケージを地道に集めてしか方法がわからない。
今思えば、もっと別の方法があったのかもと思うけど、そこはド素人。疑う余地もなくかき集めてた。
なんとか、最新の gccgo と gdb の組み合わせができたかと思ったら、GAE/g に gccgo は利用できないことに『このタイミングで』気づいた。
わからないことが多すぎて、そんな当たり前のことにも気づかずチョー無駄な時間を過ごした。
で、冷静になって調べなおしていくうちに、今回の方法に辿りついた。
それでも eclipse の設定にコケるわ、GAE/g を /usr/local に突っ込んだらパーミッションの壁に阻まれて動作しないわで、ここでも試行錯誤の繰り返し。
方法がわかってしまえば、1時間もあれば構築できることに随分時間を使ったものだ。
0 件のコメント:
コメントを投稿