見出し画像

【GAS】Gメール投稿するだけでWEBページの掲載画像を更新できる、かんたん日報表示システム(2)~システム構成~

離れた所にいるグループ内のメンバーに対して情報を共有したい場合、しばしばWEBページや電子メール(あるいは他のメッセージアプリ)が利用されます。

WEBページは、固定したURLでアクセスできるので、受け手が最新の情報を繰り返し確認しやすい一方、情報を集約してアップする管理者の負担が大変になります。

他方で、電子メールやメッセージアプリは、特定の管理者に頼らず情報を発信し合えるものの、スレッドが次から次へと流れてくるので、見返す時に最新情報が把握しにくい短所があります。。

そこで、これらの手法のいいところ取りをした、かんたんなシステムをGAS(Google Apps Script)で作ってみました。

このシステムは、固定されたURLにアクセスしてWEBページとして最新情報を閲覧できる一方で、掲載している画像情報については、特定のアドレスに電子メールで発信して投稿するだけで、管理者を介さずに自動的に更新されるというものです。WEBページを閲覧制限するためのログイン画面も加えました。

今回は、このささやかなシステムの構成内容をご説明します。

GASで作ったシステムなので通信速度や通信量に制約があるため、小規模なグループで、情報更新の頻度も低めという前提でしか使えませんが、無料のサービスであるGASの活用のヒントとしてご紹介しました。

システムの全体像~GASでスプレッドシート、Gメール、Googleドライブを操作する~


GAS(Google Apps Script)はスプレッドシートのマクロ言語として紹介される事が多いのですが、Googleが提供するGoogleドライブやGメールなどの各サービスアプリを操作する機能も有しています。

今回の場合は、スプレッドシート以外のアプリ/サービスをGASによって操作します。

システムを構成するアプリ/サービス

今回のシステムでは、以下のシステム/サービスを利用しています。


①Gメール・・・追加の画像をGメールで受け入れてストックするための窓口として機能します。

Gメールとして受信したメールの内、件名を「日報画像送信」として送られたメールの画像だけをGASで抽出して利用します。

②Googleドライブ・・・Gメールで受信したメールに添付されていた画像を、指定のフォルダに保存するために利用します。

保存フォルダ内のファイルは、GASによって調査され、後述のスプレッドシートでリスト化されます。


スプレッドシート・・・日報に掲載する画像を「投稿一覧」というシートにリストの形で記録します。

シートのリストは、上の行ほど新しいファイル名になっています。

これらを利用するGASそのものは、どういう内容でしょうか。


GASのプロジェクトの中身

今回のシステムでは、プロジェクトファイルの中に、2つのテンプレートと、3つのスクリプトを用意しています。

テンプレート①:LoginForm.html・・・最初にログインする時のWEBページです。

テンプレート②:INDEX.html・・・メインのWEBページ、つまり日報そのものです。

ここは、前述のスプレッドシートのリストの内、最も上にある画像ファイルと、その次の行の画像ファイルが表示されます。

スクリプト①:ログイン.gs・・・ログイン用のWEBページを表示し、ユーザが入力したパスワードを、続いて起動する日報表示用のスクリプトに引き渡します。

スクリプト②:かんたん日報表示.gs・・・ログイン用のスクリプトがから引き継いだパスワードが適切であれば、日報のWEBページを表示します。

スクリプト③:作品の抽出と保存.gs・・・Gメールを検索して、新たな画像ファイルがあればGoogleドライブに保存し、スプレッドシートのリストを更新します。

ユーザがアクセスしてから日報を表示するまでのフロー


ユーザがアクセスしてから日報を表示するまでのフローを、一枚の図で表すと以下の様になります。ざっとした流れを順にご説明します。

アクセス~ログインまで

GASのプロジェクトにアクセスすると、ログイン.gs内に記述したdoGet( )関数がまず作動し、ログイン画面用のテンプレートをWEBページとして表示します。
続いて、かんたん日報表示.gsに記述したdoPost( )関数を作動させます。

アクセスによって作動するこの関数は、プロジェクト内で1つしか宣言できません。

doPost()関数は、doGet()関数と異なり、URLからアクセスしたタイミングではなく、WEBページ上のユーザ操作(ボタンをクリックするなど)に応じて作動させるために使われる関数です。 

1連の処理をわざわざ分けて、ログイン情報が正しい場合のみdoPost()に記述した処理を進める様に、一種の関所として使っています。

最新の掲載画像を確認とリストの更新

続いて、Gメールに新しい投稿画像がないか検索し、画像ファイルを追加したり、画像リストを更新します。必要に応じて、作品の抽出と保存.gs 内に記述した関数を利用します。

この処理は、本来はユーザがアクセスする前に済ませておくべきなのですが、常時Gメールを監視する(例えば1分ごとにチェックするなど)と、スクリプトの時間制限に掛かってしまうので、この様にしました。

無料サービスの泣き所です。このために、表示までに時間を要します。

最新の2画像をテンプレートに埋め込んで日報のWEBページとして表示

最後に、日報となるテンプレートに掲載画像を埋め込んで表示します。

テンプレート内にGoogleドライブ内のデータを埋め込む際は、URLで指定してもうまく表示されないため、BASE64エンコードという手法を利用しています。

詳しくは以下に記しましたが、バイナリデータを文字に変換して取り込むという方法を用いています。

この処理のために、時間が更にかかるので、掲載画像は2つに限定しました。(実際の運用時は画素数も制限を設けた方が良いでしょう)


やや頼りないスペックですが、以上の流れで、電子メールに送信するだけで画像が自動更新されるWEBページが実装できます。

レスポンスはそれほどよくないのですが、日に一度程度の更新情報を小規模なグループで共有するだけなら、役に立つのではと重い、「かんたん日報」とした次第です。

次の記事では、GASのコードの中身についてご紹介します。

前の記事はこちら


この記事が気に入ったらサポートをしてみませんか?