周囲に"よく考えると意味不明"な記号が溢れかえっているmacOS、「~」もそのひとつといえそうだ。どのような場面で使うのか、Terminal/シェルでしか利用できないのか、そもそもどう読めばいいのか、読後にすっきりできるよう解説してみよう。

「~」はすべての作業の起点

この「~」という記号、たった1文字だが実に奥が深い。読みかたは「チルダ(tilde)」、スペイン語やポルトガル語で見かける「n」と一体化した記号とは異なり単独で使う。数学の相似記号と表記は同じだが、UNIX系OSでは伝統的に「ホームディレクトリ(フォルダ)」を意味する記号として用いられる。

ホームディレクトリとはユーザ専用の作業領域であり、すべての作業の起点だ。macOSでは、ユーザを作成したときにルートボリューム直下のユーザフォルダ(/Users)に専用フォルダが作成され、そこが各ユーザにとってのホームディレクトリとなる。ユーザ名が「shinobu」だとすれば、Macintosh HDを振り出しに「ユーザ」→「shinobu」(/Users/shinobu)がホームディレクトリというわけだ。

  • Finderで表示した「ユーザ」フォルダ。カレントユーザのホームディレクトリは家のアイコンで表示される

ホームディレクトリを記号で表現する理由は、それが好都合だからだ。macOSのように、ホームディレクトリが「/Users」の直下に固定されているシステムはともかく、他のOSがそうとは限らない。多くのUNIX系OSは「/home/ユーザ名」だが、Solarisは「/export/home/ユーザ名」だったし、Windows上で動作するLinux環境「Bash on Windows」のように、「C:\Users\ユーザ名\AppData\Local\lxss」などとWindowsのフォルダ構造を利用するものもある。しかし、「~」はファイルシステムやフォルダ構造がどうあろうと、1字でホームディレクトリを表現できてしまう。

シェルのようにいろいろな環境/ユーザのもとで動作するソフトウェアの場合、「~」という相対的なパス表現は扱いやすい。たとえば、ホームディレクトリ直下にある「dog.png」というファイルを表現する場合、Linuxユーザ向けには「/home/ユーザ名/dog.png」、Macユーザ向けには「/Users/ユーザ名/dog.png」とパスを記述しなければならないが、チルダを使えば「~/dog.png」で済む。

  • シェルの働きにより「~」はホームディレクトリのパスに自動変換される

シェル自体も「~」を理解する。コマンドの引数でファイルを指定するとき、「~」は自動的にホームディレクトリと解釈される。cpやmvといったコマンドでのファイル操作では、ホームディレクトリ以下の領域を指定することが多く、「~」を使えばパスを簡潔に表記できる。

チルダがホームディレクトリを意味する記法(通称「チルダ記法」)は、初めてこれを採用したcsh(Cシェル)以降のシェルに採用されている。Terminalで利用するbashやzsh、tcshといったシェルは、その機能を引き継いでいるため、「~」をホームディレクトリを意味する記号として同様に利用できるのだ。「~ユーザ名」とすれば、他のユーザのホームディレクトリを表現することも可能だ。

なお、bashやzshには「HOME」という環境変数が用意されており、同様にホームディレクトリを表現できる。シェルでは二重引用符(")で囲まれた「~」は展開されず、ホームディレクトリの記号とは解釈されないため、二重引用符で囲む場合は「~」の代わりに「$HOME」を使うといいだろう。

・デスクトップの「cat.jpg」をピクチャフォルダへコピーする

$ cp ~/Desktop/cat.jpg ~/Pictures


・デスクトップの「cat.jpg」をユーザ「steve」のDrop Boxフォルダへコピーする

$ cp ~/Desktop/cat.jpg ~steve/Public/Drop\ Box

あまり知られていないが、Finderでも「~」を利用できる。メニューバーで「移動」→「フォルダへ移動...」を選択すると現れるダイアログで、「~」とだけ入力してみよう。ホームディレクトリが画面に現れるはずだ。

もちろん、ホームディレクトリ以下のフォルダを開く用途にも使える。「~/Documents」と入力すれば「書類」、「~/Pictures」と入力すれば「ピクチャ」、「~/Desktop」と入力すればデスクトップが表示できる(フォルダ名は日本語のものに自動変換される)。OS X Lion以降、Finderでは隠し属性扱いされているライブラリフォルダも、「~/Library」と入力すればOKだ。

  • Finderの「フォルダへ移動」でも「~」を利用できる