Go App Engine アプリケーションは、Goの http packageと互換性のあるウェブサーバを介して外界と通信を行います。 これにより、スタンドアロンのGo ウェブアプリケーションと記述する時と同じやり方で Go App Engineアプリケーションを記述できます。
それでは、短いメッセージを表示する簡単なアプリケーションの実装を始めましょう。
myapp
という名前のディレクトリを作成してください。
このアプリケーション用の全てのファイルはこのディレクトリに置きます。
myapp
ディレクトリ内で、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!") }
このGo package は、リクエストに対してHello, world!
メッセージを含んだ応答を返します。
注意:スタンドアロンの Go プログラムを記述する時は、このコードをmain
パッケージ内に配置するでしょう
Go App Engine ランタイムではmain
パッケージは特別なものとして使用されているので、
HTTP ハンドラコードをあなたが選んだパッケージ内 (この場合は hello
に配置する必要があります。
App Engine アプリケーションは app.yaml
と呼ばれる設定ファイルを持っています。
特に、このファイルでは使用するランタイムとGo プログラムによって処理されるURLをApp Engineサービスに指示します。
myapp
ディレクトリ内で、以下の内容を記述したapp.yaml
という名前のファイルを作成してください:
application: helloworld version: 1 runtime: go api_version: go1 handlers: - url: /.* script: _go_app
上から順に、この設定ファイルではこのアプリケーションに関する以下の内容について記述しています:
helloworld
です。
このチュートリアルの後半であなたのアプリケーションをApp Engine に登録する際に、重複のない識別子を選択し、この値を更新します。
この値は、開発段階では何でも良いです。今のところはhelloworld
と設定しておきましょう。
1
を表します。
新しいバージョンのアプリケーションソフトウェアをアップロードする前にこの値を変更した場合、 App Engine は以前のバージョンを保持しておくので、管理コンソールを使って以前のバージョンにロールバックできるようになります。
go
ランタイム環境の、API バージョン go1
で動作します。
/.*
に合致するパスを持つURL(つまり全てのURL)へのリクエストは、Go プログラムによって処理されます。
_go_app
の値は、開発用ウェブサーバで認識される魔法の文字です;製品版App Engineサーバでは無視されます。
注意: Go SDK はPython SDKおよびJava SDKとは異なる動作をします:
特定のアプリ用のGoパッケージは、全部まとめて単一の実行可能ファイルにビルドされます。
リクエストの割り振りはGo プログラム自身が処理します。
これは、handler
とウェブルート ("/"
)を関連付けるためにinit
関数内でhttp.HandleFunc
を呼び出すためです。
ですが、app.yaml
を使って静的ファイルを提示するパスや特別な権限が必要なパスを設定することもできます。
このファイルの構造は YAML形式です。 設定オプションの全一覧についてはGo アプリケーション設定のページを参照してください。
hello
パッケージ と全てのURLが Go プログラムに紐付けられた設定ファイルの準備ができれば、アプリケーションは完成です。
これで、App Engine SDKを持つウェブサーバでアプリケーションをテストできます。
全てのファイルが適切な位置に置かれているか確認してください。 アプリケーションのディレクトリ構造は以下のようになります:
myapp/ app.yaml hello.go
myapp
ディレクトリへのパスを指定した以下のコマンドを実行すると、アプリがコンパイルされてデベロップメントウェブサーバを起動します:
/path/to/go_appengine/goapp serve myapp/
前回推奨したように/path/to/go_appengine/
をあなたのPATH
に追加しているのであれば、
コマンドの/path/to/go_appengine/
の部分は削除できます。
また、カレントディレクトリがmyapp
の場合も同じように省略ができるので、コマンドはシンプルになります:
goapp serve
これでウェブサーバは動作しており、8080ポートでリクエストを待っています。 ウェブブラウザに以下のURLを入力するとアプリケーションをテストできます。:
使用するポートの変更方法を含む、デベロップメントサーバの動作についての詳細情報は、Go デベロップメントサーバリファレンスを参照するか、goapp help serve
を実行してください。
デベロップメントサーバはソースファイルの変更を監視しています。
あなたがソースファイルを更新すると、それらを再コンパイルしてローカルアプリを再起動します。
goapp
で再起動する必要はありません。
それでは試してみましょう: ウェブサーバを動作状態にしておき、hello.go
を編集して表示する文字をHello, world!
から別の何かに変更してください。 http://localhost:8080/のページをリロードすると、変更されたページが表示されます。
ウェブサーバをシャットダウンするには、ターミナルウィンドウをアクティブ状態にして、 ControlキーとCキーを押してください (もしくはあなたのコンソールの適切な "break" キーを押してください)。
以降のチュートリアルの間も、ウェブサーバを起動したままにできます。サーバを停止する必要がある場合でも、前述のコマンドを実行してサーバを再度起動することができます。
これで App Engine アプリケーションが完成しました! このシンプルな挨拶文アプリケーションを すぐに配置し、世界中のユーザーに公開できます。 しかしアプリを配置する前に、他にも様々な機能を追加してみましょう。