Dance with Agents

cd――フォルダの中を移動するコマンド

cdは、フォルダを移動するコマンド

cd(change directoryの略)は、今いる場所から、指定したフォルダへ移動するコマンドです。

cd フォルダ名

これだけです。Finderやエクスプローラーでフォルダをダブルクリックして中を開く、あの操作をコマンドでやっている、と思ってください。

ただし、書いてあるとおりに打っても動かないことがある

解説記事にはよくこう書いてあります。

cd <フォルダ名>     ← その中へ移動する

そのまま打ってみると、こう返ってきます。

cd: no such file or directory: my-project

「そんなフォルダはありません」。でも、フォルダは確かにある。デスクトップに見えている。名前も合っている。

このとき間違っているのはフォルダ名ではなく、「どこから見た名前か」の方です。 ここが分からないままだと、何度打ち直しても同じところで止まります。先に片付けておきます。

ターミナルには「今いる場所」がある

ファイル管理アプリ(MacならFinder、Windowsならエクスプローラー)でフォルダを開いているとき、画面には必ず「今開いているフォルダ」があります。ターミナルにも、まったく同じものがあります。目に見えないだけで、ターミナルは常にどこか1つのフォルダの中にいます。

今どこにいるかは、pwdで確認できます。

pwd

Macならこんな答えが返ります。

/Users/onamae

Windows(PowerShell)ならこちらです。

C:\Users\onamae

これが「今いる場所」です。そして、その場所の中に何があるかはlsで見られます。

ls

ここが肝心なところで、cd フォルダ名という書き方は「今いる場所のすぐ中にあるフォルダ」にしか通じません。 lsで名前が表示されないフォルダには、その書き方では移動できないのです。

パスは、フォルダの住所

では離れた場所にあるフォルダへはどう行くのか。道順を全部書きます。 この道順のことを「パス」と呼びます。

パスには2種類あります。

絶対パス(一番上から書いた住所)

パソコンの一番上から順に、フォルダ名を/(Macの場合)でつないで書いたものです。

/Users/onamae/webbuild/my-project

これは「Usersの中のonamaeの中のwebbuildの中のmy-project」という意味です。住所を都道府県から書くのと同じで、今どこにいても必ず通じます。

Windowsの場合は、先頭にドライブ名が付き、区切りが\(バックスラッシュ、日本語キーボードでは¥)になります。

C:\Users\onamae\webbuild\my-project

なおPowerShellは/でも\でも受け付けます。公式ドキュメントに「PowerShellでは他のプラットフォームとの互換性のため、バックスラッシュとスラッシュのどちらも使えます」と明記されています。Macの記事をそのまま真似して/で書いても、たいてい動きます。

相対パス(今いる場所からの道順)

今いる場所を起点にした道順です。冒頭のcd my-projectも、実は相対パスの一種でした。

よく使う記号は3つです。

書き方 意味
. 今いる場所
.. 1つ上のフォルダ
~ ホームフォルダ(/Users/onamaeやC:\Users\onamaeのこと)

組み合わせるとこうなります。

cd ..                       # 1つ上に戻る
cd ../another-project       # 1つ上に戻ってから、別のフォルダへ移動する
cd ~/webbuild/my-project    # ホームから数えた道順で移動する

~は覚えておくと便利です。ホームフォルダという「自分の家」への近道で、これがあるおかげで/Users/onamae/という長い部分を毎回書かずに済みます。

覚えておくと楽になる4つ

cd            # ホームフォルダに戻る(迷子になったときの避難先)
cd ~          # 同じくホームフォルダへ
cd ..         # 1つ上へ
cd -          # さっきまでいた場所に戻る

cdだけを打つとホームに戻るのは、Macでも、Windows PowerShellでも同じです(PowerShellの公式ドキュメントにも「パスを指定しなかった場合、現在のユーザーのホームディレクトリになります」とあります)。迷子になったらcdだけ打つ。 これは覚えておいて損がありません。

cd -はMacでは昔から使えます。Windowsでは新しい方のPowerShell(バージョン6.2以降)で使えるようになったもので、Windowsに最初からインストールされているPowerShell 5.1では使えません。

そもそも、長いパスを手で打たない

ここまで書いておいてなんですが、長いパスを手で打つ人はほとんどいません。 打ち間違えますし、時間もかかります。実際にはこうしています。

Tabキーで補完する

途中まで打ってTabキーを押すと、続きを自動で埋めてくれます。cd ~/webまで打ってTab、でcd ~/webbuild/まで一気に伸びます。これが一番使う方法です。

ただし、MacとWindowsで挙動が少し違います。

環境 Tabを押したとき
Mac(zsh) 候補が1つなら埋まる。複数あるときは共通部分まで埋めて、候補を一覧表示。さらにTabを押すと順に切り替わる
Windows(PowerShell) いきなり最初の候補が補完される。もう一度Tabを押すと次の候補に切り替わる。一覧で見たいときはCtrl + Space

Windowsの方は「勝手に決められた」ように見えて戸惑いますが、Tabを押し続ければ他の候補も表示されます。 一覧で選びたいならCtrl + Spaceです。

フォルダをターミナルに放り込む(Mac)

Macのターミナルは、Finderからフォルダをドラッグして画面にドロップすると、そのフォルダの絶対パスが文字として入力されます。 Appleの公式ドキュメントにも「項目の絶対パスがコマンドラインに表示されます」と書かれている、正式な機能です。

つまり、cd (cdとスペース)まで打ってからフォルダを放り込んでEnter、で移動できます。長いパスを1文字も打たずに済みます。

パスをコピーする(Mac)

Finderのウインドウ下部に表示される「パスバー」を使う方法もあります。

  1. Finderのメニューから「表示」→「パスバーを表示」
  2. ウインドウ下部に表示されたパスの中から、目的のフォルダをControlキーを押しながらクリック
  3. 「“◯◯“のパス名をコピー」を選ぶ

これでパスがコピーされるので、ターミナルに貼り付けます。パスバーからは「ターミナルで開く」を選ぶこともできます。

エクスプローラーのアドレスバーを使う(Windows)

Windowsのエクスプローラーでは、Alt + DまたはCtrl + Lを押すとアドレスバーにカーソルが移り、今開いているフォルダのパスが選択された状態になります。 そのままコピーして、ターミナルに貼り付けられます。

Windows Terminalには、フォルダを「新しいタブ」ボタンの上にドロップすると、そのフォルダを開いた状態で新しいタブが開くという機能もあります(Altキーを押しながらなら新しいペイン、Shiftキーなら新しいウインドウ)。cdすら要らなくなる方法です。

名前にスペースが含まれているとき

これはよくハマります。

cd ~/Documents/My Project

これは動きません。ターミナルはスペースを「ここでコマンドの区切り」と解釈するので、Myまでがフォルダ名だと思われてしまいます。

囲めば解決します。

cd "~/Documents/My Project"

エージェントに作業させるフォルダには、そもそもスペースを含めない方が楽です。 英数字とハイフンだけにしておくと、この手のトラブルが起きません。

詰まったら、この順番で確認する

  1. pwdで、今どこにいるか確認する
  2. lsで、そこに目的のフォルダがあるか確認する
  3. 無ければ、cd ..で上がるか、cd ~でホームに戻ってやり直す

そして、エージェントを起動できているなら、そのまま聞いてしまうのが一番早いです。 「my-projectっていうフォルダに移動したいんだけど、どこにあるか探して」と頼めば、探してcdのコマンドまで示してくれます。パスを覚えるより、こちらの方が実戦的かもしれません。

この先

cdを打つこと自体が面倒になってきたら、そのための道具があります。一度行った場所を覚えておいて、名前の一部だけで飛べるようにする、という発想のものです。

そして、cdしてからエージェントを起動する、という実際の流れは作業の始め方にまとめてあります。

ターミナル / UNIXコマンドの記事

ターミナル / UNIXコマンドのページへ →