ナノカ技術メモ

ただのエンジニア。何でも屋みたいな扱い受けてます。

GoogleAppScriptをはじめよう

GoogleAppScriptとは

Google Apps Script(GAS)はGoogleが提供する11のサービスをクラウド上でスクリプトを実行することで操作できるサービスです。
言語はJavaScriptをベースとしています。

例えば一定時間ごとにデータを集計したり、SNSに投稿するBotを作ったり、GoogleSpleatSheetを編集したりなどが可能です。

以下のGoogleの機能と標準で連携することができるのでいろいろな使い方が可能です。

  • カレンダー
  • コンタクト
  • ドライブ
  • ドキュメント
  • スプレッドシート
  • フォーム
  • Gmail
  • グループ
  • マップ
  • サイト
  • Languages

GASを用意しよう

GoogleDriveに入って右クリックで「その他 > Google Apps Script」を選択。
※その他に無い場合はアプリを追加で探してみてください。
f:id:nanokanato:20170725121811p:plain:w300

GASを使ってみよう

上のアプリを追加で作成された無題のプロジェクトです。
左上の「無題のプロジェクト」の部分をクリックすることでプロジェクト名を変更できます。
f:id:nanokanato:20170725122209p:plain:w300

左の「コード.gs」の部分にgsファイルが並びます。
ファイル名の右の▽をクリックすることでファイル名を変更したり、ファイルを削除、コピーできます。
f:id:nanokanato:20170725122915p:plain:w200

とりあえず動かそう

プロジェクト名、ファイル名、メソッド名を「test」に変えてみました。
f:id:nanokanato:20170725130009p:plain:w300

function test() {
    Logger.log("Hello World!");
}

Logger.log(string)でログを表示します。

f:id:nanokanato:20170725131256p:plain:w16ボタンをクリックで実行されます。
実行後「⌘+Enter(Mac)」でログが表示されます。

f:id:nanokanato:20170725130553p:plain:w300


行数の部分をクリックすることでブレークポイントを設定できます。
f:id:nanokanato:20170725131350p:plain:w16ボタンを押すことでブレークポイントで停止してくれます。
f:id:nanokanato:20170725130702p:plain:w300
2017/07/25現在ではブレークポイントで止まってくれるのは実行開始したファイル内だけのようです。
別のファイルのブレークポイントで止めたい場合は、メソッドから別のファイルのメソッドを呼び出しているところで一度止めてから、f:id:nanokanato:20170725131414p:plain:w16ステップインすることで呼び出し先の別ファイルのメソッドへ移動できます。
別のファイルに移動した後であればそのファイルのブレークポイントに止まってくれました。

他に何ができるかは以下を参考にどうぞ
Calendar Service  |  Apps Script  |  Google Developers

トリガーの設定

定期的に集計などをしたい場合、その都度再生ボタンを押すのは面倒です。
トリガーとは再生ボタンを押さなくても一定時間ごとに指定したメソッドを実行してくれます。
f:id:nanokanato:20170725131906p:plain:w16ボタンを押して、トリガーを設定してください。

トリガーを設定するウィンドウが表示されました。
最初は青文字のリンクを押すことでトリガーを追加できます。
f:id:nanokanato:20170725132009p:plain:w300

実行の部分はメソッド名が入ります。ここではtestを選んでいます。
イベントには実行周期を登録します。
「特定の日時」「月タイマー」「週タイマー」「日タイマー」「時タイマー」「分タイマー」から選べます。
また、「新しいトリガーを追加」で新しいトリガーを追加できます。
f:id:nanokanato:20170725132339p:plain:w300

時タイマーで設定して1時間ごとにはなりますが、0:16→1:15のように0分ぴったりでは無いので注意です。

ぴったりの時間に処理したい場合は以下のように毎分に設定し、NowMin(分)が0であることを確認すれば間違いないです。
これで毎時0分ぴったりに処理することになります。

    var Nowymdhms = new Date();
    var NowYear = Nowymdhms.getYear();
    var NowMon = Nowymdhms.getMonth() + 1;
    var NowDay = Nowymdhms.getDate();
    var NowHour = Nowymdhms.getHours();
    var NowMin = Nowymdhms.getMinutes();
    if (NowMin == 0) {

    }