屋根裏

コードを書いたりします

WSLの環境を構築する

Windows上で開発するときの環境構築が面倒くさいのでWSLを使うことにします。また、今はJetbrains製のIDEを使っているのですが、学生じゃなくなると有料になってしまうのでこれを機にVS Codeに乗り換えようかと思います。

環境

Windows 10 Home 1903

WSL

Windows上でLinuxを動かしちゃおうという機能です。

Windows Insider Programを使うとWSL2を利用することもできますが、Dockerを使わないためわざわざWSL2にする必要性を感じなかったので今回はWSL1です。6月にWSL2が正式リリースされたら乗り換えるかもしれません。

WSLの有効化

コントロールパネルから「プログラム -> プログラムと機能 -> Windowsの機能の有効化または無効化」へ行き、「Windows Subsystem for Linux」にチェックを付けます。その後、指示に従い再起動します。

ディストリビューションの入手

Microsoft Storeで欲しいLinuxディストリビューションを検索してインストールします。今回はUbuntu 18.04 LTSをインストールしました。今後はUbuntu 18.04 LTSをインストールした場合についての解説になります。

Ubuntuの起動

スタートメニューからUbuntu 18.04 LTSを起動すると、少し待つよう言われるので待ちます。インストールが終わったらユーザー名とパスワードを入力します。

リポジトリの変更

リポジトリを日本にしたほうが良いようなので変えておきます。今回はJAIST(北陸先端科学技術大学院大学)にしていますが、他にもあるのでこだわりがある方は変えてください。

sudo sed -i.bak -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list

パッケージのアップデート

下のコマンドで各種パッケージを最新のものにします。

sudo apt update
sudo apt upgrade -y

Terminus

ターミナルにはTerminusを採用します。最初はHyperを入れたのですが、少し動作が不安定だったので今回は使いません。

各種設定をする

設定から様々な項目をいじれます。とりあえずWSLに関する設定だけしましょう。

「Appearance -> Font」からフォントを設定できます。今回はPowerlineを使う予定なので白源HackGen Console for Powerlineを選択しました。

「Shell -> Profile」からWSL/Ubuntu-18.04を選択すると、新しいタブを開くときに自動的にWSLで開いてくれます。また、「Shell -> Working directory」を\\wsl$\Ubuntu-18.04\home\<user-name>とするとホームディレクトリにいる状態で開いてくれます。

これだけ設定しておけばWSLで最低限使えるようになりました。他にもテーマやカラースキーム、ホットキーなんかも変えておくと良いでしょう。

fish

bashzshのようなシェルです。zshは設定が多くて大変なので、そのままでも使いやすいと評判のfishを使います。

fishのインストール

sudo apt install fishでインストールすると、バージョン2.x.xになってしまうので以下のコマンドでバージョン3.x.xをインストールします。

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

これでfishと打つと起動できるようになりましたが、いちいち起動するのは面倒なのでchshコマンドでfishをデフォルトシェルに設定します。

chsh -s /usr/bin/fish

2021年4月15日追記:
fish 3.1.2を3.2.2にアップデートしたところ、出力がおかしくなるバグが発生しました。ubuntu1804.exeだと問題なかったので、Terminus+fish 3.2.2で発生するのかもしれません。
とりあえずアンインストールしてから、以下の通りにロールバックして対策しておきました。

sudo apt install /var/cache/apt/archives/fish_3.1.2-1~bionic_amd64.deb
sudo apt install /var/cache/apt/archives/fish-common_3.1.2-1~bionic_all.deb
sudo apt-mark hold fish
sudo apt-mark hold fish-common

fisherのインストール

fisherはfishのパッケージ管理システムです。omfというものもあるのですが、fisherはomfのプラグインも利用でき、上位互換と考えて良さそうなのでfisherを使います。

curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

プラグインのインストール

fisherを使ってプラグインを入れていきます。

2021年4月15日追記:
fisher 4.0でコマンドが大きく変わりました。以下のaddになっている部分はinstallに読み替えてください。

bobthefish

Powerlineを使ったテーマです。

fisher add oh-my-fish/theme-bobthefish

カラースキームや日付の表示などを変更します。他の変更可能なオプションについてはGitHubに載っています。

string trim '
set -g theme_color_scheme dracula
set -g theme_display_date no
set -g theme_title_display_process yes
' >> ~/.config/fish/config.fish

fzf

コマンド履歴の検索や、ファイルの検索が便利になります。

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

先に通常のfzfをインストールしてからfishのプラグインをインストールします。

fisher add jethrokuan/fzf

fish-bd

ディレクトリに対するcdです。

fisher add 0rax/fish-bd

Python

次にPythonの環境を整えていきます。Ubuntu 18.04 LTSにはデフォルトだとPython 3.6.9が入っていたのでこれを使っても良いのですが、今回はpyenv+Poetryでバージョンとパッケージを管理します。

pyenvのインストール

まずはpyenvをcloneしてきます。

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

次にpyenvのパスを通します。config.fishを書き換えた後は再起動しましょう。

string trim '
set -gx PYENV_ROOT "$HOME/.pyenv"
set -x PATH $PATH "$PYENV_ROOT/bin"
status --is-interactive; and . (pyenv init - | psub)
' >> ~/.config/fish/config.fish

pyenvを使うためには以下のパッケージが必要なので、こちらもインストールします。

sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

次のようなコマンドで任意のバージョンのPythonをインストールし、グローバルに設定できます。今回は執筆時点で最新の3.8.1をインストールしました。

pyenv install 3.8.1
pyenv global 3.8.1

Poetryのインストール

Poetryのインストールはpipでも行えますが、READMEで推奨されている方法を使います。pipと紐付けられないのでこちらの方が良いでしょう。

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python

デフォルトではvenvがプロジェクトディレクトリに作られないので、以下のコマンドで設定を変える必要があります。

poetry config virtualenvs.in-project true

プロジェクトの作成

簡単にPoetryの使い方を書いておきます。以下のコマンドはすべてプロジェクトのディレクトリで行ってください。

最初にプロジェクトで使うPythonのバージョンを設定します。

pyenv local <version>

次にPoetryでパッケージをインストールできるように設定します。パッケージの開発であればnewコマンドを使うと良いのですが、そうでない場合はinitコマンドを使います。

initコマンドを使うと対話的にプロジェクトネームなどを設定でき、pyproject.tomlが作成されます。

pyproject.tomlができたらinstallコマンドを使うとpoetry.lock.venv/が作成され、仮想環境が使えるようになります。

poetry init
poetry install

パッケージのインストールにはpipではなくaddコマンドを用います。また、スクリプトの実行はrunコマンドから行えます。

poetry add <package>
poetry run python <file>

2021年6月28日追記:
Poetry 1.0.0-1.0.3でPython 3.9を使おうとするとエラーが出ます。
Poetryをアップデートすることで対応できますが、poetry self updateでアップデートすると3.9以外でもエラーが出るようになります。以下のIssueの通りに再インストールしたらうまく動くようになりました。

VS Code

上の公式サイトからVS Codeインストーラをダウンロードして、ウィザードの指示に従ってインストールします。

まずは日本語化するために、左のメニューからExtensionsを選びJapanese Language Pack for Visual Studio Codeをインストールします。

次にWSLの環境にVS Codeから接続するために、Remote - WSLもインストールします。左に新しく追加されたメニューからUbuntuを選ぶか、左下の「><」のようなマークをクリックするとWSLに接続できます。codeコマンドを使うと、ターミナルから直接開くこともできます。

WSLに接続した状態で拡張機能をインストールすると、拡張機能をWSLにインストールすることができます。とりあえず以下の拡張機能を入れました。

  • iceberg
    テーマです。
  • seti-icons
    もともと入っているSetiというアイコンにフォルダのアイコンなどを加えたものです。
  • Python
    Pythonを使えるようにします。Jupyterも使えるのが便利です。
  • Visual Studio IntelliCode
    GitHubで学習したAIがIntelliSenseを強化します。
  • Path Intellisense
    パスの入力補助をしてくれます。
  • Rainbow CSV
    CSVやTSVファイルの列に色を付けて見やすくしてくれます。
  • Bracket Pair Colorizer
    対応する括弧に同じ色を付けて見やすくしてくれます。
  • Todo Tree
    Todoの管理をしてくれます。他のも使ってみましたが、これが一番しっくりきました。
  • Color Highlight
    カラーコードがどの色を指しているのかを分かりやすくしてくれます。
  • Code Spell Checker
    英単語のスペルミスを教えてくれます。
  • Indenticator
    インデントの深さが分かりやすくなります。
  • Git History
    コミットの履歴なんかを表示してくれます。
  • filesize
    ステータスバーにファイルサイズを表示してくれます。
  • Local History
    ファイルの変更履歴を確認できます。
  • Setting Sync
    GitHubのGistを使って複数の端末間で設定を同期できます。

まとめ

Windowsで開発を行っていると、情報が少なかったり使いたいものがそもそも動かなかったりして苦労しましたが、WSLのおかげで少しは楽になりそうです。

ちなみにVcXsrvというものでGUIアプリケーションを動かしたり、PulseAudioというもので音を出すこともできそうです。

参考文献