「日々のメール返信数を毎日自動的にスプレッドシートに記録するプログラム」を作ってみました。

この記事を読むのにかかる時間: 3

Google Apps Scriptで書きました。合計63行でしたが、もっと工夫すれば半分くらいの行数で書けそうな気もします。

 

こんにちは。

KSG Holdings Ltd.の司法書士&週末趣味プログラマーの 熊木です。

 

私の仕事はメールでのやり取りがメインですので、

毎日かなり多くのメールを返信しています。

 

せっかくなので、日々どれほどのメールを返信しているのかというのを記録しておこうと思いまして、

毎日の返信数をスプレッドシートに自動的に記録してくれるプログラムを書いてみました。

Gmailから情報を抽出し、Google SpreadSheetに記録する、というGoogle Apps内での作業ですので、

利用した言語は、やはり今回もGoogle Apps Script (=ほぼJava Script)です。

//返信したメール数を毎日スプレッドシートに記録するプログラム
//Gmailから in:sent AND today AND [熊木のメールアドレス]に合致するメールを取得し
//その数をカウントし、変数 countToday へ。
//そして日付(todayYMD) とcountTodayを毎晩自動的にスプレッドシートへ。

function countaEmailsSent() {
  var today = new Date();
  Logger.log(today); //2018年4月21日が戻り値
  var year = today.getFullYear();
  var month0 = today.getMonth();
  var month = month0 + 1; //なぜか戻り値が3月になるので+1した
  var day = today.getDate();
  var todayYMD = year + '/' + month + '/' + day; 
  Logger.log(todayYMD);
  var query = 'is:sent' + ' ' + 'AND' + ' ' + 'after:' + todayYMD;  //is:sent で送信済み、そしてafter:todayYMDで今日以降 =今日送信された
  var todayThreads = GmailApp.search(query, 0, 300); //戻り値 GmailThread[] = [GmailThred, GmailThred]
  Logger.log(todayThreads);

  var todayThreadsLength = todayThreads.length; //java script で配列の要素数を取得
  Logger.log(todayThreadsLength);
  var query2 = todayYMD;
  var countToday = 0; //countTodayの初期値を毎日ゼロにする
  for ( x=0; x<todayThreadsLength; x++){  //todayThreads の配列のx個目の各スレッドを順に処理。
    Logger.log(todayThreads[x]); 
    var threadLength = todayThreads[x].getMessageCount(); //x個目のthread に含まれる message の数をカウント
    for (y=0; y<threadLength; y++){  //x個目のthreadに含まれるmessages のy個目を順に処理。
      var message = todayThreads[x].getMessages()[y]; //todayThreads の配列のx個目のスレッドのy個目のメッセージを取得 戻り値は GmailMessage
      Logger.log(message);
      var messageDate = message.getDate(); //上記のx.yで取得した1つのメッセージの日付を取得。
      Logger.log(messageDate);
      var year2 = messageDate.getFullYear();
      var month2 = messageDate.getMonth()+1;
      var day2 = messageDate.getDate();
      var todayYMD2 = year2 + '/' + month2 + '/' + day2; //そのメッセージの日付を、上記todayYMD と同じ形式に変更
      var sender = message.getFrom(); //そのメッセージの送信者を取得
      Logger.log(sender);      
      if (todayYMD2 == todayYMD && sender == '"熊木雄介" <office.kumaki@gmail.com>') {  //todayYMD2 がtodayYMDと同じであり、かつ、senderが自分である場合の条件式
        countToday = countToday + 1; //上記条件に合致する場合、countToday に1を足す
        Logger.log(countToday); 
      }
      else if (todayYMD2 == todayYMD && sender == '"司法書士熊木雄介" <info@office-kumaki.name>') {  //送信者が別のメールアドレスのこともあるので、こちらも設定
        countToday = countToday + 1;
        Logger.log(countToday); //どのメッセージを認識したかかをわかるようにするため。
      }
    }
  Logger.log(countToday); //最後に再度CountTodayを表示
  }
  
  var url = 'https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXX';  //これ用につくったスプレッドシートのアドレス(このブログ上では一部非表示)
  var spreadsheet = SpreadsheetApp.openByUrl(url); //URLでスプレッドシートを選択
  Logger.log(spreadsheet.getName());
  var sheet = spreadsheet.getActiveSheet(); //そのスプレッドシートのアクティブシートを選択
  Logger.log(sheet.getName());
  
  var lastRow = sheet.getLastRow(); //そのアクティブシートの最終行を取得
  Logger.log(lastRow);
  
  var rangeForDate = sheet.getRange(lastRow+1,1, 1, 1); //日付を入力するためのセルを指定。上記LastRowに1を足し、その1列目を選択。そして、後者の1,1はその選択したセルからどの程度移動するか、ということ。1,1なら移動しない。
  rangeForDate.setValue(todayYMD);
  
  var rangeForCount = sheet.getRange(lastRow+1, 2, 1, 1);
  rangeForCount.setValue(countToday);
}

 

上のプログラムで何をやっているかというと、

今日の日付を 2018/xx/xx 形式にして、

そして、それで今日の日付を含むメールスレッドを検索し、

そのスレッドの中から、今日の日付で私のメールアドレスから送信されたメールを抽出して、それを配列にし、

そして配列の要素数をCountする、ということをやっています。

各命令ごとにどのような結果が返されているかを毎回確認したいので、わざわざ毎回Logger.logで出力しているためにえらく長いプログラムとなっていますが、

本当はもう少し短いプログラムになります。

というか、本職の方が書けば半分以下の行数になるような気もします。

 

やっぱりプログラミングは息抜きに最高ですね。

返信したメール数だけでなく、返信した文字数も記録できるように今から改良してみようと思います。

 

Google Apps Script に興味のある方には、下記書籍がおススメ。

 

プログラミング全般に興味がある人はひとまず以下の書籍からどうぞ。

 

プログラミングを学ぶならオンライン学習がおすすめ!

プログラミングを学びたい場合、まずは、Progateさんやドットインストールさんの無料レッスンを受講されるのも良いかと思いますが、

新しい知識・技術をみにつける一番重要なポイントは、継続すること。

この点、やはり身銭を切って学習に取り組んだ場合と

無料で取り組んだ場合とでは、

継続性に大きな差が出ます。

本気でプログラミングを習得したい方は、

以下のような有料サービスを初めから利用されることを検討されてもよろしいかと思います。

初級者向け

フルオーダーメイドのカリキュラムが組める!エンジニア塾【Samurai】


 

中級者向け向け

米国シリコンバレー発祥、世界最大級のオンライン学習プラットフォーム!【Udemy】


 

上級者向け

人工知能特化型プログラミング学習サービス「Aidemy Premium Plan」


 

2018年4月21日

司法書士 熊木 雄介
Email: info@office-kumaki.name

※ ご相談やお仕事のご依頼につきましては、まずはEメールにて、ご相談内容・ご依頼内容をお送りいただけますと幸いです。

※ 弊社は、毎月複数件のラブアン法人設立、就労ビザ申請、法人口座開設をお手伝いさせていただいております。また、我々司法書士には守秘義務がありますので、安心してご相談くださいませ。

※ 匿名でのお問い合わせや十分な情報をいただけないお問い合わせにはお応え致しかねます。あらかじめご了承くださいますようお願い申し上げます。

 

<<ラブアン法人設立サポートのウェブサイトはこちら!>>
実績多数! ラブアン法人設立サポートサービス! (新しいタブで開きます。)

 

この記事を読んだ方は次の記事も読んでいます。

タイトルとURLをコピーしました