目次
はじめに
2015年7月ついにGoogle App EngineのGO言語正式サポートが決定しました。今回はGO言語の正式サポートを記念して、GAE/GOをシリーズで取り上げたいと思います(※1)。
第1回は入門編ということでGAE/GOで「Hello World」を出力するまでの手順について説明します。ただし、単純に開発サーバで「Hello World」を出力するだけでなく実際にアプリをデプロイするまでの手順についても説明します。本手順は大体10-15分くらいで完了できる内容になっておりますので、ぜひトライしてみてください。
※1 本記事はGAE/GOに焦点を当てた内容になります。GO言語自体の特徴についてはあまり触れません。GAEの基礎を学びたい場合は以下のURLを参考にしてください(ただし、英訳となります)。
https://cloud.google.com/appengine/docs/whatisgoogleappengine
GO言語とは?
GO言語は2011年11月に発表されたオープンソースのプログラミング言語で、特徴として「インタプリタ言語の高生産性」と「コンパイラ言語の実行速度」の両方を兼ね備えています。GO言語はまさに他言語の「いいとこ取り」によってつくられた言語といえます。
GO言語のはじまりは、Googleのエンジニアがメイン業務の合間で開発をはじめたのがキッカケでしたが、今や世界中で注目される言語になったと言っても過言ではありません。
Go言語のスピンアップはダントツで早い
Google App Engine というプラットフォーム上で、GO言語は他の言語と較べて何が優れているのでしょうか。ずばり一番の強みはスピンアップ(※2)の早さではないでしょうか。現在 Google App Engine がサポートしている4つの言語でスピンアップ速度を計測したところ、以下の結果が得られました(※3)。
※2 スピンアップ(spin up)とは、ユーザのリクエストによって発生するGAEインスタンスの起動処理のことです。スピンアップは以下の2つのパターンで発生し、一定時間(2~3分)アクセスがないことで、インスタンスがシャットダウンすることをスピンダウン(spin down)といいます。
(1)起動インスタンスが0の状態ではじめてユーザからアクセスがあったとき
(2)ユーザからのアクセス負荷により追加でインスタンスが立ち上がったとき
※3 各言語毎に「Hello world」をレスポンスとして返すまでの時間を計測しました。
1回目 | 2回目 | 3回目 | 4回目 | 5回目 | 平均 | |
---|---|---|---|---|---|---|
JAVA | 3.869s | 3.896s | 3.792s | 3.804s | 3.701s | 3.812s |
Python | 0.676s | 0.585s | 0.511s | 0.500s | 0.587s | 0.571s |
PHP | 0.437s | 0.309s | 0.782s | 0.424s | 0.503s | 0.491s |
GO | 0.273s | 0.273s | 0.281s | 0.376s | 0.256s | 0.291s |
表1. 言語別スピンアップ計測
体感的には大きな違いはないと思いますが、GO言語のスピンアップはPythonやPHPよりも優れていることがわかると思います。
開発環境は何を選ぶべきか
開発環境には人それぞれ好みがあると思いますが、技術系知識の共有サイトで有名なQiitaでIDEに関する記事の割合を見てみたところ、「IntelliJ IDEA」を利用しているユーザが多いように思います。
現状GOの開発をおこなう場合はIntelliJ IDEAがスタンダードのようですので、はじめてGO言語に触れる方にはIntelliJ IDEAのご利用をお勧めします。ちなみにIntelliJ IDEAでGOの開発環境を構築するための記事はQiitaに多く投稿されておりますので、ぜひそちらを参考にしてください(※4)。
※4 個人的には以下の記事がオススメです。
http://qiita.com/kaiinui/items/433eb86c022ffcad0bea
そこの『あなた』!無料で早速はじめてみましょう!
GAE/GOに限った話ではありませんが、技術を理解するには手を動かすのが一番です!ということで実際にGAE/GOに触れてみましょう!!
手順は以下(1)~(3)の流れとなります。最終的なゴールはアプリケーションのデプロイとなります。それではスタートです!!
(1) AppEngine SDKのインストール
SDKのインストール方法について説明します。
(2)ローカル環境でHello World
サンプルプログラムを開発サーバを動作させるための手順について説明します。
(3)作成したGAE/GOアプリをデプロイする
アプリのデプロイ方法について説明します。また、デプロイするために必要な事前準備(後述)についても詳しく説明します。
AppEngine SDKのインストール
まずはAppEngine SDKのインストールをおこないます。以下(1)~(5)の手順に従ってSDKのインストールをおこなってください。尚インストール環境はMac OS Xを想定しています。
(注意) 以前はGoogle Cloud SDKをインストールすれば、Go AppEngineのパッケージもまとめてインストールできましたが、現在はできなくなっているようです(2015/08/27日現在)。
以下のとおり、GAE/GOのパッケージをアップデートしようとしたところ、「スタンドアロン AppEngine SDKはもはやGoogle Cloud SDKを介して配布されない(直訳)」という警告メッセージが表示されました。
$ gcloud components update gae-go WARNING: Component [gae-go] no longer exists. WARNING: The standalone App Engine SDKs are no longer distributed through the Cloud SDK
(1)AppEngine SDKのダウンロード
以下のリンクからSDKのダウンロードをおこないます(※5)。
https://cloud.google.com/appengine/downloads
※5 ユーザはLinux/Mac/WindowsそれぞれのOSに適したSDKをダウンロードすることができます。
(2) DLファイルの解凍&展開
ダウンロードが完了したらzipファイルを解凍し任意のフォルダに移動します。
(3) SDKフォルダのパスを環境変数に追加
$HOME/.bashrcまたは$HOME/.profileに以下の行を追加します(※6)。
export PATH=/path/to/go_appengine:$PATH
※6「/path/to/」は任意のフォルダとなります。
(4) Pythonのバージョンを確認
以下のコマンドからPCにインストールされているPythonのバージョンが2.7系であるかを確認してください。2.7系ではない場合はインストールを必ずおこなってください(※7)。
/usr/bin/env python -V
※7 GO用のAppEngine SDKを利用する場合はPython2.7が必須となります。
(5) goappコマンドの確認
以下のコマンドを実行しgoappコマンドが利用可能であることを確認してください。コマンドを実行しバージョン番号が表示されれば動作確認は完了となります。
$ goapp version
ローカル環境でHello World
開発サーバで「Hello world」を出力させるまでの手順を説明します。
前述した通り動作環境はMac OS Xを想定しています。ただし、Mac特有の部分はほとんどありませんので、Linux環境全般では問題無いと思います。Windowsは適宜読み替えて頂ければと思います。
(1) アプリケーションディレクトリの作成
アプリケーションディレクトリを作成します。プログラムファイルやAppEngineの設定等はこのディレクトリ配下に置かれます。以下のコマンドからディレクトリを作成してください。
$ mkdir firstgo
(2)「Hello World」プログラムの作成
作成したディレクトリに移動し以下のプログラムを作成します。ファイル名は「hello.go」とします。
package hello import ( "fmt" "net/http" ) func init() { http.HandleFunc("/hello", handler) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, world!") }
(3) app.yamlの作成
app.yamlはGAEの設定ファイルとなります。以下の内容をそのままコピーしてファイルを作成してください。
「application」で指定するIDはホスティング先のプロジェクトID(後述)となりますが、ローカル環境で動作させる上では適当な文字列で問題ありません(※8)。
※8「Hello World」を出力するだけのプログラムでは問題ありませんが、データストア(GAE標準のデータベース)をローカル環境で利用する場合は注意が必要です。
データストアのレコード(エンティティ)を識別するためのキーには、構成として「application」のID(=ProjectID)が含まれているため、例えばapplication「a」でデータストアのエンティティを作成した後、app.yamlのapplicationを「b」に変更すると、「a」で作成したエンティティに参照できなくなります。データストアについての詳細についてはGAE/GOの第2弾記事で取り上げる予定です。
application: helloworld version: 1 runtime: go api_version: go1 handlers: - url: /.* script: _go_app
ここまでの手順で以下のフォルダ構成になっていることを確認してください。
firstgo/ app.yaml hello.go
(4) 開発サーバの起動
ローカル環境でアプリケーションを動作させるためにはgoappのサブコマンドであるserveコマンドを利用します。AppEngine SDKのインストールが完了していれば以下のコマンドが利用できると思いますので、以下のコマンドを実行してください。
$ goapp serve [-port ポート番号] firstgo(※9)
※9「firstgo」は本章(1)で作成したアプリケーションディレクトリとなります。また、[-port]オプションでポート番号の指定が可能です。オプションを指定しない場合はデフォルトで8080ポートが割り当てられます。
(5) ブラウザで確認
ブラウザで以下のURLにアクセスしてください。「Hello, world!」の文字列が表示されていることが確認できればOKです。
作成したGAE/GOアプリをデプロイ(サーバにアップして公開)する
本章ではGAE/GOアプリケーションのデプロイ方法について説明します。
GAEはGoogleが提供するクラウドプラットフォームサービス(Google Cloud Platform)の一つとなります。
GAEに限らず、GCPのクラウドサービス(※10)を利用する場合は、最初に「プロジェクト」の作成が必須となります。
まずは事前準備として「プロジェクト」の作成手順について説明し、その後に実際にアプリケーションをデプロイするための手順について説明します。
※10 ストレージ(Google Cloud Storage)やIaaSサーバ(Google Compute Engine)等、Googleはさまざまなクラウドサービスを提供しています。
事前準備
前述した通り、GAEを利用するためには、事前にGCPプロジェクトを作成しておく必要があります。以下の手順に従ってGCPプロジェクトを作成してください(※11)。
※11 すでにGCPプロジェクトが作成済みの場合は次のステップに進んでください。
(1) Developer Consoleへのアクセス
以下のURLにアクセスしてください。アクセスするにはGoogleアカウントが必要となります。Googleアカウントを持っていない場合は最初にアカウントの作成が必要です。
https://console.developers.google.com/project
(2) 利用開始画面への遷移
GoogleアカウントでアクセスしたらDeveloper Condoleのトップ画面に遷移します。「Hello Worldアプリのデプロイ」をクリックしてください。
(3) プロジェクトの作成
プロジェクト作成用のモーダルが表示されるので以下2つの項目を入力し「作成ボタン」を押下してください。例として「my-first-go-project」というプロジェクトを作成します。
- プロジェクト名
プロジェクト名は任意の文字列となります。 - プロジェクトID
twitterIDのように全世界でユニークなIDを入力します。
既に利用されているIDを入力した場合は赤文字で警告エラーが表示されます。
プロジェクトの作成が完了するとプロジェクトのコンソール画面に自動遷移します。
これでデプロイのための事前準備は完了となります。
(1) app.yamlの編集
デプロイ先の指定はapp.yamlでおこないます。
「事前準備」で作成したプロジェクトIDを「application」に指定してください。例として「事前準備」で作成したプロジェクトIDを指定します。
application: my-first-go-project version: 1 runtime: go api_version: go1 handlers: - url: /.* script: _go_app
(2) デプロイコマンドの実行
app.yamlの編集が完了したら以下のコマンドを実行します。
$ goapp deploy firstgo
(3) ブラウザで確認
ブラウザで以下のURLにアクセスしてください。「Hello, world!」の文字列が表示されていることが確認できればデプロイは成功です。
http://my-first-go-project.appspot.com/hello
これで世界中から上記URLでアクセス出来るあなただけのサーバが起動しました。
1日数十万アクセスが無い限り課金されてしまうことはありませんので、安心してください。
不安でしたら、課金停止かサービス停止をしておきましょう。
まとめ
GAE/GOで「Hello World」を出力するための手順についての説明は以上で終了となります。おそらくGO言語そのものよりも、GCP(GAE)のはじめ方がわからずに中々手が出なかった方も多いのではないでしょうか。しかし、今回説明させていただいた通りGCPはとても簡単にはじめることができるプラットフォームになっています。今回の記事がGAE/GOだけでなく、GCPのさまざまなサービスに触れるキッカケになればとても嬉しいです。
また、最初に書いた通りapps-gcpではGAE/GOをシリーズとして連載していきます。次回の第2弾記事は「データストア」に関する記事となります。ちなみに記事は予告なしで急に投稿されますので、ぜひapps-gcpを定期的にチェックしてください!