VSCodeのリモート開発機能が便利すぎて、手元のMac上でWebサーバーやDocker、VMなどを稼働させる機会がめっきり減りました。
このままMacはデスクトップアプリケーションを動かすだけのシンクライアントにしようと考えてます。そして各種開発ツールのARM対応が進行中のM1をもう買っちゃう!
その中で解決したかった課題のひとつが、headlessではないPuppeteer
をどうするかでした。ブラウザGUIを普通に起動しておき、自動操縦の過程を見たり、フロントエンドをデバッグしたいことがあります。
開発サーバー上でで Node.js + Puppeteer を動かして、ローカル(Mac)のブラウザを操作する方法です。
SSHポートフォワードで解決
何の変哲もない方法ですが、
- リモートデバッグポートを開いてブラウザを起動する。
- リモートデバッグポートへのトンネルを掘って開発サーバーに接続する。
- 開発サーバーからトンネルを経由してブラウザを操作する。
具体的には
~/.ssh/config
で開発サーバー接続時にポート19222
のリモートトンネルを掘っておきます。
Host dev
RemoteForward 19222 localhost:19222
次に Chrome や Chromium を --remote-debugging-port 19222
で起動します。
/Applications/Chromium.app/Contents/MacOS/Chromium --remote-debugging-port=19222
サーバー上で Puppeteer を使います。このとき、 launch
ではなく connect
でローカルのブラウザに接続します。
const Puppeteer = require('puppeteer-core')
async function main() {
const browser = await Puppeteer.connect({
browserURL: 'http://localhost:19222',
})
const page = await browser.newPage()
await page.goto('https://www.ideamans.com/')
}
main()
予定通り動いたよというレポートと、自分用メモでした。