9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Apps ScriptAdvent Calendar 2017

Day 23

GASでサービスを作った話

Last updated at Posted at 2017-12-22

#はじめに

この記事は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システムは作れそうです。これはちょっと試してみたいです。

9
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?