WSL + Hyper + fish shell + pipenv + docker環境を整える

本日Dockerを使用していて、 ユーザーディレクトリをマウントしたまま夢の

rm -rf /

を試しに行いましたところ。
ユーザーディレクトリ以下がすべて消えたkimotonです。

これまでWSL + wsl-terminal + bashを使っていたのですが、そろそろモダンな環境への憧れが止まらなくなってしまいました。 ユーザーディレクトリ消したついでにここは環境を丸っと変えてしまおうと思ったわけです。

前提条件

  • WSLの有効化
  • Ubuntuのインストール

は済んでいるものとします。

Hyperのダウンロード

hyper.is

ここからexeファイルがダウンロードできます。
インストールが済むと、C:\Users\{ユーザーディレクトリ}以下に.hyper.jsが作成されます。これがHyperの設定ファイルです。
Hyperの素晴らしいところは設定ファイルがこの1つで済むところです。

pluginの使用

Hyperの素晴らしいところ2つめは、かなり自由にカスタマイズが効くことです。
お好みで公開されているプラグインを適用させましょう。自分は以下のものをいれました。

HyperでWSL起動をデフォルトにする

Hyperを起動すると通常コマンドプロンプトが立ち上がってしまいますが、shellを指定することで開始シェルを指定することができます。
WSLを開始シェルにするには、以下のようにwsl.exeまでのパスを指定します。
また、shellArgsを指定することで、開始ディレクトリを指定することができます。

module.exports = {
  config: {
    shell: 'C:\\Windows\\System32\\wsl.exe',
    shellArgs: ['~'],
  }
}

powerlineフォントの導入

github.com

この後fishで利用するagnosterテーマはpowerlineというフォントを使用しているため、fontFamilyに 'Cica'を指定します。

module.exports = {
  config: {
    fontFamily: 'Cica',
  }
}

これをWindowsで使用できるようにします。
上記からファイルをダウンロード後、右クリックからインストールします。

これらの変更を適用した最終的なファイルは以下に挙げてあります。
settings/.hyper.js at master · nkimoto/settings · GitHub

fishをデフォルトシェルにする

fishshell.com

fish is a smart and user-friendly command line shell for macOS, Linux, and the rest of the family.

fishはスマートでユーザーフレンドリーなコマンドラインシェルらしいです。
そりゃいい。

インストールには公式のppaを使用します。

$ sudo apt-add-repository ppa:fish-shell/release-2
$ sudo apt-get update
$ sudo apt-get install fish

デフォルトシェルの設定はchshコマンドで行います。

chsh -s /usr/local/bin/fish

fishでは、bashの.bashrcに該当する設定ファイルとして .config/fish/config.fishを編集して、fishの設定を行います。

oh-my-fishの導入

github.com

fishに関するパッケージマネージャー的なモノです。

1行入力するだけで導入できます。

$ curl -L https://get.oh-my.fish | fish

oh-my-fish の使用方法に関しては下記がわかりやすいです。 oh-my-fishではじめるfish - Qiita

pecoの導入

fishでコマンド履歴を検索できるようにするためのプラグインです。

まずはUbuntu側にインストールします。

$ sudo apt  install peco

これをfish内で使用できるようにするため、 上記で導入したomf コマンドを使用してインストールします。

$ omf install peco

次にpecoを呼び出すためのキーバインドをCtrl + rに指定します。 .config/fish/config.fishに下記を追記します。

# set peco find history
set fish_plugins theme peco
function fish_user_key_bindings
  bind \cr peco_select_history
end

f:id:kimoppy126:20181212092609p:plain 使ってみるとこんな感じです。 コマンド履歴が一目瞭然。

zの導入

github.com

zはディレクトリ移動履歴を検索できるようにするためのプラグインです。 pecoと同様に、上記で導入したomf コマンドを使用してインストールします。

$ omf install z

f:id:kimoppy126:20181212091929p:plain 使ってみるとこんな感じです。 ディレクトリ移動履歴が一目瞭然。

agnosterテーマの導入

github.com

またまた同様に、上記で導入したomf コマンドを使用してインストールします。

$ omf install agnoster

.config/fish/config.fishで以下のように指定します。

# Use agoster theme
set fish_theme agnoster

pyenvの導入

github.com

pyenvは、複数バージョンのpythonを切り替えて利用できるようにするためのマネージャーです。
インストールはgithubから行います。

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

インストール後、fishでpyenvを使用する際は.config/fish/config.fishに下記を記載します。

set -gx PYENV_ROOT "$HOME/.pyenv"
set -x PATH $PATH "$PYENV_ROOT/bin"
status --is-interactive; and . (pyenv init - | psub)

python 3.7.1の環境を作成する場合は以下のように実行します。 ここではLDFLAGS、CFLAGS環境変数によりopensslライブラリの場所を教える必要があります。

$ env LDFLAGS="-L/usr/lib" CFLAGS="-I/usr/include/openssl" \
    pyenv install -v 3.7.1

作成した環境をglobal に設定します。

pyenv global 3.7.1

pipenv の導入

Pipenvは、Python公式が正式に推薦するPythonパッケージングツールです。 Pipfileというファイルを使用して、pipとvenvを連動させたパッケージ管理を行うことができます。

$ pip install pipenv

先ほど作成したpyenv環境を使用したプロジェクトの作成は以下のように行います。

pipenv --python 3.7.1

dockerの導入

fishの記法でaptリポジトリを追加しなければいけない。 /etc/apt/sources.listに追加されるので、今後bash使用時には注意する。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu "(lsb_release -cs)" edge"

Windows側のDOCKERホストを指定するため、 .config/fish/config.fishに下記を追記します。

# set docker host
set -gx DOCKER_HOST tcp://0.0.0.0:2375

確認

$ docker -v
Docker version 18.09.0, build 4d60db4

終わり。

つかれた。設定だけで疲れた。 ケドこれでだいぶ快適になりました。

最終的な.config/fish/config.fish.config/fish/alias.fishは以下に挙げてあります。 settings/.config/fish at master · nkimoto/settings · GitHub