Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails以外の開発一般

boostのテストライブラリを使おうとして環境構築をした話

はじめに

最近2000年代のアニメを観るのにハマってます、yosuke2です。
NujabesのCDが欲しいです。
これで分かる人はすぐに今私が何のアニメを観てるか分かるはず。

さて、みなさんはテストコードを書いたことがありますでしょうか。
私はありません。
というのも、私が主に担当しているプロジェクトはだいぶ前に開発された巨大なソースコードをメンテし続けている都合もあり、テストコードがほとんどありません。
そのため、これまで業務でテストコードを書く機会がありませんでした。
そこで前々から書いてみたいと思っていたのを実行に移そうということです。
テストコードを書いてコードの安全性・安定性をより高めたい。

という訳でまずテストライブラリの選定ですが、担当しているプロジェクトではC++を主に用いておりboostも採用しているので、boostのテストライブラリを使ってみようとなりました。
boostはC++の準標準ライブラリと言えるもので、今現在C++に入っていない便利機能も多数実装されています。

しかし私の主な業務やプライベートの環境はWindowsです。
boostを入れようとするとGoogle Chromeなどのブラウザを開き、検索をして公式サイトへ行き、目的とするバージョンを探し、ダウンロードしてzipファイルを解凍してようやくビルドできる。
面倒です。

業務ではMacも触れるのですが、そちらではbrew install boostで済みます。
バージョンを指定しようとすると毎度フォーマットを覚えている訳でもないので一度brew searchしたりしますが。
brewのboostのページを見るとOther versionsとしてboost@1.76がありますね。
覚えてないと@を忘れてしまいそうです。
しかしリンクはどこだと探し回るよりずっと楽です。
boostだけならともかく他にも欲しくなったらこれを繰り返さないといけない。
そう、パッケージマネージャが欲しいんです。

そして今回はWindowsを使用します。
MacでCUI操作に慣れてしまうとWindowsを使用していてもUnixコマンドが使いたくなります。
Windowsでコマンドプロンプトを使用している時にlsを叩いてしまうのは嫌だ。

ということで、今回の目的は以下となります。

  • メインの目的
    • boostのテストライブラリを使って開発できる環境を構築する
  • サブの目的
    • Unixコマンドを使える環境にする
    • パッケージマネージャを導入する

これらが目的のため、実際にテストコードを書いて動作する環境がWindowsであるかLinuxであるかは問いません。
つまりCygwinやMSYS2でも良し、WSL2でも良し、という前提となります。
Windows上で動けば良しということです。
そして今回は実際にテストコードを書くまでには至っておらず、Unixコマンドを使える環境でパッケージマネージャを使用してboostをインストールするところまでとなります。

また、本記事中における作業は全てプライベート環境で行っております。
基本的にどれも公式サイトを参照しつつ操作しており、ツールのインストールと基本的な操作しかしていないため破壊的な変更は加わらないはずですが、もし参考にして各ツールを導入する場合は業務環境など開発に支障が出たら困る環境では注意しつつ行ってください。

パッケージマネージャ

まずパッケージマネージャから調べました。
出てきた選択肢が以下。

  1. winget
  2. vcpkg
  3. Chocolatey
  4. pacman in MSYS2
  5. Cygwinで使用できるapt-cygやcyg-getなど

wingetはMicrosoft製のパッケージマネージャです。
CMakeとかGitとかSteamとか色々インストールできます。

vcpkgはC/C++関連のパッケージマネージャらしく、wingetとはまた方向性が違うようです。
なのでGitなどC/C++と直接の関係が薄いものはありません。
vcpkgのパッケージはここで検索できます。
また弊社では分からないことについて調べているとたまにあるのですが6年前の記事が出てきました。

Chocolateyは初リリースが2011年と既に10年以上経過した枯れたWindows用パッケージマネージャです。
パッケージの検索はここでできます。
古くから使われていて安定性・信頼性がありそうです。
これも気になったのですが、Windows用に何かインストールするのにMicrosoft製だし元々入ってたから特に何もせずそのまま使えるしとwingetを使い始め、Chocolateyはあまり調べないまま流れていきました。
wingetをしばらく使い倒した後試しに使ってみて、こんな違いがあるんだなぁとか実感できるといいなと思います。

pacmanはArch Linuxでデフォルトで使えるパッケージマネージャです。
MSYS2でもデフォルトとなっているようです。
概要などは公式サイトを参照してください。

Cygwinに関しては昔Arch Linuxを軽く触った時にpacmanに触れていてほんの少しとはいえ馴染みがあったので割と早い段階でCygwinかMSYS2ならMSYS2を使うことにしてあまり調べていないです。

パッケージマネージャに関して調べる時にまずWindows package managerと検索しました。
wingetがまさにこれなのでこれがそのままヒットします。
wingetのGitHubを見ると以下のようにあります。

About
Windows Package Manager CLI (aka winget)

1番始めのコミットを見ると2019年と比較的新しいもの。

まずboostを入れたいというのがあったのでwingetにboostがあるのか調べてみる。

winget search boost

結果

名前 ID バージョン 一致 ソース
-----------------------------------------------------------------------------------------------------------------
Cooc & Boost 9MTVK64RXKVM Unknown msstore
Internet Speed Booster 2 9WZDNCRFJ302 Unknown msstore
Ram Booster : Memory Cleaner 9MTRX5VMVZS3 Unknown msstore
MP3 Volume Booster 9N447JB995FM Unknown msstore
Network Booster 9N3BX5N12B1Q Unknown msstore
Video Volume Booster 9PBF5JN2NSZG Unknown msstore
Music Player - Audio Player & Bass Booster 9PHG52G0BMWX Unknown msstore
Wise Game Booster WiseCleaner.WiseGameBooster 1.5.7 winget
Smart Game Booster SmartGameBooster.SmartGameBooster 5.2.1 winget
NoSQLBooster for MongoDB NoSQLBooster.NoSQLBooster 7.1.5 winget
Driver Booster IObit.DriverBooster 10.0.0 winget
Boost Note boostio.boostnote 0.23.1 winget
Bit Game Booster BitGuardian.BitGameBooster 1.0.0.5 winget
Harmonoid Harmonoid.Harmonoid 0.3.4.0 Tag: volume-boost winget

ということでboostはありませんでした。
「おっ」と思ったらBoost Noteでした。

winget install してみる

このBoost Note、何なんだろうと調べてみたらオープンソースでクラウド同期可能なMarkdownエディタのようです。

クラウド同期可能なテキストエディタはプライベートではずっとEvernoteを使用しているのですが、Markdownを書こうとした時に例えば# hogeとやると勝手に#を消してしまう。
これがどうにも気持ち悪い。プレビューが無いので仕方ないのですが。
というかMarkdownを書く時はプレビューが欲しい。
設定でどうにかできるのかもしれないけど軽くメニューを見た限りありませんでした。

ということで試しにBoost Noteを入れてみることにしました。

wingetにはvcpkg同様このようなパッケージを検索できるサイトがあります。
Boost Noteはここです。

以下のコマンドが案内されていたので入力。

winget install -e --id boostio.boostnote

オプションの意味はMicrosoft公式で案内があります。

コマンドプロンプトで処理が進んでしばらく経つとインストール完了。
Windowsキーを押すと「最近追加されたもの」が出てくるけどそこにちゃんとBoost Noteがある。
便利!
これが初winget installでした。

なおBoost Noteは元々機能制限ありとはいえ無料で使えていたのが、今は2週間のお試し期間の後有料プランへの移行が求められるようです。
始めに書いたように今回はこの作業をプライベート環境で行っており、プライベートでは今のところMarkdownを頻繁に書くことはありません。
業務でもあまり書きません。たまにDocbaseを使ったりREADMEを書いたりするくらいです。
ということで今回は採用を見送らせていただきました。
Boost Noteの価格に関してはここを参照してください。
2022年11月末時点でFreeのところに14-day Free Trialとあります。

その後軽くMarkdownエディタに関して調べた結果Joplinという存在を知ります。
そしてJoplinもwingetに存在しました。
何ならPre-releaseまである。

案内通りに以下を叩く。

winget install -e --id Joplin.Joplin

先ほどと同じようにアプリが追加されてアイコンから起動可能。

ちなみにこの記事はまずプライベートPCでJoplinを用いて書いてから業務用PCに文章を移して体裁を整えて作成しました。
ということでまだまだ使い始めたばかりでどこが良いやら悪いやら評する段階にもない気がするのですが今のところ不満なく使えています。
強いて言うならスタイルのテーマの変更をリアルタイムでやってほしい。
※後この記事を書き終えるくらいの段階で思ったけどもう少しスクロールバーを太くしてほしい。Visual Studio Codeくらいがいい。

ということで、winget installをやってみましたが動作が遅いということもないです。
目的のものがハッキリしていればわざわざブラウザを開いて検索して公式サイトを巡ることもなく、コマンド1つでインストールできます。
使用感はbrewと変わりません。

winget list してみる

先ほどのwinget.runを軽く見ていただければ分かるかと思いますが結構色々なパッケージがあります。
私がこの記事を書いている時には開いてすぐにDiscorddockerVisual Studio CodenodeSteamVimzoomなどがありました。
欲しいものがあるか探すときは先ほどboostを探した時のようにwinget search hogeでいいですが、上記検索サイトでもいいですし、GitHubからも見れたりします。

またwinget listを叩くと面白いです。
GUIからインストールしたものやwingetにないものも含めてWindows 10の「アプリと機能」にあるものが一覧表示されます。
私はよくゲームをするのでこれで出てきたIDにSteam App 1049890とか出てきてました。

※ここは余談ですちなみにこれは直近で遊んでいたLittle Witch NobetaというゲームのIDです。
ちょっとゲーマー寄りな話になりますが、かわいらしい少女が主人公なものの中身はダークソウル風味ないわゆるソウルライクなゲームです。
ダークソウルは慣れてない人は近接攻撃メインになりがちかと思います(私がそうでした)が、こちらは基本遠距離攻撃メインなところがアクション部分での差別化ポイントだったかなと思います。
このLittle Witch Nobetaなのですが台湾発のゲームとなります。
近年アジア圏でのゲーム開発が盛んになっています。
特に中国の勢いが凄く、日本でも話題になるゲームの中国率が高いです。
私の体感的にアズールレーン辺りから中国産のゲームが増えていて、スマホゲーが多いのであまり遊んではないのですが広告を見る限り可愛い女の子なゲームが多いです。
個人的にはアクション部分にDevil May Cryなどの影響を感じさせていたICEYのようなカッコいいスタイリッシュな雰囲気な作品も増えてほしいなと思うところです。
アークナイツとかちょっとその気を感じてて気にはなってます。

Steamがwingetからインストールできるとはいえゲームまではできません。
実際に試しました。

C:\Users\g-gea>winget install --id "Steam App 1049890"
入力条件に一致するパッケージが見つかりませんでした。

ではSteamのID、というか行を見てみると以下となっています。
Steam Valve.Steam 2.10.91.91 winget
Valve.SteamがIDです。
先ほどboostio.boostnoteとかインストールしてたので何だかインストールできそう感がありますね。
というか右端にwingetという記述があります。
ここでwinget listの出力の先頭を見てみましょう。

名前 ID バージョン 利用可能 ソース
-----------------------------------------------------------------------------------------------------------------------
1Password AgileBits.1Password 8.9.8 winget
Joplin 2.8.8 Joplin.Joplin 2.8.8 winget
Prime Video for Windows AmazonVideo.PrimeVideo_pwbj9vvecjh7j 1.0.118.0

これは私の環境で実際に実行した時の出力です。
winget.runGitHubを見て探してもらえると分かりますが、1PasswordとJoplinは確かに存在するものの、Prime Video for Windowsは存在しません。
つまりソースの部分がwingetになっているものはwingetで管理できるということです。
なんと1Passwordまでカバーしているんですね。

ということで他にもソースにwingetが指定されているものを見ると、Google ChromeやMicrosoft Edge、EvernoteにMicrosoft Visual C++ 2015-2019 Redistr…とVCランタイムまでありました。
なお、先ほど書いたようにboostがインストールできるパッケージマネージャが欲しいというところからpacmanの使えるMSYS2をwingetで入れてみたところ以下のようなものがありました。

Microsoft Visual C++ 2010 x64 Redistr… Microsoft.VCRedist.2010.x64 10.0.40219 wingetMSYS2 MSYS2.MSYS2 20221028 winget

wingetMSYS2というのはMSYS2に依存してインストールされたということなんですかね。
他にもwingetRealtek High Definition Audio DriverとかwingetApple Application Support(64 ビット)とかがありました。

Unixコマンドを使える環境

前の項で先走って書いてしまいましたがMSYS2をインストールしてUnixコマンドが使えるようになりました。

ただ、始めに書いたように今回の目的ではWSLも選択肢となります。
UbuntuなどをインストールすればUnixコマンドが使えますし、パッケージマネージャもaptなどが付いてきます。
WSLはMicrosoftが開発しているものなのでWindowsとの親和性も高そう。
そしてここまでの段階でwingetを使用しており、winget installやこれまで業務で度々使っていたbrew installなど、aptの方がpacmanよりも見慣れた構文で扱える。
pacmanのインストールコマンドはpacman -S hoge
apt searchなどもwingetと類似。
WSLでUbuntu入れた方がいいのでは?と思い方針転換。

「Windows の機能の有効化または無効化」から「Linux 用 Windows サブシステム」と「仮想マシン プラットフォーム」にチェックが入っていることを確認。
後はUbuntuを入れるだけだがこれもwingetでできてしまう。
winget search ubuntuの結果。

C:\Users\g-gea>winget search ubuntu
名前 ID バージョン 一致 ソース
----------------------------------------------------------------------------
Ubuntu 9PDXGNCFSCZV Unknown msstore
Ubuntu 22.04.1 LTS 9PN20MSR04DW Unknown msstore
Ubuntu 20.04.5 LTS 9MTTCL66CPXJ Unknown msstore
Ubuntu 18.04.5 LTS 9PNKSF5ZN4SW Unknown msstore
Ubuntu (Preview) 9P7BDVKVNXZ6 Unknown msstore
Ubuntu Canonical.Ubuntu 2004.2021.825.0 winget
Ubuntu 22.04 LTS Canonical.Ubuntu.2204 2204.0.10.0 Tag: ubuntu winget
Ubuntu 20.04 LTS Canonical.Ubuntu.2004 2004.2021.825.0 Tag: ubuntu winget
Ubuntu 18.04 LTS Canonical.Ubuntu.1804 1804.2019.522.0 Tag: ubuntu winget
Ubuntu 16.04 LTS Canonical.Ubuntu.1604 1604.2019.523.0 Tag: ubuntu winget

msstoreのものも出てくるんだなぁと思いつつ真ん中辺りのCanonical.Ubuntuをインストール。
インストールが終わったらUbuntuを起動してユーザ名とパスワードの設定などをして準備完了。

ここでWSLのバージョンがどうなっているのか確認するためにPowerShellから以下を叩く。

PS C:\Users\g-gea> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2

軽く調べてこのやり方でWSL1を動かしている人がいたけどどうも2が主流になりつつある今は2の方になるらしい。

しかし使用感はただターミナルを起動しただけでHyper-Vを自ら起動してどうこうするものでもない。
1は互換レイヤーで2はHyper-Vを使用したVMなのでアプローチが違うということから何となくこの辺りの使用感も違うものだと思っていたけどそんなことはないらしい。

しかしここでちょっと問題に気づく。
WSL2でUbuntuを使用することでUnixコマンドが使えるしaptも使えるけど、今回入れたJoplinのようにWindows側でパッケージマネージャを使ってWindows向けアプリを入れたいこともある。

そこでWindows Terminalを使う。
これを使えばコマンドプロンプトもPowerShellもUbuntuも行き来がとても楽になり、Ubuntuでの作業中wingetを使いたくなった時もタブを追加してコマンドプロンプトを開けばウィンドウを増やすことなく切り替えることができる。
この一手間もなくしたいところではあるができるものなんでしょうか。
winget on wslと軽く調べてみましたがそれっぽいものが出てこなかったのでできるとしてもサクッとはできなさそうです。
WSLのUbuntuからexplorer.exe .とするとWindows Explorerが開いたりするので、Windows側のコマンドがある程度使えるようにはなってるようです。
explorer.exe .が使えるのだからwingetも.exeを付与してあげれば動くのでは?とやってみましたが、winget.exe listを入力して動作はするものの何も出力されませんでした。
やはり切り替えないといけないようです。

ターミナル

このままだとwingetの簡易的な紹介とWSL2の導入をしただけで終わってしまいます。
どうせならシェルにもこだわってみたいところ。
その前に、そういえばターミナルはデフォルトのまま使っていることが多かったためターミナルとシェルが別という認識がこれまであまり無かったことに気づきました。
MacがCatalinaでデフォルトのシェルをbashからzshにしたとかそういうのは認知していたけど普段使いにおいてあまり変わらなかった、要はあまりシェルの機能を使いこなしておらず違いを気にしていなかったとも言う。
そしてターミナルも特別使いこなしていない。

先ほどWindows Terminalを採用してみたけど、他にはどんなターミナルがあるんだろう。
ということで軽くターミナルについて調べて「あーそうかPuTTYとかTera Termとかあったけどこれもターミナルかぁ」などと見ているとこんなものを見つけた。

参考: Warp: The terminal for the 21st century

近年話題のRust製で速いターミナルだそうです。
今のところMacでのみ動くけどWin/Linuxも対応予定とのこと。
これを書いている2022/11/27現在では最新バージョン2022.11.15 (v0.2022.11.14.14.55)
長い。v0の後は最終コミットの年月日時分かな?

GitHubのREADMEの最後を見ると依存しているオープンソースへのリンクが貼られている。
ここを見る限りこのターミナルのデフォルトシェルはNuShellというものっぽい。
※実際に使ってみたところデフォルトシェルはzshでした。試しにNuShellを入れてデフォルトシェルにしてみたところ、WarpはNuShellをサポートしていないと言われ、デフォルトのzshにフォールバックされました。

調べてみるとこれまたRust製。Rust流行ってますね。
公式の日本語案内もあります。GitHubはこちら

今回ターミナルは気になったWarpがそもそもまだMac以外未対応で、かつwingetも使用したいということから切り替えやすいWindows Terminalを使用しますが、業務ではMacの方でWarpとNuShellの組み合わせを使ってみたいですね。

シェル

シェルの話に戻りまして、こちらもいろいろ調べた結果zshとfishで迷い、fishに決めました。
ここでNuShellを選択しても良かったのですが、NuShell、というかWarpを業務で使うならプライベートでは別なものを使ってみたいと別のものを選択しました。
ということで入れてみます。aptで入るだろう。

yosuke@DESKTOP-K7VEFPB:~$ apt search fish
Sorting... Done
Full Text Search... Done
lftp/focal 4.8.4-2build3 amd64
Sophisticated command-line FTP/HTTP/BitTorrent client programs

libgcrypt20/focal,now 1.8.5-5ubuntu1 amd64 [installed,automatic]
LGPL Crypto library - runtime library

libgcrypt20-dev/focal 1.8.5-5ubuntu1 amd64
LGPL Crypto library - development files

libgcrypt20-doc/focal 1.8.5-5ubuntu1 all
LGPL Crypto library - documentation

python3-bcrypt/focal 3.1.7-2ubuntu1 amd64
password hashing library for Python 3

python3-crypto/focal 2.6.1-13ubuntu2 amd64
cryptographic algorithms and protocols for Python 3

あれ?ないっぽい?
と調べてみるとみなさんapt-add-repositoryしていたのでそれに倣う。
公式な情報はここ

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish

これに従う。
すると/usr/bin/にfishがインストールされる。

後はデフォルトのシェルをfishにしましょう。
fish公式のやり方はここ
ターミナルエミュレータの設定で切り替えることが推奨されていますが、今回は2パターンある内の後者の方、chshコマンドを使って切り替えました。
再起動すると...。

Welcome to fish, the friendly interactive shellの文字が。
そして一度入力したコマンドで補完が表示される!

ただ入力済みコマンドがとても見づらいので色を変える。
今回はOne Half Darkに変更しました。

とても見やすくなりました。

パッケージマネージャその2(winget upgrade してみる)

現状をまとめましょう。

Windowsではwingetを使い簡単にWindows向けパッケージを管理することができるようになりました。
また、WSLを導入してUbuntuを用いてUnixコマンドを使いながらaptでUbuntu向けパッケージを管理することができるようになりました。
Windows Terminalを使い、ウィンドウは1つのままコマンドプロンプトやWSLのUbuntuをタブで切り替えることができます。
またUbuntuのデフォルトシェルをbashからfishに変更しました。

WSLからcd /mnt/cとするとWindows側のファイルにもアクセスできます。
今回はWSL2を使用しており、WSL1の方がより高速なファイルアクセスができるようですが、それは追々困ることがあれば考えます。

ここで、aptではよくapt update、apt upgradeを行うことを思い出しました。
apt updateは先ほどもfishの導入の際に入力しました。

ではwingetはどうなのでしょう。

参考: upgrade コマンド | Microsoft Learn

どうもここのサイドメニューのコマンド一覧を見る限り類似するのはupgradeコマンドのみです。
また一斉更新ではなく都度更新対象を指定しなくてはならないようです。
これはwinget listをした時にwingetで取得できないものも含まれるとかの都合でしょうか。

試しにこのような表示になっていて更新ができそうなDiscordを更新してみます(何か凄い古そう?)。
Discord Discord.Discord 0.0.309 1.0.9007 winget

C:\Users\g-gea>winget upgrade -e --id Discord.Discord
見つかりました Discord [Discord.Discord] バージョン 1.0.9007
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloading https://dl.discordapp.net/distro/app/stable/win/x86/1.0.9007/DiscordSetup.exe
██████████████████████████████ 79.3 MB / 79.3 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました

多分「パッケージのインストールを開始しています...」の表示と同時にDiscordが起動しました。
ちらっとアップデートしてます的な文言が見えた後普通に開きました。

もう一度winget listからdiscordの個所を確認すると
Discord Discord.Discord 1.0.9007 winget
0.0.309の表記が消えて更新が完了しています。

Windows側のパッケージ管理もwingetのおかげでとても楽になりました。

boostをインストールする

では最後に当初の目的であったboostをインストールしましょう。

apt search boostとすると何かたくさん出てきたし眺めてるとlibboost-contextとかlibboost-coroutineとか小分けされてます。
軽く調べるとlibboost-all-devまたはlibboost-devでよさそう。
全部入りにしたところでそこまで使うだろうかと思ったのでとりあえず後で困ったら考えるとしてallじゃない方を入れる。

sudo apt install libboost-devを叩いて1分もしない内にインストール完了。
どこに入ったんだろう?
それっぽいところを探そうと思って/usr/includeを見るとboostディレクトリを発見。
/usr/libにはないけど、allじゃないとヘッダしか入らないのかな?
ヘッダだけで使えるboostライブラリもあるからそういうニーズを満たすためのものがlibboost-devなんだろうか。

とここまで書いて疲れたのと、「boostのテストライブラリを使って開発できる環境を構築する」という当初の目的はほぼ達成できたので今回は終わりにします。

まとめ

今回構築した環境のまとめです。

構成

OS:Windows 10, WSL2(Ubuntu)
ターミナル:Windows Terminal
シェル(Ubuntu):fish
パッケージマネージャ:winget, apt

構築方法

winget

wingetをインストールします。

wingetは最近のWindowsならまずデフォルトで入っている様子(Microsoft公式の案内)ですが、もしなければ適宜インストールしましょう。
GitHubのREADMEに依ると

Microsoft Store [Recommended]
The client is distributed within the App Installer package.

とのことなので、これをインストールすると良さそうです。
ただレビューを見るとこんなことが書いてありました。

インストールされているはずなのに、再起動後もコマンドプロンプトで”winget”と打ったけど起動しないし、[アプリ実行エイリアス]画面に「Windows Package Manager Client」が登録されてないせいか使えない。 「GitHub」のリリースページからインストーラー(appxbundle形式)を入手してセットアップしたら使えるようになった。

私は元々入っていたので新規にインストールはしてないのですが、もしストアからインストールして上手くいかないようならレビューの通りGitHubから取得した方が良いかもです。

Windows Terminal

Windows Terminalをインストール(wingetで可能)します。

winget install -e --id Microsoft.WindowsTerminal

WSL2

WSL環境の有効化

コントロールパネルなどから「Windows の機能の有効化または無効化」を開く。
「Linux 用 Windows サブシステム」にチェックを入れる。
「仮想マシン プラットフォーム」にチェックを入れる。

Ubuntuのインストール

以下のコマンドでUbuntuをインストールします。

winget install -e --id Canonical.Ubuntu

fish

fishのインストール

WSL2のUbuntuを開いてユーザ名やパスワードを設定。
その後以下のコマンドを叩いてfishをインストールします。

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update
sudo apt install fish
fishをUbuntuのデフォルトシェルにする

公式の案内は以下。

echo /usr/local/bin/fish | sudo tee -a /etc/shells
chsh -s /usr/local/bin/fish

ただ先ほど下記のように書いた通り、インストール先が公式の案内と違う場合があるため適宜対応してください。

すると/usr/bin/にfishがインストールされる。

その他

今回やっていたようにWindows Terminalの背景色を変えるとかフォントを変えるとか後は好みです。

ちなみにUbuntuをインストールすると特に何もしなくともそのままWindows Terminalから開けるようになっています。
こういうところにWindowsとの親和性の高さを感じますね。
途中採用しようか迷って入れていたMSYS2は公式の案内があり、これを参考にすると同じくWindows Terminalから開けるようです。
Git Bashも同じようにできます。

またプロファイルの並びが気に入らない場合は、Windows Terminalの設定を開き、左下の「JSON ファイルを開く」からJSONファイルを開きます。
デフォルトだとnotepadが開くので適宜コピペしてVisual Studio Codeとかお好みのエディタで編集してください。
"profiles":となっている箇所があると思いますが、ここのlistを並び変えると任意の並びにできます。
フォーマットを間違えて保存してしまうとどうなるかは未確認です。
間違いのないようお気を付けください。

さいごに

「boostでテストコード書きたい」が発端でここまでいろいろ見ることになるとは思ってなかったです。
書いてないですがGNUについて調べたりUNIX環境についていろいろ調べたり他にも調べてました。

この作業をした後、今まで業務ではずっとWindowsではGit Bashやコマンドプロンプトを素で使ってたのですが、Windows Terminalを使用してGit Bashを複数タブ開いたりして快適な環境で作業できています。
業務での開発自体はガッツリWindowsでVisual Studioのコンパイラを使ったりするのでWSL2は挟まない方が良さそうに思って導入していません。

Git BashでUnixなコマンドが使えるし業務で使用してるのであんまり環境ガッツリ変えたくなくてMSYS2も入れてません。

というか前にもろに業務でGit Bashなら大丈夫だけどMSYS2から入れたGitだとPythonと絡めた際にパスがおかしくなるということがあったのを書いてて思い出しました。
理由は把握してないですがCygwinでも同じことになるのかNGらしい。
プライベート環境でGit Bashを避けたのは以前何かの際に特定のUnixコマンドが使えないことがあったからです。

Windowsだけでパッケージマネージャを用いて開発がしたいなら、wingetに加えて始めに少し触れたvcpkgがいいかもですね。
vcpkgでboostとかC/C++関連のものを入れて、wingetでCMakeやGitが入れられます。

残念ながらvcpkgはwingetではインストールできないので、GitHubからリポジトリをcloneして実行ファイルを生成しましょう。
READMEを見ると以下が前提条件だそうです。

Windows 7 or newer
Git
Visual Studio 2015 Update 3 or greater with the English language pack

私はまだvcpkgを利用していませんが、ガッツリWindows開発な業務用PCで入れてみようかなと考えています。

winget listですが、Discordをお試しで更新した時に見た通り「アプリと機能」に含まれていてwingetで更新が可能なものはどれが古いかがすぐに分かります。
ただwinget listだけだとSteamのゲームが含まれていたようにwingetの管轄外のものも含まれてしまいます。
そこで、winget list | findstr wingetとしましょう。
末尾のwinget管轄内であるという部分がヒットして、どれが古いかがとても分かりやすくなります。

後フォントにこだわりがなかったのですがWindows Terminalのデフォルトフォントがとても好きで、Visual StudioやVisual Studio Codeのフォントを変えてしまいました。
丸くて温かみを感じます。
Cascadia Monoというそうです。

久しぶりに記事を書きました。
2015年に専門学校入学と同時に初めて自分のPCを持ち、そこからゲームを作りながらC/C++やDirectXに触れ、2018年に卒業して前職へ。
その後2019年に弊社へと至り、PCやプログラミングなどITなことに触れ始めてもうすぐ8年目となります。
学習速度は人それぞれで、正直あまりプライベートでこういった技術的なことをやってはいないのですが、これからも少しずつ自分のペースで無理なく成長を続けていけたらと思います。

余談ですが、ゲームが好きなので最後に少しだけ語らせてください。

今年遊んだゲームで特によかったものを5つくらい選ぶと「NINJA GAIDEN Σ2」、「HOLLOW KNIGHT」、「STRAY」、「蒼き雷霆(アームドブルー)ガンヴォルト ギブス」、「白き鋼鉄のX2」です。
NINJA GAIDENに興味があるけどXBOXかぁと思っていた方、私もです。
去年3作品をまとめたコレクションが出てNINTENDO SWITCH/PS4/XBOX ONE/Steamなど幅広い環境で遊べるようになりましたのでぜひ。

また、同じく最初はXBOX系列であるXBOX 360のみで発売された作品として、数年前まで権利関係でしばらくSteamでの販売が停止していた「Alan Wake」もSteamで遊べます。
遊んだのはもう3,4年くらい前なのですが今も記憶から色あせることのない名作です。
確認したら今もSteamのストアで購入できるようなのでこちらもぜひ。

後今年は個人的に「ネプテューヌ」シリーズの本編最新作が7年ぶりに出たのはとても嬉しかったです。
次は「Milk Inside A Bag Of Milk Inside A Bag Of Milk」をプレイ予定です。
ベヨネッタ3とソニックフロンティアは早めにやりたいところ。あ、ソルクレスタもやりたい。
ポケモンもいくつかやってないのがあるので埋めてから最新作をやりたいがいつになるやら...。

ということで今回はここまでとします。
せっかくプライベートで開発環境を構築したので、目的であったテストコードを書くことはもちろん、他にも何かしら開発をして業務に活かしていけたらと思います。
またいつか何かあれば書きます。



CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。