SlideShare a Scribd company logo
1 of 70
しょっちゅう
「XXXってサイトにある、
このサンプルコードを
コピーして使ってるのだけど、
うちの会社のデータ件数だと
タイムアウトしちゃうんです。
どうにか助けて下さい」
って言われて、毎回同じ内容で返答していて、
流石に疲れてきたので
ちゃんとパフォーマンスの話をするからお前ら聞
いてろ下さい
何やってる?
@soundTricker318
http://goo.gl/ZpUOs
http://www.bfts.co.jp
Contents
うそ…
私のスクリプト
遅すぎ?
パフォーマンス
の良い書き方 まとめ
Start End
う
そ
・
・
・
私
の
ス
ク
リ
プ
ト
遅
す
ぎ
・
・
・
?
http://www.pakutaso.com/
公式ドキュメントにも
有りますが…
• GASは書き方によって非常にパフォーマンスが変
わります。
うそ…私の…
質問
GASを使ったことがある人?
質問
GASでサンプルコードを
コピーして
使ったことがある人?
質問
GASでサンプルコードを
コピーして
社内のシステムとして
使っている人?
質問
GASでサンプルコードを
コピーして
社内のシステムとして
使ってタイムアウトした人?
質問
• 巷のサンプルコードは比較的パフォーマンスが
悪いコードを書いている
– 公式ドキュメントに書いてある書き方を守ってな
いことが多い
• https://developers.google.com/apps-
script/best_practices?hl=ja
– 多分読みやすくするためにそうしているのだと思い
ます。
サンプルコード…
• パフォーマンスが悪いコードを使うと…
–処理が終わらなくてタイムアウトする
–なんかGASで作るの嫌になる
–GAS遅い…と言いふらすようになる
–困る
サンプルコード
パ
フ
ォ
ー
マ
ン
ス
の
良
いス
ク
リ
プ
ト
で
い
い
感
じ
に
http://www.pakutaso.com/
パフォーマンスの良い
スクリプトの書き方
• Spreadsheetに色つける処理
–データは100×100セル
–セルに「hoge」と書いてあったら黄色に
–ないなら無職
今回の処理
以下のコードをSpreadsheet上のGASで実行すれば作れます。
今回の処理
var arr = ["hoge", "fuga", "foo", "bar" , "bus", "あいうえお", "かきくけこ"];
function make() {
var grid = [];
var header = [];
for (var c = 0; c < 100; c++) {
header.push(c + 1);
}
grid.push(header);
for (var r = 1; r < 101; r++) {
var row = [];
for (var c = 0; c < 100; c++) {
row.push(arr[Math.floor(Math.random() * arr.length)]);
}
grid.push(row);
}
SpreadsheetApp.getActiveSheet().getRange(1, 1, 101, 100).clear().setValues(grid);
}
function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqS
ZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var value = spreadsheet.getSheetByName("シート1").getRange(row, col).getValue();
if (value == "hoge") {
spreadsheet.getSheetByName("シート1").getRange(row, col).setBackground("yellow");
}
}
}
}
悪いコード
function goodCode() {
var spreadsheet = SpreadsheetApp.openById("1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o");
var backgrounds = [];
var sheet = spreadsheet.getSheetByName("シート1");
var targetRange = sheet.getRange(2, 1, 100, 100);
var values = targetRange.getValues();
for(var rowIndex = 0; rowIndex < values.length; rowIndex++) {
var row = values[rowIndex];
var backgroundRow = [];
for(var colIndex = 0; colIndex < row.length; colIndex++) {
var value = row[colIndex];
if (value == "hoge") {
backgroundRow.push("yellow");
} else {
backgroundRow.push("");
}
}
backgrounds.push(backgroundRow);
}
targetRange.setBackgrounds(backgrounds);
}
良いコード
①悪い部分を知る
• 遅い理由を知らないとどこを直してよいかわか
りません
– 実行トランスクリプトを使ってどこに時間がかかっ
ているか確認する
①悪い部分を知る
①悪い部分を知る
②無駄なAPIアクセス
を減らす
• GASのService呼び出しは全てネットワーク経由で行
われるため、時間がかかります。
少しでも無駄な呼び出しはしないようにします。
②減らす
ネットワーク経由
function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqS
ZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var value = spreadsheet.getSheetByName("シート1").getRange(row, col).getValue();
if (value == "hoge") {
spreadsheet.getSheetByName("シート1").getRange(row, col).setBackground("yellow");
}
}
}
}
②減らす
function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-
LEEqQK2n4yQO-o/edit#gid=0");
var sheet = spreadsheet.getSheetByName("シート1");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var range = sheet.getRange(row, col);
var value = range.getValue();
if (value == "hoge") {
range.setBackground("yellow");
}
}
}
}
②減らす
③なるべく1度にする
• ②同じ原理でより呼び出し回数を減らすために
getValues,setBackgrounds等のBatch Operationを
利用します。
③1度にする
通常のgetValue()
getValue()
1セルで1回アクセス = 100×100回アクセス
• ②同じ原理でより呼び出し回数を減らすために
getValues,setBackgrounds等のBatch Operationを
利用します。
③1度にする
getValues()
getValues)
100×100セルを1回アクセス = 1回アクセス
function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-
LEEqQK2n4yQO-o/edit#gid=0");
var sheet = spreadsheet.getSheetByName("シート1");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var range = sheet.getRange(row, col);
var value = range.getValue();
if (value == "hoge") {
range.setBackground("yellow");
}
}
}
}
③1度にする
function badCode() {
var spreadsheet = SpreadsheetApp
.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
var backgrounds = [];
var sheet = spreadsheet.getSheetByName("シート1");
var targetRange = sheet.getRange(2, 1, 100, 100);
var values = targetRange.getValues();
for(var rowIndex = 0; rowIndex < values.length; rowIndex++) {
var row = values[rowIndex];
var backgroundRow = [];
for(var colIndex = 0; colIndex < row.length; colIndex++) {
var value = range.getValue();
if (value == "hoge") {
backgrounds.push("yellow");
} else {
backgrounds.push(“");
}
}
backgrounds.push(backgroundRow);
}
targetRange.setBackgrounds(backgrounds);
}
③1度にする
• 大体のスクリプトはこの②、③を実施すればかなりパ
フォーマンスが良くなります。
④ 我に返る
• 今回の処理はGASでやる必要がありません。
Sheetsの標準機能でやれることはそっちでやりましょ
う
– 今回のはセルの条件付き書式でできます。
– 新しいSpreadsheetはかなり細かい書式が使えるので
確認して下さい。
④我に返る
openByIdとopenByUrl
• Spreadsheet,Forms自体などを取得する際に利用す
るopenByIdとopenByUrlというメソッドが有ります。
• これらは比較的openByIdの方が速い
– IDはURL中のなんかよくわかない文字の部分がだいたいそれ
openByIdとUrl
https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-
o/edit#gid=0
UiApp
• UiAppを利用するときはなるべくClientHandler等ク
ライアントサイドで動くイベントハンドラを活用する
– UiAppのイベントハンドラは上記以外は全てサーバコールに
なりおっそい
– 適切にClientHandlerを利用するとかなりUXがよくなる
UiApp
HtmlService
• HtmlServiceのパフォーマンスを良くする書き方の話も公式
ページに乗っている
HtmlService
• 基本的には
– データの取得は非同期に行う
• doGet内などHtmlService呼び出し前に行わない
– <html>,<head>,<body>タグなどは利用しない
• cajaにより自動的に<caja-v-html>に変えられるので意味が無い
• 変えられる分時間がかかるので使わない
– Javascriptは最後に読み込む
• <script>タグはファイルの一番末尾に書いておく
• そのほうが画面が表示されてからクライアントサイドのJavascriptが実行される
HtmlService
• 大橋の感覚として
– 外部のJSやCSSは使わない方が良い
• 使う場合は<script src=“xxx”>とはせず、<script>ここにコピペ</script>して、埋
め込んでしまう。
• cajaはGoogle経由で外部JS、CSSを取得するので遅い
– 画面遷移はJavascriptを使って一部分だけ切り替える
• doGetを毎回すると遅い
• SPA(Single Page Application)の様にJSで画面を切り替えたほうが速い
• というより画面切り替えはしないほうが良い
HtmlService
どうしても遅い
• どうしても遅い時は…
– UrlFetchAppを利用してGoogle APIを直接呼び出す。
– 直接呼び出すと、欲しいデータが1回の操作で取得できる場
合がある
• CalendarAppやDriveAppなどでよくある
• fieldsパラメータを利用すると不要なデータを取得しない
ためネットワーク的にも良い
どうしても遅い
• どうしても遅い時は…
– 本当にリアルタイム(わざわざ人が待って)でやる必
要があるか考える
• Triggerを利用して遅延実行 & 通知でも良いのではない
か?
• 朝一回実行すれば大丈夫なんじゃないか?
• 実行タイミングは定期的でも良いのじゃないか?
どうしても遅い
• どうしても遅い時は…
– ちゃんとGASで作って良いのか考える
– 金で解決できるのならGAEやGCPを使ったほうが良
い
– SpreadsheetをDBとして使っている場合もそう
• 大量のデータなら場合によってはFusion Table
もっと多いならBigQueryを検討
どうしても遅い
まとめ
GASで
困ったら
#gasja
Google Apps API Japan
http://goo.gl/FcU0C
@soundTricker318
http://goo.gl/ZpUOs
会社: http://goo.gl/CfVPf
個人: http://goo.gl/kVTv3
パフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practice

More Related Content

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 

What's hot (20)

Go入門
Go入門Go入門
Go入門
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
SQLインジェクション再考
SQLインジェクション再考SQLインジェクション再考
SQLインジェクション再考
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
 
JavaScript難読化読経
JavaScript難読化読経JavaScript難読化読経
JavaScript難読化読経
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Agile開発でのテストのやり方~私の場合~
Agile開発でのテストのやり方~私の場合~Agile開発でのテストのやり方~私の場合~
Agile開発でのテストのやり方~私の場合~
 
オートスケールする GitHub Actions セルフホストランナーを構築してる話
オートスケールする GitHub Actions セルフホストランナーを構築してる話オートスケールする GitHub Actions セルフホストランナーを構築してる話
オートスケールする GitHub Actions セルフホストランナーを構築してる話
 
ホモトピー型理論入門
ホモトピー型理論入門ホモトピー型理論入門
ホモトピー型理論入門
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
 

Viewers also liked

Viewers also liked (20)

Google Apps Scriptとは? Add-onとは?
Google Apps Scriptとは? Add-onとは?Google Apps Scriptとは? Add-onとは?
Google Apps Scriptとは? Add-onとは?
 
Google Apps Script活用事例 Tokyo GAS 2013春
Google Apps Script活用事例 Tokyo GAS 2013春Google Apps Script活用事例 Tokyo GAS 2013春
Google Apps Script活用事例 Tokyo GAS 2013春
 
Google apps scriptを使って業務改善
Google apps scriptを使って業務改善Google apps scriptを使って業務改善
Google apps scriptを使って業務改善
 
2014-02-20_Tokyo-GAS#5-社内活性化推進にGASを大活用した話
2014-02-20_Tokyo-GAS#5-社内活性化推進にGASを大活用した話2014-02-20_Tokyo-GAS#5-社内活性化推進にGASを大活用した話
2014-02-20_Tokyo-GAS#5-社内活性化推進にGASを大活用した話
 
GCPUG Shonan GAS & GAE
GCPUG Shonan GAS & GAEGCPUG Shonan GAS & GAE
GCPUG Shonan GAS & GAE
 
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -エンジニアのためのSpread Sheets講座101 - Google Apps Script -
エンジニアのためのSpread Sheets講座101 - Google Apps Script -
 
1019 まぁ!簡単!google apps script入門
1019 まぁ!簡単!google apps script入門1019 まぁ!簡単!google apps script入門
1019 まぁ!簡単!google apps script入門
 
Qualité de l'air et hygiène industrielle
Qualité de l'air et hygiène industrielleQualité de l'air et hygiène industrielle
Qualité de l'air et hygiène industrielle
 
18.3 Каталог решений - Гражданское строительство EKF
18.3 Каталог решений - Гражданское строительство EKF18.3 Каталог решений - Гражданское строительство EKF
18.3 Каталог решений - Гражданское строительство EKF
 
Real estate – real fact 2
Real estate – real fact 2Real estate – real fact 2
Real estate – real fact 2
 
Vyklikajte si obyvateľov na mape vo svojom okolí
Vyklikajte si obyvateľov na mape vo svojom okolíVyklikajte si obyvateľov na mape vo svojom okolí
Vyklikajte si obyvateľov na mape vo svojom okolí
 
Campamentos de verano Barbadillo 2017 BURGOS
Campamentos de verano Barbadillo 2017 BURGOSCampamentos de verano Barbadillo 2017 BURGOS
Campamentos de verano Barbadillo 2017 BURGOS
 
Campamentos de verano Molino de Butrera 2017 Burgos
Campamentos de verano Molino de Butrera 2017 BurgosCampamentos de verano Molino de Butrera 2017 Burgos
Campamentos de verano Molino de Butrera 2017 Burgos
 
Campamento de Verano Imagina 2017 Bedmar Jaen
Campamento de Verano Imagina 2017 Bedmar JaenCampamento de Verano Imagina 2017 Bedmar Jaen
Campamento de Verano Imagina 2017 Bedmar Jaen
 
Campamentos de verano Molino de Butrera inmersion INGLES 2017 BURGOS
Campamentos de verano Molino de Butrera inmersion INGLES 2017 BURGOSCampamentos de verano Molino de Butrera inmersion INGLES 2017 BURGOS
Campamentos de verano Molino de Butrera inmersion INGLES 2017 BURGOS
 
TIM SA - podsumowanie 2016 roku
TIM SA - podsumowanie 2016 rokuTIM SA - podsumowanie 2016 roku
TIM SA - podsumowanie 2016 roku
 
Xero in on your trade clients
Xero in on your trade clientsXero in on your trade clients
Xero in on your trade clients
 
Checklist om je huwelijk tot in de puntjes te plannen
Checklist om je huwelijk tot in de puntjes te plannenChecklist om je huwelijk tot in de puntjes te plannen
Checklist om je huwelijk tot in de puntjes te plannen
 
Junta Astorga 2017 03 28
Junta Astorga 2017 03 28Junta Astorga 2017 03 28
Junta Astorga 2017 03 28
 
Campamentos de verano La Data 2017 Segovia
Campamentos de verano La Data 2017 SegoviaCampamentos de verano La Data 2017 Segovia
Campamentos de verano La Data 2017 Segovia
 

Similar to パフォーマンスの良いGASの書き方 Best Practice

SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
Yoshiyuki Asaba
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 

Similar to パフォーマンスの良いGASの書き方 Best Practice (20)

Tokyo r33 beginner
Tokyo r33 beginnerTokyo r33 beginner
Tokyo r33 beginner
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Favtile ~never write JS again~
Favtile ~never write JS again~Favtile ~never write JS again~
Favtile ~never write JS again~
 
リーダブルコード 第二章
リーダブルコード 第二章リーダブルコード 第二章
リーダブルコード 第二章
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
Groovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjugGroovyで学ぶプロセス代数 #jjug
Groovyで学ぶプロセス代数 #jjug
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
 
フロント作業の効率化
フロント作業の効率化フロント作業の効率化
フロント作業の効率化
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6Chugoku db 17th-postgresql-9.6
Chugoku db 17th-postgresql-9.6
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
 

More from 啓介 大橋 (6)

App Dojo 2017 12月 - VUI in your app with Dialogflow -
App Dojo 2017 12月 - VUI in your app with Dialogflow -App Dojo 2017 12月 - VUI in your app with Dialogflow -
App Dojo 2017 12月 - VUI in your app with Dialogflow -
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Fusion360 meetup vol2 LT
Fusion360 meetup vol2 LTFusion360 meetup vol2 LT
Fusion360 meetup vol2 LT
 
gcp ja night #27 Google Cloud Endpoints with Golang
gcp ja night #27 Google Cloud Endpoints with Golanggcp ja night #27 Google Cloud Endpoints with Golang
gcp ja night #27 Google Cloud Endpoints with Golang
 
Tokyo gas #5_whatsnewinappsscript_公開用
Tokyo gas #5_whatsnewinappsscript_公開用Tokyo gas #5_whatsnewinappsscript_公開用
Tokyo gas #5_whatsnewinappsscript_公開用
 
Dart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dartDart flightschool cloudendpoint with dart
Dart flightschool cloudendpoint with dart
 

Recently uploaded

Recently uploaded (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

パフォーマンスの良いGASの書き方 Best Practice

Editor's Notes

  1. https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
  2. https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
  3. https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
  4. https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0