シェル・ターミナル基礎
ファイルシステム・パス・環境変数・パーミッションの仕組みを理解し、開発作業に必要なターミナル操作を身につける
ターミナル(シェル)は、開発者がOSと直接対話するためのテキストインターフェースである。GUIのファイル操作と本質的にやっていることは同じだが、コマンドとして記録・再現・自動化できる点が異なる。npm・Git・Claude Codeはすべてターミナル上で動作するため、基本操作の習得は開発環境の前提条件となる。
ファイルシステムの構造
Unixシステム(macOS・Linux・WSL)のファイルシステムは木構造になっている。最上位の /(ルート)から始まり、すべてのファイルとディレクトリがその配下に存在する。
/
├── home/ ← ユーザーのホームディレクトリ群
│ └── username/
│ ├── Documents/
│ └── projects/
├── usr/ ← システムのプログラム・ライブラリ
└── tmp/ ← 一時ファイル(再起動で消える)
~ はホームディレクトリ(/home/username)の短縮記法。~/projects は /home/username/projects と同義。
絶対パスと相対パス
絶対パス: ルートから始まる完全なパス。/Users/username/projects/myapp
相対パス: 現在地(カレントディレクトリ)からの相対的なパス。./src/index.ts や ../config.json
.は現在のディレクトリ..は一つ上のディレクトリ
基本コマンド
pwd # 現在地を表示(Print Working Directory)
ls # ファイル一覧
ls -la # 隠しファイル含む詳細表示
cd projects/myapp # ディレクトリ移動
cd .. # 一つ上へ
cd ~ # ホームへ
mkdir myapp # ディレクトリ作成
touch index.ts # 空ファイル作成
cp src.ts dst.ts # コピー
mv old.ts new.ts # 移動・リネーム
rm file.ts # ファイル削除
rm -rf mydir/ # ディレクトリごと削除(取り消し不可・注意)
cat file.ts # ファイル内容を表示
less file.ts # ページング表示(qで終了)
環境変数
環境変数はシェルが保持するキーと値のペアで、プログラムが実行時に参照する設定値を格納する。APIキーやデータベースURLなどの秘匿情報は、コードに直書きせず環境変数で管理する。
echo $HOME # 環境変数の参照
echo $PATH # 実行ファイルの検索パス(:区切りで複数のディレクトリ)
export MY_VAR=hello # 一時的に環境変数をセット(セッション内のみ有効)
永続化する場合は ~/.zshrc や ~/.bashrc に export 行を追加する。
PATH は特に重要で、node や git などのコマンドをどのディレクトリで探すかを定義している。which node でコマンドの実体がどこにあるか確認できる。
パーミッション
ls -la
# 出力例:
# -rw-r--r-- 1 user staff 1234 Apr 19 10:00 config.json
# drwxr-xr-x 5 user staff 160 Apr 19 10:00 src/
先頭の文字列 drwxr-xr-x はパーミッションを表す:
d= ディレクトリ(-はファイル)rwx= 所有者の権限(読み取り・書き込み・実行)r-x= グループの権限r-x= その他のユーザーの権限
chmod +x script.sh # 実行権限を付与
chmod 644 config.json # 数値でパーミッションを指定(6=rw, 4=r)
Windowsユーザーへの注意
WindowsでUnixコマンドを使うには WSL(Windows Subsystem for Linux) の導入が推奨される。VS Codeの拡張機能「WSL」を使うと、WindowsのエディタとLinux環境をシームレスに組み合わせられる。
Claude Codeを使う場合もWSL上での実行が多くのツールとの互換性を確保する。
参考リソース
- The Missing Semester of Your CS Education(https://missing.csail.mit.edu/)— シェル・ツール・スクリプティングを体系的に学べるMIT公開講義
manコマンド —man lsで任意のコマンドのマニュアルを表示(qで終了)- GNU Bash Manual(https://www.gnu.org/software/bash/manual/)
確認クイズ
Q1. Unixファイルシステムの最上位ディレクトリを表す記号はどれか。 A. ~ B. . C. / D. ..
正解: C. /
解説: Unixシステム(macOS・Linux・WSL)のファイルシステムは木構造になっており、最上位の /(ルート)から始まってすべてのファイルとディレクトリがその配下に存在する。~ はホームディレクトリの短縮記法で別物である。
Q2. ~/projects というパスは何を意味するか。
正解: /home/username/projects(ホームディレクトリ直下の projects ディレクトリ)
解説: ~ はホームディレクトリ(/home/username)の短縮記法。~/projects は /home/username/projects と同義である。macOSでは /Users/username がホームディレクトリになる。
Q3. 現在地(カレントディレクトリ)を表示するコマンドはどれか。 A. ls B. cd C. pwd D. cat
正解: C. pwd
解説: pwd は Print Working Directory の略で、現在自分がどのディレクトリにいるかを絶対パスで表示する。ls はファイル一覧、cd はディレクトリ移動、cat はファイル内容表示のコマンドである。
Q4. 相対パスと絶対パスの違いを説明してください。
正解: 絶対パスはルート(/)から始まる完全なパス。相対パスは現在地(カレントディレクトリ)を起点とした相対的なパス。
解説: 絶対パスの例は /Users/username/projects/myapp、相対パスの例は ./src/index.ts や ../config.json。. は現在のディレクトリ、.. は一つ上のディレクトリを指す。
Q5. rm -rf mydir/ コマンドについて正しい説明はどれか。 A. mydir ディレクトリを圧縮する B. mydir ディレクトリを取り消し不可の状態でまるごと削除する C. mydir ディレクトリを移動する D. mydir ディレクトリの権限を変更する
正解: B. mydir ディレクトリを取り消し不可の状態でまるごと削除する
解説: -r は再帰的(ディレクトリ内のファイルもすべて対象)、-f は強制的(確認なし)を意味するオプション。GUIのゴミ箱と違い取り消しができないため、ドキュメントでは「注意」と明記されている。
Q6. 環境変数にAPIキーやデータベースURLを格納する理由はなぜか。
正解: 秘匿情報をコードに直書きしないようにするため
解説: コードに秘匿情報を直書きするとGitリポジトリに履歴が残り、意図せず公開されるリスクがある。環境変数として分離することで、コードとは独立して管理でき、本番・開発環境ごとに値を切り替えることも容易になる。
Q7. export MY_VAR=hello で設定した環境変数はどの範囲で有効か。 A. OS全体で永続的に有効 B. 現在のシェルセッション内のみ有効 C. 全ユーザーで共有される D. 再起動後も引き継がれる
正解: B. 現在のシェルセッション内のみ有効
解説: export コマンドで設定した環境変数はセッション(ターミナルウィンドウを閉じるまで)の間のみ有効。永続化するには ~/.zshrc や ~/.bashrc に export 行を追加する必要がある。
Q8. drwxr-xr-x というパーミッション表示の意味として正しいものはどれか。 A. ファイルで、所有者は読み書き可能、グループは読み取りのみ B. ディレクトリで、所有者は読み書き実行可能、グループとその他は読み取りと実行のみ可能 C. ディレクトリで、全ユーザーが読み書き実行可能 D. ファイルで、全ユーザーが読み取りのみ可能
正解: B. ディレクトリで、所有者は読み書き実行可能、グループとその他は読み取りと実行のみ可能
解説: 先頭の d はディレクトリを意味する(- はファイル)。rwx が所有者の権限(読み取り・書き込み・実行)、r-x がグループの権限(読み取り・実行のみ)、最後の r-x がその他ユーザーの権限を表す。
Q9. PATH 環境変数の役割は何か。
正解: node や git などのコマンドをどのディレクトリで探すかを定義している
解説: PATH は : 区切りで複数のディレクトリが並んでおり、コマンドを実行するときにこれらのディレクトリを順番に検索する。which node コマンドでコマンドの実体がどこにあるか確認できる。
Q10. WindowsでUnixコマンドを使うための推奨環境はどれか。 A. Git Bash のみで十分 B. WSL(Windows Subsystem for Linux)の導入が推奨される C. PowerShellで代替できる D. Cygwinが唯一の選択肢
正解: B. WSL(Windows Subsystem for Linux)の導入が推奨される
解説: WSLを使うとWindowsのエディタ(VS Code)とLinux環境をシームレスに組み合わせられる。Claude Codeを使う場合もWSL上での実行が多くのツールとの互換性を確保するとドキュメントに明記されている。
生きているコード
本ドキュメントで扱ったパターンの完全な動作コードは、メンター側リポジトリの参照ブランチで確認できます。
- 対応 Week: W1
- 参照ブランチ:
- W1:
reference/week-1 - 対応 checklist 項目: N8
ブランチの作り方・見方は b00-curriculum-map を参照してください。
- 1. 📄Web とは何か
- 2. 📄URL を打ってから画面が表示されるまで
- 3. 📄ネットワーク基礎(TCP/IP・DNS・HTTPS)
- 4. 📄【発展】物理層から通信が成立するまで(電力・Ethernet・Wi-Fi・Bluetooth)
- 5. 📄WSL2・Docker セットアップ詳細(Windows 向け)
- 6. 📄環境構築の段階的導入(macOS / Windows)
- 7. 📄カリキュラム全体マップ(Week × 教材 × 参照ブランチ × 要求チェックリスト)
- 8. 📄このカリキュラムの使い方(SQL・Python・Dify経験者向け)
- 9. 📄シェル・ターミナル基礎
- 10. 📄Windows で完全にゼロから始める開発環境構築(Week 1)
- 11. 📄Git基礎
- 12. 📄GitHubワークフロー
- 13. 📄パッケージ管理(pnpm workspace)
- 1. 📄AWSインフラ基礎
- 2. 📄AWS Budget Alert の設定(Month 5 Week 17)
- 3. 📄環境変数管理
- 4. 📄Bastion EC2 と SSH ProxyJump(Month 5 Week 18)
- 5. 📄CI/CD基礎
- 6. 📄ECR への Docker イメージ push と App EC2 デプロイ(Month 5 Week 19)
- 7. 📄テスト設計の基本
- 8. 📄CloudFront + S3 + ALB で公開する(Month 5 Week 20)
- 9. 📄CLAUDE.md・プロジェクト設定
- 10. 📄PR レビュー 5 観点ルーブリック(全 Week 共通)
- 11. 📄タスク分解・仕様の書き方
- 12. 📄Playwright で E2E テスト(Month 6 Week 22)
- 13. 📄生成コードのレビュー・デバッグの勘所
- 14. 📄Trivy で脆弱性スキャン(Month 6 Week 23)
- 15. 📄CloudWatch Logs の読み方と運用(Month 6 Week 23)
- 16. 📄PDF ポートフォリオの自動生成(Month 6 Week 24)