Edited at

Windows10 HomeでLinuxに寄せた開発環境を整える


対象者


  • 世の中はMac or LinuxだけどWindows10 Homeで開発したい

  • Dockerが必要だけどWindowsで何とかしたい

  • Clojureが必要だけどWindowsで何とかしたい

  • spacemacsを使いたいけどWindowsで何とかしたい


まずWindows上のgitで改行コードが自動変換される罠を外す

参考 => @uggds - 気をつけて!Git for Windowsにおける改行コード

初期設定のままだとpullしてきた時に改行コードが自動変換されるため、*.shを動かした時'\r': command not foundのように怒られることがある。

本稿にも書くが原因は~/.gitconfigにあるコレ。

[core]

core.autocrlf = true

falseにしよう。罠を外したら思う存分pullしよう。


Docker Toolboxを入れてポートフォワーディングまでやる


Windowsで使えるDockerは大きく2種類


  • Docker for WindowsとDocker Toolboxがある。

  • Docker for Windowsは仮想化技術としてhyper-vを使うので、Windows10 ProやEducationなどでしか使えない(Homeにはhyper-vが無い)。

  • つまりWindows10 HomeにはDocker Toolboxしか残されてはいない。こちらは仮想化技術としてVirtualBoxを使う。


Docker Toolboxを入れる

docker-composeが使えるようにインストールする。

Docker Toolboxインストールとポートフォワーディングの参考:

- D-jiro.Y - WindowsでDocker Toolbox&docker-composeを動かす

- ラボラジアン - Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法

手順通りにインストールすれば動く。

※VirtualBoxが既に入っている場合は、アンインストールしてDocker Toolboxでインストールすることを推奨。バージョンの壁なのかパスの壁なのか、動かないので…


ポートフォワーディングで繋げる

参考リンクは上記と同じ。

例えばdockerのコンテナで0.0.0.0:8080->80/tcpのようなポート設定をしている場合、VirtualBoxのポートフォワーディングでは以下のように設定する。

名前
プロトコル
ホストIP
ホストポート
ゲストIP
ゲストポート

okimochi
TCP
127.0.0.1
8080

8080


WSL (Windows Subsystem for Linux)を入れてUbuntuのTerminalからdockerを動かせるようにする


まずWSLインストール

参考 => Windows Subsystem for Linuxをインストールしてみよう!


  • WSL上でCドライブは/mnt/c/にある。マウントしているとかなんとか。

  • PowerShellとWSLとではホームディレクトリが別々…すなわち.gitconfigも別々なので注意(WSLでcore.autocrlf=trueのままだとどうなっちゃうんだろう)


WSLでDockerを使えるようにする

ラボラジアン - Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法」を参考にして、WSL上の~\.bashrcに以下を追記する。


.bashrc

export DOCKER_HOST=tcp://192.168.99.100:2376

export DOCKER_CERT_PATH=/mnt/c/Users/okimochi/.docker/machine/certs # ユーザ名がokimochiの場合
export DOCKER_TLS_VERIFY=1
export COMPOSE_TLS_VERSION=TLSv1_2

最後のCOMPOSE_TLS_VERSION=TLSv1_2は、SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol versionを回避するために指定する。参考 => https://github.com/docker/compose/issues/6473

同じ目に遭っている人がいた。

- @kodetto - DockerでのTLSV1エラー

- @atsu_kg - docker-compose up -d 実行したらSSL errorで起動しなかったのでTLS_VERSIONを指定した


Leiningenを入れてPowerShellからClojureを動かせるようにする


Leiningenをインストール

参考 => yohshiy - Clojure, Leiningen の Windows へのインストールと使い方

本稿でも補足をする。


  • まずJDKをProgram Files以外のディレクトリにインストールする


    • oracleがログイン必須みたいな状態なので、JDKはadoptopenjdkなどがおすすめ

    • スペースが含まれるディレクトリにインストールすると、Emacsからのrepl呼び出しが失敗するらしい




  • lein.bat推奨の予感


    • v2okimochiは参考リンクのleiningen-win-installerを使えなかった(JDKが認識されずインスコ止まる)

    • 予めWindowsの環境変数としてJAVA_HOME=C:\<jdkへのパス>\binを追加しておく

    • WindowsはWin32内のJavaなどを見に行く習性があるらしいので、環境変数の順番はWin32より上に置く




  • jenvは使えない…のでJDKへの環境変数pathを変えて疑似jenvっぽく頑張る


spacemacsを入れてcider-jack-inからlein replを使えるようにする


spacemacsインストール

公式にインストール方法がある => https://github.com/syl20bnr/spacemacs

Windows版は勝手が違うので補足する => v2okimochi - spacemacs.md: Windowsでのインストール

補足内容は以下のような感じ。

- 公式のインスコ方法だと日本語インライン変換(入力中の文字を表示してくれる機能)が詰むよね

- 環境変数を通す必要があるよね

- 初回起動は--insecureオプションが必要だよね

あとはspacemacsのいい感じの設定方法については「@lagenorhynque - Clojure/ClojureScript関連リンク集: Clojure開発全般」に全部載ってる。Clojure関連も全部載ってる。


cider-jack-inでreplを起動する

ayato-p - SpacemacsでClojureを書くために僕が行った設定」を参考にして、.spacemacs(コマンド操作Space f e dで開ける)にCider関連の設定を加える。

あとはClojureファイル(*.clj)を開いた状態でSpace , 'すればnrepl serverが動き出し、少し待てばcider replが起動する。


nvm経由でnpmを入れて複数のnodeを切り替えられるようにする

参考 => @rapando - nvm-windows 導入

以上。シンプル。はや~い