( )

WSLでWindowsの中にLinuxの開発環境を作ろう

開発関連技術

開発環境, WSL, HomeBrew, anyenv


個人 PC を新しくしてから、WSL(Windows Subsystem for Linux)をいれてなかったので改めていれてみました。
基本的には参考記事通りに進めましたが、追加でインストールするものも含めて備忘録として手順を書いておきます。

※この記事は Qiita からの転載です。
※2021/04/22追記 またセットアップする機会があったので全体的に少し内容を更新しました。

WSL#

WSLとは?#

Windows Subsystem for Linux (WSL) とは、Linux の(ELF フォーマット形式の)バイナリ実行ファイルを Windows 10 および Windows Server 上でネイティブ実行するための互換レイヤーである。

ざっくりいえば、その名の通り、Windows のサブシステムとして Linux を動かす仕組みという解釈でいいかなと思っています。
WSL では完全な Linux を動かすことはできませんが、5月に発表された強化版の WSL2 では100%互換が実現されてるみたいですね。
まだこちらはベータ版のみの提供のようなので、今回は素直に WSL を使うことにしました。

自分はなるべく Windows に直接言語をいれたりしたくない派なので、Docker 環境を作ったり、WSL 側に言語をいれたりしてます。

※2021/04/22追記
ちなみに WSL2 が正式にリリースされてからも、自分は WSL を使っています。
WSL2 の良さはあるでしょうが、どうも WSL2 → Windows のファイルアクセスが遅いとのことだったので、このままでいいかとそのままにしています。

有効化#

  1. 左下の Windows ボタンを右クリックし、「アプリと機能」を選択
  2. 下部の方にある関連設定の「プログラムと機能」を選択
  3. 左メニューの「Windows の機能の有効化または無効化」を選択
  4. 機能一覧の中から「Linux 用 Windows サブシステム」にチェックをつけて「OK」
Windowsの機能一覧
  1. 設定の変更が行われた後、Windows を再起動するよう促されるので、再起動する

Ubuntu のインストール#

  1. Microsoft Store を開く
  2. 「Ubuntu」で検索する
    3つの種類(Ubuntu、Ubuntu 20.04 LTS、Ubuntu 18.04 LTS)がありますがお好みで。
  3. Ubuntu をインストール
  4. Ubuntu を起動して、初回起動時の設定として username と password を設定する
    (ここで決めたパスワードが sudo コマンド使用時に必要となります)

これで WSL が利用できるようになりました。
ちなみにバージョンはcat /etc/os-releaseで確認できます。

cat /etc/os-release

NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

初期設定#

パッケージリストの更新#

sudo apt update

日本語化対応とタイムゾーン#

※2021/04/22追記 この辺はお好みで。英語のままで問題ない方はスキップ。

  1. 日本語言語パックのインストールとロケールの設定
sudo apt install -y language-pack-ja
sudo update-locale LANG=ja_JP.UTF-8

これで locale が変更されます。

locale

LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
  1. タイムゾーンの設定、日本語の manpage をインストール
    タイムゾーンに関してはアジア → 東京を選択してください。
sudo dpkg-reconfigure tzdata
sudo apt install -y manpages-ja manpages-ja-dev

これでタイムゾーンが JST になります。

date

2019年 9月 22日 日曜日 12:13:56 JST

※2021/04/22追記
この設定をしなくても一応 JST になっていました。

date

Wed Apr 21 16:44:54 JST 2021

※ここ以降で載せている各種パスの{USER}部分は、人それぞれのユーザ名になりますのでご注意ください。


Windows・WSL それぞれから見た互いのパス#

Windows から見た WSL#

C:\Users\{USER}\AppData\Local\Packages\CanonicalGroupLimited.{ディストリビューション固有の文字列}

このパスからさらに\LocalState\rootfsbindevetcmntoptなどがあります。

以前は Windows 側から WSL 側のファイルを触るとファイル破損の可能性があったため推奨されていなかったようですが、現在は大丈夫になったみたいです。

WSL から見た Windows#

/mnt/c

/mntから C ドライブが参照できます。

追加でインストールするもの#

Linuxbrew#

Mac ではおなじみのパッケージ管理ツールである Homebrew の Linux 版です。
Homebrew 2.0.0 からは Homebrew に統合され、正式に Linux をサポートするようになったそうです。

  1. 事前に必要なもののインストール
    中にはすでに入っているものもあるかと思われます。
sudo apt install build-essential procps curl file git
  1. Linuxbrew のインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

インストールが終わると次のステップに関する記述が表示されますので、その通りに進めていきます。
build-essential のインストールは先に済ませているのでスキップ。

==> Next steps:
- Add Homebrew to your PATH in /home/{USER}/.profile:
    echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/{USER}/.profile
    eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
- Run `brew help` to get started
- Further documentation:
    https://docs.brew.sh
- Install the Homebrew dependencies if you have sudo access:
    sudo apt-get install build-essential
    See https://docs.brew.sh/linux for more information
- We recommend that you install GCC:
    brew install gcc
  1. パスを通す
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/{USER}/.profile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
  1. gcc のインストール
brew install gcc

依存関係のあるものも一緒にインストールされます。(gmp, isl, mpfr, libmpc, zlib, binutils

  1. brew が正常に動作するか確認
brew doctor

以下のような表示が出れば OK です。

Your system is ready to brew.

anyenv#

言語を複数バージョンで管理できる、〇〇env を一元管理できるものです。
今回は Linuxbrew を使用してインストールしていきます。

本体のインストール#

  1. インストール
brew install anyenv
  1. anyenv のセットアップ
anyenv init

こちらを実行すると以下のように、~/.bash_profileに追記するように表示が出ます。

# Load anyenv automatically by adding
# the following to ~/.bash_profile:

eval "$(anyenv init -)"
  1. 各種 profile のいずれかに追記
    (自分は~/.profileに追記しました)
echo -e 'eval "$(anyenv init -)"' >> ~/.profile

ちなみにこの段階で Ubuntu を再起動すると以下のような警告が出ますが、次の手順で解消できます。

ANYENV_DEFINITION_ROOT(/home/{USER}/.config/anyenv/anyenv-install) doesn\'t exist. You can initialize it by:
> anyenv install --init
  1. マニフェストディレクトリの用意
    チェックアウトしますか?と聞かれるので、y で進みます。
anyenv install --init

これで anyenv で各種 env がインストールできるようになりました。
なお、インストールできる各種 env は以下のコマンドで確認できます。

anyenv install -l

Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
jlenv
luaenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
tfenv

anyenv-update のインストール#

anyenv で管理している各種 env とそれらのプラグインのアップデートをまとめて行えるものです。
あわせて入れておきます。

mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update

これで以下のコマンドでアップデートを実行できます。

anyenv update

nodenv のインストール#

ここでは試しに anyenv を使って nodenv をインストールしてみます。

  1. インストール
anyenv install nodenv

インストールが終わると各種 profile をリロードするか、Ubuntu を再起動するように言われます。

Install nodenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
  1. 各種 profile をリロード
exec $SHELL -l

これで nodenv が使えるようになりました。

nodenv

nodenv 1.4.0+3.631d0b6
Usage: nodenv <command> [<args>]

Some useful nodenv commands are:
   commands    List all available nodenv commands
   local       Set or show the local application-specific Node version
   global      Set or show the global Node version
   shell       Set or show the shell-specific Node version
   install     Install a Node version using node-build
   uninstall   Uninstall a specific Node version
   rehash      Rehash nodenv shims (run this after installing executables)
   version     Show the current Node version and its origin
   versions    List installed Node versions
   which       Display the full path to an executable
   whence      List all Node versions that contain the given executable

See `nodenv help <command>` for information on a specific command.
For full documentation, see: https://github.com/nodenv/nodenv#readme

インストールできる Node.js のバージョン一覧は以下で確認できます。

nodenv install --list
  1. Node.js をインストール
nodenv install (バージョン)
  1. 使用する Node.js のバージョンを指定
# グローバルの場合
nodenv global (バージョン)

# ローカルの場合
nodenv local (バージョン)

インストールしているバージョンの一覧は以下で確認できます。
なお、ここで*がついているのが使用しているバージョンです。

nodenv versions
* 14.2.0 (set by /home/{USER}/.anyenv/envs/nodenv/version)

参考リンクまとめ#