日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法

★気に入ったらシェアをお願いします!

moment-js

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

Google Apps Script(GAS)を使っていると、とってもよく取り扱うんですよ、日付と時刻

Googleカレンダーではそりゃもう当然頻繁に使いますし、フォームからスプレッドシートに送られる情報にもタイムスタンプは入ります。また、外部のAPIと連携するときも使う場合がとても多いですよね。

しかしながら、Dateオブジェクト…まあ結構使い方が難しいんです。私も苦労しています。

そんな、GASの日付&時刻ですが、Moment.jsというライブラリを使うと、非常に簡単に取り扱うことができるようになるんですね。

Google Apps Scriptの日付&時刻の操作をもっと簡単に!ということで、本記事から何回かにわけてシリーズでその使い方についてお伝えしていきたいと思います。

まず、初回は超導入編ということで、Google Apps ScriptへのMoment.jsライブラリ導入方法momentオブジェクトの生成についてお伝えしていきます。

では行ってみましょう!

Google Apps Script用のMoment.jsライブラリについて

ライブラリとは何か?

ライブラリとは「ある特定の処理を定型化して、他のプログラムが引用できる状態にしたものを、複数集めたもの」を言います。

先人たちが「これは便利だろう」という思う処理を、種類ごとや目的ごとに”いい感じ”で汎用的なパッケージ化して公開してくれています。

以前、お伝えしたチャットワークAPIを簡単に使えるようにした「ChatWorkClient for Google Apps Script」もそうですよね。

GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
以前、Googleアナリティクスの日次レポートを自動記録する方法をお伝えしましたが、今回はさらに発展をさせてそれをGoogle Apps Scriptを使ってチャットワークに毎朝自動で通知します。

これのおかげで後から追いかける私たちは、スクラッチでスクリプトを組まなくても、とっても便利な機能をちょっとした命令一つで実行できちゃったりするわけです。

ホント、先人たちに感謝。

JavaScriptのライブラリをそのまま使えるの?

Google Apps ScriptはJavaScriptをベースにしているのですが、JavaScriptで一般的に使われているライブラリをそのまんまの通りに使えないこともあります。

なにせ、ブラウザ上で実行されている一般的なJavaScriptと異なり、Googleのサーバー内という特殊な環境で動作するものですからね。

ただ有名なライブラリについては、これまた先人たちがGAS化して、スクリプトエディタでのライブラリ追加ですぐに利用できるようにして下さっています。

注意点として、元祖とは使い方が若干異なっていたり、使える機能が制限されていたりするので、全くイコールでは使えない可能性があることは理解の上で使いましょう。

いずれにしても、先人たちに感謝。

Moment.jsとは?

さて、そんなライブラリの代表的なもののひとつ、Moment.js「日付関連」の色々便利な機能をまとめたライブラリです。

日時の操作が苦手…などといわれるJavaScript…標準で搭載されているDateオブジェクトだけでは物足りない部分をいい感じにまとめてくれているパッケージなのです。

例えばこんな機能。

  • 日時のフォーマット
  • 日時から要素を取得
  • 日時の計算
  • 日時の比較

標準で書くと何行も書かないといけないスクリプトをギュッとコンパクトにしてくれることも。そしてまた、日時の処理って頭がゴチャゴチャになりやすいんですよね…

Google Apps ScriptにMoment.jsライブラリを追加する

では、Google Apps ScriptにMoment.jsライブラリを追加していきましょう。

スクリプトエディタから「リソース」→「ライブラリ」ですね。

Google Apps Scriptでライブラリを追加

すると「含まれているライブラリ」ウィンドウが開きます。特に何もライブラリを追加していなければ、最初は空っぽのはずです。

「ライブラリを検索」という箇所に、以下GAS用Moment.jsのプロジェクトキーを入力して「選択」をクリックします。

プロジェクトキー:MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48

すると、タイトル「Moment」というプロジェクトが出現するので、バージョン(最新でOKです)を選択して「保存」。

Google Apps ScriptでMoment.jsライブラリを追加

これでOKです。あっという間ですね。

ちなみに、このGAS用Moment.jsライブラリは、以下記事で紹介されていたものですが、Googleの中の人が作ってくれたものだそうです。感謝。

全国のGASジャンキーの皆様こんにちは 大橋です。 GASでこれできないーとかこういう時の開発方法がわからない~というのをよく見かけるので僕なりな開発方法をまとめます。 ざっくり思いついたのモノを書くので暇な時に足していきますし...

Google Apps Scriptでmomentオブジェクトを生成

では、早速GAS版Moment.jsを使ってみましょう。

まず、オブジェクトの生成です。Dateオブジェクトを生成する場合は

new Date() //現在の日時
new Date(‘2008/05/01 02:00:00’) //文字列形式で指定
new Date(2008, 4, 1, 2, 0, 0) //各要素を指定※monthは0~11の値
new Date(UNIX時間*1000) //UNIX時間(秒)から

などとしていました。

Google Apps ScriptでのDateオブジェクトの各生成方法、日付と時刻を分ける
スプレッドシートの勤怠管理システムをお題としてGoogle Apps Scriptでの日時について解説します。Dateオブジェクトの生成のいくつかの種類、要素を取得するメソッド、日付と時刻の分解などです。

Moment.jsの場合は、momentオブジェクトというものを生成します。生成するときは

Moment.moment() //現在の日時
Moment.moment(‘2008/05/01 02:00:00’) //文字列形式で指定
Moment.moment([2008, 5, 1, 2, 0, 0]) //各要素を配列で指定
Moment.moment(UNIX時間*1000) //UNIX時間(秒)から

とします。

各要素で指定する方法だけDateオブジェクトとは異なり「配列」になっていますので注意ですね。

あとはほぼ同様です。

momentオブジェクト生成はJavaScriptと記述が異なる

注意としては、一般的なJavaScriptのMoment.jsとはmomentオブジェクトの生成の記述が異なります。

オリジナルのMoment.jsでは

moment() //現在の日時
moment(‘2008/05/01 02:00:00’) //文字列形式で指定

というように、頭文字大文字の「Moment.」がつかない記述が用いられています。この点、GAS版Moment.jsは前述のように記述が異なりますので、注意して下さい。

Dateオブジェクトから生成する

Dateオブジェクトからmomentオブジェクトを生成することもできます。

Moment.moment(Dateオブジェクト)

シンプルです。一旦、momentオブジェクトにしてしまえば、これからが超絶楽になるハズ…!

入力フォーマットを指定して生成する

さて、ここまでならDateオブジェクトとそれほど変わらないのですが、Moment.jsが秀逸な点としては入力フォーマットを指定してmomentオブジェクトを生成できるという点です。

例えば、こういうことです。

Moment.moment(‘2008年12月7日’, ’yyyy年M月D日’) //入力フォーマットを指定

第1引数に入力値、第2引数にその入力値のフォーマットを指定します。これ、日本人の我々には非常に助かる機能ですよね。

あれこれ文字列処理をしてからDateオブジェクトを生成…などといったことをしなくて済みます。

入力フォーマットの書式として使える文字とその意味については、次回記事にてまとめたいと思います。

unixメソッドで秒単位UNIX時間から生成する

もう一つ、UNIX時間ですが単位が秒だった場合に、わざわざ1000を掛け算してミリ秒に換算しなくても良い方法があります。

Moment.moment.unix(UNIX時間) //UNIX時間(秒)から

これで秒単位のUNIX時間からそのままmomentオブジェクトを生成できます。掛ける1000でもいいっちゃいいのですが、こちらの書き方のほうがパッと見で「ああ、そういうことね」となります。

まとめ

以上、Google Apps ScriptのMoment.jsライブラリの導入編となります。

まだ、momentオブジェクトの生成だけではありますが、入力フォーマットの指定やその期待感は漂ってくるのではないでしょうか。

次回は書式を指定するformatメソッドについてお伝えしていきます。

Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回は日時の書式フォーマットを指定するformatメソッドの使い方です。

どうぞお楽しみに!

連載目次:Google Apps ScriptでMoment.jsを使う

Google Apps Scriptでよく取り扱う日付と時刻。しかし、JavaScriptの標準Dateオブジェクトは扱いがなかなか難しいんですよね。その日時の操作をとっても簡単にすることができるライブラリ「Moment.js」の使い方について、解説をしていきます。
  1. 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
  2. Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
  3. Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
  4. GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
  5. GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
  6. GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
  7. GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
  8. Google Apps Scriptを使って80歳までの残り時間をチャットワークに日々通知する