2012/08/31

ubuntu 12.04 に GAE/go の開発環境を構築する

やりたいこと

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 しかない。

手順をつらつらと

  1. go 言語を導入する

    まずは go 言語を利用できるようにする。

    sudo add-apt-repository ppa:gophers/go
    sudo apt-get update
    sudo apt-get install golang-stable

    Ubuntu - go-wiki
  2. gocode をインストールする

    gocode は go 言語の開発環境に、自動補完を提供するツール。
    今回は eclipse から利用するために導入する。

    git を導入する


    sudo apt-get install git-core

    gocode を導入する


    sudo su -
    export GOROOT=/usr/lib/go
    export GOBIN=$GOROOT/bin
    export PATH=$PATH:$GOBIN
    go get -u github.com/nsf/gocode
    exit

    nsf/gocode - GitHub
    ※ /usr/lib/go/bin に gocode が作られる
  3. 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 の設定を反映する。
  4. goclipseをインストールする

    goclipse は eclipse で go 言語による開発を支援するための eclipse アドイン。
    0.7.20.2.4があるが、今回は GAE/g 用である0.2.4を導入する。

    eclipseにgoclipseを読み込む


    1. eclipse Help > Install New Software... を選択。
    2. update site URL にhttp://goclipse.googlecode.com/svn/trunk/goclipse-update-site/r60 を指定し、Addボタンをクリックする。
    3. Name にはわかりやすい名称をつける。今回はgoclipse 0.2.4 (for gae/g)とした。
    4. Go Plug-in for Eclipseにチェックをつけ、Nextボタンをクリックする。
    5. 以降、ライセンスなどを承諾しインストールを進める。
    InstallationInstructions - goclipse

    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 で確認したパス
  5. 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 の開発サーバを起動する


    1. External Tools Configurations ウィンドウを開く
    2. Name にわかりやすい名前をつける。今回は Run GAE App を指定する
    3. Location に /home/user/google_appengine/dev_appserver.py を指定する
    4. Working Directory に ${project_loc}/src を指定する
    5. Arguments に . (ピリオド)を指定する
    GoClipseAndTheGoogleAppEngine - goclipse
    指定した内容は、『現在のプロジェクトをカレントディレクトリとして、dev_appserver.py を起動する』を意味している。
    あとは、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 件のコメント:

コメントを投稿