2012年04月27日

Google App EngineのGo言語(GAE/Go)のチュートリアルをやったメモ。

はじめに

2012/04/15に東海GTUG主催の 「[愛知/名古屋]作ればわかる! Google App Engineハンズオン #1(東海GTUG)」 に参加しました。

この本は一度写経したことがあって、せっかく著者さんがいらっしゃるので、もう一度やるのもありだったのですが、 GAE/Goチームができてたので、そちらに惹かれ GAE/Goのチュートリアル をすることにしました。

さて、チュートリアルは イントロダクション があって、 次にGAE/Goの 環境構築です。 最終的にはデプロイまでのチュートリアルがあります。実際にチュートリアルを最後までやって、忘れないためにメモと気づいた事などを書いていきます。

環境構築 の最初の方に「Python 2.5をインストールしてください」とありますが、2.7でも動きました。Pythonのバージョンを確認するには、ターミナルで次のコマンドで確認できます。

% python -V
Python 2.7.1
                                

Google App Engine SDK for Goをダウンロード

下記のURLからSDKをダウンロードします。
https://developers.google.com/appengine/downloads

GAE SDK for Go

僕はMacなので、「go_appengine_sdk_darwin_amd64-1-6-4.zip」をダウンロードしました。 解凍すると、google_appengineというディレクトリができるので、そのディレクトリを適当なディレクトリに移動します。 僕は、ディレクトリ名を変更して、次の場所に置きました。

/gae/appengine-go-sdk/
                            

チュートリアルにもTo simplify devlopment and deployと書かれていますが、 環境変数のPATHを以下のように追加すると、コマンドをタイプする時面倒ではなくなります。

bash系だと、

export PATH=/path/to/google_appengine:$PATH
                            

csh系だと、

setenv PATH /path/to/google_appengine:$PATH
                            

短いメッセージを表示するだけのアプリケーションを作ります

myappという名前のディレクトリを作成して、myappの下にhelloというディレクトリを作成します。 helloディレクトリの下にhelloパッケージGoソースファイルを作成していきます。 さっそく、hello.goを作成しましょう。

package hello

import (
    "fmt"
    "net/http"
)

func init(){
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request){
    fmt.Fprint(w, "Hello, world!")
}
                            

次に設定ファイルapp.yamlmyappの下に作成します。

applicaiton:helloworld
version:1
rutime:go
api_version:go1

handlers:
- url:/.*
  script:_go_app
                            

結果、次のような構成になっていればOK。

myapp/
    app.yaml
    hello/
        hello.go
                            

間違って、myappディレクトリの下にhello.goがある場合、

Compile error:

2012/04/15 13:47:48 go-app-builder: Failed parsing input: go files must be in a subdirectory of the app root
                            

のようなエラーが出ます。helloディレクトリの配下にhello.goを移動させて解決。

アプリケーションの実行

次のコマンドで、作成したアプリケーションの実行ができます。

$ ls
myapp
$ dev_appserver.py mypp/
~
INFO     2012-04-24 22:44:48,883 dev_appserver_multiprocess.py:647] Running application dev~helloworld on port 8080: http://localhost:8080
INFO     2012-04-24 22:44:48,883 dev_appserver_multiprocess.py:649] Admin console is available at: http://localhost:8080/_ah/admin
                            

Running application...とでたらサーバーが起動。http://localhost:8080をブラウザに入力すると、 Hello, world!と出ているはず。

サーバーを止めるには、Control-C

たとえば、サーバーを動かしている状態でhello.goを編集した場合、サーバーを一旦止める必要はありません。 http://localhost:8080のリロードでOKです。

データベースのデータを削除するには

データベースを使ったチュートリアルがあるのですが、データベースに登録の仕方 ・使用の仕方が書いており、最後「Clearing the Development Server Datastore」でデータベースに登録したデータを消去するには、 次のコマンドで消すことが可能です。

$ dev_appserver.py --clear_datastore myapp/
                            

しかし、これで消えない時があります。それは、サーバー起動中です。データベースのデータを消去するには、 サーバーをControl-Cでシャットダウンしてください。

デプロイするには

Goアプリケーションをデプロイするには、app.yamlapplicationを、 登録したアプリケーションIDに変更して、次のコマンドを実行します。

$ appcfg.py update myapp/
                            

GAE/Jで作っていたアプリケーションIDを利用して、デプロイコマンドを打つと、

The 'go' runtime is only supported for apps using the High Replication Datastore.
                            

と出て、デプロイできません。Storage SchemeHigh Replicationではなく、 Master/Slaveであったことが原因でした。あたらしくアプリケーションIDを作り直し、このとき DatastoreはHigh Replicationであることを確認して、上記のデプロイコマンドを打って、無事デプロイできました。

Storage Scheme

emacsのシンタックスハイライトを設定する

Goのソースのmisc(GOROOT/misc)ディレクトリにemacsや、vimなどの シンタックスハイライトを設定できる設定ファイルが入っています。 emacsのシンタックスハイライト設定をしたいたため、misc/emacs配下にある go-mode-load.elgo-mode.elの2つを~/.emacs.d/にコピーし ~/.emacsに次のように記述します。

;Go言語シンタックスハイライトファイルの読み込み
(add-to-list 'load-path "~/.emacs.d/" t)
(require 'go-mode-load)
                            

あとは、source ~/.emamcsとしてgoファイルを開けばシンタックスハイライトされます。

goのシンタックスハイライト

posted by やし at 20:44 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。