Wondershake TechBlog

LOCARI(ロカリ)の運営会社の開発者ブログです。

SurfaceGoで最小限の開発環境を手に入れる

フロントエンドエンジニアの山元です。

先日Amazon Echo Dotを購入したので、さっそく簡単なAlexaスキルを作ったよ 😊✨
みたいな話を書く予定でしたが、そもそもネットにつながらず「Sorry」しか言ってくれないため、今回はSurfaceGoでミニマムな開発環境を作った話を書きたいと思います。

私は普段はMBP&Mac miniで開発していますが、サブマシンとしてSurfaceGoを使用しています。
SurfaceGoのスペックと、WindowsというOSそのものに不安がありましたが、

というコンセプトが完全に突き刺さったので、どうにかして使えるように頑張りました。

WSLを有効にする

宗教上の理由からWindowsで何かしようとか考えないことにしていたのですが、いつの間にかLinux動くようになってて禿げました。

LinuxWindows サブシステムを使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンド ライン ツール、ユーティリティ、アプリケーションを含む GNU/Linux 環境を変更せずそのまま Windows 上で直接実行できます。

Windows Subsystem for Linux に関するドキュメント

ひとしきり感動したところで、WSLを有効にします。
手順はこちらのインストールガイドに書かれている通り。
Windows 10 用 Windows Subsystem for Linux のインストール ガイド

あとは好きなディストリビューションをストアから入手して、インストール。
WSLのドキュメントは一つ一つ丁寧にまとまってて良いですね。

SDカードでディスク容量を増やし、VHDを作成する

SurfaceGoのSSD容量は128GBです。
さすがに心もとないので、SDカードを挿します。

もちろん、これで終わりではありません。
どうせならWSLのデータはSDカードに入れてしまいたい。
誰もがそう願うはずです。

ということでVHD(仮想ハードディスクファイル)を作ります。
これは普通のハードディスクと同じように初期化など必要ですが、普通のハードディスクと同じようにアプリケーションのインストールができるようになります。

Windows 10でVHDファイルを作成する

ただし、VHDを作っただけでは毎回VHDをハードディスクとしてマウントしなければいけないので、以下を設定します。

Windows 10でVHDファイルをドライブとしてマウントする

これが一番時間かかるかもしれない。。。

WSLのインストール先をSDカードに移す

LxRunOffline というツールを利用します。

すごく雑にいうと、WSLの管理ツールという感じで、インストール済みのWSLの複製や、任意のフォルダへの移動など、わりとなんでもできます。
いろいろと機能や制限はありますが、今回必要なのは、インストール済みのWSLをSDカードに作成したVHDに移動することです。
以下はVHDをDドライブとしてマウントした想定で、D:\wsl\ に移動してみます。

lxrunoffline list でインストール済みのディストリビューションを確認して

> lxrunoffline list

Ubuntu

lxrunoffline move で対象のディストリビューションを目的のフォルダに移動。

> lxrunoffline move -n Ubuntu -d D:\wsl\

これで D:\wsl\ に移動してきたデータ(vhdx)がいるはずです。

VSCodeでWSLにアクセス

最後にもう一踏ん張り。
WindowsVSCodeをインストールします。

Remote - WSL という拡張機能を導入します。

Visual Studio Code をリモート WSL 拡張機能と共に使用すると、WSL を完全な開発環境として VS Code から直接使用できます。

Windows Subsystem for Linux で Visual Studio Code の使用を開始する

と説明がある通り、VSCodeでWSLを利用するには大変便利な拡張機能です。

VSCodeでWSLのプロジェクトを開く(VSCodeでWSLに接続する)には

という二つの方法があり、MicrosoftのWSLドキュメントでも、VSCodeのRemote development in WSLでも、コマンドラインから起動する方法を解説しています。
しかし、私の環境ではコマンドラインから起動すると

CMD.EXE was started with the above path as the current directory. UNC paths are not supported. Defaulting to Window directory.

というメッセージと共にWindowsのシステムフォルダが開いてしまいました。

f:id:wondershake:20200818165132p:plain

f:id:wondershake:20200818165213p:plain

What’s new for WSL in Windows 10 version 1903? を読むと、

When using CMD, cd \wsl$\Ubuntu\home will not work (as CMD does not support UNC paths as current directories)

とあるので、CMD ではなく Windows Terminal から起動してみたのですが、やっぱりWindowsのシステムフォルダが開いてしまったので、正直よくわかりませんw

コマンドラインからの起動は微妙な感じなので、VSCodeから起動します。

このとき、VSCodeで開きたいWSLをあらかじめ起動させておきます。
左下のマークをクリックしてコマンドパレットを表示。

f:id:wondershake:20200818165247p:plain

Remote-WSL: New Window を選択してしばし待ちます。
初回起動時はWSL側になんやかんやインストールとかしてて、ちょっと時間がかかりますが、無事接続できると、左下のマークがこんな風になります。

f:id:wondershake:20200818165347p:plain

これでVSCodeでWSLが直接使えるようになりました。
ターミナルはもちろんWSLのbashです。

f:id:wondershake:20200818165557p:plain

おわりに

これは実はSurfaceGoを購入した当初から取り組んでいたのですが、ただ手間を増やしただけで、なんのメリットもなかったので放置していました…
最近WSL2が一般提供されたことと、VSCodeでWSLのリモート開発が可能になったこともあり、あらためて一から作り直したところ、とりあえず使えるくらいにはなったので、記事にしました。
最近のWindowsは開発環境としてもしっかり使えるようになってきた気がします。
お手軽開発環境構築、興味がある方はぜひお試しください ✨