GoogleフォームとGASでつくる同報メール送信システム

特定のグループのメンバー全員に連絡をしたいことがあったときに、いちいち名簿を見て誰がメンバーだったかを確認するのは面倒です。さらに、複数のグループや個人が入り乱れて使用する部屋の使用者全員に連絡したいときは、より面倒が増します。そこで、Googleフォームから宛先のグループを選択すれば名簿からメールアドレスを取得して、該当者にメールを送ってくれるシステムをつくってみました。

仕事の効率化のためにプログラミングを勉強しはじめたというレベルなので、動けばよいくらいの適当なコードです。

Googleフォームでの準備

以下のようなフォームを作成する。送信者のメールアドレス、宛先、メールのタイトル、メールの本文という順番を前提として後述のプログラムを作成した。

Googleスプレッドシートでの準備

フォームの回答が保存されるスプレッドシートを用意する。フォームの編集画面から、「回答」タブを開くとスプレッドシートへのリンクが出てくる。

フォームの回答が保存されているスプレッドシートに、グループの名簿(groupシート)と部屋使用者の名簿(roomシート)を作成する。シートの構成は、1行目にグループ名や部屋名、2行目以降にグループ名か個人のメールアドレス。1列目に説明、2列目以降に中身。フォームからの回答が記録されるシートの名前はanswerに変更する。このあたりはコードの対応が取れていればいいのでお好みで。

スプレッドシートのメニューからスクリプトエディタを開き、以下のコードをコピペ。トリガーにフォームの値送信時を設定する。コードの中のスプレッドシートのidを変更する。

function sendmail() {
  var file = SpreadsheetApp.openById("スプレッドシートのid");
  var answer_sheet = file.getSheetByName('answer');
  var group_sheet = file.getSheetByName('group');
  var room_sheet = file.getSheetByName('room');
  
  //フォームに入力された値を読み取る
  var rowtoread=answer_sheet.getDataRange().getLastRow(); //フォームの回答が記入された行を求める
  var answer = answer_sheet.getRange(rowtoread,2,1,4).getValues(); //フォームの回答を取得
    
  var sendfrom = answer[0][0];
  var sendto = answer[0][1];
  var title = answer[0][2];
  var message = answer[0][3];
  
  //グループのアドレスリストを入手する
  var groupnum = group_sheet.getDataRange().getLastColumn()-1; //グループ数を取得
  var grouplist = group_sheet.getRange(1,2,1,groupnum).getValues(); //グループ名のリストを取得
  
  var group_lastrow = group_sheet.getDataRange().getLastRow();
  
  //宛先がGroupの場合。宛先リストにメールアドレスを追加する。
  var sendtolist = [];
  appendfromgroup(sendto, sendtolist, group_sheet, groupnum, group_lastrow);

  var roomnum = room_sheet.getDataRange().getLastColumn()-1; //room数を取得
  var roomlist = room_sheet.getRange(1,2,1,roomnum).getValues(); //room名のリストを取得
 
  var room_lastrow = room_sheet.getDataRange().getLastRow();

  //roomシートのroom構成員を宛先にいれる。
  for(var k = 2; k <= roomnum + 1; k++) {
    if(sendto === room_sheet.getRange(1,k).getValue()) {

      for(var l = 2; l <= room_lastrow; l++) {
        //roomの構成員がgroupの場合
        var temp = room_sheet.getRange(l,k).getValue();
        if (grouplist[0].indexOf(temp) > -1){
        appendfromgroup(temp, sendtolist, group_sheet, groupnum, group_lastrow);
        }
        //roomの構成員がgroupでない場合、メールアドレスが入力されていると判定
        else{
          sendtolist.push(temp);
        }
        }
      }
    }
    
  //重複をのぞく
  var sendtolist_true = sendtolist.filter(function (x, i, self) {
            return self.indexOf(x) === i;
        });
        
  //メール本文の修正
  message = "宛先: " + sendto + "\n送信者: " + sendfrom + "\n\n" + message;
        
  //メール送信
  MailApp.sendEmail(
      sendtolist_true, //toアドレス
      title,  //メールタイトル
      message, //本文
      {
        from: sendfrom, //fromアドレス
        cc: sendfrom, //送信依頼者にccで送る
        name: "同報メール送信フォーム" //差出人
      }
    ); 
}

function appendfromgroup(sendto, sendtolist, group_sheet, groupnum, group_lastrow){
  //宛先リストに該当するメールアドレスを追加する
  i = 0;
  for(var i = 2; i <= groupnum + 1; i++) {
    if(sendto === group_sheet.getRange(1,i).getValue()) {
      for(var j = 2; j <= group_lastrow; j++) {
        sendtolist.push(group_sheet.getRange(j,i).getValue());
      }
    }
  }
  return sendtolist;
}

2018年5月

5月の走行距離は505 kmでした。

電費は7.8 km/kWhで4月より悪化しました。暑くなって冷房を使うようになったのが原因でしょう。

月額2,000円のZESP2に対して、ガソリン141 円/Lとして燃費35.7 km/Lと同等です。

急速充電 4回、普通充電は0回、急速充電1回あたりの走行距離は126 kmでした。

カメラをリュックに固定する器具

登山のように不安定な足場で全身運動するときに、大きなカメラを持って歩くのは大変です。片手をふさぐのは大問題ですし、固定せずに首から下げていると重心がブレて危険です。一方で、カメラをリュックの中に収納してしまうと、シャッターチャンスを逃してしまいます。

対策としてよく行われているのが、リュックやベルトにカメラを固定する器具を使用することです。私はpeak designクリップcp-2パッドpp-1を使用しています。ちなみに、クリップはすでに新型が出ているようです。このクリップはカメラをどの向きにも固定することできるので、レンズが右手側を向くようにセットすれば腕を前にあげてもぶつかりません。

他にも似たような器具はいろいろあるようで、レビューを探していけば自分になったものが見つかるでしょう。たとえば三脚装着が可能になったカメラホルダー。コットンキャリアG3ストラップショットレビューとか。

リーフで行く大菩薩嶺登山

山登りは電気自動車の苦手な場面として知られています。純粋に水平方向への移動に必要なエネルギーに加えて、標高を上がる分だけ位置エネルギーを補う必要があるためです。そうはいうものの、急速充電器ネットワークが発達した現在では初代リーフで八ヶ岳の登山口に到達することも難しくありません。

40 kWhの新型リーフなら言うに及ばず。神奈川県の自宅から大菩薩嶺の登山口であるロッヂ長兵衛前の駐車場まで、電池容量にして計50%弱の電力消費で登ることができました。はじめての道で不安だったのと、帰路のことを考えて道の駅甲斐大和で30分 (13.6 kWh) 充電したおかげで、下山後は自宅まで無充電で帰ることができました。

駐車場着。新緑がまぶしい。

登山口には60代のツアー客とみられるグループが集まっていました。

大菩薩嶺の頂上は林の中で景色はありません。すぐ手前の雷岩付近から眺める富士山は、手前の大菩薩湖とあいまって絶景です。ちなみに、大菩薩湖は揚水発電用の上部湖で、最新鋭の原発1基分に相当する120万kWの出力を持っています。太陽光のような不安定な自然エネルギーの活用がすすめば、揚水発電の重要性はさらに高まることでしょう。

昼ごはんはモンベルのリゾッタです。聞いた話では、災害時用の保存食の技術が進歩した恩恵が登山業界にも波及しているらしいです。

登山口にいた60代グループが追い付いて来ました。私は登山口から雷岩までだいたい1時間強でした。

遠くにはまだ雪をかぶっている南アルプスが見えます。鳳凰三山に登ったのが懐かしい。あの日見た星空、朝焼け、頂上からの景色。いまでも思い出します。

頂上の大菩薩嶺より立派な大菩薩峠の看板。こちらの方が開けていて景色がいいです。金峰山や八ヶ岳も見えます。

大菩薩峠から分岐して下山する登山道に入ります。こちらは軽トラで登れそうなほどイージーコースです。

帰りは大菩薩の湯で汗を流してから、フルーツラインを通って勝沼ICから帰りました。大菩薩の湯はアルカリ性が強く、お肌がツルツルになりました。風呂上がりのドライブには風が気持ちいい季節です。

登山で疲れたあとは高速道路に入ってプロパイロットを入れておけばいいので、本当に楽です。自動運転様様。

2018年4月

4月の走行距離は613 kmでした。

電費は8.8 km/kWhで3月よりかなり良くなりました。もう暖房は使いません。冷房を使って、標高の高い富士五湖の方に行ったのですが、これくらいの良い電費が出てきました。

月額2,000円のZESP2に対して、ガソリン138円/Lとして燃費42.3 km/Lと同等です。

急速充電 5回、普通充電は0回

2018年3月

3月の走行距離は433 kmでした。

電費は7.6 km/kWhで2月より改善しました。気温の上昇とともに電費も改善していくのを感じます。

月額2,000円のZESP2に対して、ガソリン137円/Lとして燃費29.6 km/Lと同等です。
距離を走らなないと、やはりお得感は減ってしまいます。

急速充電 3回、普通充電は0回
買い物や外食で近所を走り回る分には、週1回以下の充電で事が足りてしまいました。

2018年2月

2月の走行距離は482 kmでした。

電費は6.9 km/kWhで1月より少し良くなりました。暖房はまだ使うものの、高速走行をしなかったためと考えています。

月額2,000円のZESP2に対して、ガソリン139円/Lとして燃費33.4 km/Lと同等です。

急速充電 4回、普通充電は0回

Ready Player Oneにリーフ、i-MiEV、チョイモビが登場

スピルバーグ監督のReady Player Oneは、近未来の人々がVRに没入している世界を描いた映画です。劇中で日本由来のキャラクタが大いに活躍していて、小学校に上がるのと同時にポケモンと出会った私にとっては、またサブカルとともに育った同世代の方々にとっては、感慨深い作品でした。童心に帰って楽しめます。特に、もともと日本語セリフが何カ所かあり、そのセリフが重要な場面で使われているので、吹替ではなく字幕で見ることをお勧めします。

物語は主にVRの世界で進むものの、現実の世界も描かれています。注目したいのが、舞台となる2045年の自動車です。EVに詳しい方ならすぐに気づくと思いますが、少なくとも以下の3車種が登場します。

自動車の世界で未来を先取りした製品という点で、i-MiEVやリーフが近未来のアイコンになるのは納得です。ただ、2018年の日本では横浜くらいでしか見かけないチョイモビが大量に映っているのは、なんだかおかしな気分でした。

この映画を見て思い出したのが、リーフが走るときに出す音です。初代リーフはエンジン車に比べればかなり静かなのですが、モーターに電気が流れる際、高い音のノイズを出します。いまの新型リーフでは静穏性があがったので、走行時のキーンという高周波音は聞こえなくなりました。
私が初めてリーフに乗った2012年3月、アクセルを踏んだ瞬間に生じる滑らかな加速と甲高いノイズが新幹線のようで、未来をこの手に握っているかのように感じました。Ready Player Oneは、あのときの感動がよみがえるきっかけとなる映画でした。

日産リーフの走行用電池リサイクル

「日産リーフ」の再生バッテリーを使った有償交換プログラムを発表しました。

ニュースリリース「日産リーフ」の再生バッテリーを使った有償交換プログラムを発表にあるように24kWhバッテリー用の交換再生バッテリーで30万円。
24kWhの新品バッテリーは65万円なので、半額以下です。

中古は相当に安い。

よく比較されるテスラはどうか。

テスラ社の家庭用蓄電池「パワーウォール2」が革命的に安い理由とは?

テスラ社のホームページを参照すると、3部屋あるお宅でもパワーウォール2たった1基でまかなえると紹介されていますが、その価格は617,000円〜という驚きの安さです。
パナソニック社製の蓄電池が298万円なので、およそ5分の1という低価格です。

パワーウォール2の本体価格にプラスして、設置や必要なハードウェアの費用として157,000円掛かるのですが、それを合わせても774,000円という安さで設置できます

テスラのパワーウォール2は容量13.5 kWh、必要な周辺機器や設置工事まで含めて77万円。対するリーフは中古の24 kWhバッテリーが30万円。周辺機器の価格がわかりませんが、たとえばニチコンのLEAFtoHomeの価格が58万円。
テスラのパワーウォール2が格安だとすれば、リーフの中古バッテリーもかなりコスト競争力がありそうです。

フリーの動画変換ソフトffmepgの使い方

仕事で動画を撮っていると、データのファイルサイズが大きすぎて困る。他人に見せるときはファイルサイズが小さい方がいいし、imageJなんかでデータ解析するときには非圧縮の方が都合が良い。動画の変換で良いソフトウェアはないものかと探していると、ffmepegに出会った。

インストールの仕方

windowsにffmpegをインストールする

自分のPCにあったファイルをダウンロード、解凍して適当な場所に置けばOK。マイドキュメントなど。

とりあえず、スタートメニューからコマンドプロンプトを起動する。C:\users\hoghogeのように現在のフォルダのパスが表示されるので、ffmpeg.exeのあるフォルダに移動する。コマンドプロンプトでフォルダを移動する場合はcd hogehogeとする。ちなみに”\”は”¥”と表示されるけれど気にしない。

例 cd c:\ffmpeg\bin

網羅的な説明

ffmpegの使い方

最新ffmpegのオプションまとめ コマンドの意味を調べる辞書として使える

実施例

windows7でも再生できる動画を作るためのffmpeg / avconv の cheat sheet

動画処理の定番ツール「FFmpeg」ことはじめ

古いWindowsで再生できない

会社の支給PCだと最新のOSを使えるとは限らない。たとえば、標準のWindows7ではH.264のmp4を必ず再生できるわけではない。

また、H.264の動画をPowerPointに埋め込む場合も、PowerPoint2010以降である必要がある。

YUVフォーマットもちゃんと設定してやる。

結局のところなんて打てばいい?

ffmpeg -i example.avi -c:v libx264 -movflags +faststart -vf format=yuv420p example.mp4

仮にtest1フォルダに入っているexample.aviをtest2フォルダに変換したい場合は以下のように書ける。あるいは、C:\からファイルのパスを書いてもいい。

ffmpeg -i test1\example.avi -c:v libx264 -movflags +faststart -vf format=yuv420p test2\example.mp4

これでおそらくWindows 7のエクスプローラでサムネイルが表示され、Media playerで再生できる形式の動画になる。非圧縮に比べて数十分の1のファイルサイズになる。

環境が古くてWMV形式にしたい場合は、wmvでエンコードする(PowerPoint用動画)を参照する。ビットレートのデフォルト設置値が低いので、必ず自分でビットレートを設定する。

AndroidやiOSのスマホ、タブレットで再生したい場合は、とりあえず上の通りのコマンドで再生できるファイルができるはず。

動画をPowerPointに埋め込む