えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

【Cmder+CygWin+Nyagos】Windows用の使いやすいターミナル

f:id:stopendy:20190114233719p:plain

お伝えしたいこと

本記事では、Windowsユーザ向けにオススメのターミナルソフトウェアを紹介したいと思います。
具体的には、CmderとCygWin (またはNyagos) の組み合わせです。

上記ソフトウェアの組み合わせによって、WindowsコマンドプロンプトPowershellが抱える以下の問題を解決できます。

  • コマンドが使いにくい。Linuxのコマンドにはよく慣れているのに...
    • Bash実行環境を追加
    • 使い慣れたgrep、less、awkなどのコマンドを実行可能に
    • パイプ(|)、シェルスクリプト、~などのシェル機能も利用可能
  • ターミナルの機能が貧弱。コピペも大変
    • MacのiTerm2に負けないデザイン性と機能性を持ちます
    • 色、透明度、ショートカットキーなどをカスタマイズ可能
  • SSH接続やファイル転送のGUI操作が面倒
    • 既存ツールをコマンドに置き換えることで、作業を効率化できます
    • Teraterm: sshコマンドが使える。コピペ時の確認メッセージ、自動ログ取得にも対応
    • WinSCP: scp、ftp、tftpコマンドなどで代用

Cmder + CygWin (またはNyagos) の構成

Cmderは、GUI部分を担います。
優れたデザインのターミナル画面と、使いやすくするための付加機能を提供します。

Cmder自身はシェル機能を持ちません。
内部でコマンドプロンプトPowershellを呼び出すことで、シェルを提供しています。
上記以外にも、CygWin(Bash) や Nyagos (コマンドプロンプトの機能追加版) とも連携することができます。

今回はCmderに対し、CygWin (またはNyagos) を組み合わせてWindowsのターミナルを使いやすくする手順を紹介します。

導入イメージ

GUI部分を担うCmderのスクリーンショットを貼ります。

画面はこんな感じです。

f:id:stopendy:20190114233719p:plain

画面を非アクティブにしたときに、少し暗くするといった設定もできます。

f:id:stopendy:20190114233712p:plain

設定すれば、Teratermのように「改行を含む文字列をコピペしたとき」に確認メッセージを出せます。

f:id:stopendy:20190114233606p:plain

設定画面もリッチです。

↓フォントの設定

f:id:stopendy:20190114233618p:plain

↓配色の設定

f:id:stopendy:20190114233623p:plain

↓Cmderと連携するシェルの設定

f:id:stopendy:20190114233614p:plain

上記画像の通り、CmderのデザインはMacのiTerm2にも負けていないと思います。

Cmderと何を組み合わせるか (CygWin or Nyagos or その他)

Cmderと組み合わせるシェルは、CygWinかNyagosのどちらかで結構です。
個人的にはCygWinがお好みですが、好みが違う方がいるかもしれないので念のため両方のやり方を紹介します。

迷った方は、とりあえず両方入れても問題ありません。
私もそうしています。
何度か使ってみて、気に入った方をメインでご利用ください。
※もし「両方不要」という方がいれば、Cmderのみを導入して単体でご利用ください

CygWinの特徴は以下の通りです。

  • Unix環境をエミュレーションする
  • ほぼ、Bash実行環境と言ってよい
  • NyagosやCmderと比べると、以下の差分がある
    • apt-cygによってLinuxパッケージを追加インストール可能 (yum/aptと似ている)
    • ディレクトリ構造がLinuxっぽい (Windowsファイルは/cygdrive配下にある)

Nyagosの特徴は以下の通りです。

  • CygWinと比べると、以下の差分がある
    • フォルダ構造はWindowsと同じ
    • apt-cyg、yum、apt相当の機能はない
  • デフォルトのコマンドプロンプトと比べると、以下の差分がある
    • ~、cd、cd - といった表現が可能
    • cd コマンドに /D オプションを付与しなくてもドライブ間を移動できる
    • ※機能上は、Nyagosはコマンドプロンプトの上位互換 (だと思います)

個人的には、/etc や /usr といったUnixらしいディレクトリを持っており、apt-cygも利用可能なCygWinが最も気に入っています。

CygWinのセットアップ

f:id:stopendy:20190114233704p:plain

ここでは、CygWinのセットアップ手順を紹介します。
Cmderとの連携設定は、「Cmderのセットアップ」にて説明します。

CygWinを導入しない場合は読み飛ばしてください。

CygWinのインストール

下記公式サイトからインストーラをダウンロードして実行します。
64bit版、32bit版がありますので、正しい方を選択してください。

https://cygwin.com/install.html

インストーラを起動したら、ウィザードに沿って以下のように選択します。

  • 5回ほど「次へ」を選択する
  • ダウンロードサイトの選択画面では、"http://ftp.iij.ad.jp" などを選択する
  • パッケージ選択画面では、以下のように選択する
    • View: Full
    • Search: パッケージ名で検索し、必要なものにチェックを入れる。最低限、★のついたものは入れる (apt-cyg導入に必要)
      • wget (Web)
      • curl (Net)
      • gcc-core (Devel)
      • gcc-g++ (Devel)
      • make (Devel)
      • openssh (Net)
      • xinetd (Net) ※telnet
      • vim (Editors)
      • git (Devel)
    • 「次へ」を2回ほど選択すると、依存関係を含めて上記パッケージをインストールする
  • 画面に従ってインストーラを終了する

これでCygWinがインストールできました。
CygWinが単体で正しく起動することを確認しておきましょう。

(任意) apt-cygのインストール

任意なのですが、ついでに便利なパッケージマネージャーであるapt-cygも入れておきましょう。
Linuxでいうyumやaptに相当するツールです。

下記コマンドで導入できます。

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
# または、 git clone https://github.com/transcode-open/apt-cyg; cd apt-cyg

chmod 755 apt-cyg
mv apt-cyg /usr/local/bin

Nyagosのセットアップ

f:id:stopendy:20190114233659p:plain

ここでは、Nyagosのセットアップ手順を紹介します。
Cmderとの連携設定は、「Cmderのセットアップ」にて説明します。

Nyagosを導入しない場合は読み飛ばしてください。

Nyagosとは

https://github.com/zetamatta/Nyagos

Go言語でプログラムされた軽量なシェルで、コマンドプロンプトに相当するものです。
詳しくは「Cmderと何を組み合わせるか」で説明していますが、Nyagosはコマンドプロンプトよりも若干機能拡張されています。

Nyagosのダウンロード

下記サイトからNyagosをダウンロードします。
64bit Windowsの場合はamd64版を、32bit Windowsの場合はi386版をダウンロードします。

https://github.com/zetamatta/Nyagos/releases

NyagosもCmderと同様、ダウンロードしたらインストール不要ですぐに使えます。

Cmderのセットアップ

f:id:stopendy:20190114233610p:plain

Cmderのインストール

下記公式サイトからCmderをダウンロードします。
Mini版とFull版がありますが、Full版を選択します。

http://cmder.net/

ダウンロードした圧縮ファイルを展開し、好きなフォルダ階層に移動します。
Cmderは、インストール無しで動作するプログラムのため、起動すればすぐに使えます。

参考までに、私はインストール不要なアプリケーション (ポータブルアプリケーション) の置き場を決めており、Documents\PortableApps\ 配下にしています。
Documents以外にも、C:\ や D:\ など候補はいくつかあると思いますので、わかりやすい場所に決めて配置しましょう。

Cmderの初期設定

Cmder.exeを起動します。

画面下部のタブバー (タブ以外の部分) を右クリックして、"Settings" を選択します (またはWindows + Alt + P)。
そしてお好みに設定します。

私のオススメ設定を以下に載せておきます。 ※設定画面内は、マウスカーソルを合わせると補足説明が出てきます。これがとても便利です

General > Size & Pos

Console buffer height: 32766

ターミナルの最大行数を増やす設定です。

General > Tab bar

Lazy tab switch: チェック外す

Cmderのタブは、Ctrl+Tabで切り替えできます (もちろんマウスクリックでも)。
デフォルトでは、Ctrlキーを離したときに画面が切り替わります。
この挙動を変更し、Ctrl+Tabキーを押したらすぐに画面が切り替わるようにします。

General > Confirm

Confirm actionsのチェックを全て外す

面倒な確認メッセージを抑止します。

Startup > Environment

以下の3行を入力しておきます。
最初の1行はすでに入っていると思います。

set PATH=%ConEmuBaseDir%\Scripts;%PATH%
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\cmd
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\usr\bin

Cmder経由でシェルを起動したときに、PATHを通すための設定です。
ここでは、Git for WindowsLinuxコマンド群 (ls、grep、less、ssh、scpなど) にPATHを通しています。
CygWinの場合は不要な設定ですが、cmd、powershell、Nyagos (後述) を使うときにはあった方が便利になります。

%ConEmuDir% などの設定ファイル中で使える環境変数について、詳細はConEmuのドキュメントを参照してください。
※Cmderは内部的にConEmuを利用している https://conemu.github.io/en/ConEmuEnvironment.html

Keys & Macro

Cmderで利用可能なショートカットキーを編集できます。
以下のように編集するのがオススメです。
右上の検索ウィンドウで「Scroll buffer」などのように検索しながら編集してみてください。

  • Scroll buffer to the top: Ctrl+Home ※ターミナルの先頭を表示
  • Scroll buffer to the bottom: Ctrl+End ※ターミナルの末尾を表示
  • Paste first line of clipboard contents: 割り当てなし ※Linux用途で使用するCtrl+Vが上書きされてしまうため
  • Copy: All active console text output: Ctrl+Shift+A ※ターミナル全体の文字列をコピー
  • Find text in active console: Ctrl+Shift+F ※文字列検索

※Hotkeyとして指定可能な"Apps"とは、右クリックボタン (デスクトップ用キーボードなら右側Ctrlキーの左隣にあるボタン) のこと

Features > Colors

ターミナル画面の色合いを変更できます。
デフォルトはMonocai というテーマが設定されていますが、この画面で色設定を変更して自作のテーマとして保存できます。

また、Fade when inactive の設定を変えることで、Cmderのウィンドウが非アクティブになったときに画面を少し暗く見せるかの設定ができます。

私の場合は、デフォルトのMonokaiをそのまま使っています。
Fadeの設定も利用し、非アクティブのときに少し暗くなるようにしています。

Features > Transparency

画面の透明度の設定はこちらでできます。
個人的には、透明度を落とした方が見やすくなると思います。

一通りの設定が終わったら、右下の Save settings ボタンで設定を保存します。

CygWinとの連携設定

いよいよCmderからCygWinを呼び出せるようにします。 再び設定画面を開きます (Windows + Alt + P)。

Startup > Tasksを選択します。
Cmderで新しいタブを追加するとき、Cmderが呼び出すシェル (Cygwin/cmd/powershellなど) を指定できるのですが、この画面からシェルを追加登録/削除/並べ替えできます。

まず、Cygwinを追加登録します。

  • '+' ボタンを選択し、以下のように設定する

    • タスク名 (左上の部分) : bash::CygWin
    • Default task for new console: チェック推奨 (Cmderで新規タブを追加するとき、デフォルトでbash::cygwinが選択される)
    • Default shell (Win + X): チェック推奨
    • Commands (右下の部分): 以下のように入れる
      set "PATH=<CygWinインストールディレクトリ>\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"<CygWinインストールディレクトリ>\Cygwin.ico"

      具体的には、以下のようになる。

      set "PATH=C:\cygwin64\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"C:\cygwin64\Cygwin.ico"

  • 'Up'、'Down' ボタンで、以下の順序に調整する

    • bash::CygWinを一番上に
    • 他は好きな順序で並べる

↓参考URL
https://conemu.github.io/en/CygwinMsysConnector.html#cygwin64-shortcut

次に、設定画面のStartup セクションを開きます。
Cmderを起動したとき、デフォルトで表示するTask (シェル) を指定します。

デフォルトは Specified named task の値が {cmd::Cmder} になっていると思うので、これを {bash::CygWin} に変更します。

これでCmder + CygWin連携構成を実装できました。

Nyagosとの連携設定

Cmderを起動し、Windows + Alt + P で設定画面を開きます。

Startup > Tasksを開き、以下のように設定します。

  • '+' ボタンを選択し、以下のように設定する

    • タスク名 (左上の部分) : cmd::Nyagos
    • Default task for new console: チェックしない
    • Default shell (Win + X): チェックしない
    • Commands (右下の部分): 以下のように入れる
      [Nyagos.exeのフルパス] -k "cd "

      具体的には、以下のようになる。
      D:\PortableApps\Nyagos\Nyagos.exe -k "cd"

  • 'Up'、'Down' ボタンで、以下の順序に調整する

    • bash::CygWinは、一番上のまま
    • cmd::Nyagosを上から二番目に配置する
    • 他は好きな順序で並べる

これでCmder + Nyagos連携構成を実装できました。

(参考) 知っておくと便利なCmderのショートカットキー

以下のショートカットキーが便利です。

  • Linux Bash でおなじみのショートカット (Ctrl + C, L, D, U, K, Q, Z, ...)
  • 設定を開く (Windows + Alt + P)
  • 新しいタブを開く (Ctrl + t)
  • タブを閉じる (Ctrl + W) ※bashなら Ctrl + D でexitした方が楽
  • スクロールバッファ削除 (Ctrl + Shift + L)
  • 画面スクロール (Ctrl + ↑、↓)
  • 今回紹介した手順でカスタマイズしたショートカット
    • Scroll buffer to the top: Ctrl + Home ※ターミナルの先頭を表示
    • Scroll buffer to the bottom: Ctrl + End ※ターミナルの末尾を表示
    • Paste first line of clipboard contents: 割り当てなし ※Linux用途で使用するCtrl+Vが上書きされてしまうため
    • Copy: All active console text output: Ctrl + Shift + A ※ターミナル全体の文字列をコピー
    • Find text in active console: Ctrl + Shift + F ※文字列検索

まとめ

いかがでしたでしょうか。
Cygwin + Cmderを導入することで、Windows OS特有の作業ストレスを大幅に軽減できます。
Cmderは業務で数年使い続けてきて、本当に良いソフトだと実感しています。
皆様もぜひお試しください。