Finder から指定ディレクトリに移動したときに自動的に jupyter notebook を起動させるようなフォルダアクションを追加した話


はじめに

標準の Finder から、いま現在開いているフォルダをターミナルで開くのは面倒臭い。
それに加えて毎度同じコマンドをターミナル上で実行するなら、それも含めて自動化しよう。

今までやっていたこと

フォルダに新規ターミナルタブ

🍎→「システム環境設定…」→「キーボード」→「ショートカット」→「サービス」と辿って、
「フォルダに新規ターミナルタブ」という項目にチェックを入れるとフォルダを右クリックしたときのサービスが増える。
それをクリックすることでターミナルを開くことができる。

これで開いたターミナルは右クリックしたフォルダ内をカレントディレクトリにしてくれているので、

$ jupyter notebook

と実行すると、このフォルダをルートにした作業環境が構築される。

今回やってみたこと

フォルダアクション設定…

毎度 jupyter notebook を実行するフォルダは決まっているので、
フォルダアクションで、フォルダを開くと勝手にそこまでやってくれるようにした。

フォルダアクションとは

AppleScript というけったいなスクリプトを
/Library/Scripts/Folder Action Scripts
に用意しておき、
フォルダ毎にそのスクリプトを対応させておくことで所望の動きをさせられる。

Apple 社のサンプルがあらかじめいくつか用意されている。

AppleScript

macOS に標準で入っているスクリプトエディタというアプリケーションで書く。

今回は

  1. フォルダを開くことをトリガに
  2. そのフォルダのパスを取得して
  3. ターミナルを開きそこにcd
  4. jupyter notebookと実行する

という簡単なお仕事を自動化する。
以下がそのスクリプト。

open - jupyter notebook.scpt
on opening folder this_folder
    set pPath to POSIX path of this_folder as string
    tell application "Terminal"
        do script "cd " & pPath
        activate
        do script "jupyter notebook" in window 1
    end tell
end opening folder

注意事項

POSIX path ofと入れないとcdできるような文字列がpPathに格納されない。
in window #のないdo scriptを実行すると新たなターミナルウィンドウが表示される。
in window #で 1 個以上開かれているターミナルのウィンドウを最近にactivateされた順に指定できる。

Folder Action Scripts フォルダ

このスクリプトを
/Library/Scripts/Folder Action Scripts
に置いておくと「フォルダアクション設定…」で選択できるようになるのだが、
いったんどこか適当な所に保存し、

その後、sudo 権限を使って
/Library/Scripts/Folder Action Scripts
に移すと良い。

フォルダアクション設定…

適当なフォルダを右クリックして「フォルダアクション設定…」をクリックすれば
「関連付けるスクリプトを選択 : 」という項目が出てくるので、先ほど保存したスクリプトを選ぶ。

これで、そのフォルダを開く度に jupyter notebook が自動で実行され面倒が省ける。

おわりに

ちょっとフォルダの中身を見たいだけなのにいちいちスクリプトが実行されては嫌なので、
Finder はリスト表示かカラム表示にすると良いです。