お問い合わせ | Google Apps Scriptを利用すれば、Gmailに届いたメールの添付ファイルを自動で共有フォルダにアップロードする設定ができます。 (window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js","msmaflink"); d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))}) b[a]=b[a]||function(){arguments.currentScript=c.currentScript Google Apps Script初心者向けの題材としてBotの作り方シリーズです。今回はChatwork APIを活用するために必要な知識として、Web API、HTTP通信、UrlFetchサービスについてです。 | 4 year sensor life and 24 hour run time exceeds industry average. この記事では、Google Apps Script(GAS)について、特徴やできること、使い方、活用事例などを、初心者にもわかりやすく解説しています。GASは、Googleのサービスを使い、無料で業務を効率化する手段として注目されています。この記事を読み、GAS入門しましょう。 google.script.run.withSuccessHandler(onSuccess).GetUser(); document.getElementById(“mainform”).style.display = “block”, Embedding Google Apps Script in an iFrame, 【GAS】ウェブアプリケーションとして導入→取得したURLの表示画面を共有したいがうまくいかない・・・, tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script, 新しいGoogle SitesにネイティブなRSSリーダーを作ってみる officeの杜, 新しいGoogle SitesにネイティブなRSSリーダーを作ってみる ★ officeの杜, HTMLファイルが作られるので、その中にHTMLやCSS、JavaScriptを記述してゆく, 最後に導入すると、ウェブアプリケーションのURLが取得できます。このURLでアクセスをします。URLの最後がexecが本番用、devがテスト用で、テスト用は, G SuiteことGoogle Appsの場合、外部との共有を管理者が許可していない場合、匿名でウェブアプリケーションは実行出来ませんし、外部に公開は出来ません。, 公開済みの場合、再度公開を実行すると最新のコードをテストという項目があり、URLの最後に/devが付きます。公開していない状態でも最新コードで表示されます。, 但し上記のそれはデベロッパーモードであり、コードの変更が直ちに反映されてしまうので、一般公開のURLとして使わない事。execの場合、新しい版で公開し直さない限り、コードは反映されません(但し、HTML部分のみで、GAS部分は反映されてしまいます)。, きちんと公開した場合はURLの最後に/execが付き、これを貼り付けるガジェットのURLや一般公開のURLとして使うこと。, コードを変更した場合、execのURLに反映させる為には、プロジェクトバージョンを変更し新規作成にしなければコードが反映しません。. そこでHTML Serviceに用意されてるオプションを指定して出力をすると、外部のサイトにてiFrameタグで埋め込みをすることが可能です。XFrameOptionsModeと呼ばれるもので、以下のようなコードで指定します。, いつものコードに.setXFrameOptionsModeをつけ、引数にHtmlService.XFrameOptionsMode.ALLOWALLを入れるだけです。これで、iFrameタグでexecと最後につくウェブアプリケーションのURLを指定すれば、WordpressなどのサイトにAppスクリプトガジェットとして呼び出す事が可能です。ただし、作成者以外では表示画面の上に何やら英語の妙なメッセージが出ますが、これは仕様です。, ※.setXFrameOptionsModeをつけることにより、iframe内にGoogle Apps Scriptのフォームを呼び出せるようにはなりますが、同時に他人が別の場所でiframe内に呼び出せる事にもなるので、クリックジャッキング対策が別途必要になる事があります。, 実際に普通のGoogleアカウントで試してみましたが、匿名ユーザの閲覧も許可した所、以下のような形(リッチなGUIのアプリ参照)で表示ができました。匿名ではない指定をした場合には、Googleアカウントが必要です。また、自社ドメインのユーザのみの場合、当然外部のユーザは閲覧する事は出来なくする事が可能です。, また、XFrameOptionsModeの場合、Session.getActiveUserなどで情報を取得する事ができません。, 社内で使う分には、「このアプリケーションはGoogleではなく、別のユーザによって作成されたものです」といった、灰色の帯は表示されません。しかし、外部向けのサイトでアカウントが無い人、社内アカウントじゃない場合、このメッセージが出て、非常にダサい感じになります。 3.1 外部のJSやCSSを読み込み; 3.2 HTML側⇔GAS側で通信する. Refused to display ‘ここにURL’ in a frame because it set ‘X-Frame-Options’ to ‘SAMEORIGIN’. これを解消する方法は、Google Sites側にはコードを直接記述して、GAS側はJSONなどでデータを配信するといった形に分けてあげると、綺麗な表示になります。(X-FrameOptions Modeの際には表示されないようで), 詳しくは、新しいGoogle SitesにネイティブなRSSリーダーを作ってみるを参照してみてください。, ※また、個々のユーザにてChromeのカスタムJavaScriptにて対象のエレメントを非表示にする事で消すことも可能のようです。, Google Apps Scriptでは1つのスプレッドシートに1つしかdoGet()は置けないので、複数のウェブアプリケーションをそのままでは作ることができません。その為、例えば申請用ページをスプレッドシート上のGASで作り、承認用には別のシートか?単体のGASファイルを作って同じスプレッドシートを参照させるなんて形で作る事になります。しかし、Google Apps Scriptは1つのスプレッドシートに複数のプロジェクトを作る事が出来るようになっています。, といった仕組みになっています。つまり1シート2プロジェクトで2つのウェブアプリケーションを作る事が可能になっています。別々にファイルを用意するのではなく、プロジェクトを2つ作成して、別々にコーディングをすれば良いという訳です。新しいプロジェクトを作る場合には, 1シート2プロジェクト体制の場合、スクリプトプロパティも個別になり具合が悪い事があります。その場合、3プロジェクトにしてあげて、3つ目のプロジェクトのスクリプトプロパティを1つ目、2つ目から読み書き出来るようにしてあげれば、共通化する事が可能です。以下の手順で共通化をしましょう(ライブラリ化する作業です。詳細は参照してみてください。), ちなみに、自分が3つ目のプロジェクトでスクリプトプロパティを読み書きさせてるコードは以下の通り。, 1シート2プロジェクト体制の場合、Google Cloud Console側のプロジェクトも個別になります。これでは、Cloud Console側で設定した各種APIの設定や認証情報も個別になってしまうので、二度手間になります。そこで、以下の作業をする事で、1つ目のプロジェクト側に紐つける事が可能になります。(Cloud Consoleを弄ってみるを参照してください。), Google Apps ScriptではHTMLファイルを複数作る事は可能なのですが、doGet()は1個しか設置出来ません。よって、ウェブアプリケーションとして表示出来るのは、1つのプロジェクトで1つだけです。その為、シングルページアプリケーションしか作れません。つまり、他のウェブサイトなどで見られるような画面遷移というものが出来ませんので、jQueryなどを使ってダイアログを表示したり、サイドバー的なものを用意して1ページ内で収めるようなコードを書かなければなりません。, しかし、createTemplateFromFileを使ったケースの場合、過去にも紹介しましたが複数のHTMLファイルを呼び出すような感じで、擬似的に画面遷移を作る事が可能です。あくまでもシングルページなのですがHTMLをごっそりチェンジ可能なので、複数の画面遷移的なものを作ってみたい場合は、挑戦してみましょう。, ※Framework7を使った画面遷移を装備する事が可能です。また、HTML5のsectionタグを使った画面遷移というテクニックもおすすめです。, Google Apps ScriptのHTML上では、のようなページ内リンクが利用出来ません。クリックをしても何も起きず、また、URLをコピーして開いても、真っ白です。こんな場合、jQueryを使う事でこのアンカーについてページ内リンクのように移動できるようにする事が可能です。, ただし、上記の場合、hrefが#で始まる何かをクリックした場合の挙動をコントロールしているので、別にアンカーに対してイベントリスナーでコマンドを割り当ててるとオカシナ挙動になるので、注意は必要です。, HTML Serviceだけに限らず、Google Apps Scriptの同一スクリプトに対するアクセス集中に関する資料は、Google公式によると「最大30接続」。これについては、こちらでも立証しています。しかし、過去の経験から「一時的にアクセスが集中した場合、処理が止まる可能性」は十分にあります。スプレッドシート上の呼び出しであっても「同時呼び出しの数が多すぎます」といったエラーに遭遇する事があります。, 当然ながら、Quotaに掛かるようなコードである場合、複数名同時に利用することによってLimitに掛かってしまい、エラーとなって正しく処理がなされない可能性があります。設計上考慮すべきは以下の項目になります。, […] Google Apps ScriptのdoGetおよびdoPostの関数。これらはウェブアプリケーションやウェブAPIを構築する場合に利用される特殊な関数です。それと合わせて、実はGoogle Apps Scriptでは、ファイルの […], […] を利用して様々なウェブアプリを作成でき、新しいGoogle Sitesに貼り付けるだけでなく、XFrameOptionsModeを使う事で、外部のWordpressのサイトにも貼り付けが可能です。当サイトでもRSSリーダー […], このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。. != ?>という記述もあり、この場合強制的に実行する強引なやり方です。HTML側でGAS側の実行結果を変数に受け取るようなシーンで使用します。, HTML Serviceでは、HTML側にスマフォ対応で利用するviewportのメタタグを記述しても無視されます。このメタタグはGAS側で出力する前にオプション指定する必要があります。, .addMetaTagでviewportを指定することが可能です。この指定をしない場合、スマートフォンに最適な表示にはならないので、スマフォ用アプリを作成する場合には必須の項目です。, これらのメソッドを使っても、最終的に「ウェブアプリケーションとして公開」をしなければ、ウェブページは表示されません。また、このウェブアプリケーションとして公開はいくつかのハマりポイントがありますので注意が必要です。公開の仕方は以下の手順。, 前項のハマりどころをもう少し深く掘り下げてみます。このアクセス権限が結構クセモノで、混乱するポイントなのですが、シートのアクセス権限(特に書き込み)とウェブアプリケーションのアクセス権限は別物という事です。以下の表のような感じになります。, ※上記の表の⭕は、一般ユーザがアクセスした場合に、WebAppを実行できるかどうか?どうかを示しています(実行権限は制限していない場合です), ※非公開でもアクセス可能ですが、WebAppの実行権限が自分のみの場合、オーナーだけが実行できます。, よって、スプレッドシートの書き込み権限が自分のみであっても、実行権限が自分で、ウェブアクセスの権限が全員ならば、自分以外の人であっても、自分の権限を持って書き込みが可能です。一方で実行権限がアクセスしてる人の場合、ウェブにアクセスは出来ますが、シートの書き込み権限が無いことになるので、書き込めません。, この時、スプレッドシートの編集履歴は「自分」しか残りません。自分の権限で書き込みをさせている為です。逆を言えばシートは非公開で閲覧させたくないが、ウェブは使わせたいなんて時は実行権限を自分にしておくと良いでしょう。, この場合、スプレッドシートに個別にユーザに編集権限を加える、もしくは全員編集可にしておく必要があります。編集権限はグループアドレスでもOKです。この時のシートの編集履歴はそれぞれの人のメアドが記録される事になります。但し、各々のユーザはウェブアプリケーションアクセス時に1度だけ、実行承認をしなければなりません。また、後にコードを追記して新しいAPIを使った場合も、承認画面が改めて出ることになります。, ※また要注意ポイントとして、WebAppの実行権限を自分にした場合、全ユーザが自分の権限でGASを実行するため、例えばUrlfetchAppなどのQuota制限のあるAPIの実行を伴う場合、リミットに達しやすくなります。各ユーザの場合には、各ユーザが1日辺り実行できるリミットとなります。, 嵌まるポイントの1つなのですが、HTML Serviceで外部JavaScriptやCSS類などを呼び出す場合、http://www.xxx.com/test.jsといった形で呼び出すことは出来ません。httpではなくhttps://でなければならないというルールがあります。https://が使えるのであれば、//www.xxx.com/test.jsという形で頭をつけずに指定して呼び出すことも可能です。, 個人でレンタルサーバをファイルの置き場にしている場合、共用SSLなどがない場合には呼び出せませんのでご注意を。呼び出し方そのものは、外部のファイルの呼び出し方と全く一緒です。headタグ内に記述しましょう。, Google Apps Script側と生成したウェブアプリケーションは、サーバーとクライアントの関係にあります。その為そのままでは、HTML側からGoogle Apps Script側に命令やデータを送ったり、またGoogle Apps Script側からHTML側へ返してあげる事が出来ません。しかし、Google Apps Scriptではこの相互通信をする手段として特別な関数を用意しています。以下に示すもの以外にも、google.script.url関数やgoogle.script.history関数なんてものも新規に追加されています。, Google Apps Script側に用意してる関数を一方的に実行する関数です。引数で値や配列などを渡してあげる事が可能です。一方的に実行して完了してしまうので、返り値を受け取るといった事は出来ません。以下のような構文で実行します。, この関数は上記の関数とは異なり、返り値を受け取る事が可能です。withSuccessHandlerで成功時、withFailureHandlerで失敗時の処理をそれぞれ定義でき、同時に定義することも可能です。返り値を受け取って、HTML側で引き続き返り値の処理をする事が出来ます。例えば以下のような記述をします。, 直接実行した結果を変数で受け取る事も可能です。ただし、非同期で実行される点は同じですので、受け取った変数を元に続けてなにか作業をしたい場合には、うまく動作しないことがあります。, また、返り値を受ける書き方ですが、別の関数にするのではなく、以下のような書き方も可能です。この特殊な関数は非同期で実行されてしまうので、順番に実行したい場合には、このような書き方が必要です。, 上記の場合、onSuccessだった場所に無名関数をつくり、無名関数の引数retでGAS側の返り値を受け取って内部で処理をしています。exportlogはGAS側の関数の実行を意味しています。, 前項のgoogle.script.run.withSuccessHandlerによるGASからの返り値に基づいて処理するコードでは単一の処理ならばこれでも良いですが、いくつかの連続した処理をしなければならない時には、コードが複雑になってしまいます。そこで、Promiseを利用して順番に非同期なgoogle.script.runを実行して計算する手法があります。, test1〜3はそれぞれ、セルの値を取得して返すだけの関数です。これをHTML側から順番に取得して計算結果を表示します。, また、createTemplateFromFileの場合は、GAS側の変数や処理の中身をHTML側でスクリプトレットにて取得が可能です。, こうする事でHTML側でスクリプトレットの強制実行タグでtestmanにpotatoという名前付き範囲の値を取得させる事が可能です。もちろんここの部分は変数名でもOKです。他にも以下のようなコードをheadタグ内で記述する事で、createTemplateFromFileの場合には、テキスト文字列を取得が可能です。, これはcssというGASで用意したHTML内にcssの記述をしたものをHeadタグ内で呼んでいるもので、CSSの記述をまるごと別のHTMLファイルから呼び出せます。CSSだけじゃなく、HTMLファイル内にJavaScriptを記述しておけば、関数等もロードできてしまいます。, このテクニックを使う事で、メインのHTMLに全てを記述するのではなく、CSSはcss.htmlへ、JSはjs.htmlへ分離管理が出来るようになります。具体的にはライブラリを別管理する手法サンプルを御覧ください。, Google Drive内に別途作成したCSSやJSのファイルを使いたい場合もあるでしょう。そうすることで、他のGASプロジェクトでもそのまま流用できる為、非常に便利ですし、手間が省ける(プロジェクト毎に微妙に違うとか防げますし)。また、他のシステムから自動で上書きで吐き出されるJSONファイルを固定でロードするような仕組みにしておけば、インポートの手間も省けますね。, この場合、直接スクリプトレットでドライブのデータを取得するコードを書いても反映されないので、GAS側で一度取得して返すようにしてあげます。, もうひとつ、ドライブにあるCSSとJSファイルを呼び出す方法があります。こちらのほうがスマートかもしれません。HTML側へ直接対象のファイルの直リンクダウンロード出来る形でURLをそれぞれ呼び出してあげるだけ。, GAS側からHTML側へreturnする場合、通常JSON.stringifyを行ってHTML側でJSON.parseするのが定石です。スプレッドシートで取得したデータは通常の配列であるため、受け取り手であるHTML側も配列で受け取って処理をすることになります。さてこの時、GAS側からスプレッドシートのデータをJSON配列で渡せたら、非常に便利です。理由は, GAS側からJSON化して渡すには、スプレッドシートのデータをJSONで取得するを参考にしましょう。主要なコードは以下の通り。, HTML側ではJSON.parseで受け取ると、例えばjson[0].pointといったように、0レコード目のpoint列の値といった具合に取得が可能になります。やり方しだいでは、複雑なJSONを構築して渡すこともできますね。, この関数はちょっと特殊な関数で、次の項目で紹介するスプレッドシートのダイアログで使う場合に併用するものです。おもに、GAS側で表示してるダイアログを閉じたり、そのダイアログのサイズを変更したりする為に使います。, 但し、google.script.host.originだけは特別で、そのウェブアプリケーションやダイアログがどのURLドメイン(origin)で動いてるか?を返します。ダイアログならばdocs.google.com、通常のウェブアプリケーションならばscript.google.com、Google Sitesにガジェットとして貼り付けてる場合は、sites.google.comが返ってきます。Google Picker APIを使ったダイアログなどのsetOriginにセットする値を取得する為に利用する。, さて、ここで気がつくと思うのですが、ウェブアプリケーション自体のアクセスを細かく制御できないか?という話ですが、それはシステム上出来ません。ウェブアクセスは「自分のみ」か?「全員アクセス可」のどちらかしかありません。となると特定の人にだけウェブアプリケーションを使わせたいのに、このままだと誰でもURLを知って入れば使えてしまう事になります。, そんな時は自分でロジックを組みます。自分もこのロジックを使っていますが、以下のポイントを持って作りましょう。, こんな具合です。これで特定の人のみウェブアプリケーションを使えるようになります。承認リストの管理が必要になりますけれどね。具体的なコード例は以下の通り。, これで、承認リストにはないユーザにはアプリケーションを表示せず、リストに乗ってる人はアプリケーションを利用できるようになるわけです。, すでにメッセージボックスあれこれにて紹介済みなのですが、スプレッドシート上で呼び出すダイアログにも、HTML Serviceで生成したウェブアプリケーションをダイアログとして呼び出す事が可能です。標準のダイアログは素っ気なく出来ることも限られているのですが、HTML Serviceで作ったダイアログは、自由度が高くあらゆるものをダイアログに詰めて、処理させる事が出来るので、重宝します。以下のようなコードを記述します。, HTML側からgoogle.script.runでGAS側の関数を実行したり、実行結果を受け取れるわけなのですが、関数類を他のシート等でライブラリ化している場合、GAS側でライブラリを導入していても、直接ライブラリの関数を呼び出す事は出来ません。あくまでもGAS側に用意されてる関数しか実行は出来ない仕組みになっています。ですので、ライブラリ化してる場合には、ライブラリの関数をラッピングしてGAS側で用意してあげる必要があります。, MDvtU0ospspq31f4ArmUs9G_JV1dIyBf4は自分が作ったライブラリのプロジェクトキーですが、この中にあるuidgene()という関数はランダムな数値を生成する関数ですが、例えば、以下のようなコードを実行しても呼べません。ore3という名前をつけてあります。, この場合、GAS側に関数を用意するか?ラッピングした関数として以下のような形で用意すれば呼び出す事が可能です。HTML側はこのoreore()を呼び出して挙げればOKです。, 新しいGoogle Siteでも、URLを埋め込むと、アプリを表示可能です。また、旧Google Sitesと違って、doGetなどで引数付きのURLを埋め込めるので、ページに合わせて違う表示をさせる事が可能です。, 画面が出てこない場合、コードが間違っているか、Google Apps Scriptの出力側が組織内ユーザに限定してるケースがあります。この場合、匿名ユーザがアクセスできない状態なので、設定変更が必要です。, 作成したウェブアプリケーションをGoogle Sitesに埋め込む事が可能です。Google Sites上でもコードを記述して埋め込む方法とスプレッドシートなどの上に作成したコードを元に生成したものを埋め込む方法の2つがありますが、ここでは後者の方法を記述します。以下の手順で埋め込みましょう。, 自分もこの方法で各種申請用フォーム類などは表示するようにしています。直で1.のURLのページを表示させるようにしても良いのですが、ページURLが変わったりした場合に面倒なので、sitesの固定のページに貼り付けて閲覧してもらっています。縦長のフォームの場合はスクロールバーが出るのが嫌であれば、結構大きめの高さを入れるようにしましょう。, Google SitesはURLを指定すれば簡単に埋め込めるようになっていますが、例えば外部のサイト(社内で運用してるWordpressのイントラであったり、ローカルのindex.htmlなど)には通常埋め込みが出来ません。これはGoogle Apps Scriptで生成したウェブアプリケーションはデフォルトで「X-Frame-Options」という項目が入っており、外部サイトのiFrame内からは呼び出しが出来ない様になってるためです。ちなみにその場合Chrome Debuggerには以下のエラーが表示されます。.

朝顔 ピンク 花言葉, 烏丸御池 市バス 15, 智 弁 和歌山 国体 メンバー, 北原ゆか オオカミくん 結果, ボーナスポイント プレミアムポイント 改悪, モリー ズ クリーム, 楽天銀行 評判 転職, 新完全マスター N1 Pdf, 相鉄線 時刻表 西谷, メール 用語 中国語, 1990年代 ヒット曲 バンド, ドラえもん 歌詞 初代, 自衛隊 ヘリコプター 種類, お悔やみ 手紙 遅れた 文例, ドラマ シティーハンター 主題歌, ジョジョ 2部 シーザー, ファンタジーアイランド 映画 ネタバレ, 塙 龍 ノ 介 高校 どこ, 楽天ポイント Edy 交換 期間限定ポイント, タルゴジャポン シャンプー 口コミ, 東京国際 ムセンビ 兄弟, 鈴木雅之 Motivation 作曲, 中日 ファーム 順位, 息も できない くらい 鈴木雅之, バックボーン 意味 ヒップホップ, 苦 楽園 住 みたい, ウルティモ トペ パターダ 意味, Auウォレット 残高 使い方, 神奈川 雷 ツイッター, ジョジョ 2部 シーザー, 楽天カード 5のつく日 楽天市場以外, マリーゴールド 合唱 女声, 夏休み 子供 遊び 神奈川, ラフィーユ アンバー レポ,