zshell

ブラウザペイン

ターミナルの隣に Web サイトを開き、ネイティブの操作で移動し、リンクをプロジェクト内に保ちます。

Zshell では、どのタブや分割ペインにも内蔵ブラウザを置けます。ローカル開発サーバー、API ドキュメント、課題など、使用中のターミナルの隣で見たい内容に便利です。

ブラウザを開く

  • ファイル → 新規ブラウザタブ(New Browser Tab)で空のタブを開きます。
  • コマンドパレット(Cmd+P)で新規ブラウザタブまたは新規ブラウザペイン(New Browser Pane)を実行します。
  • ターミナルで検出された URL を Command キーを押しながら右クリックし、新規ブラウザタブまたは新規ブラウザペインを選ぶと、アドレスをコピーせずに開けます。

ブラウザタブは選択中のプロジェクトに属し、通常のタブ・ペイン配置に組み込まれます。プロジェクトが開いていない場合は、ブラウザ用に 1 つ作成します。

上部の入力欄には完全な URL、ホスト名、検索語を入力できます。

  • zshell.sh は HTTPS アドレスになります。
  • localhost、ローカルホスト名、IP アドレス、明示的なポートには HTTP を使います。
  • それ以外は Google 検索になります。

Cmd+L で入力欄にフォーカスし、Cmd+R で再読み込みします。 ツールバーには戻る、進む、中止/再読み込み、共有、デフォルトのブラウザで開く(Open in Default Browser)もあります。トラックパッドで戻る・進むジェスチャーも使えます。

操作ショートカット
アドレスバーにフォーカスCmd+L
ページを再読み込みCmd+R

ページ内のリンクを右クリックし、リンクを新規タブで開く(Open Link in New Tab)またはリンクを新規ペインで開く(Open Link in New Pane)を選びます。新しいページも同じプロジェクトに属します。

ターミナルでは、通常の Command クリックは検出した Web URL をデフォルトのブラウザで開きます。Zshell のタブやペインを選ぶ場合は Command 右クリックを使います。 ローカルパスにも同様の操作があります。パスと URLを参照してください。

保持されるもの

タブやプロジェクトを切り替えても、ページの履歴、スクロール位置、フォーム、ページ内の状態が保たれます。 Zshell の再起動時には現在の URL とレイアウトを復元しますが、戻る・進むの履歴全体は復元しません。

ブラウザペインはタブやアプリの起動をまたいで Cookie、ログイン、その他のサイトデータを保持します。プライベートブラウズではありません。

Agent にページをテストしてもらう

コーディング Agent に、このプロジェクトで開いているページの確認、フォーム入力、結果の検証、表示領域の撮影を依頼できます。既存のブラウザーセッションを使い、通常はターミナルのフォーカスを維持します。ローカル開発用 URL をバックグラウンドのブラウザーペインで開くこともできます。

スクリプトから使う場合は Zshell ターミナル内で実行します。返された browser_id を記録し、下の BROWSER_ID を置き換えてください:

zshell +browser list
zshell +browser open http://localhost:3000 --wait
zshell +browser snapshot --browser BROWSER_ID
zshell +browser fill --browser BROWSER_ID --selector '#search' --text 'terminal'
zshell +browser click --browser BROWSER_ID --selector 'button[type="submit"]'
zshell +browser wait --browser BROWSER_ID --selector '#results' --timeout 10000
zshell +browser screenshot --browser BROWSER_ID --output /tmp/zshell-page.png

スナップショットはメインフレームのテキスト、アクセシブルなラベル、要素参照を返します。参照はページの変更や操作後に失効するため、再利用前に新しいスナップショットを取得します。CSS セレクターは一つの要素だけに一致する必要があります。移動には navigate、back、forward、reload、stop を使います。

自動化で使用できるのは完全な HTTP/HTTPS URL と about:blank です。他のプロトコル、ダウンロード、ファイル選択、ネイティブダイアログには直接操作が必要です。アドレスバーやツールバーから手動で移動すると、この制限が解除されます。対象は呼び出し元のプロジェクトとウインドウ内に限られます。--timeout は 100–30000 ミリ秒です。スナップショットは最大 200 要素、32768 文字、256 KiB で、パスワードとファイル入力の値を含みません。PNG は表示領域のみで最大 512 KiB、未表示のバックグラウンドペインもフォーカスを変えず 1024 × 768 のビューポートで撮影でき、既存ファイルは上書きしません。--width で縮小できます。詳細は zshell +browser --help を参照してください。

ページのスクリプトとログイン状態

zshell +browser eval --browser BROWSER_ID --script 'Promise.resolve({title: document.title})'
zshell +browser state save --browser BROWSER_ID --output /tmp/zshell-login.json
zshell +browser state load --browser BROWSER_ID --input /tmp/zshell-login.json
zshell +browser reload --browser BROWSER_ID --wait

eval --script は実際のメインフレームで実行し、返された Promise を待って value に JSON を返します。undefined は null になります。await には非同期関数式を使います。入力は 64 KiB、結果は 256 KiB・10000 値・64 階層までです。実行後は DOM 参照が失効します。タイムアウトしてもスクリプトは停止しません。変更を再試行する前にページを確認してください。同期無限ループで応答しなくなった場合はページを閉じる必要があります。 単一の式(IIFE を含む)はネイティブのグローバル Script として挿入されます。複数文の文字列はページの CSP に従います。文字列評価が禁止されている場合は、文を IIFE で囲んでください。

state save は対象ホストに適用される Cookie(親ドメイン、HttpOnly を含む)と現在のオリジンの localStorage を Playwright storage-state JSON に保存します。state load は Cookie を統合し、そのオリジンの localStorage を置き換えます。その後に再読み込みしてください。オリジンはスキーム・ホスト・ポートが完全一致する必要があります。無関係な Cookie ドメイン、パブリックサフィックス、未対応フィールド、不正な型は変更前に拒否されます。Secure Cookie には HTTPS が必要です。

両方のコマンドで --format cookies を指定すると Netscape cookies.txt を使えますが、localStorage と SameSite は保存されません。ファイルは 256 KiB までで認証情報を含むため、非公開にし Git に登録しないでください。読み込みは所有者だけがアクセスできる通常ファイル(例:0600)に限られ、シンボリックリンクは拒否されます。保存は新しい非公開ファイルを作り、既存パスを上書きしません。WebKit のサイトデータはブラウザペイン間で共有され、プロジェクト・ウインドウ・ナビゲーションの制限は引き続き適用されます。

広告とトラッカー

設定 → ブラウザで WebKit のコンテンツブロックを管理します。EasyList と EasyPrivacy は初期状態で有効です。個別に無効化したり、HTTP/HTTPS の ABP リスト URL を 1 行ずつ入力してリストを適用できます。最大 8 リスト、各 8 MiB。HTTP は暗号化されません。

変更はすべてのブラウザペインの今後のリクエストに適用されます。ページを再読み込みしてリソースと非表示要素を更新してください。今すぐリストを更新で強制更新できます。リストはローカルに保存され、再起動後のブラウザ初回使用時に 4 日以上前のキャッシュを更新します。設定には変換数、スキップ数、失敗、古いキャッシュの使用を表示します。リストの変更に失敗しても、別の選択解除したリストを黙って使い続けません。

URL ワイルドカード、アンカー、一般的なリソース型、@@ 例外、単純なドメイン指定、CSS ##/#@# に対応します。ドメインは最上位ページ、第一者・第三者判定は WebKit に従います。スクリプトレット、手続き型フィルター、リダイレクト、正規表現、ページ全体の許可、指定ドメインの子ドメイン除外などはスキップされます。uBlock Origin との完全互換ではありません。