松井です。

最近普段使いのPCとしてSurfce Pro 8を買いました。初めてWindows 11マシンをセットアップするので、忘備録として設定内容を書き留めておきます。 特にvscode + WSL2による開発の初期設定に関して2022現在自分が普段やっていることを書いておきます。 また、東大教員・学生用のあまり知られていないオススメ記述もありますので、新年度に新しくWin11を設定する東大生の皆さんに役立つかもしれないです。

マシン詳細

  • Surface Pro 8, Core i7, 32GB RAM, 1TB SSD
  • Windows 11 Home バージョン21H2

Microsoft PowerToys

Windowsの細かい設定を行える、MS公式のイケてるユーティリティアプリです。 Microsoft Storeからインストールします。

特に画面を細かく分割できるFancyZonesが便利で、自分はこれのためにPowerToysを入れています。自分は初期設定の三面分割で使っています。大き目のディスプレイで作業するときに、アプリケーションのウインドウをドラッグしながらShiftを押すといい感じに右か真ん中か左に配置してくれます。

また、Keyboard Managerがあり、これでキーバインドを設定できます。以下に述べるCtrlとCapsLockの入れ替えをついにMS公式アプリであるPowerToysで実行できるのか、と思ったのですがなぜかこれはうまくいかず、お蔵入りになりました。

CtrlとCapslockの入れ替え

令和になっても人間はCtrlとCapslockを入れ替えるためにゴニョゴニョする必要があります。 Ctrl2Capを使い、コマンドを実行して入れ替えます。

パソコン版Google Drive

かつてGoogle Drive Filestreamと呼ばれていた、Google Driveをローカルで開くソフトです。上記リンクからexeをダウンロードし実行してインストールできます。

Google Driveはウェブ上からすべての操作が可能ですが、ウェブ上だと(1) 多数のファイルを移動させるときは操作が直感的でない (2) ワードとか画像とかはローカルのアプリで開きたい といった要望があるため、PC版Google Driveをいれておいて必要に応じて使うのがおすすめです。

このパソコン版Google Driveは有料機能なのですが、2022現在、全東大構成員は@g.ecc.u-tokyo.ac.jpのアドレス(裏側はgmail)を持っているはずですので、東大構成員であれば上記リンクでインストールできるはずです。

Office

UTokyo Microsoft LicenseでMicrosoft 365からWord等Office製品をインストールします。これは東大関係者であれば最新のOffice製品を使える(自動で最新版にアップデートされる)というものです。細かい仕様規約はしっかり読んでインストールしてください。東大構成員でなくなると使えなくなるので注意しましょう。

Adobe Acrobat Pro

pdfを修正する際、結局のところAcrobat Proを持っていると便利です。しかし、最近のAcrobatは年間や毎月の契約が必要になり気が進みませんよね。 東大はAdobe CLPライセンスをもっているので、東大生協で買い切りのAcrobat Proを買えます(上記リンク先のAdobeソフトウェア価格表を参考)2022現在、Acrobat Pro 2020が二万円程度で購入できます。これは公費購入限定であり、研究費購入PCにしかインストールできないので注意してください。

いつものソフト

firefox, zoom, slackなどをインストール。firefoxやslackはwindows storeでも公開されているのでそっちを使うほうがパッケージマネージャー管理になってよさそうなのですが、 なんとなくいつも通りインストーラをダウンロードしてダブルクリックでいれてしまいます。

firefoxにはgrammarly拡張を入れておきます。grammarlyは最強であり、自分はすべての英文はgrammarly上でチェックしています。grammarlyは無料版と有料版の差が大きいので、有料版がおすすめです。大学関係者だとeducationプランで少し安くなります。また、チーム管理できるため、研究室でチームアカウントを購入し、使用する学生に有料機能を与える、という使い方ができます。自分はGrammarlyの空白のドキュメントへのリンクをブックマークツールバーに登録し、ワンクリックで開けるようにしています。

DeepL Proも契約しているので、これもブックマークツールバーに入れておきます。Grammarlyとちがい、DeepLは翻訳のクオリティには有料無料の差があまりない?ようですが、有料版だと入力データがDeepL側で使われることがないとのことなので、有料版を契約します。

VSCode

これもオフィシャルから持ってきたインストーラでいれます。vscodeそのものは、WSL2内部ではなく、windows側から普通にインストーラのダブルクリックでインストールします。

Remote Developmentエクステンションを入れておきます。これにより、ssh先, docker内部, WSL2内側に入ってvscodeを使いたいときに、win側のvscodeから使えるようになります。昔はwin PCに対しデュアルブートしてubuntuを入れていましたが、最近はこのvscode remote dev + WSL2の組み合わせが強すぎて、デュアルブートをしないようになりました。

注意として、vscodeは拡張機能のインストール先をwindows側(EXTENSIONS画面で「LOCAL - INSTALLED」となっている部分)か、後述するWSL2の内側(WSL: UBUNTU - INSTALLED)にするか選べます。実際にUbuntu上で使う拡張機能(pythonやc++など)はWSL2内側に入れておき、上述のRemote Developmentなどwindows側からいれるものはwindows側に入れます。

WSL2 (WSLg)

さて、ようやく本題のWSL2です!windows 11最大の目玉は、WSL2のインストールが簡単になった点、およびWSLgが自動的に使えるようになったところです。 WSL2とは、windowsの内部にUbuntuなどを仮想的に保持し、自由に使えるというものです。WSL2はこれまでGUIに対応していなかったのですが、WSLgによりUbuntu側のGUIソフトも使えるようになりました。 以下、XXXXの部分は自分のユーザ名で置き換えてください。

早速ですが、なんと、管理者権限で開いたPowerShell上から下記を実行するだけでインストールできます!すごい!

wsl --install

再起動するとubuntuの設定が自動的に始まります。user名とパスワードを入れて設定完了です。もうUbuntuが使えます!WSL2は、普通にUbuntuをマシンにインストールするよりも簡単にUbuntuが使えるというすごい状況になっています。2022現在のマシンでは初期設定で以下のような内容でした。

$ cat /etc/issue
Ubuntu 20.04.4 LTS \n \l
$ uname -a
Linux XXXX 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

さて、いつも通りubuntuを設定していきます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential emacs

gitの初期設定

$ git config --global user.email "your_email@gmail.com"
$ git config --global user.name "Yusuke Matsui"

ちなみにgitはWSL2のものを使うため、windows側にインストールする必要はありません。

emacsの初期設定

echo '(setq make-backup-files nil)' >> $HOME/.emacs

emacsですが、昔は色々カスタマイズしていたのですが、最近はほぼデフォルトで使用するようになってしまいました。上記は、バックアップファイルを作らなくする、という内容です。 ちなみに、emacsと打ってみたらGUI版が起動してビックリしました。WSLgですね! -nwオプションをつけるとターミナル内起動になります。

ローカルビルド領域

WSL2はUbuntuそのものだと思ってよいので、何かをビルドしてインストールする場合は普通のUbuntuと同じように出来ます。自分の場合は、home以下にローカルビルド領域を作っておき、手動でビルドしてシステム全体で使いたいものはそこに入れています。以下のようにディレクトリを作ります。

/home/XXXX/usr/bin
/home/XXXX/usr/include
/home/XXXX/usr/lib
/home/XXXX/usr/src

そして、$HOME/.bashrcに以下を追記しておきます。これにより、システムが上記のローカルビルド領域を見に行ってくれます。

export PATH=$HOME/usr/bin:$PATH
export LD_LIBRARY_PATH=$HOME/usr/lib64:$HOME/usr/lib:$LD_LIBRARY_PATH
export CPATH=$HOME/usr/include:$CPATH
export PKG_CONFIG_PATH=$HOME/usr/lib/pkgconfig

今後、configureする系のものをインストールするときは以下のようにすると、ローカルビルド領域を指定してくれます。

$ ./configure --prefix=$HOME/usr

また、cmake系の場合は、以下のオプションをつけることでローカルビルド領域を見てくれます。

-DCMAKE_INSTALL_PREFIX=$HOME/usr

ちなみに、昔は三日に1回OpenCVをローカルビルドしていたのでpkgconfigをよく使っていたのですが、最近はめっきりビルドしなくなってしまいました。。。

python

さて、python環境を入れます。pythonはシステムに入っているものを使うとすぐに破綻するので、環境を整備する必要があります。python環境構築の方法は無限にあり、ベストプラクティスが何なのか全くわからない状態なのですが、個人的にはanacondaを直接いれて、それで終わりにするのがオススメです。簡単なので。

$ wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh
$ bash Anaconda3-2021.11-Linux-x86_64.sh

上記のようにインストーラをもってきて、bashで実行します。anacondaのインストールは本質的には上記のシェルスクリプトを実行するだけです。このインストーラが行うことは「指定領域にファイルを展開」し、「展開したファイルをシステムが見るような指示を.bashrcに追記する」だけです。スーパーユーザ権限はいりません。 ちなみにファイル名は最新のもの(公式配布サイトの「Linux 64-Bit (X86) Installer」を右クリックしてリンクをコピー)にするとよいです。

  • インストール位置は上で作ったローカルビルド領域/home/XXXX/usr/src/anaconda3にします(これはどこでもいいです。デフォルト位置であるhome直下のほうがわかりやすいと思います)
  • 最後にInitializeするかと聞かれるのでyes(こうすると、下記に示すとおり、.bashrcへの追記が行われます)
  • これで上記のローカルビルド領域に一式が展開され、それで終わりです。
  • 上記のシェルスクリプトそのもの(Anaconda3-2021.11-Linux-x86_64.sh)は消しておきます
  • bashrcの最後にいつもの文言が追記されてることを確認します。
    # >>> conda initialize >>>
    # !! Contents within this block are managed by 'conda init' !!
    .......
    # <<< conda initialize <<<
    
  • 一度ターミナルを閉じて開きなおして下さい。$ which python/home/XXXX/usr/src/anaconda3/bin/pythonとなっていればOKです。
  • この環境を好き勝手に使います。$ conda install$ pip installも使ってOKです。必要に応じて$ conda createで仮想環境を作ったりしますが、そのうちめんどくさくなってデフォルト環境のみを使うようになります(人間なので) だんだん環境が汚れて気持ち悪くなるので、年末大晦日に/home/XXXX/usr/src/anaconda3を全部消し、上記.bashrcへの追記も消し、あらためてゼロから入れなおしてスッキリさせてお正月を迎えます。
  • 注意として、WSL2で使うanacondaは、上記のように、WSL2の内側で、「Ubuntuに入れる方法」でインストールします。Windows側でインストーラから入れるのではありません。 上記の公式サイトでも一番上ではwindowsに対するインストーラが表示されるのですが、そうではなく、下のほうのLinuxのものを見ます。

TeX

さて、次はtexの設定です。Overleafがデファクトの世の中ですが、ローカルでもちゃんとビルドできるようにしておきましょう。何も考えずにtexliveのフルパッケージを入れます(数GBかかります)また、軽量pdfビューアのevinceもいれておきます。

$ sudo apt install texlive-full evince
  • これで、WSL2上でtexに関するコマンドが使えるようになります。論文を書く際はWSL2の内側でpdflatexなどを実行します。windows側では何も設定する必要がありません。VSCode + Remote WSLで書きます。
  • また、pdfファイルは$ evince XXX.pdfで見れます。このevinceはUbuntuではデフォルトの軽量pdfビューアで、ファイル更新をリアルタイム反映してくれるので、論文を書く際には便利でした。WSL2上で論文を書くときはどうしてもpdfビューアがイマイチ(acrobatはリアルタイム更新に弱い、edgeは更新すると先頭に戻る)だったのですが、WSLgによりevinceが再び使えるようになったのでハッピーです。

ssh

sshの設定をします。(以下のsshの初期設定って自動生成されないんでしたっけ・・?何か間違えているかもしれない。)

$ mkdir ~/.ssh
$ touch ~/.ssh/config

config以下に接続先を書いていきます。先頭にはServerAliveInterval 60を書いておきましょう。 .ssh以下にssh keyもおいておきます。例えばmykey.pemとしましょう。 さて、ここからがポイントなのですが、上記設定によりWSL2の内側から、好きなマシンにsshすることは可能です。一方で、windows側のvscodeからどこかにremote sshする際に、configや鍵を使いまわせないという問題があります。なぜなら、windows側のvscodeが使うsshは、WSL2のものではなくwindowsに搭載されているものだからです。これはssh-agentを使うと解決できるそうなのですが、てっとりばやくするためにはwindows側のsshでも同様の設定をしてしまえば大丈夫です。

  • windows側でvscodeを開く
  • vscodeの左側の「Remote Explore」をクリック。出てきたバーの上のほうで「SSH Targets」を選ぶ。そのすぐ下の歯車ボタン(Configure)を押す。ここでsshのconfigを見に行く位置を選べる。
  • ここでSettingsを押し、\\wsl$\Ubuntu\home\XXXX\.ssh\config を設定する。すなわち、WSL2側の設定ファイルを見に行ってもらう。
  • これだけだとダメで、windows側に鍵も置く必要があります。C:\Users\YYYY\以下に.sshのようなディレクトリを作り、その内部に例えばmykey.pemをおいておきます。
  • これで、vscodeからも、WSL2からも、同様にsshを使えます。

その他

また、.bashrcに以下を書いておくと便利です。

alias open=explorer.exe

これにより、wsl2側からopen hoge_dirとしてディレクトリをエクスプローラで開けて便利です

また、batfdGitHub CLIもいれておくと便利です。

また、wsl2で何かおかしくなったときは、常に、以下の魔法の強制終了コマンドを使います PCを再起動しても問題が解決しない場合でも、下記コマンドではうまくいくことがあります。

# WSL2上で
$ wsl.exe --shutdown

# あるいは、powershell上で
$ wsl --shutdown

以上でとりあえずのWSL2の設定は終わりです。

Windows Terminal

MS公式のイケてるTerminalです。Windows 11には最初から入っている!すごい!普段WSL2 (ubuntu) を使うときはこのWindows Terminalを開いて使います。

「設定」のGUI上から「既定のプロファイル」を「Ubuntu」にしておきます。これでwindows terminalを起動したときにWindows PowerShellではなくUbuntuが開かれるようになります。また、「既定のターミナルアプリケーション」も「Windows consoleホスト」から「Windows Terminal」に変えておく。こうすると、システムがコンソールを呼ぶときもwindows terminalを呼ぶようになるらしい?

実際にVSCode + WSL2上で作業をするときの手順

  1. 「windowsキー」を押して「windows terminal」と打ち込むとアイコンが出てきますので、エンターキーを押します。これでWindows Terminal (WSL2)が開きます。
  2. この画面はCUIのUbuntuそのものなので、cdlsgitができます。エクスプローラでディレクトリを開きたいときは$ open hogeとします。
  3. 作業ディレクトリfugaをvscodeで開きたいときは、$ code fugaとします。これにより、Remote SSHした状態のvscodeが開きます。この画面で、普通にコーディングができます。このvscode上で開くTerminalはWSL2となっています。ここで何が行われているかというと、
    • Windows側でvscodeが開かれる(画面下部は、デフォルトでは紫色です)
    • vscode remote WSLにより、win側vscodeがWSL2内部に侵入し、まるでWSL2の中にいるかのような顔をしてディレクトリの中身を表示してくれる(画面下部は青色になっています)
    • ユーザ側は特に何も意識せずに、WSL2の内側で作業ができる
  4. これは、改めて考えると結構すごいことをやっています。仮想化された環境の内側を、外側のwindowsのGUIソフトが触るというのは普通難しいので。(Virtual Boxの内側をWindowsアプリケーションが触るようなことを想像してみてください) また、WSL2側のコマンドであるcodeでなぜかwindows側のvscodeが起動しているということになります。ここは深く考えずにMSの言うことを聞きましょう。
  5. ちなみにこのノリで、ssh先でもvscodeで作業ができます。ssh先の場合はcodeコマンドではvscodeを起動できないので、手元のwindows側でvscodeを開き、そこからremote-sshでポチポチ接続することになります。

Docker Desktop

なんだかんだでDockerを使うことは多いので、Docker Desktopを入れておきます。これはインストーラを使ってwindows側に入れます。 ちなみにDocker Desktopは大企業で使う場合は有償になったので注意してください。 Docker Desktopもvscodeと同じように、WSL2内部からdockerコマンドで使えるようになります。

以上でとりあえずの構築終了です。まとめとしては以下になります。

  • AdobeやOffice製品など、大学がお得な契約をしている場合があるので、大学の情報をよく調べる。
  • WSL2内部で使うものはWSL2内部でLinuxのやり方でインストールする(anaconda, tex, emacsなど)
  • ただし、vscodeとDocker Desktopだけは特別で、windows側からインストーラで入れる

また、windows11はUIがひどいといった話を結構聞いていたのですが、今のところ特に何も問題は発生していない状況です。WSLgが使えるようになったメリットがはるかに大きいと思います。

何かほかに思い出したら追記していきます。もっといい設定方法がある、何か間違えている、こういうのものオススメ、などありましたら教えてください。