Google Cloud Functions を
- Cloud Functions with Puppeteer + Google Apps Script で
スクレイピングサーバーを サクッと 作る - Qiita - Puppeteer + GCP Functionsで
サーバレスな スクレイピング - Qiita
Google Cloud Functions では、
ブラウザ軌道が
実施した
ツール全体図
以下、
図中の 項番の 説明
以下、
1. スケジュールトリガーで、WebPageTest
を
2. テスト対象URLに
3. GASに
4. GASで
作成の 動機
ツール作成の
Webサイトの パフォーマンス指標を 記録したいが、 ツールを 稼働させる 基盤が ない。
ツール稼働の
PageSpeedInsight では、 トランザクション計測が できない。
PageSpeed Insights は
Cloud Functions からの
- WebPagetest
WebPagetest ではスクリプトを 指定する ことで 画面操作が 可能ですが、 独自フォーマットなので 画面操作を JavaScriptで 記述できる puppteerの ほうが 個人的には 扱いやすいかなと 思います。
無料枠が ある。
料金 | Cloud Functions の
ただ、
計測する パフォーマンス指標は 自由に 選べる
JavaScript を
作った もの 一式
以下、
puppeteerwebpagetest
使用方法
以下に
1. index.js と、
メモリと
* 割り
1 GB * タイムアウト
60 秒
メモリは
また、
以下の
スプレッドシートを コピーする。
pupeteerWebPageTest Templateutils.gs、
main.gs を スプレッドシートの コンテナバインドスクリプトと して 登録する。 - main.gs の
URLの 記述を 記録対象の ページURLに 変更する。 var URL = "https://www.monotalk.xyz/";
- utils.gs、
index.js の 認証キーを 任意の キーに 変更する。
Cloud Function の認証の ため ヘッダーキーで、 キーを 照合するようにしました。
xxxx
の記述を 任意の 値に 変更してください。 - utils.gs
var headers = { 'Authorization': 'Bearer xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' };
- index.js
exports.run = function(req, res) { const accessToken = getAccessToken(req.get('Authorization')); if ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" == accessToken) { authorized(req, res); } else { res.status(403).send("不正なアクセスです"); } };
- utils.gs
Cloud Function の
API URL を 変更する。
'https://cloudfunction/url'
をCloud Function の URL に 変更してください。 - utils.gs
var result = UrlFetchApp.fetch('https://cloudfunction/url', options);
- utils.gs
main.gs の
関数 execute を スケジュールトリガーで 実行する。
上記設定で、
補足説明
ツールに
認証に
ついて
認証キーで認証を 行うようにしましたが、 我ながら 適当な 実装だと 思います。
IAMで認証を 行う 方法が あり、 この 実装方法が より 良いやり 方かと 思いますが、 設定が 面倒だったため、 手抜きで 認証キーで 認証するようにしました。 pupeteerの
起動オプションに ついて
pupeteer は起動オプションが 多数あり、 オプション設定に より、 メトリクスの 値が 結構変わります。
何種類かオプションを 試した 結果、 '--no-sandbox'
だけ指定して おくのが 良い 感じに 取得できていそうでした。 const browser = await puppeteer.launch({args: ['--no-sandbox']});
スプレッドシートの
シートの 説明
スプレッドシートには、2つ シートが あります。 resource
はResource Timeing API の 実行結果を 記録します。
個人的な分析用に、 hostname が 必要だったので、 GASで hostnameを URLから 導出しています。
performance
シートには、window.performance.timing
と、FirstMeaningfulPaint
と、Paint Timing API (FC FCP)
を記録しています。
Cloud Functions で lighthouse を 実行する
lighthouse 自体を、
sahava/multisite-lighthouse-gcp: Run Lighthouse audits on URLs, and write the results daily into a BigQuery table.
参考
- Firebaseの
Cloud Functionで puppeteerを 動かす 解説 - Kesinの 知見置き場 - NFR: force IP on page.goto · Issue #1831 · GoogleChrome/puppeteer
- Synthetic Monitoring to monitor the web performance of your User Journeys (transaction monitoring) | Dareboost Blog
- Test website performance with Puppeteer
指定した URL の
この
以上です。
コメント