GAE/Go開発メモ

GOOGLE_APPLICATION_CREDENTIALS

AppEngineで各種クライアントライブラリーを使う場合はこれを求められる。日本語情報も豊富にあるので、設定方法は簡単で、ファイルをダウンロードしてpowershellで設定。これで、ローカル開発環境で各種ライブラリーが使えます。

本番環境は自動化されている

本番環境にこのファイルを持っていけばいいのかというと、その必要はなくて サーバー間での本番環境アプリケーションの認証の設定 で、この指定がなければ自動で、デフォルトのサービスアカウント情報を使います。

そのため、ソースコード内には、クライアントライブラリーを使うための認証ソースコードなどがなく(もちろんその方法もあります。)github.comなどでも管理しやすいです。

pyコマンドで、dev_appserver.pyを動かす方法

Windowsでは、Python2と3をインストールしている場合、py -2コマンドでPython2.7を実行します。またSDKのインストール先が、sdk.staging/binになる場合があるので、エクスプローラーで確認する必要あります。(現状再インストールしたら、sdk.stagingはなくなり、sdk/binになりました。)

dev_appserver.pyでサーバーを実行した場合、ファイル監視されているので、Goファイルを修正したら、ブラウザーリロードで変更が確認できます。

本番環境デプロイはgcloudコマンド

少し前までは、Google Cloud SDKではなく、AppEngine SDKのためgoappコマンドがありましたが、今は存在しないので、glcoud app deployで本番環境にデプロイします。

Windows環境でGAE/GoとPythonについて

Google Cloud SDKがPython2.7に依存しているためPythonが必要になります。Windowsの場合は、Python2.7とPython3系を両方インストールすればよいです。現在のPythonはpy.exeで”py -2″でPython2を実行し、”py -3″でPython3を実行できます。

Google Cloud SDKの場所

コマンドプロンプトの場合は、%localappdata%でアクセスします。

“%localappdata%\Google\Cloud SDK\google-cloud-sdk”

PowerShellの場合は、$env:localappdataでアクセスします。

“$env:localappdata\Google\Cloud SDK\google-cloud-sdk”

ちなみにLocalAppDAtaは、C:\Users\<username>\AppData\Local

dev_appserver.pyの場所

Google Cloud SDKの場合は、”$env:localappdata\Google\Cloud SDK\google-cloud-sdk\bin\dev_appserver.py”フルパスで指定するとよいです。

ひとまずフルパスで指定するとよい

数年前はAppEngine SDKがあったので、それを環境変数Pathに設定して、dev_appserver.pyなどを実行していましたが、今は、Google Cloud SDK付属のdev_appserver.pyを使います。

2018年06時点では、Google Cloud SDKで本番にデプロイできますが、単体テストをするためには、AppEngine SDKを使う必要があります。

両方のSDKを環境変数Pathに通すと、「ある日突然、コマンドが動かないトラブルが発生しコードを長時間調べても問題なし、結局Pathの順番が落ちだった。」みたいになりかねないので、理解が深まるまでは、フルパスで実行するのもよさそうです。

Google Cloud SDKインストーラーが正常に動作しない

Google Cloud SDKは、Python依存のためインストーラーが正常に動作しない場合があるようです。エンコードエラーが発生したと表示される場合があります。このような場合は、バージョニングされたアーカイブ で少し前のバージョンをインストールするとうまくいくかもしれません。

私の場合は、更新後問題が発生したため、すべて削除して解決しました。

Google Cloud SDKと App Engine SDKの違い

現在はGoogle Cloud SDKをインストールして、gcloudコマンドで本番環境にデプロイしますが、以前はApp Engine SDKがありappcfgやgoappコマンドがありました。

Unitテストを実行する場合はgoapp testコマンドを実行するので、Google Cloud SDKとApp Engine SDKが必要になります。Google Cloud SDKに統合されていないので、非常に面倒です。

Local Unit Testing for Go

goappコマンドを使えるように一時的にPowershellで環境変数を設定する

Unitテストをするために、App Engine SDKのzipファイルをc:\devに展開しました。powershellでは、環境変数のダイアログではなく、起動しているPowershellのコンソールのみに以下のように適用できます。

 

GAE/Goの単体テストが重すぎる

Corei5 3GhzのPCで以下のdatastoreにデータを1つ登録、取得し確認するのに、30秒ぐらいかかります。

goapp testコマンドを実行すると以下のようにログが出力されて、go-app 11.997sと最終行に出ていますが、ログが表示されるまでに10秒以上かかる場合があります。

 

Cloud Datastoreの親子関係

以下のデータ構造はよくあります。

  • ユーザー毎のブログデータを作る
  • カテゴリ分けした記事を作る
  • ディレクトリーに分けて、ファイルを保存する

このような親子関係で分類したデータをCloud Datastoreで作る場合は、Cloud Database – データの整合性 を読むと解決できそうです。祖先クエリーや、エンティティグループという概念があるので、これで作れます。またカテゴリー分けしたTodoListのサンプルコードもあるので、これをベースにするとすぐに実装できそうです。

チュートリアル

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA