キーボードだけでMacやWindowsを操るIT技能の初歩を紹介 〜シェル、ディレクトリ、パス〜
プログラム自学案内の19回目です。前回の記事ではNode.jsの使い方のサワリを紹介しました。今回の記事ではコマンドラインシェルと、ファイルシステムの基本を紹介します。前回までの記事はこちら。
コマンドプロンプト、ターミナルとは、そもそも何なのか
第2回の記事や前回の記事では、Windowsの場合はコマンドプロンプト、Macの場合はターミナルを操作しました。これらは、コマンドラインシェルと呼ばれます。
そもそもシェルとは、利用者がOS(WindowsやMac)の機能を操作するためのソフトのことを言います。つまり、WindowsとかMacとかの表の顔ですね。Windowsの場合は「エクスプローラ」、Macの場合は「Finder」がおおむねそれに当たります。これらはマウスで操作できるので、グラフィカルシェルと呼ばれます。
一方、コマンドラインシェルは、命令を一行づつキーボードで入力して操作するシェルです。古来からある元祖シェルと言えるようなものです。こちらも、「コマンドプロンプト」「Windows PowerShell」「ターミナル」としてWindowsやMacに付属しています。
そして、コマンドラインシェルこそ、プログラミングではヒンパンに使うことになります。なぜならこれら、グラフィカルシェルより多機能だからです。ことにMacのターミナルがもつ機能(bashやzshと呼ばれます)は圧倒的で、これを使いこなし一行の命令で何でもやってしまうさまは、その見事さから「シェル芸」と芸能になぞらえられるほどなのです。
最初に覚える二つの操作
この記事は、さしあたり重要な、次の2つのOSの機能の操作についてだけ、紹介します。
ファイルシステムの操作
アプリケーションの実行
ファイルシステムの操作
コンピュータを使うとき、取り扱う動画や画像、文書などのデータは、すべてフォルダの中のファイルという形で格納されています。これは、OSが提供する機能、ファイルシステムのたまものです。「エクスプローラ」や「Finder」を使ったことのある方には、馴染み深いものだと思います。
コマンドラインシェルでこれらを操作する前に、まずは 「エクスプローラ」「Finder」を見ながら、ファイルシステムにまつわる言葉を整理しましょう。
ディレクトリ
ディレクトリ(directory)とはフォルダのことです。プログラミングの文脈では、フォルダという語はあまり使わず、代わりにディレクトリという語を使います。
親ディレクトリ、子ディレクトリ、ルートディレクトリ
Finderやエクスプローラを操作したことがある方は分かると思いますが、ファイルシステムは階層構造(木構造)をしています。
木構造をもつ要素間の関係は、よく親子関係になぞらえられます。ですから、自分を含むディレクトリは親ディレクトリ、自分に含まれるディレクトリは子ディレクトリと言います。
どんなファイルやディレクトリも、親を辿っていくと親の無い根元のディレクトリにたどり着きます。これをルートディレクトリ(root directory)と言います。「ルート」はrouteではなくてroot、つまり平方根のルートと同じ綴りです。
なお、Windowsの場合は「C:」、「D:」などのドライブごとに1つ、ルートディレクトリがあります。一方、Macの場合はルートディレクトリは1つしかありません。
絶対パスとパス区切り文字
絶対パス(absolute path)は、ルートディレクトリを起点に、子ディレクトリを順々に辿り、目的のファイルやディレクトリに辿り着くまでの道筋を示した文字列です。俗にフルパスとも呼ばれます。綴りがpassではなくpath(原義は小道や道筋)であることに注意してください。
Windowsファイルの絶対パスの例です。
Macのファイルの絶対パスの例です。
どちらも、太字にしたところが、ルートディレクトリを示しています。
パスを記述する際に使われる親子関係の区切りの文字がWindowsとMacの場合で違いますね。
Windowsの場合は \ (バックスラッシュ)。
Macの場合は / (スラッシュ)。
ややこしいことに、日本語Windows環境では \ が ¥ の形に見えることが多い です。これはもう、そういうものだと覚えるしかありません。
カレントディレクトリと相対パス
Finderやエクスプローラでは、必ずどこか一つのディレクトリが開かれた状態になっています。この現在位置のディレクトリをカレントディレクトリ(current directory) と言います。
コマンドラインシェルや、そのほかのプログラムであっても、かならずカレントディレクトリ、すなわち現在位置を持っています。
相対パス(relative path)は、カレントディレクトリを起点にディレクトリを辿り、目的のファイルやディレクトリに辿り着くまでの道筋を示した文字列です。相対パスには起点が含まれません。
Windowsファイルの相対パスの例です。
Macのファイルの相対パスの例です。
なお、OSを問わず、自分自身の相対パスは「.」、親ディレクトリは「..」で表現できます。 これを応用すると、自分の子孫だけでなく、親やオジさん、イトコに当たるような位置も、相対パスで表現できます。たとえば、叔父さんと甥の関係をそれぞれ相対パスで示すと、Windowsではこんな感じになりますね。
練習:コマンドラインシェルでファイル操作
予備知識が整いましたので、コマンドラインシェルを使ってみましょう。コマンドプロンプトやMacターミナルで使えるコマンドを調べながら、次のことを全て、コマンドラインシェルでやってみましょう。
カレントディレクトリ(以下現在位置と言います)の絶対パスを表示
現在位置の子ディレクトリとファイルを一覧表示
現在位置の子ディレクトリを新たに作成(名前:cli-practice)
現在位置の子ディレクトリとファイルを一覧表示し、cli-practiceが作られたことを確認
現在位置を 3.で作ったディレクトリに移動
コマンド「echo hello cli > greeting.txt 」を実行(「hello cli」という内容の greeting.txt ファイルが作成されるはずです)
ファイルを一覧表示させ、greeting.txtの存在を確認
現在位置を親ディレクトリに移動
6.で作った greeting.txt ファイルの内容を表示
6.で作った greeting.txt ファイルを削除
3.で作った cli-practice ディレクトリを削除
現在位置の子ディレクトリとファイルを一覧表示し、cli-practiceが消されたことを確認
いかがでしょう、感じがつかめたでしょうか。 キーボードに親しみ、操作に慣れると、Finderやエクスプローラによる操作よりも圧倒的にラクに操作できるようになります。
アプリケーションの実行
アプリケーション (application、以下アプリと略します) とは何でしょうか。文脈によってニュアンスが変わるヤッカイな言葉ですが、この記事ではザックリと、人が直接使うソフトなら、なんでもアプリである、と思っていただいて結構です。 じつは、以前の記事で、すでにコマンドラインシェルによるアプリの実行をしています。例を見てみます。
choco install -y vscode
brew install visual-studio-code --cask
code --install-extension ritwickdey.liveserver
node script.js RAN SUE MIKI
全てのコマンドの構造は同じです。最初の1語と、2語め以降に分かれます。構造は単純ですね。
最初の1語、 choco, brew, code, node というのが実行すべきアプリを指しています。
2語め以降 のモロモロは、起動されたアプリに対する、追加の指示です。この追加指示を、 コマンドラインオプションと言います。どんな語を指定すると、どんな効果があるかは、アプリごとに全く変わります。追加指示が必要なアプリもあれば、無くても動くアプリもあります。
アプリには必ず実行ファイルがある
すべてのアプリには、それを実行するための実行ファイルがあります。アプリはしょせん、コンピュータへの命令の集まりです。命令の集まりも一種のデータですので、OSはこのデータをファイルと見なしています。このファイルのことを、実行ファイルと言います。
そして、アプリ実行のための最初の1語の書き方は、じつは単に、実行ファイルのパス(相対パスでも絶対パスでも構いません)を書く、それだけなのです。
練習:コマンドラインシェルでアプリの起動
自分の好きなアプリの実行ファイルのパスを調べて、コマンドラインシェルから実行してみてください。
パスを通す / パスが通っている とは
ところで、最初に例にあげた「choco」とか「node」とかも、実行ファイルのパスなのでしょうか。そうは見えませんね。ではなぜ、choco や node が 動いてしまうのでしょうか。
答え(からくり)を端的にいうと「choco や node の実行ファイルに パスが通っているから」となります。では、パスを通すとか、パスが通っているとか、これらは、一体どういうことなのでしょうか。
これ、すこしヤヤコシイ話なので、次のQiitaの記事に説明を譲ります。ぜひ、読んでみてください。Windowsを前提にした記事になっていますが、Macでも考え方はほとんど同じです。
VSCodeのターミナル
いままで、コマンドプロンプトやターミナルを立ち上げて、コマンドラインシェルの操作をしてきましたが、じつは VSCode からでも、同じようにコマンドラインシェルを操作できます。
「VSCode」 「ターミナル」というキーワードで調べてみてください。
ちなみに全くの余談ですが、「ターミナル」という言葉。シュワルツェネッガー主演映画の「ターミネーター」と、同じ語源の言葉らしいです。
まとめと次回予告
今回の記事ではコマンドラインシェルで、ファイルシステムの操作と、アプリの実行ができることを紹介しました。
次回から、またNode.jsの 世界に戻ります。次回は npmを使いはじめます。
この記事が気に入ったらサポートをしてみませんか?