Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【超便利!】GASのややこしい日付&時刻処理はMoment.jsで解決!

f:id:yukibnb:20190720232616p:plain

memo

Google Apps Scriptの新IDEでの導入手順を追記しました。

こんにちは!
Yuki (@yukibnb) です。

Google Apps Script (GAS) を使用していると日付や時刻を扱う機会が多くあります。

GASでは標準でDateオブジェクトが用意されているのですが、これがなかなかややこしくてとっつきにくいです。「Dateオブジェクトややこしい!何かいい方法ないかな」と思っているかは多いのではないでしょうか。

Dateオブジェクトは単純に日付や時刻を表示するだけならまだしも、日付や時刻を足したり引いたりしたい場合より一層ややこしくなります。

しかし!GASではMoment.jsというライブラリを使用することで、日付や時刻をより直観的に取り扱うことができるようになります。

この記事ではMoment.jsライブラリの導入方法を紹介します。導入はとても簡単なので日付や時刻処理でお困りの方は是非一度お試しください。
 

 

Moment.jsライブラリの概要

そもそもライブラリって何?

GASの世界にはライブラリというものがたくさんあります。Moment.jsとは数あるライブラリのうちのひとつです。

ライブラリとはかみ砕いて言うと「複雑で面倒な処理を他の人が使いやすいようにパッケージ化したもの」です。

僕たちががんばってややこしいコードを書かなくてもライブラリが代わりに処理してくれるという、なんともすばらしい助っ人のようなものです。

Moment.jsは日付や時刻処理に特化したライブラリなので、導入すると日付や時刻処理がとーっても簡単になります。

もしMoment.js以外のライブラリに興味がありましたら「GAS ライブラリ おすすめ」とGoogle検索するといろいろ出てきます。

 

Moment.jsで簡単にできること

Dateオブジェクトで書くと難しいけどMoment.jsでは簡単に書けることはたくさんあります。

例えば以下のようなことです。

 

日付や時刻をフォーマット

Dateオブジェクトで現在日時を読み取ると「Sat Mar 02 2019 14:49:38 GMT+0900 (JST)」のようになります。

このままだと使いにくいので目的に応じて「3月2日」「2019/03/02」「190302」「14:49」「02:49 PM」というようにフォーマットする必要があります。

Dateオブジェクトではフォーマットが面倒ですが、Moment.jsなら簡単にできます。

 

日付や時刻を足したり引いたり

Moment.jsでは「今日から〇日後」「特定の日から〇日後」「現在時刻から〇時間後」「現在時刻から〇時間前」という計算が簡単にできます。

 

日付や時刻を比較する

例えば締切日まであと何日あるか調べたい場合、締切日と本日の二つの日付の差分を計算します。

単純に二つの数字の差分を計算するだけだと「15 - 7」のように簡単ですが、日付や時刻の場合はそう単純ではありません。Dateオブジェクトで計算しようとするとかなり面倒です。

Moment.jsを使うと簡単にできます。

  

簡単!Moment.jsの導入方法

ではMoment.jsの導入へと進みましょう。簡単なのですぐ終わります!

memo

Google Apps Scriptの旧スクリプトエディタ (旧IDE) と新スクリプトエディタ (新IDE) でボタンの場所やデザインが異なるため両方のエディタでの登録方法を紹介します。

旧スクリプトエディタ (旧IDE) を使用の方

Moment.js Google Apps Script

旧スクリプトエディタ (旧IDE) はこのような見た目のものです。

 
スクリプトエディタ画面上部の[リソース] → [ライブラリ] の順にクリックします。
Moment.js Google Apps Script

 
すると以下ポップアップが表示されます。
Moment.js Google Apps Script

 
[Add a library] (もしくは [ライブラリを追加])の入力ボックスに以下Moment.jsライブラリのスクリプトIDをコピペしてください。
 

Moment.jsのスクリプトID

15hgNOjKHUG4UtyZl9clqBbl23sDvWMS8pfDJOyIapZk5RBqwL3i-rlCo

 
コピペしたら[追加]をクリックしてください。
Moment.js Google Apps Script

 
Momentが一覧に追加されました。次に[バージョン]のプルダウンをクリックし、最新のバージョンを選択します。2021/1/10時点で最新バージョンは「9」です。
Moment.js Google Apps Script

 
最後に「保存」をクリックするとMoment.jsの導入が完了です。
Moment.js Google Apps Script
 
これでMoment.jsをGASで使用できるようになりました!導入方法はあっという間でしたね。

 

新スクリプトエディタ (新IDE) を使用の方

Moment.js Google Apps Script

新スクリプトエディタ (新IDE) はこのような見た目のものです。

 
スクリプトエディタ画面左側の[ライブラリ]の行にある[] アイコンをクリックします。
Moment.js Google Apps Script

 
すると以下ポップアップが表示されます。
Moment.js Google Apps Script

 
[スクリプトID *] と表示されている入力ボックスに以下Moment.jsライブラリのスクリプトIDをコピペしてください。
 

Moment.jsのスクリプトID

15hgNOjKHUG4UtyZl9clqBbl23sDvWMS8pfDJOyIapZk5RBqwL3i-rlCo

 
コピペしたら[検索]をクリックしてください。
Moment.js Google Apps Script

 
[バージョン]のプルダウンをクリックし、最新のバージョンを選択し、[追加]をクリックするとMoment.jsの導入が完了です。2021/1/10時点で最新バージョンは「9」です。
Moment.js Google Apps Script

 
導入が完了するとスクリプトエディタの[ライブラリ]の下にMomentと表示されるため、プロジェクトにどのライブラリが導入されているか一目でわかります。
Moment.js Google Apps Script

 
これでMoment.jsをGASで使用できるようになりました!導入方法はあっという間でしたね。

 

注意点

ライブラリはプロジェクトごとに導入が必要です。

注意点というほどではありませんがライブラリはプロジェクトごとに導入します。

異なるプロジェクトでMoment.jsなどのライブラリを使用したい場合、そのプロジェクトにも今回同様ライブラリを導入する必要があります。

「あれ、なぜかMoment.jsのスクリプトが動かない」という場合、単純にそのプロジェクトにMoment.jsを導入漏れしているだけかもしれません。そのプロジェクトにMoment.jsが導入されているか念のため確認してください。

 

Moment.jsライブラリーは新規機能開発が終了しています。

2020年9月にMoment.jsライブラリーの新規機能開発が終了しています。

参照 (英語) : https://momentjs.com/docs/#/-project-status/

引き続きMoment.jsライブラリーを使用することはできますが、「今後新たに立ち上げるプロジェクトではMoment.jsの使用はおすすめしません」とMoment.jsの開発チームから声明が出ています。

個人的なプログラムや業務のちょっとしたプログラムに使用するのは良いかと思いますが、そうでない場合Moment.js以外の方法で日付&時刻処理をした方が良いかと思います。

当ブログではMoment.jsに替わる便利な日付&時刻処理ライブラリを紹介できればと考えていますのでご期待ください。

 

まとめ: 関連記事紹介

今回はGoogle Apps Script (GAS) で日付や時刻処理を簡単に行うためのライブラリ「Moment.js」の導入方法を紹介しました。

Moment.jsを実際にどのように使用するのか、どれぐらい簡単&便利になるのかは、以下記事を是非ご覧ください。