
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の使い分け)に言及する声もあり、仕様の明確化を求める意見もあります。
