Google Apps Scriptで日付関連の処理を関数化する例とその際のポイント


component

photo credit: blairwang Find Your View via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASでGoogleカレンダーにまとめてイベントを登録できるツールを作成しています。

前回の記事はこちら。

Google Apps ScriptでDateオブジェクトの複製や時刻のセットで注意すること
GASでGoogleカレンダーに複数の予定を簡単に登録できるツールを作成しています。今回はGoogle Apps ScriptでDateオブジェクトの複製や時刻のセットで注意することについてお伝えします。

イベントの登録に必要なスプレッドシートの入力は簡単にできる一方で、日付関連の処理にコツが必要だったので、それについて解説をしました。

今回はその続きで、若干複雑化したスクリプトを関数化することで、よりシンプルにしていきます。

Google Apps Scriptで日付関連の処理を関数化する例とそのポイントについて解説をしていきます。

では、行ってみましょう!

前回のおさらい

Googleカレンダーに登録するイベントを入力するスプレッドシートは以下のようなものです。

カレンダーに追加するデータをスプレッドシートに入力

そして、このスプレッドシートの入力をもとに、デフォルトカレンダーにイベントを登録するスクリプトはこちらです。

7行目から13行目まで、Dateオブジェクト関連の若干ややこしめの処理が入りました。

このあたりを関数として部品化することで、シンプルなコードに変更していきたいと思います。

なお、関数の作り方は以下の記事を復習しておいてくださいね。

【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
Google Apps ScriptでBotを作りながらその基本を学ぶシリーズです。今回は、関数から別の関数を呼び出す方法です。functionの書き方、引数、仮引数、戻り値などについても解説します。

共通部分を関数化する

さて、スクリプトですが、よくご覧いただくと、7~9行目と、11~13行目って、処理として似ていますよね…?

処理として似ているところは、うまくやると共通化して外に出す、つまり関数化することができます。

  • 7~9行目
    1. values[i][1]をベースにDateオブジェクトstartTimeを生成し
    2. values[i][2]の時間、分をセットする
  • 11~13行目
    1. startTimeをベースにDateオブジェクトendTimeを生成し
    2. values[i][3]の時間、分をそれぞれ加算する

ちょっと文面が違うので、工夫して同じ文面に揃えてみちゃいましょうか。

  • 7~9行目
    1. values[i][1]をベースにDateオブジェクトstartTimeを生成し
    2. values[i][2]の時間、分をセットして
    3. 0時間0分を加算する
  • 11~13行目
    1. startTimeをベースにDateオブジェクトendTimeを生成し
    2. startTimeの時、分をセットして
    3. values[i][3]の時間、分を加算する

なんか揃いましたね。

どちらかに不足している部分があれば、両方で辻褄が合うように揃えればOKです。例えば、「加算する」がどちらかになければ、そちらは「0を加算する」とすれば良いわけです。

このように似ている処理は共通化することができます。

共通部分を関数化したスクリプト

この考えのもと、別関数として部品化したのが以下のスクリプトです。

関数createEventsでは、startTime、endTimeを求める部分はそれぞれ一行、合わせて二行にまとめることができました。

そして、それらを求めるための関数がaddTimeですね。

なお、関数addTimeで第1引数のDateオブジェクトについては、setHoursメソッド、setMinutesメソッドの対象としますので、ここでもちゃんとnewキーワードで生成したものを渡すという点が注意としてありますよ。

関数addTimeの役割

関数addTimeは、ドキュメンテーションコメントを入れている通り

  • 日付のベースとなるDateオブジェクト
  • セットをする時刻を表すDateオブジェクト
  • さらに加算する時刻を表すDateオブジェクト

の3つの引数を渡すと、ベースの日付に時刻をセットし、さらに加算する時刻を加算したDateオブジェクトを返す関数になります。

まとめ

以上、Google Apps Scriptで日付関連の処理を関数化する例とその際のポイントについてお伝えしました。

このように、処理が似ているところは、積極的に関数化することでスクリプトをシンプルにすることができますし、関数の再利用も可能になります。

とくにDateオブジェクト周りは処理が複雑になりがちなので、積極的に関数化を狙っていきたいですね。

次回、関数addTimeで使っているテクニックである、引数の省略について解説します。

Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法
GASでGoogleカレンダーの複数の予定をまとめて登録するツールを作成しています。今回は、Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法についてです。

どうぞお楽しみに!

連載目次:GASでカレンダーイベントをまとめて追加するツールを作る

Googleカレンダー便利ですよね!ただ、複数のイベントをいくつも追加しなければいけないとき…少し面倒です。そんなときのための便利ツールとして、スプレッドシートの入力情報をもとにカレンダーイベントをまとめて追加するツールを作成していきます。
  1. GASでデフォルトのGoogleカレンダーにイベントを追加する簡単なスクリプト
  2. GASでスプレッドシートの入力からGoogleカレンダーに複数のイベントを追加
  3. Google Apps ScriptでDateオブジェクトの複製や時刻のセットで注意すること
  4. Google Apps Scriptで日付関連の処理を関数化する例とその際のポイント
  5. Google Apps Scriptで関数の引数を省略した場合の挙動とデフォルト値の設定方法
  6. GASで論理演算子「||」を使って条件分岐の省略をしつつ変数に値を代入する方法

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント