CLI(コマンドライン)入門ガイド¶
CLI(Command Line Interface)は、テキストベースでコンピューターと対話するためのインターフェースです。マウスを使わずにキーボードだけでファイル操作、プログラム実行、システム管理などができます。
CLIとは¶
CLIは、グラフィカルユーザーインターフェース(GUI)とは対照的に、文字入力によってコンピューターに指示を与える方法です。開発者にとって必須のスキルで、効率的な作業を可能にします。
CLIの利点¶
効率性: マウス操作より高速な操作が可能
自動化: スクリプト化により繰り返し作業を自動化
リモートアクセス: SSH経由でのサーバー操作
精密制御: 詳細なオプション指定が可能
バッチ処理: 複数のファイルやディレクトリを一括処理
ターミナルの起動方法¶
macOS¶
# ターミナルアプリの起動
# Applications > Utilities > Terminal
# または Spotlight検索で「terminal」と入力
# よく使われるターミナル
# - Terminal(標準)
# - iTerm2(サードパーティ)
Windows¶
# コマンドプロンプト
# Win + R > cmd
# PowerShell
# Win + R > powershell
# Windows Terminal(推奨)
# Microsoft Storeからインストール可能
Linux¶
# ショートカットキー
# Ctrl + Alt + T
# GUI経由
# Applications > Terminal
基本概念¶
プロンプト¶
# macOS/Linux の一般的なプロンプト
username@hostname:current_directory$
# 例
john@macbook:~/Documents$
# Windows コマンドプロンプト
C:\Users\username>
# PowerShell
PS C:\Users\username>
カレントディレクトリ¶
# 現在いる場所(カレントディレクトリ)を表示
pwd # macOS/Linux
cd # Windows
# 出力例
/Users/john/Documents
パス(Path)¶
# 絶対パス(ルートから始まる完全なパス)
/Users/john/Documents/project/file.txt # macOS/Linux
C:\Users\john\Documents\project\file.txt # Windows
# 相対パス(現在のディレクトリからの相対的なパス)
./file.txt # 現在のディレクトリのfile.txt
../parent.txt # 一つ上のディレクトリのparent.txt
../../root.txt # 二つ上のディレクトリのroot.txt
基本的なファイル・ディレクトリ操作¶
ディレクトリの確認と移動¶
# 現在のディレクトリを表示
pwd
# ディレクトリの内容を表示
ls # macOS/Linux
dir # Windows
# 詳細表示
ls -l # macOS/Linux
ls -la # 隠しファイルも表示
dir /a # Windows(隠しファイルも表示)
# ディレクトリ移動
cd Documents # Documentsディレクトリに移動
cd /Users/john/Desktop # 絶対パスで移動
cd .. # 一つ上のディレクトリに移動
cd ~ # ホームディレクトリに移動(macOS/Linux)
cd %USERPROFILE% # ホームディレクトリに移動(Windows)
cd / # ルートディレクトリに移動(macOS/Linux)
cd C:\ # Cドライブのルートに移動(Windows)
ファイルとディレクトリの作成¶
# 新しいディレクトリを作成
mkdir new_folder
mkdir -p path/to/new/folder # 中間ディレクトリも同時に作成(macOS/Linux)
mkdir path\to\new\folder # Windows
# 複数のディレクトリを同時に作成
mkdir folder1 folder2 folder3
# 新しいファイルを作成
touch newfile.txt # macOS/Linux
echo. > newfile.txt # Windows
type nul > newfile.txt # Windows(別の方法)
# 内容付きでファイルを作成
echo "Hello World" > hello.txt
echo "追加の内容" >> hello.txt # ファイルに追加
ファイルとディレクトリのコピー・移動・削除¶
# ファイルのコピー
cp source.txt destination.txt # macOS/Linux
copy source.txt destination.txt # Windows
# ディレクトリのコピー
cp -r source_folder dest_folder # macOS/Linux
xcopy source_folder dest_folder /E # Windows
# ファイルの移動・リネーム
mv oldname.txt newname.txt # macOS/Linux
move oldname.txt newname.txt # Windows
# ファイルの削除
rm file.txt # macOS/Linux
del file.txt # Windows
# ディレクトリの削除
rm -r folder_name # macOS/Linux(中身も含めて削除)
rmdir /s folder_name # Windows(中身も含めて削除)
# 確認付きで削除
rm -i file.txt # macOS/Linux
ファイル内容の表示と編集¶
ファイル内容の表示¶
# ファイル内容をすべて表示
cat file.txt # macOS/Linux
type file.txt # Windows
# ファイル内容をページ単位で表示
less file.txt # macOS/Linux
more file.txt # Windows/macOS/Linux
# ファイルの先頭部分を表示
head file.txt # macOS/Linux(先頭10行)
head -n 5 file.txt # 先頭5行のみ
# ファイルの末尾部分を表示
tail file.txt # macOS/Linux(末尾10行)
tail -n 20 file.txt # 末尾20行
tail -f log.txt # ファイルの変更をリアルタイムで監視
テキストエディタ¶
# コマンドライン上でファイルを編集
nano file.txt # nano(初心者向け)
vim file.txt # Vim(上級者向け)
emacs file.txt # Emacs
# nano の基本操作
# Ctrl + O: 保存
# Ctrl + X: 終了
# Ctrl + K: 行の削除
# Ctrl + U: 削除した行を復元
# Vim の基本操作
# i: 挿入モード
# :w: 保存
# :q: 終了
# :wq: 保存して終了
# :q!: 保存せずに終了
検索とフィルタリング¶
ファイル検索¶
# ファイル名で検索
find . -name "*.txt" # macOS/Linux(現在のディレクトリ以下の.txtファイル)
find /home -name "config*" # /home以下でconfigで始まるファイル
dir *.txt /s # Windows(.txtファイルを再帰検索)
# ファイル内容で検索
grep "search_term" file.txt # macOS/Linux
findstr "search_term" file.txt # Windows
# 複数ファイルから検索
grep -r "search_term" . # カレントディレクトリ以下を再帰検索
grep -i "search_term" file.txt # 大文字小文字を区別しない検索
grep -n "search_term" file.txt # 行番号付きで表示
grep -v "exclude_term" file.txt # 指定した語を含まない行を表示
パイプとリダイレクト¶
# パイプ(|):コマンドの出力を次のコマンドの入力にする
ls -l | grep "txt" # lsの出力からtxtを含む行を抽出
cat file.txt | wc -l # ファイルの行数をカウント
ps aux | grep "python" # 実行中のpythonプロセスを表示
# リダイレクト(>):出力をファイルに保存
ls -l > file_list.txt # lsの結果をファイルに保存
echo "Hello" > greeting.txt # 新しいファイルを作成(上書き)
echo "World" >> greeting.txt # ファイルに追加
# 入力リダイレクト(<)
sort < unsorted.txt # ファイルの内容をソート
システム情報と管理¶
システム情報の確認¶
# システム情報
uname -a # macOS/Linux(システム情報)
systeminfo # Windows(システム情報)
# CPU情報
lscpu # Linux
sysctl -n machdep.cpu.brand_string # macOS
wmic cpu get name # Windows
# メモリ使用量
free -h # Linux
vm_stat # macOS
wmic memorychip get size # Windows
# ディスク使用量
df -h # macOS/Linux(ディスク使用量)
du -sh * # 各ディレクトリのサイズ
dir /-c # Windows
プロセス管理¶
# 実行中のプロセス表示
ps aux # macOS/Linux
tasklist # Windows
# プロセスの終了
kill PID # macOS/Linux(プロセスIDを指定)
killall process_name # macOS/Linux(プロセス名を指定)
taskkill /PID 1234 # Windows(プロセスIDを指定)
taskkill /IM notepad.exe # Windows(プロセス名を指定)
# バックグラウンド実行
command & # macOS/Linux
start command # Windows
ネットワーク関連コマンド¶
基本的なネットワークコマンド¶
# ネットワーク接続の確認
ping google.com # ネットワーク接続テスト
ping -c 4 google.com # 4回だけpingを送信(macOS/Linux)
ping -n 4 google.com # 4回だけpingを送信(Windows)
# ネットワーク設定の確認
ifconfig # macOS/Linux(ネットワーク設定)
ipconfig # Windows(ネットワーク設定)
ipconfig /all # Windows(詳細な設定)
# DNSの確認
nslookup google.com # DNSルックアップ
dig google.com # macOS/Linux(詳細なDNS情報)
# ポートの確認
netstat -an # 開いているポートの表示
netstat -an | grep 80 # ポート80の状態を確認(macOS/Linux)
netstat -an | findstr 80 # ポート80の状態を確認(Windows)
ファイルのダウンロード¶
# ファイルのダウンロード
curl -O https://example.com/file.zip # macOS/Linux
wget https://example.com/file.zip # Linux
powershell -Command "Invoke-WebRequest -Uri 'https://example.com/file.zip' -OutFile 'file.zip'" # Windows
# HTTPリクエストの送信
curl -X GET https://api.example.com/data
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/data
圧縮とアーカイブ¶
ファイルの圧縮・展開¶
# tar(macOS/Linux)
tar -czf archive.tar.gz folder/ # フォルダを圧縮
tar -xzf archive.tar.gz # 圧縮ファイルを展開
tar -tzf archive.tar.gz # 圧縮ファイルの内容を確認
# zip
zip -r archive.zip folder/ # フォルダをzip圧縮
unzip archive.zip # zipファイルを展開
unzip -l archive.zip # zipファイルの内容を確認
# Windows固有
powershell -Command "Compress-Archive -Path 'folder' -DestinationPath 'archive.zip'"
powershell -Command "Expand-Archive -Path 'archive.zip' -DestinationPath '.'"
権限とセキュリティ¶
ファイル権限(macOS/Linux)¶
# 権限の確認
ls -l file.txt
# 権限の変更
chmod 755 file.txt # 所有者:読み書き実行、その他:読み実行
chmod u+x script.sh # 所有者に実行権限を追加
chmod go-w file.txt # グループとその他から書き込み権限を削除
# 所有者の変更
chown user:group file.txt # ファイルの所有者とグループを変更
sudo chown root:root file.txt # 管理者権限で変更
# 権限の数値表記
# 4: 読み込み(r)
# 2: 書き込み(w)
# 1: 実行(x)
# 例:755 = 4+2+1, 4+1, 4+1 = rwxr-xr-x
管理者権限¶
# 管理者権限でコマンドを実行
sudo command # macOS/Linux
runas /user:Administrator command # Windows
# 管理者権限でシェルを起動
sudo -i # macOS/Linux
runas /user:Administrator cmd # Windows
環境変数¶
環境変数の確認と設定¶
# 環境変数の確認
env # すべての環境変数を表示(macOS/Linux)
set # すべての環境変数を表示(Windows)
echo $PATH # PATH変数を表示(macOS/Linux)
echo %PATH% # PATH変数を表示(Windows)
# 環境変数の設定
export VAR_NAME="value" # macOS/Linux(一時的)
set VAR_NAME=value # Windows(一時的)
# 永続的な環境変数の設定
echo 'export VAR_NAME="value"' >> ~/.bashrc # Linux
echo 'export VAR_NAME="value"' >> ~/.zshrc # macOS(zsh)
setx VAR_NAME "value" # Windows(永続的)
便利なコマンド一覧¶
ファイル操作¶
# ファイルサイズでソート
ls -lS # 大きい順
ls -lSr # 小さい順
# 更新日時でソート
ls -lt # 新しい順
ls -ltr # 古い順
# ファイル数のカウント
ls | wc -l # カレントディレクトリのファイル数
find . -type f | wc -l # サブディレクトリも含めたファイル数
# 重複ファイルの削除
sort file.txt | uniq # 重複行を削除
sort file.txt | uniq -d # 重複行のみを表示
sort file.txt | uniq -c # 各行の出現回数を表示
テキスト処理¶
# 行数、単語数、文字数のカウント
wc file.txt # 行数、単語数、文字数
wc -l file.txt # 行数のみ
wc -w file.txt # 単語数のみ
wc -c file.txt # 文字数のみ
# テキストの置換
sed 's/old/new/g' file.txt # oldをnewに置換
sed 's/old/new/g' file.txt > new_file.txt # 結果を新しいファイルに保存
# 列の抽出
cut -d',' -f1 file.csv # CSVファイルの1列目を抽出
awk -F',' '{print $1}' file.csv # awxを使った列の抽出
# ファイルの比較
diff file1.txt file2.txt # ファイルの差分を表示
comm file1.txt file2.txt # ソート済みファイルの比較
システム監視¶
# リアルタイムでプロセス監視
top # macOS/Linux
htop # Linux(より見やすい)
taskmgr # Windows(タスクマネージャー)
# ディスク使用量の監視
watch df -h # ディスク使用量をリアルタイム監視
iostat 1 # I/O統計を1秒間隔で表示
# ログファイルの監視
tail -f /var/log/system.log # ログファイルをリアルタイム監視
tail -f log.txt | grep "ERROR" # エラーメッセージのみを監視
便利なショートカット¶
# 履歴操作
history # コマンド履歴を表示
!! # 直前のコマンドを再実行
!n # n番目のコマンドを再実行
!string # stringで始まるコマンドを再実行
# タブ補完
# Tabキーを押すとファイル名やコマンド名を補完
# カーソル移動
# Ctrl + A: 行の先頭に移動
# Ctrl + E: 行の末尾に移動
# Ctrl + U: カーソルから行の先頭までを削除
# Ctrl + K: カーソルから行の末尾までを削除
# Ctrl + L: 画面をクリア
# プロセスの制御
# Ctrl + C: 実行中のプロセスを停止
# Ctrl + Z: プロセスを一時停止
# bg: バックグラウンドで再開
# fg: フォアグラウンドで再開
スクリプト作成の基礎¶
シェルスクリプト(macOS/Linux)¶
#!/bin/bash
# backup.sh - バックアップスクリプトの例
# 変数の定義
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
# バックアップの実行
echo "バックアップを開始します..."
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"
if [ $? -eq 0 ]; then
echo "バックアップが完了しました: backup_$DATE.tar.gz"
else
echo "バックアップに失敗しました"
exit 1
fi
# 古いバックアップファイルの削除(7日より古いもの)
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
echo "古いバックアップファイルを削除しました"
# スクリプトの実行
chmod +x backup.sh # 実行権限を付与
./backup.sh # スクリプトを実行
バッチファイル(Windows)¶
@echo off
REM backup.bat - バックアップスクリプトの例
REM 変数の定義
set SOURCE_DIR=C:\Users\user\Documents
set BACKUP_DIR=C:\Backup
set DATE=%date:~0,4%%date:~5,2%%date:~8,2%
REM バックアップの実行
echo バックアップを開始します...
powershell -Command "Compress-Archive -Path '%SOURCE_DIR%' -DestinationPath '%BACKUP_DIR%\backup_%DATE%.zip'"
if %errorlevel% equ 0 (
echo バックアップが完了しました: backup_%DATE%.zip
) else (
echo バックアップに失敗しました
exit /b 1
)
REM 古いバックアップファイルの削除(7日より古いもの)
forfiles /p "%BACKUP_DIR%" /m backup_*.zip /d -7 /c "cmd /c del @path"
echo 古いバックアップファイルを削除しました
開発関連コマンド¶
Git(バージョン管理)¶
# Gitの初期設定
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# リポジトリの作成・クローン
git init # 新しいリポジトリを作成
git clone https://github.com/user/repo.git # リポジトリをクローン
# 基本的なGit操作
git status # ファイルの状態を確認
git add file.txt # ファイルをステージング
git add . # すべての変更をステージング
git commit -m "コミットメッセージ" # コミット
git push origin main # リモートリポジトリにプッシュ
git pull # リモートから変更を取得
# ブランチ操作
git branch # ブランチ一覧
git branch new-feature # 新しいブランチを作成
git checkout new-feature # ブランチを切り替え
git checkout -b new-feature # ブランチを作成して切り替え
git merge new-feature # ブランチをマージ
Python関連¶
# Pythonのバージョン確認
python --version
python3 --version
# パッケージ管理
pip install package_name # パッケージのインストール
pip list # インストール済みパッケージ一覧
pip freeze > requirements.txt # 要件ファイルの作成
pip install -r requirements.txt # 要件ファイルからインストール
# 仮想環境
python -m venv myenv # 仮想環境の作成
source myenv/bin/activate # 仮想環境の有効化(macOS/Linux)
myenv\Scripts\activate # 仮想環境の有効化(Windows)
deactivate # 仮想環境の無効化
# Pythonスクリプトの実行
python script.py # スクリプトの実行
python -m module_name # モジュールの実行
python -c "print('Hello World')" # ワンライナー実行
Node.js関連¶
# Node.jsのバージョン確認
node --version
npm --version
# パッケージ管理
npm init # package.jsonの作成
npm install package_name # パッケージのインストール
npm install -g package_name # グローバルインストール
npm install --save-dev package_name # 開発依存関係
npm list # インストール済みパッケージ一覧
npm update # パッケージの更新
# スクリプトの実行
npm start # プロジェクトの開始
npm test # テストの実行
npm run build # ビルドの実行
トラブルシューティング¶
よくある問題と解決法¶
# コマンドが見つからない場合
which command_name # コマンドの場所を確認(macOS/Linux)
where command_name # コマンドの場所を確認(Windows)
echo $PATH # PATH環境変数を確認
# 権限エラーの場合
sudo command # 管理者権限で実行(macOS/Linux)
chmod +x script.sh # 実行権限を付与
# ディスク容量不足の場合
df -h # ディスク使用量を確認
du -sh * | sort -hr # ディレクトリサイズを大きい順で表示
find . -type f -size +100M # 100MB以上のファイルを検索
# プロセスが応答しない場合
ps aux | grep process_name # プロセスIDを確認
kill -9 PID # 強制終了
# ファイルが見つからない場合
find / -name "filename" 2>/dev/null # システム全体から検索(エラーを非表示)
locate filename # ファイル名データベースから検索
ログの確認¶
# システムログの確認
tail -f /var/log/syslog # Linux
tail -f /var/log/system.log # macOS
Get-EventLog -LogName System -Newest 50 # Windows(PowerShell)
# アプリケーションログ
tail -f /var/log/nginx/access.log # Webサーバーのアクセスログ
tail -f /var/log/nginx/error.log # Webサーバーのエラーログ
journalctl -u service_name -f # systemdサービスのログ(Linux)
学習のコツとベストプラクティス¶
効率的な学習方法¶
コマンドを少しずつ覚える: 毎日1-2個の新しいコマンドを覚える
マニュアルを読む:
man command(macOS/Linux)やcommand /?(Windows)でヘルプを確認エイリアスを活用: よく使うコマンドに短縮名を付ける
履歴を活用: 過去のコマンドを再利用する
スクリプト化: 繰り返し作業は自動化する
エイリアスの設定例¶
# ~/.bashrc または ~/.zshrc に追加(macOS/Linux)
alias ll='ls -la'
alias la='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias h='history'
alias c='clear'
# PowerShell profile(Windows)
Set-Alias ll Get-ChildItem
Set-Alias la Get-ChildItem
function .. { cd .. }
function ... { cd ../.. }
セキュリティのベストプラクティス¶
# 安全なファイル権限
chmod 600 ~/.ssh/id_rsa # 秘密鍵は所有者のみ読み書き可能
chmod 644 ~/.ssh/id_rsa.pub # 公開鍵は所有者のみ書き込み可能
# 安全なパスワード管理
# パスワードをコマンドライン引数で渡さない
# 環境変数や設定ファイルを使用
# ログの定期確認
grep "Failed password" /var/log/auth.log # 失敗したログイン試行の確認
まとめ¶
CLIは、開発者にとって必須のスキルです。この章で学習した内容:
基本概念: ターミナル、プロンプト、パスの理解
ファイル操作: 作成、コピー、移動、削除の基本操作
テキスト処理: 検索、フィルタリング、編集の方法
システム管理: プロセス、ネットワーク、権限の管理
開発支援: Git、Python、Node.jsなどの開発ツール
自動化: スクリプト作成による作業の効率化
トラブルシューティング: 問題の診断と解決方法
CLIをマスターすることで、効率的な開発環境を構築し、自動化により生産性を大幅に向上させることができます。
次のステップ¶
高度なシェルスクリプト: 条件分岐、ループ、関数の活用
正規表現: 高度なテキスト処理とパターンマッチング
DevOps: CI/CD、Docker、Kubernetesなどのツール
サーバー管理: SSH、cron、systemdなどの管理機能
セキュリティ: ログ監視、侵入検知、脆弱性スキャン
毎日少しずつCLIを使うことで、自然にスキルが身についていきます。まずは基本的なファイル操作から始めて、徐々に高度な機能を学習していってください。