Gas

社内業務改善でGAS(Google Apps Script)を使ってみた

バックエンドエンジニアだけど最近フロントエンドをすごいやっててフロントにちょっと憧れを感じ始めているばーいなです。

入社早々に先輩社員から以下のミッションを下されました。

「ガスで営業日が取得できるプログラムを作ってほしいです」^^

ガス!?
ガスって何!?

「都市ガスとプロパンガスどっち使えばいいですかね?」

なんて気のきいた事も言えずに調べました笑

Google Apps Script(GAS)

Googleが提供しているJavaScriptベースの開発環境。
数多くのGoogleサービスをプログラミングにて操作をすることが可能。
(GoogleカレンダーやGoogleスプレッドシートなどなど)
Googleアカウントを持っていれば利用できる。

簡単に説明するとこんな感じです。

またGASの中でも
Standalone Script (ドライブ上に単独で存在するもの)
Container Bound Script (スプレッドシートに紐づくもの)
の2種類があるそうです。

私は最初に教えてもらったのがスプレッドシートからの起動だったのでそちらで実装を進めました。

ん〜、JavaScriptベースか。実際GASの前にJavaScriptもほぼ扱ったことないので基礎からやってみました。

実践編

・スプレッドシートを開き、ツール→スクリプトエディタを選択

・Google Apps Scriptが開きます

・試しに以下コードを入力し、保存します。「プロジェクト名の編集」が開くのでわかりやすい名前で保存します。

function myFunction() {
  Browser.msgBox('hello breeze!!');
}

・それでは実行してみましょう! 実行→関数を実行→myFunctionを選択します。

・以下のメッセージが表示されたら 許可を確認を選択します。

・実行結果

おおおおおお!メッセージが表示されましたね!

こんな感じでいろいろ試しながら実際に作成したコードがこちら。

function getBusinessDays(startdate,enddate) {

  //日数カウント用
  var count = 0;

  //現在の年号を取得
  var year = new Date();
  var nowyear = year.getFullYear();

  //年号と日付を連結しDate型に変換
  var startdate = nowyear + "/" + startdate;
  var enddate = nowyear + "/" + enddate;
  var startdate = new Date(startdate);
  var enddate = new Date(enddate);

  //曜日の判定をするため日だけ取得
  var startday = startdate.getDate();
  var endday = enddate.getDate();

  //営業日の取得
  for (var i = startday; i <= endday; i++) {

    var allday = new Date(startdate.setDate(i));

    //土曜 or 日曜の場合カウントしない
    if(allday.getDay() != 0 && allday.getDay() != 6){
      var count = count + 1;

      //祝日 or 振替休日の場合は-する
      if(gethappyday(allday) == true){
        var count = count - 1;
      }
    } 
  }
}

ざっくり説明すると、開始日、終了日を引数で受け取り、年号をつけて、型変換して、ループで土日を抜いた日数をカウント。さらに祝日だった場合はカウントした日数から-1してます。
(祝日を判定するプログラムは先輩社員からいただきました。)

最後に

Google Apps Scriptは調べれば概要や技術情報紹介してるサイトがたくさんありますので興味あったら調べてみてください!

作者情報

フロントエンドってなんかオシャレだなと感じてきたバックエンドエンジニア。
日サロじゃないよ、地黒だよ。
酒は飲んでも飲まれるな。