Windowsで使えるターミナルとシェルのまとめ

  • 367
    いいね
  • 5
    コメント

Windowsで使えるターミナルとシェルのまとめ

Windowsで使えるターミナルとシェルをまとめてみた。
Windowsでも選択肢は意外と多い。
ターミナルとシェルの組み合わせで自分好みの環境を構築できるだろう。

ターミナルとは?

ターミナルとは、ターミナルエミュレータのことである。
端末エミュレータやコンソールとも呼ばれる。
黒い画面で、テキストがずらずらと表示されるアレである。
ただし、画面に表示されるコマンド文字列などはインタープリタの機能である。
外側の部分だけがターミナルと言われる。
ターミナルは画面の見た目や操作性などを担当しているのだ。
ターミナルだけでは何もできないので、シェルと一緒に配布されていることが多い。

ターミナルについて、詳しくはWikipediaを参照されたし。
端末エミュレータ - Wikipedia
コンソール - Wikipedia

代表的なターミナル: xterm, Terminal(Mac), iTerm2(Mac), Win32コンソール, mintty
参考: List of terminal emulators - Wikipedia

PuTTYやTeraTermはターミナルというより、SSHクライアントである。
本体(ターミナルソフト)+通信ソフト+暗号化ソフトの組み合わせで出来ている。

ターミナルを入れ替えて改善する項目

背景画像&透過、コピペやドラッグアンドドロップの動作、タブ化、フォントなど

シェルとは?

ターミナルが外側だとすれば、シェルは中身だ。
更にその中心部にはカーネルと呼ばれるOSの中心機能がある。
広義には、カーネルとのインターフェイスを担うソフトウェア全般を指すが、ここではコマンドラインインタプリタのことと限定する。
コマンドラインから他のアプリを起動させたり、終了させたり、入出力をリダイレクトさせたりするのがシェルである。
シェルスクリプトやバッチファイルも実行できる。

シェルについて、詳しくはWikipediaを参照されたし。
シェル - Wikipedia
コマンドラインインタプリタ - Wikipedia
コマンドプロンプト - Wikipedia

代表的なシェル: bash, zsh, csh, cmd.exe(Win), PowerShell(Win)
参考: List of command-line interpreters - Wikipedia

シェルを入れ替えて改善する項目

パスの指定方法(/が使える)、スクリプトの構文、コマンド補完など
bashを覚えておけば、linux, win, macなどの環境で同じように使える。
あとは大抵Unix風コマンドが内包されていたり、同梱されたりする。

Windowsで使えるターミナル環境

mintty

mintty - Wikipedia
mintty project
MSYS2, Cygwin、PuTTYなどで使われている。

  1. xtermと互換性がある。
  2. 256色(8bit)、TrueColor(16bit)をサポート。
  3. UTF-8をサポート。
  4. Windows IMEをサポート。多バイト文字を使える。
  5. SIXELで画像が表示できる。
  6. フルスクリーンになる。
  7. コピペが簡単。
  8. テキストやファイル、フォルダのドラッグ&ドロップに対応。
  9. Ctrl+clickでURLを開ける。
  10. 背景を透過できる。Windows Glassが使える。
  11. レジストリを汚さない。
  12. 小さな容量、素早いスクロール。
  13. etc...

動作が軽くてよい。
とりあえずこれを使っておけば間違いがない。

使用する場合はMSYS2(bash)を使うことになるだろう。
MSYS2ではパッケージ管理としてpacmanが使える。

minttyでタブ機能がほしい場合はtmuxを導入するとよい。
tmuxの使い方

ConEmu

ConEmu
設定項目が多く、自由度が高い。
タブが使えるのも便利。
cmderでも使われている。
portable版がある。

cmder

cmder.net
多機能コンソールエミュレータのパッケージ。
ConEmu(ターミナル)とclink(シェル)とgit-for-windows(各種コマンド)からなる。
最低限の機能を備えたmini版と各種コマンドを含んだfull版がある。

  1. タブが使える
  2. タブの入力をロックできる
  3. 履歴を検索できる
  4. aliasを設定できる
  5. Monokaiカラー
  6. PowerShellモードがある
  7. etc...

日本語の表示が崩れるので、設定を変える必要がある。
setting -> font -> monospaceのチェックを外す。

ConEmuとはもはや別物らしい。
ConEmuのショートカットが嫌いな場合はcmderを使うとよいらしい。

ConsoleZ

ConsoleZ
Console2の後継。
ConEmuはごちゃごちゃしていると思った人にはConsoleZがオススメ。
見た目も操作も手軽に設定できる。

ckw-mod

ckw-mod
ckwの後継。
ckwは日本人が開発したので日本語の扱いはバッチリ。
ただし、Unicodeには未対応。
背景画像設定、透過、シェル指定とやりたいことは一通りできる。

Hyper

Hyper
Electron製のターミナル。
HTML5とJavaScriptで拡張できる。
日本語には未対応。
x86版も未対応。

Qonsole

Qonsole
Quakeライクなターミナル。
ショートカットキーでスライド表示されるのが特徴。
シェルの指定も可能。

MobaXterm

MobaXterm
どちらかというとSSHクライアントよりではあるが、bashが使えるようなので紹介しておく。
BusyBoxベースで、Cygwinとの連携とも可能で、とても高機能なターミナルであると言える。
BusyBoxがネックになることがあるので実際の運用では注意されたし。

MobaXterm: Windowsでのcygwinに代わるターミナル環境

CygTerm

Cygwin環境必須だが、CygTermというものがある。
TeraTerm、PuTTY、Poderosaなどのログインシェルを指定できないターミナルをCygwinの環境へ接続するソフトだ。

TeraTermなどに同梱されていることが多い。
TeraTermはメニューからFile => Cygwin connection [ALT + G]で使用できる。
PuTTY+Cygterm

SSH/シリアル通信 クライアント

どのターミナルからでもOpenSSHなどは使えるが、手軽さや使い勝手が異なる。
SSHやシリアル通信だけ行う場合は、下記をオススメする。
RLogin
Poderosa
TeraTerm
KiTTY(PuTTY)

Windowsで使えるシェル環境

MSYS2

MSYS2
MSYS2のターミナルはminttyでシェルはbashが設定されている。
MSYS2さえ導入すれば、それだけでUnix風のコマンドライン環境が揃う。
パッケージマネージャとしてpacmanを採用している。
足りないコマンドがあればpacman -S [name]ですぐに導入できる。

Git for Windows

git-for-windows
msysGitの後継。
2.x以降でMSYS2ベースに変更された。
gitが使えるbash環境が提供されている。
windowsでgitを使っているなら大抵入っているはず。
これを普通に使うように設定してもいいだろう。

下記で詳しく説明されている。
Git for Windows で日本語を使いたい

Cygwin

Cygwin
MSYSの派生元。
非常にLinuxライクなので、それなりに詳しくないと使えない。
パッケージマネージャ(インストーラー)が使いにくいのでapt-cygスクリプトの導入は必須。
Cygwinでビルドしたものは、cygwin1.dllに依存するという欠点がある。
もちろんCygwinのbashからMinGW環境を使うことも可能。

64bit版は何か問題があったはずなので、32bit版を推奨する。

Cygwinを使うくらいならVMでDebianを入れたほうがいい。
Debian 8 "Jessie" を Virtualbox にインストールしたメモ

パッケージ選択の難しさはあるが、スクリプトファイルさえ用意しておけば便利。
Cygwinの環境を複数作ったり、パッケージのインストールを自動化したりする(たった一つのスクリプトファイルだけで…魔法のように…Linuxライク環境が構築できる!)

gnupack

CygwinとEmacsを導入できるパッケージ。
色々カスタマイズされているようなので、素のCygwinにEmacsを組み合わせる方がわかりやすいと思う。

Babun

Cygwinをベースに独自にカスタマイズされたパッケージ。
oh-my-zsh環境などが最初から揃っている。
パッケージマネージャとしてapt-cygとpactが使える。
自分でdotfilesを管理している場合は素のCygwinを使うほうがよい。

PowerShell

WIndows7からデフォルトで入っているシェル。
cmd.exeの後継。
.NETライブラリも使えるなどかなりすごい。
でもそこまでするならVisualStudioで作ったほうがいいと思う。
あとスクリプトを覚えてもWindowsでしか使えないのが残念。
オープンソース化されたのでLinuxでも使えるようになった。

最初から一部のコマンド(lsなど)が使えるのはよい。
起動が遅いので敬遠しがち。

Bash on Ubuntu on WIndows

Windows10のアップデートで導入されたLinuxサブシステム上で動くシェル。
Windows上で使うのでどうしても癖がある。
余計なことに悩まず使いたいならVMでLinuxを使うことをオススメする。

Bash on Ubuntu on Windowsをインストールしてみよう!

BusyBox

BusyBox - Wikipedia
Almquist Shell - Wikipedia
標準Unixコマンドを単一ファイルで提供する素晴らしいソフト。
busybox sh -lでashを使用できる。
ashは軽量低機能が特徴のシェルなので、普段使いには向かない。
Windowsで使うには、コンパイルが必要。
組み込みLinuxではよく使われている。

gow

Gnu on Windows - Wikipedia
多数のGNUコマンドが使える。
シェルはbash。

UnxUtils

UnxUtils - Wikipedia
多数のGNUコマンドが使える。
ZIPを解凍してパスを通すだけ。
shが付いているが詳細は不明。
残念ながら日本語やUTF-8には未対応。

clink

bash風なcmd.exeの代替ソフトウェア。
cmderでも使用されている。
Luaで拡張できる。

NYAGOS

NYAOS.ORG
Nihongo Yet Another GOing Shell。
珍しい和製シェル。
Luaで拡張できる。

その他

環境によっては役に立つソフト

GnuWin32

GnuWin
grepやsedなどのコマンドだけほしい場合はこれでもよい。
シェルはついていない。

winpty

minttyでWindowsネイティブの対話型コマンドを共存させる。
sqlite3, node.js, gitなどがうまく動かなかったり、文字化けする場合はwinptyの出番。
winpty powershellなどとして使う。

cocot

ttyの前に割り込んで文字コード変換を行う。
cocot bash, cocot ssh, cocot pingとして使う。

iconv

文字コード変換を行う。
Windows系コマンドで文字化けが発生した場合、S-JISとUTF-8を変換できる。
下記のようにして使うとよい。

function wincmd()
{
    CMD=$1
    shift
    $CMD $* 2>&1 | iconv -f CP932 -t UTF-8
}
alias ipconfig='wincmd ipconfig'

nkf

iconv同様、文字コード変換を行う。
コンパイルが必要。

ターミナルとコンソールの違い

ターミナル(エミュレータ)もコンソールもどちらも同じようで、混同しやすい。
よく言われているのは、Linux起動時に表示される黒い画面がシステムコンソールで、立ち上がった後に開くのがターミナルエミュレータである。
カーネルとの親密度により区別される。
パソコンにおいてはほぼ同一なので、どちらでも通じるし、完全な間違いとも言いがたい。

なぜターミナルエミュレータと言われるのか?

古くはメインフレームの時代、ホストコンピュータと繋いで、作業を行う制御装置のことをターミナル(端末)と呼んだ。
これはホストから見たケーブルの終端(ターミナル)に繋がっていたからだ。
ちなみにホストに直接つながっていた制御装置のことを演算卓(コンソール)と呼んだ。
シリアルケーブルで接続されたものは特にシリアルコンソールと呼んだ。

時は流れ、パーソナルコンピュータ(以下PC)が登場した。
PCは端末として使えるようにディスプレイとキーボードを備えていた。
システムとコンソールが一体化してしまったのである。
そしてソフトウェア的にVT100などのシリアルコンソールをエミュレートした仮想端末が登場した。
この仮想端末(ターミナルエミュレータ)がGUI越しにローカルホストへ繋がり、ネットワーク越しにホスト(サーバー)へも繋がるようになり、現在の形式になったのである。

CygwinとMSYSとMinGWについて

CygwinMSYS2 + MinGWの環境がよく比較されているので、それらを簡単にまとめてみた。

Cygwin

Windows上で完全なPOSIX環境を目指して作成されたソフトウェアおよびコマンド群およびシェル環境。
cygwin1.dllがPOSIXシステムコールをエミュレーションしている。
POSIXシステムコールを利用するものはcygwin1.dllに依存していまうという問題がある。

ターミナルはmintty、シェルはbash、その他に多数のコマンドが含まれている。
GCCやPerlなどもインストーラーで組み込むことができる。

MSYS2

MinGWを補う目的で作られたソフトウェアおよびコマンド群およびシェル環境。

ターミナルはmintty、シェルはbash、その他に多数のコマンドが含まれている。
pacmanというパッケージマネージャを使用できる。
pacmanでMinGW環境をインストールすることができる。

MinGW

Windowsで利用できるGCCコマンド群である。
WinAPIヘッダーやlibcなどのライブラリを含む。

MinGW自体はコマンドのパッケージなので、CygwinやMSYS2から利用できる。
Cygwinから利用する場合は、cygwin1.dll非依存のソフトをビルドできる。
ただし、POSIXシステムコールは利用できない。

MinGWのインストーラーからMSYSを導入できるが、MSYS2ではなく、古い環境なのでオススメできない。
MSYS2からMinGWを導入するのが最もスマートなやり方。

【実践編】MSYS2 の環境構築

MSYS2が簡単に環境を構築できることがわかった。
シェルがbashなので、応用が効くのも利点だ。
以下はそのやり方の記録。

内容が膨らんできたので別ページに分離。
MSYS2で快適なターミナル生活

【番外編】VSCodeおよびAtomでターミナル環境

エディタ環境から簡単にターミナルを起動することができる。
Visual Studio Codeは統合ターミナルといって初めからシェルを呼びだす機能が搭載されている。
AtomからはPlatformIO IDE Terminalというパッケージが使える。

MSYS2のbashを呼びだすには下記のように設定すればよい。
必要に応じて環境変数も設定しておくとよい。

Visual Studio Code

"terminal.integrated.shell.windows": "C:\\msys64\\user\\bin\\sh.exe",
"terminal.integrated.shellArgs.windows": ["--login", "-i"]

PlatformIO IDE Terminal

Shell Override
C:\msys64\user\bin\sh.exe

Shell Arguments
--login -i