Help us understand the problem. What is going on with this article?

GASでサービスを作った話

More than 1 year has passed since last update.

はじめに

この記事はGASってなんなの?という方に向けて書いています。2017年に書く内容じゃないというツッコミは無視しますのでご了承ください。

先日あるお客さんからメールで飛んでくるオーダーフォームをそれをPDF化して欲しいという要望を頂き調べたのですが、GASで結構すんなりと出来てしまいました。かなり便利で色々と面白そうな事が出来そうなので共有しておきます。

GASってこんな感じ

ブラウザ上で開発できる

本家のページで一目瞭然ですがブラウザ上のIDEで開発できます。

GmailやGoogle Docなどを組み合わせたサービスが作れる

基本的に自分のアカウント以下のgoogleサービスを組み合わせてサービスが作れます。今回作ったのは、次のようなものです。

  • Gmailを定期的に調べてフォームのメールを探す。(Gmail)
  • 上記のメールをHTML形式でGoogle Docに書き出してPDFに変換して特定のフォルダに置く。(Drive)
  • 上記のPDFを添付してメールをお客さんに送る。(Gmail)

結局GoogleサービスのAPIを叩いて色んなことをするのですが、APIにアクセスOAuthの設定だとかをいちいち設定しなくて良いので気楽に作れます(厳密には設定するのですが簡単です)。外部のAPIサービスにクエリーを出すことも出来るようなので、そういうサービスと組み合わせることも出来るようです。

無料で色々出来る

普通のGoogleアカウントでかなりの事が出来ます。有料のGSuitesのほうがAPIを叩ける回数とかが多いのですが、今回は無料の範囲ですべて行いました。

プログラムの定期実行も無料

これが個人的には一番驚いたのですが、プログラムを定期的に実行出来ます。しかも無料です。LambdaとかAzureのFunctionとかはお金がかかるので、この部分をどうしようか悩んでいたのですが。

01/05/2018追記: LambdaもAzureも無料枠がありました。

GITHUB連携もできる

GASはブラウザ上で開発します。そこで構成管理とかどうするのだろう、、、と思っていたのですが、こんなプラグインが。

私はこれでGitBucketにアップしました。ローカルで開発するツールとかもあったのですが、あまり使いやすくなさそうで、ひとまずこれに落ち着きました。とりあえず差分が管理出来れば良かったので。

ちなみにファイル名と同じ名前のクラスはPUSH出来ないようなので、使う時は注意して下さい。

お客さんのアカウントにログインしなくてよい。

基本的に自分のGoogleアカウント間の連携しか出来ません。しかし、お客さんのGoogleアカウントにログインするわけにはいきません。
そこで今回はフォームのメールだけ転送するようにしました。これで自分のアカウントのGmailに転送されたメールをパースしてPDFを作って、お客さんのアドレスに送りました。作成したPDFは特定のフォルダに置いておいて、お客さんのアカウントと共有する事で、閲覧はしてもらえるようにしました。

サーバーレスを体験できる

私はこれをやってサーバレスって何か腑に落ちました。これについては色々とあるのですが、書ききれないので「あぁそうなんだ」と思っていただければ。

どんなプログラムなの?

いろいろな事情でまだフリーで公開とまでは行かないですが、どんな感じのプログラムになるか参考に貼っておきます。

PDFファイルを作る関数

function createFilesByHtml(text, name, baseFolder) {
  var saveFolder = baseFolder + getSaveSubFolderName();
  var folderId = createFolder(saveFolder);
  var f = DriveApp.getFolderById(folderId);

  var file = f.createFile(name + ".html", text, MimeType.HTML);
  var htmlBody =  file.getAs('application/pdf');
  var pdfFile = f.createFile(htmlBody); 
  return pdfFile;
}

一つの問題はhtmlに画像を貼っても、PDF化する時に消えてしまいます。これは何とかならないかなと考えています。

今後やってみたい事

GUIも組めるようなのでバックエンドをGoogle Sheetにした簡単なDBシステムは作れそうです。これはちょっと試してみたいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした