GCPUG Shonan GAS & GAE
-
Upload
- -
Category
Engineering
-
view
625 -
download
1
Transcript of GCPUG Shonan GAS & GAE
GAS と GAE〜その他 GAEをだらだらと〜
お前、誰よ
大橋
啓介
と申し
ます
何やってる?
http://www.kabuku.co.jp
話す
事
アジェンダ
1. 今日のゴール
2. 私と GAE と GAS3. GAS とは
4. GAE と GAS の連携
5. 別の連携
6. 時間があったらオレオレ GAE の Tips
今日のゴール• GASを知らない人
– GAS をとりあえず知る
– 帰ったら触る
• GAEを知らない人– GAS をとりあえず知る
– 帰ったら触る
• どっちも知ってる人– 連携する利点を知る
• もう連携してる人– 違う解を知る
ゴール 私と GAS 連携 別 その他
私と
GAS と
GAE
私と GAE• GAE とは2009 年 07 月ゴロから
–GAE/P が 2008 年 4 月 (preview)–GAE/J が 2009 年 4 月
• 言語とフレームワークとなんか色々– Java -> サーバ構築 -> テスター & VBA -> C(CGI) -> SAStruts+Maven+Jenkins -
> GAE -> GWT + JS -> slim3 -> GAS(expert) -> Android -> CoffeeScript+Grunt -> AngularJS -> 営業 -> AWS+chef+Ansible -> Go -> TypeScript+CircleCI+Docker ->GCP + Docker -> Python
※ プロジェクトじゃなくてマジで触ってたもの限定
ゴール 私と GAS 連携 別 その他
つまり
雑食
私と GAS• GAS とは2010 年 12 月ゴロから
– GAS は 2009 年 8 月
–一応 2014 年から GDE–正直最近 GAS よりも GCP のほうが ( ゲフンゲフン
• 2013 年 10 月ぐらいから Expert• 幾つかのライブラリーを出してる
ゴール 私と GAS 連携 別 その他
GAS とは ?
GAS•Google Apps Script–通称 GAS 、ガス、ギャス
–海外圏では Apps Script• Google が提供する–サーバサイドスクリプト実行環境 & 開発ツール
• 2009 年発
• 開発言語: JavaScript
ゴール 私と GAS 連携 別 その他
使い所
GAS の使い所• 小さいタスクの自動化–定期レポート
–マスターデータメンテ• DB は触れないユーザでも Spreadsheets はされる
• Spreadsheets のほうで集計して別の場所に入れる
–小さい運用フロー• 管理画面作るほどじゃないけど…
• 軽いノリでなんかを作る
ゴール 私と GAS 連携 別 その他
特徴
GAS の特徴• 簡単–3 行でメール送信
–数行で Google サービス連携
ゴール 私と GAS 連携 別 その他
function myFunction() { MailApp.sendEmail("[email protected]", "テストタイトル ", "本文 ");}
function myFunction() { var data = SpreadsheetApp.openById(id).getSheetByName("顧客名簿 ").getRange("A2:D2").getValues()[0]; var email = data[0]; var name = data[1]; var subject = data[2]; var body = data[3]; MailApp.sendEmail(email, subject, body.replace(/name/mg, name));}
GAS の特徴• 開発環境不要–すべてブラウザ上で開発可能• https://script.google.com
ゴール 私と GAS 連携 別 その他
GAS の特徴• 無料–まじで無料
–メール送信数など一部制限あり
–逆に金で解決は無理
ゴール 私と GAS 連携 別 その他
GAS の特徴• 実行スピードは速くない–書き方によってかなり変わる• 70 倍以上違う時もある
• 最近は開発環境側で指摘してくれる
–最大 6 分しか動かない
–普通の JS のスピード間隔じゃないほうが良い
ゴール 私と GAS 連携 別 その他
GAS の特徴• 自動化–時間指定やイベントドリブンで動かせる• 時間指定
• 定期実行–分毎、日毎、週毎 ( 曜日指定 ) 、月毎
• Spread Sheets の表示 / 更新
• Google Form に回答
• Google Sites のリンク
• Google Docs を表示
• メニューからクリック
–UI も持てる
ゴール 私と GAS 連携 別 その他
デモ
GAS と GAE連携
連携• GAS と GAE は幾つかの方法で連携できる
–1
–2
–3
–4
ゴール 私と GAS 連携 別 その他
HTTPS ( &OAuth2)
HTTPS
Execution API
Log Subscribe
HTTPS ( &OAuth2)
• GAS から GAE–UrlFetchApp を利用して HTTP 経由で送
る
–GAS から GAE は基本この方法だけ
ゴール 私と GAS 連携 別 その他HTTPS ( &OAuth2)
function myFunction() { UrlFetchApp.fetch("https://app-id.appspot.com", { method: "POST", contentType: "application/json", payload: { "key": "value" } });}
• GAS から GAE–認証する場合は OAuth Token をつける
–GAE は oauth モジュールで認証• Application(GAS 側 ) を限定するなら client-id
で絞る
ゴール 私と GAS 連携 別 その他HTTPS ( &OAuth2)
• GAS から GAE with OAuth2– GAS 側コード
– Session.getActiveUser() で oauth scope を設定
– ScriptApp.getOAuthToken() で token 取得
ゴール 私と GAS 連携 別 その他HTTPS ( &OAuth2)
• GAS から GAE with OAuth2–GAE 側コード
–OAuth2 認証を使う
ゴール 私と GAS 連携 別 その他HTTPS ( &OAuth2)
HTTPS
• GAE から GAS 1–GAS 側に HTTP で呼び出す口を作る
ゴール 私と GAS 連携 別 その他HTTPS
• GAE から GAS 1–GAE 側から urlfetch で呼びだす
–認証は… ( ゲフンゲフン• 方法がないので基本 secret key でやる
•
ゴール 私と GAS 連携 別 その他HTTPS
• GAE から GAS 1–認証• 厳密には GAS->GAE 同様の方法もある
GAS 側
•
ゴール 私と GAS 連携 別 その他HTTPS
• GAE から GAS 1–認証• 厳密には GAS->GAE 同様の方法もある
GAE 側
•
ゴール 私と GAS 連携 別 その他HTTPS
Execution API
• GAE から GAS–GAS の Execution API を利用する• 資料作るのがアレだったので昔の Blog を…– http://qiita.com/soundTricker/items/1bcfc5c9e8
0d29a7ae4b• Execution API では Service Account が使えな
いので結構めんどいかも
ゴール 私と GAS 連携 別 その他Execution API
• GAE Pub/Sub GAS–単純に GAE の何かしらをふっくして GAS
で処理したいのであれば Pub/Sub を使うパターンも有る
–GAE -> (Log) -> Cloud Logging -> Pub/Sub -> GAS のパターン
–適用例• BigQuery にデータ突っ込む
• エラーログを Slack に流す
ゴール 私と GAS 連携 別 その他
• GAE Pub/Sub GAS–http://qiita.com/soundTricker/items/
a9569b5ed71d15429444
ゴール 私と GAS 連携 別 その他
別連携
別の方法• 直接API コール–ぶっちゃけ普通に API コールをすればよい
• そのほうが後々汎用性高いよ
• Datastore弄りたいなら– GAS から Cloud Datastore API 呼べるよ
• Cloud Functions– 最後の例は Cloud Functions で置き換えられるよ
– GAE -> (Log) -> Cloud Logging -> Pub/Sub -> Cloud Functions のパターン
– めんどくさいから実際に動いてるコード見せるお
ゴール 私と GAS 連携 別 その他
その他
その他• app_identify
– appengine で appengine周りの情報を取るモジュール
– access_token を取得できる 素敵
• google.appengine.ext.admin.application– ローカルで動いている admin 画面が本番でも使える
– Pyhton だと interactive コンソールが使える マジ素敵
• Cloud Playground– appengine(python) 用の web playground– あれどうだったけをちょろく試すのに便利
– https://cloud-playground.appspot.com/playground/
ゴール 私と GAS 連携 別 その他
We are hiring
人材募集中フロントエンド http://www.kabuku.co.jp/jobs/front-end-developerバックエンド http://www.kabuku.co.jp/jobs/backend-developerC/C++ プログラマ http://www.kabuku.co.jp/jobs/cg-cad-programmer
※ 3D プリンター / フィラメント使いたい放題の福利厚生付き