Google App Engine Go SDK 1.6.4がリリースされたので、
変更点をまとめようかと思ったのですが、go1beta4を利用していると
あまり大きな変更点はないので、変更点を洗い出すよりは、開発の手順を
まとめてみようと思います。
とりあえず、ネタを考えるのが面倒だったので
Slim3のチュートリアルと同じ事をGAE/G 1.6.4で実現できるかどうかを
試しつつ進めていこうと思います。
- コントローラとテストの作成
$ cd [任意のディレクトリ] $ mkdir twitter $ cd twitter
Slim3のように、build.xmlなんて、便利なものは存在しませんので、手で作成します。
app.yaml
application: twitter version: 1 runtime: go api_version: go1 handlers: - url: /favicon.ico static_files: favicon.ico upload: favicon.ico - url: /.* script: _go_app
app.yamlの大きな変更点は、api_versionが"go1"になっている点です。
1.6.3までは、"3"で、go1betaは"go1beta"でした。
恐らく、古いバージョンはコンパイルエラーが発生して動かないと思いますので
古いバージョンのプログラムから持ってくる場合はチェックしましょう。
次に、controllerを作ります。
$ mkdir controller $ cd controller
frontcontroller.goを作成します。このファイルが名前の通り、frontcontrollerとなります。
package controller import ( "fmt" "net/http" ) func init() { http.HandleFunc("/twitter/", index) } func index(w http.ResponseWriter, r *http.Request) { htmlText := ` <!DOCTYPE html> <html> <head> <title>Hello World</title> </head> <body> <p>Hello World</p> </body> </html> ` fmt.Fprintf(w, "%s", htmlText) }
では、実行します。
開発サーバはdev_appserver.pyを実行するだけなので、twitterディレクトリの1つ上の
ディレクトリで実行すると便利です。
$ python [SDKのディレクトリ]/dev_appserver.py --high_replication twitter
ブラウザで、http://localhost:8080/twitter/にアクセスして、Hello Worldが
表示されれば成功です。
--high_replicationのオプションはHRD環境をエミュレートするオプションです。
現時点でこのオプションを付ける必要は無いのですが、とりあえず入れておきます。
この後、デモでは、フォームの作成で、モデルの処理を作成して、テストコードを
作成してテストを動かしてテストして…と続くのですが、
Go言語標準のコマンド、go testが動作しないため、断念しました。
https://plus.google.com/u/0/114183076079015753160/posts/intFioopvTj
ドキュメントにも載っていないし、恐らく、現時点ではGAE/GのSDKでgo testを利用する事はできないのかもしれません。
ただ、GAE/Gにもtest用のモジュールが存在しているようで、
https://code.google.com/p/gae-go-testing/source/browse/appenginetesting/
これを利用したら良いのではないかと考えている最中です。
17:16:追記
gae-go-testingはだいぶ古そうです。試しにmake installしてみましたが、だめでした。
unit testについてはもう少し様子を見たほうが良さそうです。
もしくは、標準のGo言語のコンパイラをインストールしてGAEのAPIを動かさない
パッケージのみテストを行うという方法を取るしか今は無さそうです。