【カスタムURLスキーム】ブラウザ上からシェルを実行する【macOS】

ブラウザ上からシェルを実行したい。

そう思って調べてみると、こんな記事がありました。

しかし、そのままではうまくいかなかったので、手順を再整理しようと思います。

※利用は自己責任でお願いします(任意のプログラムをブラウザから実行できるため、セキュリティ的に危ういです)。

概要

実装の内容としては、以下のようになります。

  1. ブラウザ上に「hoge://<シェルが存在するパス>」を入力
  2. 作成したアプリケーションが起動する
  3. アプリケーションがシェルを実行する

スクリプトエディタ

まずは、アプリケーションを作成するために、スクリプエディタを起動します。

  • command + スペースキーでSpotlightを起動
  • script editorを入力し、スクリプトエディタ.appを起動
  • 新規書類を押下
  • 以下のような画面が表示される

アプリ作成

  • 起動したエディタより、以下をコピペします。

※「hoge」の部分は、登録したいURLスキーム名にしてください。

-- URLスキームで呼ばれる関数
on open location url_scheme

	-- URLの引数を抽出
	set AppleScript's text item delimiters to {"hoge://"}
	set URL_ARGUMENT to text items of url_scheme
	set AppleScript's text item delimiters to {""}
	set SHELL_PATH to URL_ARGUMENT as Unicode text

	-- シェル実行
	do shell script SHELL_PATH

end open location
  • 「ファイル」 > 「保存」を押下
  • 任意の場所にアプリケーションとして保存します。

※アプリ名は、上記で設定した名前と統一しておきます。

  • 保存した場所をFinderで開きます。
  • アプリケーションを右クリックし、「パッケージの内容を表示」を押下
  • 「Content」 > 「Info.plist」ファイルを開く(エディタは何でも良いです)
  • 最終行あたりの</dist>の上に以下を挿入し、保存

※「hoge」の部分は、アプリ名と統一します

  <key>CFBundleURLTypes</key>
  <array>
    <dict>
      <key>CFBundleURLName</key>
      <string>com.apple.ScriptEditor.id.hoge</string>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>hoge</string>
      </array>
    </dict>
  </array>
  • 作成したアプリをダブルクリックで実行し、アプリの存在をOSに認識させます(実行しても何も起きません)

動作確認

これで準備が整いました。

ブラウザから、「hoge://実行したいシェルのフルパス」を入力します。

※実行したいシェルに実行権限を与えるの忘れずに

そうすると、さきほど作成したアプリが起動し、URLで指定したシェルが実行されます。

最後に

今回作成したアプリは、ターミナル画面が表示されないようにしています。

ターミナル画面を表示させたい場合は、こちらの記事のコードを参考に作成してみると良いかと思います。