Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2075

Google Apps Scriptを使って80歳までの残り時間をチャットワークに日々通知する

$
0
0
remaining-time

photo credit: Harry McGregor Egg – timed to perfection, HMM via photopin (license)

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

先日こちらの記事で、ステキな機能をSlackで作成されていたんですね。

#プログラムについて 人生の時間を大切にする為に、来年までの残りの時間日数月数と、人生の時間日数月数年数を定期的に通知する。また意識を高めるためにタイマーを8時間に設定。

来年までの残り時間、日数、月数と、人生(80歳として)の時間、日数、月数をSlackに通知するというものです。

生産性と時間価値を追い求めたいお仕事効率化オタクとしては、大変素晴らしい機能だと思いましたので、チャットワークに通知するバージョンを作成しようと思いました。

そして、日時をガッツリ取り扱うということで、Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法シリーズの実践編としてお伝えできればと思います。

では、Google Apps Scriptで80歳までの残り時間と今年の残り時間をチャットワークに通知する方法です。

行ってみましょう!

残り時間通知機能の準備

では、まず準備からです。

今回はスプレッドシートは使いませんので、Googleドライブから新規スクリプトを作成して「Remaining Time」としました。

日時の処理をガッツリやりますので、GAS用Moment.jsライブラリを追加します。

プロジェクトキー:MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48

追加の仕方は以下記事をご参考くださいね。

日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
Google Apps Scriptの日付&時刻ですが、Moment.jsライブラリで、非常に簡単に取り扱えます。今回はライブラリの追加方法とmomentオブジェクトの生成についてお伝えしていきます。

また、最終的にはチャットワークに通知をしますので、以下の記事を参考にチャットワークのAPIキーとルームIDも取得しておいてください。

Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
Google Apps Scriptの第一歩ですが、しょっぱなから真っ先にチャットワークを操作してしまいます。初回はGASのプロジェクトの作成、ライブラリの追加、スクリプトの記述と実行までです。

チャットワークAPIキーは数値とa~fによる長~い文字列、ルームIDは8桁以下の数値で通知先のルームを指定するものです。

  • チャットワークのAPIキー:XXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • ルームID:XXXXXXXX

今回、通知先のルームはマイチャットとしました。

これらチャットワークのAPIキー、ルームIDとともに、誕生日と目標年齢(寿命と言うとその年齢まで…って感じになりそうなので、目標年齢という呼び方にします)を設定します。

var BIRTH_DAY = '1976/05/05'; //誕生日
var TARGET_AGE = 80; //目標年齢
var CW_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //チャットワークAPIキー
var ROOM_ID = XXXXXXXX; //通知先ルームID

残り時間通知機能を実装する

残り時間通知機能は以下のような流れとなります。

  • 以下をmomentオブジェクトとして取得
    • 現在の日時
    • 目標日時
    • 来年の1月1日
  • 以下の差分を取ったものを算出、チャットワークに通知するメッセージを生成する
    • 来年の1月1日と現在の日時の差分をとる
      • 時間単位で
      • 日単位で
      • 月単位で
    • 目標年齢と現在の日時の差分をとる
      • 時間単位で
      • 日単位で
      • 月単位で
      • 年単位で
  • チャットワークにメッセージを通知する

そしてこのスクリプトを毎朝1回(7時~8時の間)にイベントトリガーで実行をするように設定をします。

現在の日時、目標日時のmomentオブジェクトを生成する

まず、momentメソッドを使って現在の日時でmomentオブジェクトを生成します。その場合は引数なしで

Moment.moment()

と書きましたね。

目標日時ですが、自分の誕生日に目標年齢を加算すればOKですね。

特定の日時についてのmomentオブジェクトの生成は、引数に日時を表す文字列を与えて

Moment.moment(日時)

と書きますので、これで自分の誕生日に関するmomentオブジェクトが作れます。

日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
Google Apps Scriptの日付&時刻ですが、Moment.jsライブラリで、非常に簡単に取り扱えます。今回はライブラリの追加方法とmomentオブジェクトの生成についてお伝えしていきます。

そこに指定の日時を加算するには、addメソッドを使います。

momentオブジェクト.add(値, 要素を表す文字列)

要素を表す文字列は、今回は「年数」なので、文字列「years」か「y」のどちらかを与えればOKです。

GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はmomentオブジェクトによる日時の加算・減算についてお伝えしていきます。

この部分のスクリプトは、以下のようになりますね。

var mNow = Moment.moment(); //現在の日時
var mTarget = Moment.moment(BIRTH_DAY).add('y' ,TARGET_AGE); //目標日時

来年の1月1日のmomentオブジェクトを生成する

次に来年の1月1日のmomentオブジェクトを生成します。

これについては、現在の日時に年数を1年加算して、さらに月を「1月」、日を「1日」にセットすれば良いですね。

現在の日時は既に変数mNowとして取得していますので、これにaddメソッドで1年加算すれば良いのですが、addメソッドは破壊的なメソッドですので、そのまま使うと、mNowの値も変更されてしまいます。

そのような場合、cloneメソッドを使います。

momentオブジェクト.clone()

つまり、momentオブジェクトのクローンに対してaddメソッドを使えば元のmNowが破壊されずに済むというわけでした。

GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
Google Apps Scriptで日付&時刻のライブラリMoment.jsを紹介しています。日時計算の際に元のmomentオブジェクトが変更されてしまうので、cloneメソッドで回避する方法をお伝えします。

そして、momentオブジェクトに「月」や「年」の要素をセットする場合は、それぞれmonthメソッドyearメソッドを使います。

momentオブジェクト.year(値)
momentオブジェクト.month(値)
Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はmomentオブジェクトから各要素を取得する方法、またセットする方法です。

つまり、来年の1月1日のmomentオブジェクトを生成するには

var mNextYear   = mNow
    .clone()
    .add('y', 1)
    .month(0)
    .day(1); //来年の1月1日

とすればよいということです。

目標日時および来年の1月1日と、現在の日時の差をとる

二つのmomentオブジェクトの差をとるには、diffメソッドを使います。

momentオブジェクト2.deff(momentオブジェクト1, 単位)

単位は

  • 時間:hoursまたはh
  • 日:daysまたはd
  • 月:monthsまたはM
  • 年:yearsまたはy

で指定します。

GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はdiffメソッドを使って、スマートにmomentオブジェクトの差をとる方法です。

もうdiffメソッドを使えば、メッセージの生成部分は同じパターンで一挙に出来上がっちゃうのですが、以下のようになります。

var strBody = '[info]';
strBody += '来年までの残り時間はあと [' + mNextYear.diff(mNow, 'h') + '時間]です\n';
strBody += '来年までの残り日数はあと [' + mNextYear.diff(mNow, 'd') + '日]です\n';
strBody += '来年までの残り月数はあと [' + mNextYear.diff(mNow, 'M') + 'ヶ月]です\n';
strBody += '[hr]';
strBody += '目標までの残り時間はあと [' + mTarget.diff(mNow, 'h') + '時間]です\n';
strBody += '目標までの残り日数はあと [' + mTarget.diff(mNow, 'd') + '日]です\n';
strBody += '目標までの残り月数はあと [' + mTarget.diff(mNow, 'M') + 'ヶ月]です\n';
strBody += '目標までの残り年数はあと [' + mTarget.diff(mNow, 'y') + '年]です\n';
strBody += '[/info]';

以下のタグについてはチャットワークのメッセージ記法です。

  • [info]~[/info]:インフォメーション(タグ内を枠線で囲む)
  • [hr]:罫線を引く

生成したメッセージをチャットワークに送る

あとは、生成したメッセージをチャットワークに送ればOKですね。

チャットワークに送るには、以下の関数sendMessageを一部修正して使わせてもらいましょう。

function sendMessage(body){
  var params = {
    headers : {"X-ChatWorkToken" : CW_TOKEN},
    method : "post",
    payload : {
      body : body
    }
  };

  var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages";
  UrlFetchApp.fetch(url, params);
}

チャットワークでメッセージを投稿する方法と、sendMessageの作りについては以下記事をご覧ください。

【GAS】チャットワークのメッセージを取り出す関数とメッセージを送る関数
Google Apps Scriptを活用してチャットワークにおみくじチャットを作成しています。今回はチャットワークからメッセージを取り出す、メッセージを送る処理を関数化して全体のコードをスッキリさせます。

残り時間通知をするスクリプトを実行する

以上までをまとめたものがこちらです。

var BIRTH_DAY = '1976/05/05'; //誕生日
var TARGET_AGE = 80; //目標年齢
var CW_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; //チャットワークAPIキー
var ROOM_ID = XXXXXXXX; //通知先ルームID

function notifyRemainingTime() {

  var mNow = Moment.moment(); //現在の日時
  var mTarget = Moment.moment(BIRTH_DAY).add('y' ,TARGET_AGE); //目標日時
  var mNextYear   = mNow
    .clone()
    .add('y', 1)
    .month(0)
    .day(1); //来年の1月1日

  var strBody = '[info]';
  strBody += '来年までの残り時間はあと [' + mNextYear.diff(mNow, 'h') + '時間]です\n';
  strBody += '来年までの残り日数はあと [' + mNextYear.diff(mNow, 'd') + '日]です\n';
  strBody += '来年までの残り月数はあと [' + mNextYear.diff(mNow, 'M') + 'ヶ月]です\n';
  strBody += '[hr]';
  strBody += '目標までの残り時間はあと [' + mTarget.diff(mNow, 'h') + '時間]です\n';
  strBody += '目標までの残り日数はあと [' + mTarget.diff(mNow, 'd') + '日]です\n';
  strBody += '目標までの残り月数はあと [' + mTarget.diff(mNow, 'M') + 'ヶ月]です\n';
  strBody += '目標までの残り年数はあと [' + mTarget.diff(mNow, 'y') + '年]です\n';
  strBody += '[/info]';

  sendMessage(strBody);
}

/* チャットワークにメッセージを送る */
function sendMessage(body){
  var params = {
    headers : {"X-ChatWorkToken" : CW_TOKEN},
    method : "post",
    payload : {
      body : body
    }
  };

  var url = "https://api.chatwork.com/v1/rooms/" + ROOM_ID + "/messages";
  UrlFetchApp.fetch(url, params);
}

このスクリプトを実行しますと、以下のような通知が送られます。

GASで残り日数をチャットワークに通知

今年もあと8ヶ月、そして80歳まであと14277日か…こうして数値で表されると気が引き締まりますね。

まとめ

Google Apps Scriptで80歳までの残り時間と今年の残り時間をチャットワークに通知する方法についてお伝えしました。

GAS版Moment.jsのメソッドたちが大活躍ですね。

ぜひ皆さんもマイチャットに仕込んで、残り時間を噛み締めてみて下さい。

そして再度、こちらの記事に感謝!

#プログラムについて 人生の時間を大切にする為に、来年までの残りの時間日数月数と、人生の時間日数月数年数を定期的に通知する。また意識を高めるためにタイマーを8時間に設定。

ということで、GASについて、またMoment.jsについて良い実践例がありましたら紹介していきますね。

どうぞお楽しみに!

連載目次: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歳までの残り時間をチャットワークに日々通知する

Viewing all articles
Browse latest Browse all 2075

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>