ポンコツエンジニアのごじゃっぺ開発日記。スマートフォン用の表示で見るポンコツエンジニアのごじゃっぺ開発日記。ポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。今回は、GASを使いまくっている方だったら一度は見たことがあるかもしれない「起動時間の最大値を超えました」という文字、それを回避する方法を考えて実施してみたので紹介したいと思います。非同期処理による同時実行この2つの工夫による高速化さいごに起動時間の最大値とはなにかGASにはいろいろな制限があります。その中でも、1つのタスクの実行時間が制限は6分(360秒)となっていて、それ以上処理を行おうとすると、上のようなエラーが出てしまいます。developers.google.comいろんな処理をしたい、だけどもこの制限にかかってしまう。そんなときの回避策を自分はこうやりましたというのを紹介したいと思います。今回の例題として、スプレッドシートに入力しているワードのリストに書いてあるものをYahoo検索(Google検索)を行って、Twitterアカウントを探し、それを別のシートに記録してくというものです。検索対象の単語一覧この一覧から検索したものが以下になります。検索結果のTwitterアカウント一覧これを実現するために、以下のようなプログラムを書いてみました。}}これのmain()を実行して、スプレッドシートの一覧を取得し、Yahoo検索を行い、見つかったTwitterアカウントを別のシートにい記録していくというものになります。これを行うことで、Twitterのアカウントの一覧の作成ができるのです。ここでの例は、売上が高いスマホゲームの一覧をシートに入力しておいて、それのTwitterアカウントを書き出してみたという内容になります。Yahoo検索を毎回してしまっています。外部APIを叩くということは、とても時間がかかるということになります。Yahooの場合はエラーになることが多いので、再実行を10回までするようにスクリプトを書いています。これの結果、単語の一覧をものすごい多くすると6分では処理しきれなくなってしまいます。対処法1実行あたりの実行時間が6分を超えてしまう、ということで、以下の対処法を考えました。処理を分割して1実行あたりの実行時間を減らす処理を同期処理ではなく非同期処理に変えて、並行処理を行うこれを実現するためにプログラミングをしたいと思います。プログラムということで、以下のように書きました。スプレッドシートから、スクリプトを開きます。以下のようになります。以下のようになります。</head></html>この2つのファイルを作成して、スプレッドシートをリロードすると、以下のようなメニューが作成されます。押すと、ポップアップが表示されます。Loggingを見て、処理が終わっていることを確認してからポップアップを閉じてください。ちなみに、全タスクが完了したら以下のスクリプトを呼ぶようにプログラムを書くことで、自動で閉じることを実現できます。google.script.host.close();処理の解説では、この処理はどういうことをしているかというのを紹介したいと思います。処理の分割まずは、処理の分割ということで、ポップアップ上のHTMLに書いてあるJavaScriptからGASの処理を実行しています。JavaScriptからGASのスクリプトを呼ぶ方法については、以下のドキュメントをご覧ください。developers.google.comスプレッドシートから単語のリストを取得した後に、単語ごとに1実行となるようにGASのスクリプトを実行します。することで、1つの単語の検索だけで最大6分かけることができるのです。1つの単語の検索にかかっても10秒もあれば終わるので全く問題ありません。非同期処理による同時実行そして、非同期処理をGASで実現します。これも、ポップアップ上のJavaScriptから、1単語ごとに1タスクを呼ぶようにしましたが、同時にここで非同期に実行できるように呼んでいます。GASの裏側はきっとたくさんのコンテナが並んでくれるはずなので、実行者の自分たちからしたら考える必要はありません。呼んだらその数だけ実行してくれると思っていただいてもよいかもです。実行数の制限もあるのでご注意ください。developers.google.comこの2つの工夫による高速化さて、これを実行するとものすごい高速に実行してくれます。自分も一発目の実行のときはめちゃくちゃ驚きました。200単語を全部検索するのに、30秒で完了しました。合計91個のTwitterアカウントを見つけてくれました。非同期処理で実行しているので、早く終わったタスク、すなわち単語からTwitterアカウントを記録していくため、実行するたびに順序は変わっていきます。さいごに今回は、GASで分割実行と非同期処理について紹介しました。HTML上のJavaScriptはいくら時間をかけても問題ないという特性を利用したものになりますね。無事25日間のアドベントカレンダーを書き終えることができました!とても大変な一ヶ月弱でしたが、GASをより詳しく知ることができた一ヶ月になったのは間違いありません。落ち着いたら振り返りのブログを書きたいなと思っております。18日目の記事です...2019-12-16【GAS】スプレッドシート上にスクリプトからボタンを生成しスクリプトを割り当てる方法。14日目の記事です...2019-12-11【GAS】スプレッドシートで目次のようにシートの一覧ページを作ろう。11日目の記事です...2019-12-10【GAS】スプレッドシート上にボタンを配置してスクリプトを実行しよう。関連記事2019-12-31【振り返り】1人でアドベントカレンダー25日間を書ききったぞ!2019-12-24【GAS】祝日を取得するスクリプトを書いてAPIとして公開してみよう。はてなブログProITのエンジニアとして働いていますが、まだまだポンコツエンジニアです。毎日の開発についてや工夫などを紹介したいと思います。4にモーションセンスが来た!数日使ってみた感想を紹介。)お問い合わせ|プライバシーポリシー|制作物スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。