GCPUG Shonan fet.GAE vol.3 に参加したメモ


# 概要
湘南の東京都江東区という場所に済んでいるので [GCPUG Shonan fet.GAE vol.3](http://gcpug-shonan.connpass.com/event/32995/) に参加してきました。茅ヶ崎まで60kmぐらいです。電車では90分ぐらいかかります。普段横浜の[タネマキGAE](http://tanemaki-gae.connpass.com/)に参加している縁もあって __人類には早すぎた__などと謂われなき批難を受け続けたGAEですが、最近やっと人類が追いついてきたと思うんですよね。

__GAEはいいぞ。__

# 発表の内容について
|発表者(敬称略)|タイトル|使用GAE|
|:--|:--|:--|
|s0kam0|PHP:ZendExpressive + SendGridでメール送信|Standard (PHP)|
|secondarykey|GAE/Goでブログを作ってみた|Standard (Go)|
|ryu22e|GAEで社内向けドキュメント公開|Standard (Go)|
|sou|GAE デプロイボットを GAE で動かす話|Flexible|
|junya_debari|GAEとBigQueryでジオコーディングの精度を調べたい話|Standard (Py)|
|nagai7|「パフォーマンスを言語ごとで調べてみた」|色々|
|nuki_pon|GAEからGCEinstanceを上げたり、落としたり|Standard (Go)|

## PHP:ZendExpressive + SendGridでメール送信
__App Engine と いまどきのPHP__ というタイトルに変わっていました。「GAE/PHP は凄く使われてるってGoogleは言ってるよ！」「Qiitaで記事数を調べてみた」「GAE/PHPの霊圧が・・・」みたいな話がありました。Frexible 環境の Ruby の方が記事数が多いという衝撃の検索結果ですが、 NodeJS よりは件数多そうです。
GAE/PHP ではファイルキャッシュができないので memcache を使う話なんかはもうちょっと強調してもいいと思います。強調しておきますね。 __GAE/PHP ではファイルキャッシュができないので memcache を使う。__ 

そういえば ECCube (EC系のオープンソース) でもファイルキャッシュが基本だったような気がしますが、PHPでは一般的なんでしょうか。

## GAE/Goでブログを作ってみた
GAE/Go でブログを作る話ですね。Go言語は私自身は勉強中なのですが、GAEの根本的なところは変わらないはず。レンダリングしたHTMLはデータストアに保存しているような話だったと思います。私がGAE/Pythonで何か作った時はレンダリングしたHTMLを普通にキャッシュに突っ込んでいたような気がします。

>一度は単純にCursorの文字列でページングをしていたのですが、そのURLを検索エンジンに覚えられてもだったのでページ数を指定して、それをmemcacheに設定してアクセスしています

データストアって普通に LIMIT と OFFSET が指定できたと思うんですが、 GAE/Go では違うんでしょうか・・・？どんなに頑張っても OFFSET が1,000までしかいかない(エラーは出ないのに返却値は1,000のところで止まる)時代があったりしてあんまりページングに向いてない印象があります。先に進むときのカーソルは普通に設定して問題ないのですが、逆向きのカーソルを作ろうとすると結構ややこしかったような記憶があります。 __ブログ記事1,000件以上遡ってはいけない__とかでいいんじゃないでしょうか。ダメか。

memcache って結構油断できない消え方するし、定期的に memcache に値を設定するために cron とか使うと instance hour が上がっていく。

## GAEで社内向けドキュメント公開
社内ドキュメント置き場にGAEを使う話ですね。有益。是非自分でも使っていきたい。権限管理とかも全部Googleで完結するし。`login: required` とユーザドメインの組み合わせでどうにかなると思う。GAEのユーザオブジェクトの username って確か Google Apps アカウントでアクセスするとドメインまで付与される。gmail.com だと@より前しか出ないけど。
自動生成したドキュメントとかガンガンGAEに放り込んでいけばいいですよね。正直Wikiとかだと記法が使ってるWikiによって違ったりするし、世の中全部自動生成したドキュメントと MarkDown だけでいいと思います。Qiita は全部 MarkDown で完結するので便利でいいですね。Qiita:Team と ryu22e さんのコレで社内ドキュメントを完結させたい。

## GAE デプロイボットを GAE で動かす話
GAE/Go にデプロイするための Slack bot を GAE NodeJS (on Frexible Environment) で動かす話です。いつのまにか落ちてることがあったり、多重起動してることがあったりするものの、業務で利用するレベルでは問題はない、とのこと。

GAE のいいところって「必要な時だけ立ち上がって必要な時は落ちてる」っていうところだと思いますが、現状 Flexible Environment ではそういうわけにもいかなさそうです。とはいえ、bot の導入で人間がやってるデプロイ作業を軽減できるのであれば費用対効果は充分高いと思います。お金かかんないならソレに超したことはないですけどね。Slack Bot である以上は立ち上がらないでいることもできないので、どっちにしてもお金はかかりそうである。


## GAEとBigQueryでジオコーディングの精度を調べたい話
私の話です。正確には __逆ジオコーディング__の話です。

Google Geocoding API に緯度経度を送ると住所に変換してくれますが、この「住所」というのは最寄りの代表点の住所でしかなくて、正確に送った場所の住所ではなさそうです。ということは、ココには誤差があるわけで、この誤差の収集をGAEで行い、分析をBigQueryで行う、ということをやろうとしています。

が、「BigQueryの事例って結構多い」ということで、後半から __GAEしくじり先生__みたいな話になりました。ざっくり書くと __memcache の値はバンバン揮発するのでフローの制御に使うべきではない__ ということです。memcache はあくまでデータストアからの取得高速化とか、レンダリングの結果保存とかに使いましょう。memcache で排他制御とかやると値が揮発してプロセスが多重起動しまくるので、instance hour が高騰する原因に成り得ます。

## 「パフォーマンスを言語ごとで調べてみた」
GAE の Standard, Flexible 各環境各言語で Hello, World を書いて Apache Bench でシバく話です。PHP のパフォーマンスが興味深く、Flexible の方が Standard よりもインスタンス数が少ない。っていうか PHP は前に Apache や NGINX などの Web サーバを置いて使うので Flexible ではそうしてる気配があって、 Standard Environment はそうではないような気配がありますね。どういう実装になっているんだろう、GAE/PHPは。シングルプロセスになっているかのようなインスタンス数の延びでした。

あと、お金大丈夫なのか、あのテストは？

## GAEからGCEinstanceを上げたり、落としたり
タイトルのまんまですが、GAEで作った Web クライアントからGCEのインスタンスを上げたり落としたりする話。裏側で Compute Engine API を叩いてインスタンスを動かしているようです。 GCE の start-up-script は Google Cloud Storage とかに置いておけばいい。Google Cloud Storage といえば、 `gs://hogehoge` って Ghostscript の略じゃないんですよ。なんてことだ。

そういえばデモで立ち上がらなかったインスタンスはどうなったんでしょうか。

# 懇親会
GCPUG は Google から補助金が出ているとはいえ、ホントにこんなに豪勢でいいのか？というぐらい豪勢な懇親会でした。GCPUG Shonan すごい。[茅ヶ崎Lonin](https://www.facebook.com/wifi.space.0214/)すごい。茅ヶ崎といえば[Chigasaki-Guild.NET](https://www.chigasaki-guild.net/)が立ち上がったらしいです。


# まとめ
- GAEはいいぞ。
- GCPUG Shonan はいいぞ。