LoginSignup
966
1042

More than 3 years have passed since last update.

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

Last updated at Posted at 2015-09-22

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

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

ターミナルとは?

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

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

PuTTY や TeraTerm はターミナルというより、SSH クライアントである。
シェルを切り替えることができない場合が多い。

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

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

シェルとは?

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

代表的なシェル: 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、Git for Windows、 Cygwin、PuTTY などで使われている。
mintty 単体でのバイナリのダウンロードはないので、上記のソフトウェアを入れるか WSLtty を使う。

  1. xterm互換。
  2. コピペが簡単。
  3. テキストやファイル、フォルダのドラッグ&ドロップに対応。
  4. CTRL + CLICK でファイルやURLを開ける。
  5. 高速なレンダリング、スクロール、キーボードフィードバック。
  6. 背景テスクチャ、ウィンドウ透過。
  7. 複数モニター、DPIサポート。
  8. レジストリを汚さない。
  9. 二次フォント。(CJKのフォントなど)
  10. etc...

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

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

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

minttyにはwinptyが必要という問題がある。
mintty Tips

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がオススメ。
見た目も操作も手軽に設定できる。

Hyper

Hyper
Electron製のターミナル。
HTML5とJavaScriptで拡張できる。

爆速でターミナルをポケモンにする
MSYS2とHyperでピカチュウを愛でてみた

Terminus

Terminus
Electron製。
HyperよりWindows向き。

Alacritty

Rust製。
GPUを使うので描画が爆速。
日本語入力に難あり。

Fluent Terminal

C# UWP製。

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ターミナルソフト + Rlogin が最高すぎる!!

Windowsで使えるシェル環境

MSYS2

MSYS2
MSYS2 - SourceForge
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同様、文字コード変換を行う。
コンパイルが必要。

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を導入するのが最もスマートなやり方。

用語の説明

Console

コンソール、システムコンソール、制御卓。
元々は大型コンピュータ(メインフレーム、汎用機)の制御卓のこと。
コンピュータへの距離が近い物理ターミナルのこと。
一般的には単なる「制御装置」の意味で使われる。

コンソール - Wikipedia

Terminal

ターミナル、端末装置、端末。
パソコンが無かった時代はホストコンピュータへ接続して作業していた。
その中央のコンピュータから見た、ケーブル末端の入出力装置のことをターミナル(端末装置)と呼んだ。
コンソールとの違いは、中央との親密度。

端末 - Wikipedia

Teleprinter, Teletypewriter, Teletype, TTY

テレタイプ端末、遠隔タイプライター。
二地点間を回線でつなぎ、相手にタイプの内容を出力できるようにしたタイプライターのこと。
メインフレームやミニコンとつないでシリアルコンソールとしても利用された。

テレタイプ端末 - Wikipedia

Serial Console

シリアルコンソール。
キーボードとディスプレイが一体になった機器のこと。
キーボードとディスプレイを接続しないで運用するミニコンやサーバーにシリアルケーブルで接続したコンソールのこと。
ビデオ表示端末(Video Terminal)のVT100が有名。

Kernel

カーネル。
OSの中核部分。
ハードウェアの管理やプロセスの管理を行う。

Shell

シェル。
カーネルへアクセスするためのソフトウェア。
ユーザーの操作・命令をカーネルに伝え、カーネルがハードウェアを使って処理を行う。
カーネルの周りにある殻のようなイメージからシェルと呼ばれる。

CUIベースのシェルをコマンドラインシェル、GUIベースのシェルをグラフィカルシェルと呼ぶ。
CUIベースではコマンドラインインタプリタの形態となる。

シェル - Wikipedia
Unixシェル - Wikipedia
コマンドラインインタプリタ - Wikipedia
コマンドプロンプト - Wikipedia

Virtual Console

仮想コンソール(VC)、仮想ターミナル(VT)、擬似端末、コンソール。
Linuxにおけるコンソール機能をエミュレートするための仕組み。
ハードウェア => カーネル => シェル => 仮想コンソールサービス => 仮想コンソール(or 仮想ターミナル) という階層構造になっている。
Linux起動時に表示される黒い画面は仮想コンソールである。

仮想コンソール - Wikipedia

仮想コンソールは複数用意されており、CUIコンソールがtty1~tty6, GUIコンソールがtty7~となっている。
Ctrl+Alt+F1で黒い画面となり、Ctrl+Alt+F7でGUIに戻る。

Linuxにおけるttyデバイスは仮想コンソールやシリアルコンソールにつながっている。
ttyの名前からわかるようにTeletypeの仕組みが由来である。
仮想コンソールはgettyというソフトウェアでつながっている。
gettyはget ttyという意味で、いくつか派生がある(mingetty, agetty, mgetty, etc...)。

/dev/tty1 起動時の画面などで使われる仮想CUIコンソール
/dev/tty7 GUIを使っている場合に割り当てられる仮想GUIコンソール
/dev/ttyS1 RS232-Cシリアルケーブル等でつながっている機器(シリアルコンソール)
/dev/ttyUSB1 USBシリアルケーブルでつながっている機器(シリアルコンソール)
/dev/pts/0 telnetやsshで接続している仮想ターミナル

つまり、/dev/pts/0へ入力してやると、つながっている相手側の画面に出力することができる。

ttyとかptsとかについて確認してみる
シリアルポート - Wikipedia
疑似端末 - Wikipedia

Terminal Emulator

ターミナルエミュレータ、仮想ターミナル、ターミナルソフトウェア、ターミナル。
ターミナルをソフトウェア的に再現したもの。

端末エミュレータ - Wikipedia

【実践編】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
966
1042
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
966
1042