hartmannのゲームあれこれ

適当にやってるゲームのあれこれを偶に書きます

WoT CWE管理シート自動化の旅々 番外編1.『トリガーみたいな何か』

お約束1

 本当は本編内に入れたかったのですが、そうすると「魔女の旅々」とのタイトル名でのつながりがなくなってしまうので、番外編として書くことにし、CWEが始まる前に投稿することになりました。

 番外編では怪文書は書きません。いたってまじめな文章です(どこが?)。

やりたいこと

 擬似トリガーを作ります。トリガーの使用用途は、第3話で作ったマッチング情報を取得するスクリプトを15分おきに動かすために使用します。下の画像のように元々GASに用意されているトリガー設定で「15分おき」で設定してもいいのですが、これで動かすトリガーは最初の起動時間に依存してしまいます。例えば最初の起動が22分だった場合は次の起動が37分となり、その後15分ごとに起動という形になります。

 しかし、「特別戦」が建つ前に(あるいはできるだけ早く)予定表内にメモを埋め込まないと指揮官のためになりませんので、スクリプトが起動する時間はマッチングが新しく起こる15分・30分・45分・00分にした方がいいでしょう(ここではラグも考慮して、それぞれ+1分にしています)。  

f:id:TS_hartmann:20210101204807p:plain
時間主導型のトリガーは最初に起動した時間に依存する

  それなら最初の起動を15分にしてしまえば、後の起動が30分・45分・00分になるじゃないかと思う方もいるでしょうが、面倒くさい仕様があるのです。それは手動でテスト起動した場合でも「最初の起動時間」が更新されてしまうのです。これではテストのために手動でスクリプトを動かすなんてできなくなりますよね。

 私もいろいろ調べましたが、指定した時間に動作させるトリガーを作る方法は書いてあったものの、他のトリガーも一緒くたに運用している場合は面倒なコードを書かなければならず……といい方法はどこにも書いていないのでした......

 そこで思いついた方法が「時間の判定をして、特定の時間だったら次のスクリプトを回す」という処理を毎分ごとのトリガーで行うということなのでした……  

擬似トリガーの作成

手順1. GAS側の記述

 いつも通りまずはコードからです。

function triggerAt() {

  //指定時間トリガー
 
  var now = new Date();
  var mins = now.getMinutes();
  
  if(mins == "16.0"|mins == "31.0"|mins == "46.0"|mins == "1.0"){
     Scraping2();
     Logger.log("次のコードを回す");
    }
  Logger.log(mins);
}

 これを毎分起動するだけです。多分16分、31分、46分、01分だけ次のコードを回す擬似トリガーとなっているでしょう。

手順2. スプレッドシート側の記述

 ありません。

お約束2

 ありません。