Home:0
きままな個人開発ブログ
WSL2を使ってWeb開発環境をMacから移行した時にハマったこと
2020/08/05#WSL2
MacではGitのGUIにSourcetree、IDEはWebStormやVisualStudioCodeを使っていました。Windowsでは開発をやったことがなくWSL2に移行するにあたって色々調べたのですが、Windows側/WSL側のどちらに何を入れるかバラバラだったので実際に試した結果をまとめました。

GitやプロジェクトファイルはWSLに導入

下記2点の問題で苦労するよりWSL上に配置したほうが良さそうです。

改行コード問題

Windowsの場合改行コードがCR+LFですがLinuxやMacではLFなのでコミット時に変更してあげる必要があります。autocrlfによってどういったツールで編集したとしてもLFにてコミットされます。

$ git config --global core.autocrlf input

ファイルパーミッション問題

GitはLinuxのファイルパーミッションに従っているので、Windowsではその情報が解釈できず変換されてしまいます。Git設定にてfilemodeを設定することでその変換を無視することができますが根本的な解決ではなさそうです。

$ git config --global core.filemode false

WSL側からWindowsのディレクトリ(/mnt/c...)に対しプロジェクトを作成した場合、導入したライブラリがエラーになるケースも考えられます。

各種アプリケーションの導入

Sourcetreeからはリモートに繋がないことに

SourcetreeのGitパスを変更できれば設定やSSHキーの二重管理から開放されると思ったのですができなさそうです。そもそもIDE上の機能やターミナルからpullやcommitすれば良いので利用を限定する形で導入しました。

Windows側にインストールし、WSL上にあるプロジェクトディレクトリ(\\wsl$\...)を追加しています。

利用するケース

  • コミット単位の変更を素早く見たい時
  • 他の方のブランチを確認
  • 必要に応じてmergeやpickなど

VisualStudioCodeはWindowsでもサクサク

VisualStudioCodevscode-remote-extensionpackがとても優秀でした。

起動時はファイルをキャッシュしているようで若干遅いものの、Windows側からWSL上のプロジェクトを編集してもスピードが落ちたりするなどといった問題はなかったです。Lintツールも特に設定を変更せずともWSL環境のものを使ってくれていました。

JetBrainsのIDEはWSLなら快適

WebStormなどJetBrainsのIDEはWSL上のファイル読み込みがとても遅く、WSL上にインストールする必要がありました。

実際の導入方法は次の記事に記載しました。WSL2上にWebStromをインストールしWeb開発の環境を作る

DockerはWindows側のみで大丈夫

Docker DesktopをWSL2 の設定が完了している状態でインストールするとUse the WSL 2 based engineをONにして導入することができます。これだけでWSL上でもdockerコマンドが利用できます。

開発環境をWSLに寄せるならDockerfileで管理できそう

上記環境ではSourcetreeを除けばLinux版が提供されています。IDEなどはsnapcraftでも提供されているのでインストールも簡単です。

VisualStudioCodeの例

$ sudo snap install code --classic

会社によっては支給されたマシンのみでの作業になるため環境のズレや変更の手間が生じてきます。そこでDockerfileで管理できないか調べてみました。

参考 Export/Import機能により開発環境のシェアもカンタン

ステップ

  • Dockerfileからimageを作成 > build
  • コンテナの実行 > run
  • Dockerコンテナをtarファイルへ書き出し > export
  • PowerShellによりWSLへ取り込む > import
$ docker build [オプション] パス | URL | -
$ docker run [オプション] イメージ [コマンド] [引数...]
$ docker export [オプション] コンテナ
PS > wsl --import <Distro> <InstallLocation> <FileName>

プロジェクト横断で使うツールはこういった管理方法も良さそうですね。

実際にDockerfileを作成しました。Dockerfileから簡単にWSL2の日本語環境を作れるようにしてみた