コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

自分のアジリティを知る

わたしのアジリティ

RPGやなんかで成長ステータスの振り分けみたいなことができるゲームですと、AGIが命中や回避、攻撃回数とか重要要素を担っていたりするんですけどあの欲張りセットみたいな構成なんなんですかね。僕はATKに全振りして圧倒的パワーですべてを蹂躙したいのに攻撃が一切あたらないキャラクターができてしまうんですよ。なんなんですかこの差別。つらい……。



それじゃあ話が代わりますが、GASとAPIとログの話をします。こんなタイトルですがGASとAPIとログの話をします。以前に0時投稿のAPI使ってみたの話をしたときにこんなご指摘をいただきましたので検証していきます。

APIとか、便利なモジュールを使うと処理が重くなるのでぴったり0時に投稿は難しいですね。

ラグが1分以内なら、1分前に処理をして、時間を監視するループで待機状態にして、きっかり0時に投稿するようにするとか。
23:59に処理を実行して前日になる場合は、翌日の曜日を取得するような余計な処理が必要になりますが、曜日だけならハッシュで簡単に実現できそうな気がします。

曜日取得に関しては僕のほうでネタがなくて実装しているやつなので、別にタイムがずれ込もうがどうでもいいですが実装したやつがどのくらい遅延発生しているのかは気になるところさんなので調べていきたいと思います。

GASで速さをしらべる

人から指摘されてログを取るようになるの完全にものつくる人としての配慮たらないけど、個人で何かやるとそんな感じになるものです。てなわけでGASのログの取り方をやっていきますです。Loggerクラスを利用することで時間を取得することができるっぽいです。
Class Logger  |  Apps Script  |  Google Developers

とりあえず、使い方の確認です。

function myFunction() {
  Logger.log('Begin');
  var start = new Date();
  
  Logger.log('End');
  var end = new Date();
  
  var secs = (end - start)/1000;
  Logger.log("処理時間: " + secs + " 秒" );
}

Date使うの無駄処理って感じだけど、ログから吐き出される時間の差分とるのめんどいからこれで…。とりあえず実行すると、この辺にぃログをだすことできるので確認しましょうね。
f:id:andron:20180510195701p:plain

ちなみに実行結果はこんな感じです。

[yy-mm-dd h:m:s JST] Begin
[yy-mm-dd h:m:s JST] End
[yy-mm-dd h:m:s JST] 処理時間: 0.001 秒

処理時間速すぎたから、適当なループでも入れようかと思ったけど確認用だから妥協した。許して。


といった感じで確認できるのでぃす。というわけで本題です。以前に指摘いただいた例のアレはどのくらいの速さで動いているのか見ていきたいと思います。

以前のアレのページ
inujini.hatenablog.com

これのメイン関数の始まりと終わりの時間差分を処理時間として取ってみます。

function myFunction() {
  var start = new Date();
  var token = "my token";
  var rid = "room id";
  var msg = getMonday()
  sendMessage(token,rid,msg);
  body = talkAPI(msg);
  sendMessage(token,rid,body);
  var end = new Date();
  var secs = (end - start)/1000;
  Logger.log("処理時間: " + secs + " 秒" );  
}

これ書いててDateって標準でdiffとれたっけなって思ったけど、作ってしまったからこのままごり押します。

処理時間: 2.635 秒

結果処理時間約 2.7秒でした。


まあ、株取引用の決済APIでもないですし僕的には良いほうだと思ってます。それでなんで前回実行時に40分ぐらいめっちゃずれ込むのかと言いますと、実際のGASのトリガー設定(GASでのcron的なやつ)はこうなってんですよね。
f:id:andron:20180510203001p:plain
一時間ほどゆとり持ってるんですよ。そのあたり前回記事で書いてないから伝わらない感じになってしまったかなと後悔。ただハッシュでどうにかするという知見はためになりましたので、スプレッドシートと連携して処理をするときなどに応用させていただきたいと思います。あとは……やろうと思えば、処理を遅延させるって手もありますね。数十分も処理を遅延させるってのは確認が面倒になるから実装するかはよくわかんないですけど。


そういった感じで、スクリプト側は約3秒でなんとかしてくれてるっぽいです。それで、このGAS側のトリガー処理はどうやったら早くなんですかね……。Google筆頭株主にでもなると優先されたりするんですかね。


おしまい。