趙健の技術ノート

Defaultly で Mac のデフォルトアプリを一括設定し、.env や Dockerfile など拡張子のないファイルもエディタで開く

技術 約6409文字 · 17分で読める - 回閲覧

Mac でコードを書いていると、.env、.gitignore、Dockerfile のような拡張子のないファイルがずっと面倒でした。ダブルクリックするとテキストエディットで開くか、そもそも開けません。Finder の「情報を見る › このアプリケーションで開く › すべてを変更…」で VS Code や Zed に変えても効果がなく、「常にこのアプリケーションで開く」は選んだその 1 ファイルにしか効きません。

原因は、macOS が拡張子のないファイルの大半を public.data に分類していて、この種類のデフォルトにどの App も設定させないことです。コマンドラインツールで変えようとしてもエラー -50 が返ってくるだけです。

もう一つの問題は、ファイルの関連付けがよく奪われることです。新しい App(典型的なのは Xcode)を入れると、設定しておいた関連付けを持っていかれることがあります。macOS は何も知らせてくれず、まとめて元に戻す方法もありません。形式ごとに 1 つずつ戻すしかなく、しかも macOS 26.4 以降は種類を 1 つ変えるたびに確認が出ます。

そこで Defaultly を作りました。無料のオープンソース macOS デフォルトアプリ管理ツールで、ファイルの種類・拡張子・リンクのデフォルトアプリを 1 つのウインドウでまとめて管理できます。

Defaultly のメインウインドウ:ファイルの種類タブにテキスト、Markdown、コード、設定とデータ、拡張子のないファイル、PDF、書類などのグループが並び、各グループの右側でデフォルトの App を選ぶ

Defaultly でできること

  • グループごとにデフォルト App を設定:ファイルの種類は用途別にテキスト、Markdown、コード、設定とデータ、拡張子のないファイル、PDF、書類、イメージ、ビデオ、オーディオ、アーカイブに分かれていて、グループごとに App メニューが 1 つあります。グループ丸ごと一度に設定でき、1 つずつ確認する必要もなく、数秒で反映されます。
  • 拡張子のないファイル:.env、Dockerfile、.gitignore、.npmrc を、選んだエディタで開けるようにします。そのエディタがこれらのファイルへの対応を宣言していなくても大丈夫です。
  • 形式ごとの例外:グループを展開して、.md や .py のような個別の形式に別の App を指定できます。あとでグループの App を変えても影響しません。
  • カスタム拡張子:一覧にない拡張子を追加できます。.go、.rs、.kt、.dart、.lua のように、macOS が一時的な種類としてしか認識しないものも含みます。
  • リンクのデフォルト App:Web(http、https)、メール(mailto)、カレンダー照会(webcal)、電話、テキストメッセージ、FaceTime、SSH、FTP、画面共有のそれぞれにデフォルト App を選べます。「開かない」も選べるので、たとえば Web ページ上の電話番号をクリックしても通話が始まらないようにできます。
  • 診断:ファイルをドロップすると、なぜその App で開かれるのかがわかり、その場で別の App に変えられます。フォルダをドロップすると、個別に「このアプリケーションで開く」が設定されたファイルを見つけて解除できます。
  • 関連付けの奪取を通知:Xcode やブラウザなどに設定した関連付けを奪われると、Defaultly がバナーを表示し、ワンクリックで元に戻せます。
  • 取り消しと復元:変更のたびに事前にスナップショットを保存します。⌘Z で取り消せるほか、初めて Defaultly を開く前の状態にも復元でき、復元前に各変更をプレビューできます。
  • きれいにアンインストール:内蔵のアンインストール機能が、まずすべての関連付けを元の App に戻してから、自分自身をゴミ箱に入れます。
  • 15 言語:インターフェイスは簡体字中国語、繁体字中国語、英語、日本語など 15 言語に対応していて、App 内で切り替えられます。

Defaultly はバックグラウンドで動かず、ログイン項目もなく、ネットワークに接続せず、データも収集しません。

Defaultly のインストール

macOS 26 Tahoe 以降が必要です。

  1. Releases ページを開き、最新リリースの Assets から Defaultly-<version>.dmg をダウンロードします。
  2. DMG をダブルクリックして開き、Defaultly を同じウインドウ内の「アプリケーション」フォルダにドラッグします。
  3. DMG を取り出し、「アプリケーション」フォルダから Defaultly を開きます。

インストーラはなく、管理者パスワードも不要です。アップデートするときは新しい DMG をダウンロードして同じようにドラッグし、古いバージョンを置き換えるだけです。設定、ルール、スナップショットはそのまま残ります。

初回起動:公証されていない App を許可する

Defaultly はまだ Apple の公証を受けていないため、初めて開くときに macOS にブロックされます。一度許可すれば大丈夫です。

  1. Defaultly をダブルクリックし、macOS が検証できないと表示したら「完了」をクリックします。青い「ゴミ箱に入れる」はクリックしないでください。

    Defaultly を検証できないという macOS のダイアログ。完了ボタンをクリックする

  2. 「システム設定 › プライバシーとセキュリティ」を開き、「セキュリティ」までスクロールして、Defaultly の横にある「このまま開く」をクリックします。このボタンは手順 1 のあと約 1 時間表示されます。

    システム設定のプライバシーとセキュリティ画面。セキュリティ欄で Defaultly がブロックされており、横にこのまま開くボタンがある

  3. ログインパスワードを入力するか Touch ID を使い、続いて表示されるダイアログでもう一度「このまま開く」をクリックします。

    確認ダイアログ。このまま開くをクリックして Defaultly を実行する

これで Defaultly は普通に開けるようになります。内蔵のヘルパーも一緒に許可されるので、拡張子のないファイルを開くときに確認が出ることもありません。スクリーンショットは英語の画面ですが、日本語の macOS でのボタン名は上に書いたとおりです。

使い方

.env や Dockerfile をエディタで開く

「ファイルの種類」タブで「拡張子のないファイル」グループを探し、右側のメニューで使っているエディタ(VS Code、Zed、Sublime Text など)を選んで、ウインドウ下部の「適用」をクリックします。以後、.env や Dockerfile などのファイルをダブルクリックすると、そのエディタで直接開きます。

コードファイルのデフォルトエディタを一括設定する

同じ要領で、「コード」「設定とデータ」「Markdown」などのグループに App を選び、「適用」をクリックします。コードグループは JavaScript、TypeScript(.tsx)、Python、Java、C、C++、C#、PHP、Ruby、Swift、Go、Rust、Kotlin、Dart、Lua、Shell、PowerShell、SQL などのよく使われる言語をカバーしていて、macOS に正式な種類がない .go や .rs も含まれます。

特定の形式だけ例外にしたいときは、グループの行をクリックして展開し、その行のメニューで別の App を選びます。行には「個別に設定」の印が付きます。グループに戻すには「グループに従う」を選びます。

拡張子を検索・追加する

右上の検索フィールドに py や env などの拡張子を入力すると、該当する行に直接ジャンプします。どのグループにもない拡張子なら、検索結果に「追加…」が表示されます。拡張子を入力すると、Defaultly は macOS がそれを何として認識しているかを表示し、どのグループに入れるかを提案してくれるので、「追加」をクリックするだけです。

デフォルトのブラウザとメール App を設定する

ファイルの種類の下に「リンク」カードがあり、Web ブラウザ、メール、カレンダー照会、電話、SSH などのリンクをどの App で開くかを設定できます。ブラウザを変更するときは、macOS がシステムダイアログで確認を求めてきます。ブラウザがこっそり乗っ取られるのを防ぐための仕組みです。

適用・取り消し・復元

変更はすべてまず保留されます。ウインドウ下部に保留中の変更の数が表示され、「適用」で反映、「破棄」で取り消します。

  • 「編集 › 取り消す」(⌘Z)で直前の適用を取り消せます。続けて何回でも取り消せます。
  • ツールバーの丸い矢印のボタンが「初期状態に復元」です。Defaultly が変更したすべてのファイルの種類とリンクを、初めて Defaultly を開いたときの App に戻します。実行前に各変更が一覧表示されます。
  • 「設定 › 履歴」には直近 20 件のスナップショットが保存されていて、どれでも復元できます。

あるファイルがなぜその App で開くのかを診断する

「診断」タブに切り替えて、破線の枠にファイルをドラッグすると、どの App で開かれるのかとその理由が表示されます。そのファイルに Finder で個別に「このアプリケーションで開く」が設定されているのか、その種類のファイルにあなたがその App を選んだのか、何も設定されておらず macOS が自分で選んだのか、がわかります。結果の下の「代わりに使う App」から別の App に直接切り替えられます。

フォルダをドラッグすると、Defaultly はその中で個別に「このアプリケーションで開く」が設定されたファイルをすべて一覧表示します。選んで「個別の設定を削除」をクリックすれば、それらのファイルは種類ごとの設定に従うようになります。

Defaultly の仕組み

Defaultly の App バンドルには、Defaultly Helper という小さなヘルパー App が入っています。拡張子のないファイルにエディタを選ぶと、Defaultly は public.data をこのヘルパーに向けます。そうしたファイルを開くと、ヘルパーが中身をチェックし、テキストファイルなら選んだエディタに渡し、バイナリファイルなら Finder で表示して、終了します。ウインドウはなく、バックグラウンドに常駐もせず、アイドル状態が 1 秒もしないうちに終了します。

.md や .py のように、選んだ App がもともと対応している種類は、ヘルパーを通さずその App に直接割り当てられます。

macOS には public.data のデフォルト App を設定する公開 API がないので、Defaultly はすべてのファイルの種類の変更を LaunchServices の環境設定にまとめて書き込み、lsd サービスを 1 回再起動して反映させます。この仕組みは Apple が文書化していないため、システムアップデートで使えなくなる可能性があります。変更が反映されなかった場合、Defaultly は公開 API にフォールバックし(1 つずつ確認が必要です)、拡張子のないファイルについては「設定」のフォルダルールを使えます。

よくある質問

Mac で拡張子のないファイルのデフォルトアプリを変更するには? Defaultly を開いて「拡張子のないファイル」に App を選び、「適用」をクリックします。以後、.env や Dockerfile などのファイルはその App で開かれます。

Finder の「すべてを変更」が .env ファイルに効かないのはなぜ? macOS はこうしたファイルを汎用データ(public.data)として扱い、公開 API でデフォルト App を変更することを許可していません。Defaultly はヘルパー App でこの制限を回避しています。

.ts ファイルがコードグループにないのはなぜ? macOS は .ts をビデオ形式(MPEG-2 トランスポートストリーム)として認識していて、変更すると本物のビデオファイルにも影響するため、コードグループには TypeScript の .tsx だけを入れています。

すべての変更を元に戻せますか? はい。Defaultly は初回起動時に元の関連付けを記録し、その記録を上書きすることはありません。「初期状態に復元」で、変更したすべての種類を元の App に戻せます。

アンインストールするには? 「設定 › Defaultly が書き込んだもの」の下部にある「Defaultly をアンインストール…」をクリックします。変更した関連付けをすべて元に戻してから、自分自身をゴミ箱に入れます。

デベロッパモード、ルール、フォルダルールなど、より詳しい説明はプロジェクトの日本語の READMEをご覧ください。

GitHub リポジトリ: https://github.com/zhaojiannet/defaultly

共有:

コメント