Unix/Linuxの世界では、コマンドラインからシステムを操作するための「シェル」と呼ばれるプログラムが重要な役割を果たしています。
その中でも、csh(C Shell、シーシェル)は、1970年代に開発された歴史あるシェルの一つです。
この記事では、cshの基本的な意味から、歴史、特徴、他のシェルとの違い、現在の利用状況まで、IT初心者にもわかりやすく解説します。
csh(C Shell)とは
csh(C Shell、シーシェル)は、Unix系オペレーティングシステム用のコマンドラインインターフェース(CLI)を提供するシェルプログラムです。
シェルとは、ユーザーがキーボードから入力したコマンドを解釈し、オペレーティングシステム(OS)に伝えて実行するためのプログラムです。
ユーザーとOSの核心部分(カーネル)との間の通訳者のような役割を果たします。
cshの最大の特徴は、プログラミング言語C(C言語)に似た構文を持つことです。
このため、C言語に慣れ親しんだプログラマーにとって使いやすいシェルとして設計されました。
歴史
開発の背景
cshは、1970年代後半にカリフォルニア大学バークレー校(UC Berkeley)の大学院生だったビル・ジョイ(Bill Joy)によって開発されました。
ビル・ジョイは、後にSun Microsystemsの共同創業者となった人物で、BSDUnixの開発にも大きく貢献しました。
リリース
cshは、1978年に2BSD(Second Berkeley Software Distribution)の一部として初めて配布されました。
当時、Unix標準のシェルであったBourne Shell(sh)は、基本的な機能しか持っていませんでした。
cshは、対話型シェルとしてより便利な機能を多数追加したシェルとして登場しました。
開発目標
cshの主な設計目標は、以下の2つでした。
- C言語に似た構文:Unixシステムの多くがC言語で書かれているため、システム全体と一貫性のあるコマンド言語を提供する
- 対話型利用の改善:ユーザーがターミナルでコマンドを入力する際に、より便利で高速に作業できるようにする
cshの主な特徴
cshは、当時としては革新的な多くの機能を導入しました。
1. C言語風の構文
cshの構文は、C言語に似せて設計されています。
制御構造の例:
C言語:
if (条件) {
処理
}
csh:
if (条件) then
処理
endif
キーワード、括弧の使用、組み込みの式の文法、配列のサポートなど、C言語の影響を強く受けています。
2. ヒストリ機能(コマンド履歴)
cshは、過去に実行したコマンドを記憶し、簡単に呼び出せるヒストリ機能を初めて導入しました。
使用例:
!!:直前のコマンドを再実行!25:25番目のコマンドを再実行!-2:2つ前のコマンドを再実行
この機能は、後に他のシェル(bash、zshなど)にも採用され、現在では標準的な機能となっています。
3. エイリアス機能
エイリアスとは、長いコマンドや複雑なコマンドに短い別名を付ける機能です。
例:
alias ll 'ls -la'
この設定により、llと入力するだけでls -laが実行されます。
4. チルダ記法
チルダ記法とは、ホームディレクトリを~(チルダ)で表記できる機能です。
例:
cd ~/documents
この機能も、現在では多くのシェルで標準となっています。
5. ジョブコントロール
複数のプログラムを同時に実行し、バックグラウンドとフォアグラウンドで切り替える機能です。
例:
command & # バックグラウンドで実行
6. コマンド補完
ファイル名やコマンド名を途中まで入力してTabキーを押すと、自動的に補完してくれる機能です。
(この機能は、tcshで追加されました)
tcsh(拡張版C Shell)
cshには、機能を拡張した改良版であるtcsh(Tab C Shell、ティーシーシェル)があります。
tcshは、TENEX OSのコマンド補完機能やコマンドライン編集機能を取り入れたもので、名前の”t”はTENEXに由来します。
tcshは、cshとの後方互換性を保ちながら、以下の機能を追加しました。
- ファイル名の自動補完
- コマンドの自動補完
- コマンドライン編集
- スペル修正
現在では、多くのシステムでcshコマンドは実際にはtcshへのシンボリックリンクになっています。
cshの問題点
対話型シェルとしては革新的だったcshですが、スクリプト言語としては多くの問題点が指摘されています。
1. 構文解析の限界
cshは、複雑なコマンドを処理する能力に限界があります。
例えば、制御構造間のパイプ接続ができません。
動作しない例:
foreach i (d*)
echo $i
end | grep something
2. 関数定義機能の欠如
cshには関数定義機能がありません。
代わりにエイリアス機能を使う必要がありますが、これには制限があります。
3. POSIX非準拠
cshは、POSIX(Unix系OSの標準仕様)に準拠していません。
このため、他のシェル(bash、shなど)で動作するスクリプトとの互換性がありません。
4. エラー処理の問題
エラーが発生した際のメッセージが不明瞭だったり、予期しない結果を生じることがあります。
批判
1996年には、Tom Christiansenによって「Csh Programming Considered Harmful」(cshプログラミングは有害と見なされる)という記事が広く配布され、cshをスクリプト言語として使用することへの批判が強まりました。
他のシェルとの比較
Bourne Shell(sh)
- 開発時期:1970年代後半(cshとほぼ同時期)
- 開発者:スティーブン・ボーン(AT&T)
- 特徴:Unix標準シェル、シンプルで基本的な機能のみ
- 構文:ALGOL 68の影響を受けた独自の構文
Bash(Bourne Again Shell)
- 開発時期:1980年代後半
- 特徴:Bourne Shellの機能拡張版、Linux標準シェル
- cshとの違い:POSIX準拠、関数定義可能、スクリプト言語として優れている
Zsh(Z Shell)
- 開発時期:1990年
- 特徴:bash、csh、kshの機能を統合、macOS Catalina以降のデフォルトシェル
- cshとの違い:より高機能で、カスタマイズ性が高い
KornShell(ksh)
- 開発時期:1980年代初頭
- 開発者:デビッド・コーン(AT&T)
- 特徴:Bourne ShellとC Shellの良い部分を統合
- cshとの違い:POSIX準拠、企業向けUnix環境で広く使用
現在の利用状況
利用の減少
cshおよびtcshは、以下の理由から利用が減少しています。
- スクリプト言語としての問題:bash、zshなどの方が優れている
- POSIX非準拠:移植性が低い
- 後発シェルの普及:bash、zshがcshの便利な機能を取り込んで普及した
現在も使われている場面
一部のシステムでは、今でもcsh/tcshが使われています。
- FreeBSD:FreeBSD 13まではrootのデフォルトシェルがtcshでした(FreeBSD 14からshに変更)
- レガシーシステム:古いシステムや、cshに慣れたユーザーが使用
- 特定の用途:C言語開発者が対話型シェルとして使用する場合
macOSでの状況
macOSでは、以下のような変遷がありました。
- Mac OS X初期:tcshがデフォルトシェル
- Mac OS X 10.3以降:bashがデフォルトシェル
- macOS 10.15(Catalina)以降:zshがデフォルトシェル
ただし、tcshは現在でもインストールされており、使用することは可能です。
使い方の基本
cshの起動
ターミナルで以下のコマンドを実行します。
csh
プロンプトが%に変わります。
基本的なコマンド例
変数の設定:
set name = "John"
echo $name
条件分岐:
if ($name == "John") then
echo "Hello, John"
endif
繰り返し処理:
foreach i (1 2 3 4 5)
echo $i
end
設定ファイル
cshには、環境をカスタマイズするための設定ファイルがあります。
.cshrc:すべてのcshシェル起動時に読み込まれる.login:ログインシェルとして起動した時に読み込まれる.logout:ログアウト時に実行される
まとめ
csh(C Shell)は、1978年にビル・ジョイによって開発された、C言語風の構文を持つUnixシェルです。
ヒストリ機能、エイリアス、チルダ記法、ジョブコントロールなど、対話型シェルとして革新的な機能を多数導入し、後のシェル開発に大きな影響を与えました。
しかし、スクリプト言語としての問題点(構文解析の限界、関数定義機能の欠如、POSIX非準拠など)が指摘され、現在ではbashやzshに取って代わられています。
それでも、cshが導入した多くの便利な機能は、現代のシェルに受け継がれており、Unixシェルの歴史において重要な位置を占めています。
C言語に慣れたプログラマーや、レガシーシステムを扱う場合には、cshの知識が役立つことがあります。
ただし、新しくシェルスクリプトを学ぶ場合は、bashやzshを選択することをお勧めします。
参考情報
この記事は、以下の信頼できる情報源を参照して作成しました。
- Wikipedia「C Shell」
- Wikipedia (English) “C shell”
- IT用語辞典 e-Words「csh」
- Qiita「シェルの歴史 総まとめ」
- Wikipedia「Unixシェル」
- FreeBSD Documentation “An Introduction to the C shell”
- Wikipedia “tcsh”
- TechTarget “What is C shell (csh)?”
最終更新日:2026年2月8日


コメント