アリエナイくらい初歩的なWindows CUI 超 入門

# 概要

CUI の初学者がつまずくポイントを押さえて言語化します。
初めてCUIに触れた日を思い返しながら綴ります。

特に何かしらプログラミング言語の入門書で、
環境構築するにあたって困ったポイントに絞って解説していきます。

# 発見

気が付いてしまいました。
Windows の CUI (Command Line Interface) の
入門記事が Qiitaで検索しても出てこないことに！

試したキーワードは
「CUI 入門 Windows」です。
結果はノーヒット。

基本は大事なので寄稿していきます。

# 対象読者

Windows PC の基本操作がわかり、
CUIを使ってみたい人。

ここで言う基本とは、IT入門者で
ショートカットキーを使いこなしているくらいのレベルです。

インストールって何？っていう人は、
勉強しなおしてからまた来てくださいね。

# そもそもCUIってなに？

## 日本語で言うと

文字情報だけでPCを操作するために用意された、
ユーザーとの間の接点のことです。

コマンドという文章のようなものを何度も入力することで操作を行います。

今回のテーマである Windows の CUI には
コマンドプロンプトという名前が付いています。

### 実体

コマンドプロンプトの実体は、
`cmd.exe`という小さなファイルです。
場所は、`C:\Windows\System32\cmd.exe`

慣れてくると、`pwsh.exe`や`wt.exe`、
`wsl`を利用することになってくると思います。

## 歴史

PCは昔はCUIだけでした。
そうです、マウスはなかったのです。
文字だけがヒタスラ並んでいました。

今はひっそり息をひそめていますが、
それは一般利用者から見た景色です。
今でも、ITエンジニアにとってはなくてはならないものです。
使用禁止とか言ったら、言葉の暴動が起きます。

### ~~誕生~~引退秘話

詳しい話は「Macintosh 誕生 GUI」をググってください。
スティーブ・ジョブズの話が見つかるはずです。
https://news.mynavi.jp/article/20121206-macos/
https://japan.cnet.com/article/20066223/
https://www.gizmodo.jp/2014/01/macintosh_1.html

スティーブ・ジョブズによって、CUIは影の住人となったのかもしれませんね。
しかし、彼がやらなくても、いずれ起きていたことなのでしょう。

# CUI操作とは

Windowsのコマンドプロンプトを例にとって、
CUIを使うとはどういうことなのか、
手順を追って説明します。

1. PCを起動します
1. サインインします
1. おもむろにキーボードで`Win`+`r`を叩きます
1. 現れたテキストボックスに`cmd`と書き込みます
1. `Enter`キーを全力で叩きます
1. すると「コマンドプロンプト」というウィンドウが現れます
1. 一番下の行に`>`を見つけます
1. そこにカーソルがあることを確かめます
1. 好きな文を書きます（好きな文をコマンドと呼びます）
1. `Enter` キーをそっと押し込みます
1. 次の行に返事がきます
1. ８以降を繰り返します
1. 終わりたいときは８で`exit`と書きます

以上の操作を行うことで、様々なコマンドを使った仕事ができるのです。
`cmd`の代わりに`powershell`とか`pwsh`、`wt`、`wsl`もあります。

※「書き込む」ことを「入力する」ということもあります。

# つまづきポイント

## 使い方がわかりにくい

「このコマンドの使い方が分からないな。特にオプション指定ってどうやるんだろう。」
「とりあえずリファレンス読んでみるか。括弧多すぎ！！なにこれわからん！！」
っていうことがあります。

構文というのは、自然言語（日本語とか英語とか）で言うと文法の事です。
具体的には以下のようなものです。

## コマンドライン構文

[コマンドライン構文のキー](https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/command-line-syntax-key)にどんな使い方があるのかを知っておくと、理解が速くなります。

例えば、`arp`というコマンドだと、[Microsoft Docs](https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/arp) の説明には以下のように書いてあります。

```posh:MicrosoftDocs
arp [/a [<inetaddr>] [/n <ifaceaddr>]] [/g [<inetaddr>] [-n <ifaceaddr>]] [/d <inetaddr> [<ifaceaddr>]] [/s <inetaddr> <etheraddr> [<ifaceaddr>]]
```

括弧がマトリョーシカのように入れ子になっているので、初めて見ると拒否反応を示す人もいますが、
構文を理解していれば焦らなくても大丈夫です。

`arp`の後ろはすべて、`[]`で囲まれているので、`arp`だけ単体で使えることが最初に分かります。

arpと入力したらenterを押すということです。

次に、`[/a`や `[/g`、`[/d`で始まる部分は個別に`[`と`]`で囲まれています。
このことから、別々に考える必要があると分かります。そして順不同です。

さらに細かく見ていくと、`[/a`で始まる部分は、`[<inetaddr>]`と`[/n <ifaceaddr>]`があります。
`arp /a`とすることも出来るし、`[<inetaddr>]`と`[/n <ifaceaddr>]`を付けることもできるんですね。

`arp [/a [<inetaddr>] [/n <ifaceaddr>]]`という部分を読むだけで、下記のように５パターンの書き方ができることが分かります。
全パターン書くと、文書を書くのが大変です。そのために、~~サボりたさのあまり~~このような書き方が生まれたのですね。

- `arp`
- `arp /a`
- `arp /a 192.168.0.1`
- `arp /a 192.168.0.1 /n 192.168.0.8`
- `arp /a /n 192.168.0.8`

## フォルダ階層がわからない

最初に覚えるべきは`cd`, `ls`, `dir`, `md`, `del`, `echo`などでしょうか。
とはいえ、多くの人は`cd`でつまずくと思います。
`cd`は、Change Directoryの略です。その名の通りフォルダを移動するのですが、
初心者と呼ばれる人間は、移動した後戻れないのです。

戻るときには、`cd ..`とすればよいです。
私は知らなくて、とりあえず`cd c:\`とかやってました。

これにつまずかないためには、下記の表を理解しておくと良いです。

| 日本語 | アドレス表記 |`cd`で移動するときの実際のコマンド
|:-:|:-:|:-:|
| いま居るフォルダ | .  | cd .
| いま居るフォルダ | ./  | cd ./
| いま居るフォルダの１階層上のフォルダ | .. | cd ..
| いま居るフォルダの１階層上のフォルダ | ../ | cd ../

この`.`と`..`は宇宙にある星の数くらい使うので、初心者は最初に覚えるのがベターです。
これを知らずにいると、たいていの技術資料の内容が分かりません。

## 「パスを設定する」の意味が分からない

CUIを触るときに必ずついて回るのが、パス。

### パスとは

「パスってなに？パスワード？」
英語を知らなかったりすると、
いきなり大混乱です。

パスワードを意味する~~pass~~ではなく、
道を意味する**path**です。
最短経路探索を英語で言うと
 Shortest **path** search とだったりします。

### パスを設定する理由

作業方法を語っている入門書は量産されていますが、
なぜやるのかという部分の解説が少ないようです。

そのため、後輩に入門書を読ませても理解していないことが多いです。
「あーなんかやったなー」程度になってしまいます。
他の言語の環境を構築するときにまた転びます。
なんどだって転びます。ぜったいに。必ず。

「これインストールしたんだけど動かないんですよね」→
「Path通した？」→「ぱす？」

#### 毎回入力するのが面倒なのでサボりたい

第１の理由として、~~サボりたい~~効率化したいからです。

例えば、コマンドarpの実体は`C:\Windows\System32\ARP.EXE`です。
この`arp`を使うとき、パスが設定されていない状態だと、
`arp`と入力して`Enter`してもエラーになります。
`C:\Windows\System32\ARP.EXE`と入力して`Enter`することになります。
または、`cd c:\`→`Enter`→`cd Windows`→`Enter`→`cd System32`→`Enter`→`arp`→`Enter`とかですね。
※実際にはWindowsの初期設定でarpはパス設定されているのでエラーは起きません。

そこで、よく使うコマンドは場所を省略できるようにしたくなります。
数学の公式とかと同じですね。時短です。

#### アプリケーションの配布

例えば、Pythonというコマンドがあります。

これは、Pythonというプログラミング言語で書かれたアプリケーションを実行するために使います。
実体は`Python.exe`というファイルです。これが、その配下にいろいろなファイルを抱えています。

誰かが作った`なんとかかんとか.py`みたいなファイルを、`python.exe`に投げつけてやれば、開発者のたくらんだようにアプリケーションが動き出すわけです。

しかし、`python.exe`がどこにあるのかわからないとしたらどうでしょう？このアプリケーションの開発者は、`python.exe`を探す機能を`なんとかかんとか.py`とは別で用意しなければいけません。例えば[バッチファイル](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)などで。しかも、想像しうる限りすべての場所を探す必要があるでしょう。これは現実的でしょうか？

そこで！あらかじめPathというところに登録しておいて、すぐに場所が分かるから探す手間が省けるようにしたんですね。こういう取り決めをしておくことで何が起きるかというと、開発者は重要な機能の作成に集中できます。そして、アプリケーションの利用者は、「あなたの作ったアプリ`なんとかかんとか.py`を使いたいんだけど、`Python.exe`をどこに置けばいいかな？」なんて質問をすることも無くなります。

## 管理者って何？

「管理者権限が要るってどういうこと？これは私のPCですが？」
会社や学校から支給されたPCしか触ったことのない人は、
まずここでつまずくでしょう。

初心者が開発環境を構築するときに直面する壁です。
家族で購入したPCで親とアカウントを分けているなら親に聞けば解決するかもしれません。
しかし問題は、「管理者だから分かった」という思考停止です。

自分のPCを買ってユーザーを複数作成した経験のある人にしか意味がわかりせん。
linuxやMacでもroot権限という言葉がありますが、
基本的にはこれと同じことです。

どういうことか、説明をしましょう。
「PCの管理者など存在しないよ」っていう中小企業もありますが、
そのような場所にあるPCだとしても、
「管理者」という役割をもったアカウントがあります。

「管理者権限」という権限があり、この権限があるとPCの中ですべての操作が許されます。
この権限を持ったアカウントはやりたい放題なので、だれでもこの権限があると困るわけです。

そのため、ネットカフェなどで貸出していたり、学校で使用したりするPCには、
これよりも権限の低いアカウントを利用者用に準備したります。

勘違いしやすいのは、この管理者権限が必要という説明書きがあいまいな場合です。
特に英語だと「マジありえないくらいにヤバくてイライラ」します。
「need admin.」ぐらいの適当な文の時があるんですね。もうオコです:punch::angry: 。
「Adminっていうアカウントじゃなきゃダメなの？管理者権限があるアカウントなら何でもいいの？」ってなります。

みなさん、このような表示に惑わされないようにしましょうね:smile:。

# プルスウルトラ

PowerShellはいいぞ？！と布教しておきます。
[powershellの習得](https://docs.microsoft.com/ja-jp/powershell/scripting/learn/ps101/01-getting-started)

# 免責事項

- 私が転んだポイントであり誰もが転ぶとは限りません。
- 実は「コマンドプロンプト 入門」で検索するとヒットします。
  - 見なかったことにしてください。
- 出来る限り専門用語には分かりやすい説明を付けました。その結果読みづらくなってしまっていたら申し訳ございません。
  - まだ難しい単語がある場合は、ぜひご指摘ください。解説を追加します。
- よくある「超入門」の「超」は「超簡単」の「超」なのか、「入門を超えようぜ」の「超」なのか分かっっていません。

**Excelsior!**