僕はエンジニアなので黒い画面をよく使うことがあります
黒い画面とはターミナルやコマンドライン、コマンドプロンプトと呼ばれています。
プロジェクトでCurlコマンドを使ってAPIを叩くことがあるのですが、このときMacとWindowsで動作が異なっており、さらにWindowsでもコマンドプロンプトとPowershellで異なっていたので今回まとめてみようと思います。
PowerShellとコマンドライン(cmd)の違いとは?なぜ別なのか?
✅ 結論:目的・設計思想が根本的に異なるから
🧱 背景:Windowsの2つの「シェル」
項目 コマンドプロンプト(cmd.exe) PowerShell
開始時期 1980年代(MS-DOS由来) 2006年(Windows PowerShell v1.0)
主な目的 バッチ処理や簡易システム操作 オブジェクトベースの自動化とスクリプト
実行結果 文字列(テキスト) .NETオブジェクト
互換性 MS-DOSと高い互換性 UNIXシェルとはやや異なる設計
標準構文 copy, dir など Get-ChildItem, Get-Process など
🤔 なぜ「PowerShell」が作られたのか?
✔ CMDの限界
for や if 文が独特で使いづらい
文字列しか扱えないため、構造化データ(JSON/XML/CSVなど)の操作が大変
エラー処理も弱く、スクリプトの拡張性に乏しい
✔ PowerShellの誕生理由
システム管理をより強力に自動化するため
.NETの機能を活かし、オブジェクト単位で処理できるシェルが必要だった
UNIX系シェルの思想を参考に、本格的なスクリプト言語として設計された
💥 実際に混乱するポイント:たとえば curl
コマンド cmd PowerShell(v5以前)
curl curl.exe 実行 実は Invoke-WebRequest の別名
echo hello > file.txt ファイルに文字列を出力 同じように見えて PowerShell では挙動が微妙に異なることも
※ PowerShell 7 では curl は curl.exe を使うようになって改善されています。
AIによるとこんな回答だった。
簡単な対応だとコマンドプロンプトでいいよとのことだった。
自動化みたいに難しいことをするなら確かにPowershellで良さそう。
Curlコマンドで使ってもらうAPIを公開していますが、WindowsでCurlコマンドを共有して使いたいシーンが出てきました
MacのターミナルとWindowsのコマンドプロンプトで少し挙動が異なるため、OS差分による使いづらさが発生して悲しい気持ちに。
コマンドプロンプトだとダブルクォーテーションをエスケープしないとならないため、powershellを使うことにしました。
まとめ
🤔 どれを使えばいいの?
利用目的 おすすめ
Windowsの最新管理タスクを自動化 ✅ PowerShell
古いWindows向けの互換性重視 ✅ cmd
Linux/macOSでの開発・サーバー管理 ✅ bash/zsh
古いからと言ってすぐには切り離せないのはよくある話ですね!