• Palmer Eldrichの3つのブラウザ

筆者は、いま3つのブラウザ、Chrome、Edge、Firefoxを使い分けている。1つのブラウザは仕事用で、SNSや動画サイトなど、特定のサイトが開けないなど、できるだけ気を散らさないようにしてある。誘惑に負けて開くのを防ぐというよりは、リンクをクリックして、気がつかずにこうしたサイトを開いてしまい、そのあと見続けるを防ぎたいからだ。これは、拡張機能を使うと実現できる。

もう1つのブラウザは何も制限をかけていないが、できるだけカスタマイズを避けている。ブックマークバーも使わなければ、拡張機能も入れないようにしている。これは、Webページの「画面写真」を撮るためのものだ。できるだけブラウザを初期状態とすることで、平均的なブラウザの画面を撮影することが可能になる。

最後の1つは、普通に使うし、サイトアクセスの制限もしないが、拡張機能もそれなりに入れてある。これは、SNSなどのアクセスを可能にしたままだ。これは、特定のページがブラウザによっては閲覧できなかった、といった場合に使うことも想定している。

いまのところ、Chrome、Edge、Firefoxの順で、前記の用途に使っている。しかし、複数のブラウザを使っていると、ときどき他のブラウザでリンクを開きたくなることがある。たとえば、Chromeで制限されているSNSや動画サイトが、Googleの検索項目に出たときなどだ。

URLのコピー、ペーストをするのもちょっと面倒である。拡張機能に他のブラウザを開くようなものもあるが、ブラウザの拡張機能からローカルのプログラムを起動させるのにはセキュリティ上の制限があり、ちょっと面倒なことをしなければならない。

そこで、筆者は、Windowsの機能を使って、新しい「プロトコル(URI定義でいうスキーマ)」を定義し、これをブラウザのURL欄に追加することで、他のブラウザを同じURLで開けるようにしてある。各ブラウザ用に「chx:」(Chromeで開く)、「ffx:」(同Firefox)、「edg:」(同Edge)を定義した。Edgeには、「microsoft-edge:」というスキーマがすでに定義されているが、これは長すぎる。

Firefoxを使っているとき、表示しているページをChromeで開きたければ、URL欄にあるURLの先頭に「chx:」を入れる(写真01)。エンターキーを推せば、確認のあと、Chromeのタブが開く。

  • 写真01: ブラウザのアドレス欄にあるURLの先頭にchx:と作成したスキーマを入れエンターキーを押せば、確認のダイアログのあとスキーマで指定したブラウザが開く。なお、レジストリ設定のコマンドの先頭がconhost.exeになっているため、起動アプリケーション名が「コンソール ウィンドウ ホスト」になっている

Windowsには、URI起動(過去記事参照)やプロトコルハンドラなどと呼ばれる仕組みがある。これは、独自のスキーマ(プロトコル)を定義し、それを処理するプログラムを起動するものだ。

新規スキーマの定義とこれを「開く」プログラムの対応などは、レジストリに登録することで有効になる。(リスト01)は、3つのブラウザ用のスキーマを定義したレジストリ登録情報である。

■リスト01


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\chx]
"URL Protocol"=""
@="URL:chx"
[HKEY_CLASSES_ROOT\chx\shell\open\command]
@="conhost.exe --headless powershell.exe -noprofile -WindowStyle Hidden -command \"&{start-process -FilePath 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe' -argumentList $('%1' -replace 'chx:','') }\""

[HKEY_CLASSES_ROOT\ffx]
"URL Protocol"=""
@="URL:ffx"
[HKEY_CLASSES_ROOT\ffx\shell\open\command]
@="conhost.exe --headless powershell.exe -noprofile -WindowStyle Hidden -command \"&{start-process -FilePath 'C:\\Program Files\\Mozilla Firefox\\firefox.exe' -argumentList $('%1' -replace 'ffx:','')}\""

[HKEY_CLASSES_ROOT\edg]
"URL Protocol"=""
@="URL:edg"
[HKEY_CLASSES_ROOT\edg\shell\open\command]
@="conhost.exe --headless powershell.exe -noprofile -WindowStyle Hidden -command \"&{start-process -FilePath 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe' -argumentList $('%1' -replace 'edg:','')}\""

この仕組みは、拡張子から実行プログラムを起動する「関連付け」と仕組みが同じで、同じレジストリキーを使う。ここで、関連付けと同じように起動するコマンドを指定してやる。

しかし、この場合、プログラムにわたささる「引数」には、作成したスキーマがついたままになる。たとえば、「chx」というスキーマを定義して、WebブラウザのURL欄からこれを使うと、定義したプログラムには、「chx:https://news.mynavi.jp/series/pebbleinthe_window/」のように、URL欄にあったURLとchxスキーマがつながったがったものになる。なので、コマンドの実行時には、先頭部分のスキーマ部分を落として他のブラウザを起動させる。ここでは、Windowsに付属しているWindows PowerShell(PowerShell.exe)を使った。具体的なコマンドは、


conhost.exe --headless powershell.exe -noprofile -command "&{start-process -FilePath '<クローム実行パス>' -argumentList $('%1' -replace '<スキーマ名>:','') }"

となる。最初の「conhost.exe --headless」は、Windows PowerShell(powershell.exe)をコンソールウィンドウなしで開くためのもの。「-noprofile」は、PowerShellの起動を高速にするため。起動は、エクスプローラー内のシェルが行うため、コマンドはcmd.exeのコマンドラインに準じて作る。なので、“-command”の引数は、全体を「"&{」と「}"」でくくる。必要なロジックはこの中の部分で、それ以外は、このコマンドを実行するためのものでしかない。

なお、レジストリに登録するためのRegファイル内では、文字列型データ値は、等号の右側全体をダブルクオートでくくる必要があるため、この部分はRegファイル内では、「\"&{」と「}\"」と記述し、実行パス内の円マークも「\」と記述しなければならない。また、Regファイルの末尾には必ず空行を置く必要がある。

今回のタイトルネタは、Phillip K.Dickの「THE THREE STIGMATA OF PALMER ELDRITCH」(邦題パーマー・エルドリッチの三つの聖痕。ハヤカワ)である。ディックの魅力の1つは、引き込まれる話のうまさというか、強力で強引な「吸引力」がある。この作品は、LSD小説などとも呼ばれ、作者自身も荒んだ人生のようなイメージがあるが、ディックの作品は緻密に考え抜かれて作られたものではないか、という気がしている。