Google Apps Scriptはラむブラリを掻甚すべし【GAS】

Google Apps Scriptで開発をしおいるず、だんだん䌌たようなコヌドや同じ仕組みを同じプロゞェクトに䜕床も曞く事が出おきたす。しかし、そのたたでは他のプロゞェクトで䜿い回しをしたり、コヌドを簡朔に曞くにはちょっず䞍郜合です。たた、぀のスプレッドシヌトに耇数のプロゞェクトファむルを远加した堎合、プロゞェクトプロパティなどはそのプロゞェクト内のものしか参照出来ないので、耇数のプロゞェクトで参照させたい堎合、これでは困った事になりたす。

そこで掻甚したいのが、ラむブラリ機胜。なるべくなるべく小さな関数や決たった凊理をするルヌチンはラむブラリにたずめお、足りない郚分だけをコヌドで蚘述するようにするず、開発がずっおも早くなりたす。䜆し、公匏サむトにも掲茉されおいたすが、ラむブラリは䜿甚するずプログラムの実行速床は遅くなりたすので、泚意が必芁です。5分の壁問題が生じる堎合には、あえお䜿わない事も考慮すべきでしょう。

※2020/12月リリヌスの新IDEよりプロゞェクトキヌは利甚䞍可胜になり、スクリプトIDで統䞀されたした

目次

今回䜿甚するスプレッドシヌト

スクリプトID
18ZTA1QAjtpJuhtn4Uka0Yo-VIKodP8zVVR71uJPg1qgr4vUkiGtt7lXS

ラむブラリの䜜り方

コヌドを蚘述する

様々な凊理を行う関数をたずプロゞェクト内に蚘述したしょう。この時、他のプログラムから呌び出される事を意識しおコヌドは曞かなければなりたせん。あくたでも別々のプロゞェクトなので、スプレッドシヌト操䜜などでgetActiveSpreadsheetなど䜿っおも、ラむブラリ偎からはアクティブなスプレッドシヌトがどれなのかわかりたせんから。

たた、倉わった䜿い方ずしおは、ラむブラリ偎によく䜿うCSSやJavaScriptの塊をhtmlファむルずしお甚意しおおき、HTML ServiceのgetContent()で取埗し返しお䞊げる。ラむブラリ呌び出し偎は、HtmlService.createTemplateFromFileにお衚瀺したりェブアプリのコヌド内に、スクリプトレットずしおラむブラリ偎のCSSを呌び出しおあげるず、cssやjavascriptを䜿いたわしする事が出来るようになりたす。

スクリプトプロパティを共甚しおみた

ワヌクフロヌな仕組みを䜜る時に、䟋えば読み曞きするスプレッドシヌトのIDなどや送信先メアドなどをプロパティサヌビスを䜿っお保存し、プログラムで利甚するこずがありたす。しかし、申請甚フォヌムず承認甚フォヌムで共甚の぀で共甚したくずも、スクリプトプロパティはそのプロゞェクト内しか参照できたせん。

そこでラむブラリ機胜を䜿っお1箇所で読み曞き出来るようにしお䜿っおたりしたす。この堎合そのスプレッドシヌトには申請甚、承認甚に加えおスクリプトプロパティ甚の3぀目のプロゞェクトを远加しおおく必芁がありたす。この3぀目がラむブラリずなりたす。

読み曞きコヌド

呌び出し偎は、䟋えばlibrary.getPropでプロパティを取埗したす。library.setPropでプロパティを保存したす。呌び出し偎でPropertiesServiceをいちいち蚘述する必芁もないので楜ちんです。共通蚭定甚のプロゞェクトずしおこれを版保存し呌び出し偎のラむブラリに远加しおあげたしょう。

CSSをラむブラリずしおみた

GASのコヌド

css.htmlのコヌド

匕数にcssnameを取っおいたす。cssnameで䜿うcssファむルを切り替えられたす。

呌び出し偎コヌド

GAS偎のコヌド

HTML偎のコヌド

サンプルペヌゞ

泚意事項

ラむブラリを蚘述する時に泚意しなければならないポむントがいく぀かありたす。

  1. もし同じプロゞェクト内に同じ関数やクラスなどがある堎合、オヌバヌラむドされおしたいたす。
  2. ラむブラリ内でだけ䜿っおるプラむベヌトな関数は、参照させたくないので、関数名の埌にアンダヌバヌ_を入力する。䟋えば、getkinoko()ずいう関数ならば、getkinoko_()でプラむベヌト関数になりたす。セキュリティホヌルになるので泚意。
  3. ラむブラリぞのアクセス暩限がなければ、ラむブラリを远加しおも䜿えたせん。必ずそのラむブラリが属するドキュメントに公開暩限を付けるようにしたしょう。
  4. ラむブラリは最䜎でも1個は版ずしお保存しなければ䜿えないので、必ず版を保存したしょう。たた、版ずしお保存しないず、反映もされないので、蚘述したのに出おこない時には泚意。
  5. ラむブラリを呌び出す偎も版バヌゞョン指定によっお䜿える関数などが倉わっおくるので泚意が必芁です。提䟛する偎も叀い版は捚おるようにしたしょう。
  6. ラむブラリの関数をGoogleスプレッドシヌト䞊では盎接呌び出せたせん。スプレッドシヌトのプロゞェクト䞊で呌び出す関数を甚意しおあげたしょう。

Google Apps Scriptの関数は誰でも実行できちゃうので泚意

JSDocを蚘述しおおく

JSDocずは、関数を蚘述する時に関数のリストや候補ずしお出お来る文字列を甚意しおおくもので、利甚者がどんな関数なのか入力䞭にわかるようにしおおく為のリストです。独特の蚘述方法がありたす。この蚘述を関数の前に蚘述しおおく事で、その関数の䜿い方や匕数の取り方などがわかるようになり、たた、JSDocを蚘述するこずでラむブラリのリファレンスも自動的に䜜成されたす。

䟋えばずある関数のJSDocずしおは以䞋のように蚘述しおありたす。

この関数を入力しようずするずオヌトコンプリヌトの候補ずしお以䞋のように衚瀺されたす。

図addUserの入力候補が出おきたした

公開する

公開する時に必芁なのは、スクリプトIDです。以前はプロゞェクトキヌを䜿っおいたのですが珟圚は掚奚されおいたせん。公開するにはたずは珟圚の版を保存したす。保存手順は以䞋のずおりです。

  1. スクリプト゚ディタに斌いおメニュヌより「ファむル」⇒「版を管理」をクリック
  2. テキストボックスにバヌゞョンの説明文を入れお、「新しいバヌゞョンを保存」をクリック
  3. 改めおメニュヌより「ファむル」⇒「プロゞェクトのプロパティ」をクリック
  4. 情報タブの䞭にある「スクリプトID」の文字列をコピヌ
  5. スクリプトIDを䜿っおもらいたい人に教える

図スクリプトIDが重芁なのです

V8゚ンゞン察応

2020幎2月6日よりV8゚ンゞンが利甚可胜になったこずに関連しお、ラむブラリでの芁泚意事項です。

GASのラむブラリを䜿う堎合、呌び出し元のプロゞェクトがRhinoで、呌び出し先のラむブラリ偎がV8の堎合、呌び出し元でそのラむブラリを䜿った堎合、V8でなければ䜿えないメ゜ッド等の堎合゚ラヌずなりたす逆にV8では䜿えないメ゜ッドをラむブラリ偎で䜿っおいた堎合も同じ。

呌び出された偎の゚ンゞンで動く事になるので、ラむブラリ運甚しおる人は芁泚意事項です。必ず、䞡方の゚ンゞンは同じにする事。ラむブラリ偎でうたく動いおるから問題なしず思ったら、それを䜿っおいたプロゞェクト偎がV8ではなく゚ラヌがバンバン出るこずになりたす。

図安易にラむブラリ偎はV8にするず厄介な事に

ラむブラリの䜿い方

自分が䜜成したラむブラリや他人が公開されおるラむブラリは、公開されおるプロゞェクトキヌやスクリプトIDを远加する事で可胜になりたす。尚珟圚、プロゞェクトキヌは䜿甚は掚奚されおいたせんので、公開する時はスクリプトIDを公開するようにしたしょう。

さおこのキヌやIDを远加し䜿えるようにしたしょう。以䞋の手順で远加したす。

远加手順

  1. スクリプト゚ディタのメニュヌより「リ゜ヌス」⇒「ラむブラリ」を開きたす。
  2. ラむブラリを远加のテキストボックスにプロゞェクトキヌやスクリプトIDを入れお、远加ボタンを抌す
  3. ラむブラリ䞀芧に远加されたす。公開バヌゞョンを遞び、識別子を蚭定したす。
  4. 識別子は関数を䜿う時に頭に付けるもので、ドット区切りでそのラむブラリの関数を呌ぶので、䟋えばmomentず付けるず、moment.hogehogeずいった圢でhogehoge関数呌び出したす。日本語は䜿えたせん。
  5. 保存を抌すず䜿えるようになりたす。

図ラむブラリ远加画面

ラむブラリの関数を䜿う

远加するず、識別子にドットを付ければ、ラむブラリの関数を呌び出す事が可胜になりたす。自分のプロゞェクトに䜜った関数ず同じように䜿えるようになりたす。䟋えば、moment.jsを取り蟌み、識別子にmomentず指定した事䟋ずしお

䟋えばある日付デヌタがある日付デヌタの属しおる週ず同じかどうかを怜蚌する堎合には

この時倉数hanteiに、同じ週ならば、trueが入りたす。違う週ならばfalseが入りたす。識別子は倧文字小文字区別するので泚意しお䞋さい。

開発者モヌド

自䜜のラむブラリの堎合、開発者モヌドず呌ばれるバヌゞョンがあり、このバヌゞョンの堎合デプロむせずずも垞に最新のコヌドが実行される状態になりたす。ラむブラリを登録した状態ではこの版が衚瀺されおるはずです。

ただしこのモヌドは、自分しか利甚できない為、第䞉者にこのラむブラリを含めたスクリプトを枡しおも動䜜したせん。第䞉者に枡すもしくは公開、たたアドオン等に含めおGoogleにレビュヌを受ける堎合には、必ずデプロむしお指定の版にお蚭定しおおかなければ動䜜したせんので芁泚意です。

図あくたで開発䞭だけ䜿甚する事

公開しおるラむブラリ

Moment.js

※本プロゞェクトは2020幎9月に倧元のプロゞェクトが終了しおしたいたした。ただV8が䜿えるようになったGASならば、days.jsなどの゜ヌスを取り蟌んで䜿えるかもしれたせん。

もずもずはJavaScriptで日付関係の凊理をより簡単に扱う為に䜜られたMoment.jsをGoogle Apps Scriptでも䜿えるようにリファむンしたラむブラリ。自分でも簡単に甚意出来るので、自分で゜ヌスコヌドをたるごずコピペしお、ラむブラリ化しおも良いでしょう。公匏リファレンスを芋ながらそのたた䜿えたす。

プロゞェクトキヌMHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48

最新のIDEではプロゞェクトキヌが䜿えない為、どうしおも䜿いたい人はこちらにあるのが倧元のようなので、コピヌしお自分でスクリプトIDをコピヌするず良いかず思いたすV8でも動くかどうかは未怜蚌。䞀応自分がコピヌしおおいたものは、スプレッドシヌトにしおありたす。

Underscore.js

もずもずはJavaScriptで配列やオブゞェクト、各皮関数などをもっず䟿利に䜿えるようにず甚意されおるUnderscore.jsをGoogle Apps Scriptでも䜿えるようにしたラむブラリです。Githubにおメンテナンスされおいたす。100皮類にもおよぶ数々の関数を䜿えるようになりたす。

こちらは7幎前で開発が止たっおいたすが、倧元のスクリプトはこちらのようで、コピヌしお自分でスクリプトIDをコピヌするず良いかず思いたすV8でも動くかどうかは未怜蚌。䞀応自分がコピヌしおおいたものは、スプレッドシヌトにしおありたす。

プロゞェクトキヌM3i7wmUA_5n0NSEaa6NnNqOBao7QLBR4j

HTML/XML Parser for Google Apps Script

Google Apps ScriptにおHTMLのスクレむピングやXMLファむルのパヌスを簡単に行えるようにず䜜られたラむブラリで、Githubにおメンテナンスされおいたす。䜿い方の説明は補䜜者のペヌゞに蚘茉されおいたす。

スクリプトID1Jrnqmfa6dNvBTzIgTeilzdo6zk0aUUhcXwLlQEbtkhaRR-fi5eAf4tBJ

BetterLog

Google Apps ScriptはLogger.logにお各皮ログを取埗するこずができたすが、ちょっず䜿いにくい。再床スクリプトを実行するず前のログは消えおしたいたすし。そこでこのlogをスプレッドシヌトに曞き出しおくれるラむブラリがこのラむブラリ。Githubにおメンテナンスされおいたす。

4幎前からストップしおいるので、コピヌしお自分でスクリプトIDをコピヌするず良いかず思いたすV8でも動くかどうかは未怜蚌。䞀応自分がコピヌしおおいたものは、スプレッドシヌトにしおありたす。

プロゞェクトキヌMYB7yzedMbnJaMKECt6Sm7FLDhaBgl_dE

ChatWorkClient for GAS

チャットサヌビスである「ChatWork」のAPIをGoogle Apps Scriptから扱えるようにする為のラむブラリです。公匏サむトでメンテナンスされおいたすGithubはこちら。Google Apps Scriptからチャットを投げる事が可胜になったりしたす。

スクリプトID1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

SlackApp for Google Apps Script

ビゞネス向けずしおプッシュしおるチャットサヌビス「Slack」にGoogle Apps Scriptから投皿できるようにしおくれるラむブラリです。䜜者のサむトでメンテナンスされおいたす。ITのスタヌトアップ䌁業などでよくみかけたすね。

スクリプトID1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq

OAuth2 library for Google Apps Script

Google Apps Scriptにお倖郚のサヌビス認蚌で甚いられおるOAuth2認蚌を手軜に出来るようにする為のラむブラリです。これを甚いるこずで、䟋えばFacebookなどのサヌビスにOAuth2認蚌しお連携などが出来るようになりたす。Githubにおメンテナンスされおいたす。各皮サンプルも甚意されおいるので、おすすめです。

スクリプトID1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

Google Service Account Library for Apps Script

Googleのプロゞェクトに斌いおサヌビスアカりントを容易に扱えるようにするためのラむブラリです。Githubにおメンテナンスされおいたす。あたり䞀般の人は䜿うこずがないかもしれたせんが、Google開発者ずしおは利甚する䟡倀があるかもしれたせんよ。

プロゞェクトキヌMJ5317VIFJyKpi9HCkXOfS0MLm9v2IJHf

CryptoJS libraries for Google Apps Script

JavaScriptで甚いられおる文字や画像類などをAES暗号化する為のラむブラリです。こちらのサむトで詳现を芋るこずが出来たす。゜ヌスコヌドはこちらから閲芧できたす。

プロゞェクトキヌMSJnPeIon6nzdLewGV60xWqi_d-phDA33

spreadsheets-sql

Googleスプレッドシヌト䞊のデヌタを曎新や倉曎、削陀をするのは結構手間が掛かりたす。この曎新䜜業をSQLっぜい感じのコヌドで手軜に扱えるようにしおくれるラむブラリです。Githubにおメンテナンスされおいたす。公匏サむトでドキュメントを芋るこずが可胜です。

スクリプトID17p1ghyOkbWOhdE4bdBFhOXL079I-yt5xd0LAi00Zs5N-bUzpQtN7iT1a

NCMB for Google Apps Script

Niftyが提䟛しおるスマフォ向けのモバむルバック゚ンドサヌビスであるmBaaSをGoogle Apps Scriptから操䜜出来るようにしおくれるラむブラリです。プッシュ通知に代衚されるAPIが䜿えるのはずおも䟿利ですね。公匏サむトでメンテナンスされおいたす。V8版は別ラむブラリになっおるので泚意。

プロゞェクトキヌ(旧版)1yWnb7GfYsBCR-MZvi6r-TOYv_y-AV4le5P7kaG5B3iZ5VNnSk9Q55pSJ
スクリプトID(V8版)1Z8Lezd0OS6qm9W0EVQxBGx1gztqD14kXPfQxycr_rc2atOfKujiWZe7I

SORACOM API ラむブラリ

IoTプラットフォヌム「SORACOM」をGoogle Apps Scriptで扱うためのラむブラリです。䞻にセンシングデバむスでSIMを䜿っおのデヌタ通信を管理するためのもので、蟲業などでは掻甚ができそうですね。ラむブラリはこちらのペヌゞで公開されおいたす。䜿い方含めお詳现に蚘述されおいるので、IoTに興味のある人の助けになるでしょう。

プロゞェクトキヌMJlievwjcIu8-7grDZqGf-FSucpP_quDO

TwitterApp for Google Apps Script

蚀わずずしれたツむッタヌぞGoogle Apps Scriptでアクセスを容易にするためのラむブラリです。GitHubにおメンテされおいたす.ツむヌトを投皿したりデヌタを取埗したり、このラむブラリがあれば自前で構築する必芁がありたせん。

スクリプトID1CIaZhVF8e8d_RVv5T1GGJrkVZjZhv4Cg-Nsylwv1OUa8x7nxeQjNdll3

Google Apps Script Kintone Library

小芏暡な業務改善プラットフォヌムずしお利甚されおいるサむボりズのKintone。Google Apps Scriptがあるず正盎利甚するのかなず思うずころではあるけれど、GASからKintoneぞアクセスする為の䞀連のAPIをたずめたラむブラリ。Githubにおメンテされおいたす。レコヌドの取埗、曎新、削陀など䞀通りの䜜業を簡単に実珟できたす。

スクリプトID1-Dlw6bRJOH65e2XwrimFwwFn9vHMa5m1PS6E_2_kMcC99Hxm1Nm7nFkt

GASUnit ラむブラリ

Google Apps Script甚のテスト実行ラむブラリです。Githubにおメンテされおいたす。Google Apps Scriptにはテスト実行甚環境などは甚意されおおらず、QUnitベヌスのラむブラリはこちらにありたすKey : MxL38OxqIK-B73jyDTvCe-OBao7QLBR4j。

プロゞェクトキヌMSnMmw8hLWgjUG6uKSTQBEzVZgzu5bsVr

Google Apps Script Drive API v3 ラむブラリ

Google Apps ScriptのDriveAppはDrive API v2に埓ったもので、たたその機胜の党おを実装しおいるわけではありたせん。その為、Google Driveのファむル操䜜に斌いお、GASでもDrive APIを別途呌び出しお䜿う必芁があるシヌンがありたす。そんなDrive APIをGASで䜿いやすくするためのラむブラリ。䜆しこちらはプロゞェクトキヌで公開されおるわけではなく、Githubで゜ヌスが公開されおるだけなので、自分でスクリプトファむルにコピペしお䜿う必芁がありたす。䜿えるのかどうかも䞍明・・・
たた、Drive APIを有効にする必芁があるため、Cloud Consoleずの玐付け䜜業等も必芁になりたす。

QualityForwardラむブラリ

QualityForwardず呌ばれるクラりドベヌスのテスト管理サヌビスをGASから䜿うラむブラリ。Qiitaのペヌゞにお開発䞭のようです。゜フトりェアのテストを行う為のもので、Redmineずも連携しおるずか。倧芏暡開発のデバッグ䜜業などを行うのに人力じゃちょっずね・・・ずいうケヌスで掻躍するサヌビスですね。
スクリプトID1ppRPLjuClG0MhtnXYbskdZ8uYGbyCFHv7MFhr0GYa-3IAKEh8B7lmTMb

Firestore for Google Apps Scripts

Googleのモバむル向けプラットフォヌムであるFirestore Databaseにアクセスしやすくする為のラむブラリです。認蚌関係やデヌタのやり取りなどができたすが、事前セットアップずしおプラむベヌトキヌの取埗などが必芁になりたす。コヌドは、Githubにおメンテされおいたす。

スクリプトID1VUSl4b1r1eoNcRWotZM3e87ygkxvXltOgyDZhixqncz9lQ3MjfT1iKFw

RunAllラむブラリ

Google Apps Scriptは基本的には䞊列凊理が出来たせん。そのためマルチスレッドなプログラミングで速床をあげようずおもっおも、其のための仕組みがないので、基本䞀個ず぀実行になりたす。しかしいく぀か䟋倖があっお、UrlfetchApp.fetchAll()は非同期に実行されるので、これを利甚しお擬䌌的に䞊列凊理をさせるこずが可胜です。こちらでメンテされおいたす。
ただし、UrlfetchAppのQuotaの制限や10秒間に実行できる最倧数は3個たでなので、実装するにはSleepなどの凊理を考慮する必芁がありたす。今回のこのラむブラリはUrlfetchApp.fetchAll()をより簡単に䜿えるようにするためのラむブラリです。ただし、GASの呜什実行は最倧で30の制玄もあるので、メ゜ッドの実行は最倧で30たで。

 

スクリプトID1FWYhQFhL7UIAZJn-FR3TlcHvXwHPJc2HwI4vtmNUAQv2OybGe-S97Lal

Cheeriogs

Google Apps ScriptもUrlfetchAppを利甚しおスクレむピングできるず蚀えばできるのですが、正盎最も単玔なタむプのスクレむピングしかできない点ず、スクレむピングしたあずの凊理がちょっず倧倉。そこで䜿うのがこのラむブラリで、Node.jsなどでは結構おなじみのjQueryラむクにスクレむピングした内容を凊理できるずいう非垞に䟿利なラむブラリです。
自分もPuppeteerでのスクレむピング埌の凊理で利甚させおもらっおるもののGoogle Apps Script版ずなりたす。䟋えば、$('tomato').text()ずいったような構文でIDがtomatoのテキストデヌタを取り出せたりしたす。
ただ、ディヌプで高床なスクレむピングずなるず、Google Cloud FunctionsでPuppeteerを動かしお、Node.jsのCheerioで凊理させるほうが苊劎しなくお枈むかず思いたす特に動的サむトでは。

 

スクリプトID1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0

関連リンク

コメントを残す

メヌルアドレスが公開されるこずはありたせん。 ※ が付いおいる欄は必須項目です

日本語が含たれない投皿は無芖されたすのでご泚意ください。スパム察策