macOSでCLIツールの設定ファイル(通称dotfiles)をどこに置くべきか悩んだ開発者の方は多いかもしれません。
Rebecca氏のブログ記事「macOS dotfiles should not go in ~/Library/Application Support」は、この問題に切り込み、多くのツールが~/Library/Application Support
を使っているものの、それはユーザー体験を損ない、技術的にも誤っているとの主張を展開しています。
記事によると、~/Library/Application Support
はGUIアプリ向けのフォルダで、CLIツールにはそぐわないものとのこと。多くの言語ライブラリ(Pythonのplatformdirs
、JavaScriptのenv-paths
など)がmacOSの「標準」としてこのパスを返すものの、それは設計上の誤解に基づいています。dotfilesはユーザーが手動で管理するものであり、「アプリが自動で管理する設定ファイル」とは性質が異なるものなのです。
XDG Base Directory Specificationを使うべき理由
CLIツールの設定ファイルの保存場所として適しているのは、XDG Base Directory Specificationで定められた、~/.config
です。Git、Emacs、Neovimなど多くのUnix系ツールで採用されいてる事実上の標準で、ユーザーが設定ファイルをバージョン管理しやすく、予測可能な構造を提供します。
設定ファイルの保存場所は、「驚き最小の原則(Principle of Least Astonishment)」に従い、ユーザーの期待に沿った設計が望ましいのです。
また、人気のdotfile管理ツールを調査し、以下のような結果を示しています。
ツール名 | ~/Library/Application Support |
---|---|
chezmoi | 対応なし |
dotbot | 対応なし |
yadm | 対応なし |
rcm | 対応なし |
GNU Stow | 対応なし |
これらのツールは、macOSでも~/.config
を前提としており、現場の運用がAppleのGUI向けガイドラインとは異なることを示しています。
Appleのガイドラインの誤解
macOSでこのような状態になっているのは、Appleの「Standard Directories」ガイドラインの誤解にあるとのこと。これはGUIアプリ向けで、CLIツールには適用されないものだと考えられます。
CLIツールはバンドルIDを持たず、/Applications
にインストールされることもないため、~/Library/Application Support
を使う根拠にはならないのです。
結論:CLIツールはXDG仕様に従うべき
Rebecca氏の主張は明快です。macOSでもCLIツールは~/.config
を使うべきであり、~/Library/Application Supportは
GUIアプリ専用の領域だというものです。ユーザーの期待、ツールの一貫性、そして保守性を考えるなら、XDG Base Directory Specificationの採用が最も合理的な選択だと強調しています。
なお、Hacker Newsでもこの記事が議論されていて、多くの開発者が、CLIツールの設定ファイルの保存先をライブラリ(例:Rustのdirs crate)に委ねているため、その結果として~/Library/Application Support
が使われてしまうと訴えています。一部ユーザーは、ライブラリのメンテナーに改善を求めているものの、受け入れられていないという不満もあるようです。
多くのコメントは、XDG Base Directory Specification(特に~/.config
)の採用を支持していますが、一方で、XDG仕様の曖昧さや内部矛盾(特に$XDG_CONFIG_HOME
と$XDG_DATA_HOME
の使い分け)に言及する声もあり、仕様の明確化を求める意見もあります。