windows: "shell:" という接頭辞の役割について

スタートアップフォルダを開く際などに利用される shell: という接頭辞について、その役割を解説します。

端的に言うと?

  • shell はWindowsが解釈可能なスキーム( 例えばhttp など )の一つ
  • shell: はそのスキームを利用することを示す文字列
  • Windowsは shell: の後に続く文字列を名前解決して特定のサービスにつないでいる

説明

あまり公式ドキュメントなどの明確な情報が転がっていなかったので憶測も含まれています。

「ファイル名を指定して実行」ではスキームの指定ができる

スキームというとなんだかわからなくなってくるが、 例えば http などはスキーム(プロトコルスキーム)である。メールにリンクを張る際の mailto も実はスキームである。

これらを「ファイル名を指定して実行」ダイアログでも指定できるようだ。

試しに以下を実行してみる。

  • Win + r でダイアログを開き、
  • http:google.com と打ち込む

するとWebブラウザ上でGoogleのホームページを開くことができた。

shell もスキームである

どうやら「ファイル名を指定して実行」ダイアログでは <スキーム名>: をつけることでスキーム指定ができるらしい。

調べたところRFC 1738にてURLの記述方法が規定されており、その中で以下のようにプロトコルの記述方法が指定されている。これに則っている正当な記法であるようだ。

<scheme>:<scheme-specific-part>

したがってこの記法に則っている shell: もプロトコルの1つであり、おそらくWindowsでのみ解釈されるプロトコルなのだろう。

参考サイト:
https://superuser.com/a/1690194

shell: の後に何が指定できるか?

どうやら以下のレジストリに格納されているデータから、指定できる内容がわかるようだ。

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\

上記レジストリのフォルダの中にUUIDのような文字列が格納されているが、格納されているデータのName というキーに設定されている文字列を指定することができるようだ。

数が多いのでここでは載せないが、例えば以下のようなものがあった。大文字小文字は判別されないので、全部小文字で打ってもOK。

  • Favorites (お気に入り)
  • My Music (マイミュージック)
  • Start Menu (スタートメニュー)
  • AppData (AppData\roaming)

どうやらここで規定されている名称であれば、 shell: の後に続けてOKのようだ。

指定できる名称一覧については下記リンク参照。

参考サイト:
https://www.winhelponline.com/blog/shell-commands-to-access-the-special-folders/

ところで、shell: を解釈しているのは誰?

shell: というスキームはあまり聞いたことがないし、Windowsの文脈でしか聞いた覚えがないのでおそらくWindows特有のものと思われる。

調べたところ、 URL Moniker 1という仕組みによってこれは実現されているようだ。この URL Monikerに要求される通りのインターフェイスを持ったCOM コンポーネントを作成することで独自のスキームを解釈するコンポーネントを作ることができる。

shell:URL Monikerで事前に定義されているprotocolの一覧 に存在しないので、Windowsのエクスプローラの関連コンポーネントにこのMonikerがおそらく仕込まれているのではないかと思われる。

参考URL:
https://stackoverflow.com/a/3611181


  1. monikerは通常の英単語で、「名づける」といった意味。スキームを意味のあるものとして解釈する立ち位置なのでこういったネームサーバのような名前が付けられているのかもしれない。 ↩︎

コメント

このブログの人気の投稿

gnuplot: グラフの色を変更する

[Linux] rsyncで進捗を確認する

gnuplotで縦線を引きたい