Windowsの開発環境構築 - Scoopとmiseによるパッケージ管理
はじめに
WindowsのPCを新調したので、開発環境を整えていきます。 以前のWindows機では、適当にツールをインストールして使っていましたが、 なんだかごちゃごちゃしていたなというのを反省して、整理できるようにツールを入れていきます。 基本方針としては、セルフアップデート機能のあるものは公式インストーラーで、 そうでないものはパッケージ管理ツールで、 バージョンを固定する必要があるものはバージョン管理ツールでインストールしていきます。 MacやLinuxに比べてWindowsの開発環境の管理はちょっとつらそうというイメージがありましたが、 Scoopとmiseを使うことで、意外と簡単に整えることができました。
PowerShellのインストール
早速横道にそれてしまいますが、 Windows環境で開発を進めるにあたってPowerShellを使っていくことになると思います。 そこで、PowerShellを起動してみると、 「新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows」の文字が見えます。 インターネットの情報も更新されていきますし、なるべく新しいものを使いたいので、 指示に従って最新のPowerShellをインストールします。
指示に従ってリンク先にアクセスすると、PowerShellのインストール方法が記載されています。 WinGetを使ったインストール方法がおすすめされているので、
winget install --id Microsoft.PowerShell --source wingetpwsh」と入力することで起動できるようです。
古いバージョン(v5)は、
スタートメニューから「Windows PowerShell」を選択するか、
実行ダイアログで「powershell」と入力することで起動できるようです。
ドキュメントフォルダの変更
Windowsでは「ダウンロード」「ドキュメント」「ピクチャ」などの特別なフォルダが存在します。
これらのフォルダはユーザープロファイルディレクトリ(C:\Users\ユーザー名)の下に存在すると思っていたのですが、
最近ではOneDrive以下に配置されているようです。
ただ、「ドキュメント」の下にPowerShellのプロファイルスクリプトなどを配置する予定です。
ちょっと気持ち悪くバックアップしたいわけでもないので、
「ドキュメント」フォルダをユーザープロファイルディレクトリ直下に変更しました。
エクスプローラーで「ドキュメント」フォルダを右クリックして「プロパティ」を選択し、 「場所」タブを開きます。 ここで「標準に戻す」ボタンを押すと、ユーザープロファイルディレクトリ直下に戻せるはずですが、 「フォルダーをここに移動できません」とエラーが出てしまいました。 OneDriveの自動バックアップ機能が邪魔をしているようなので、 OneDriveのバックアップを停止すると変更できるようです。 (OneDriveのアンインストールまでするとうまくいかなくなってしまうようです。ちょっとはまりました。)
Scoopのインストール
開発を行うにあたって、様々なツールをインストールしていくことになります。 gitやAWS CLIなどのコマンドラインツールはバージョンにこだわりがないことが多く、 古いバージョンを使っているとセキュリティリスクが高まることもあるため、 なるべく新しいバージョンを使っていきたいところです。 (実際にOpenSSL(Gitが依存しています)で脆弱性が発見されることもあります。)
そんな時に便利に使えるのがWindows向けのパッケージ管理ツールであるScoopです。 (MacやLinuxで使われるHomebrewのようなものです。) 特徴としては、 1) CLIで様々なツールを簡単にインストール・アンインストール・アップデートできること、 2) ユーザーディレクトリにインストールされるため管理者権限が不要なこと、 などが挙げられます。 アップデートが簡単にできるため、常に最新のバージョンを維持しやすく、重宝しています。
ちなみに、Google ChromeやVisual Studio CodeのようなGUIアプリケーションも Scoopでインストールできますが、 セルフアップデート機能が備わっていることが多いため、 個人的には公式のインストーラーを使ってインストールで十分かと思っています。 もし、Windows Serverなどで初期化スクリプトを作成する場合などは、 GUIアプリケーションもScoopでインストールすると便利かもしれません。
そんなScoopをインストールしていきます。 公式ドキュメント(https://scoop.sh/)に記載されている手順に従い、 PowerShellを起動して、以下のコマンドを実行します。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expressionscoop --versionとりあえず、使いたいツールをインストールしてみます。 例えば、gitをインストールする場合は次のコマンドを実行します。
# gitの検索(インストールしたいツールがあるかを確認します)
scoop search git
# gitのインストール
scoop install gitScoop自体とScoopで入れたツールを最新に保つために、 定期的に次のコマンドを実行しています。 せっかくScoopの恩恵を最大限受けるためにも、 忘れずにアップデートしていきたいところです。
# Scoopの更新 & ツールのバージョン一覧の更新
scoop update
# インストール済みツールの更新
scoop update --allmiseのインストール
いつでもScoopで最新のツールをインストール・アップデートできるのは便利ですが、 プロジェクトごとに異なるバージョンのツールを使い分けたい場合などには 少し不便に感じることがあります。 そこで、クロスプラットフォームで動作する miseというパッケージ管理ツールを使ってみることにしました。 asdfのようなもののようです。
miseのインストールは、 公式ドキュメントを参照すると、 Scoopでインストールすることが推奨されています。 パスの設定も自動で行ってくれるようです。 次のコマンドを実行して、miseをインストールします。
scoop install misemise --version次に、miseのアクティベーションを行います。 このままだと、PowerShellでフォルダを移動してもmiseでプロジェクトごとに設定したバージョンが、 動的に反映されないため、動的に反映するための設定を行います。 公式ドキュメント に記載されているように、PowerShellのプロファイルにスクリプトを追加します。
echo 'mise activate pwsh | Out-String | Invoke-Expression' >> $PROFILE$PROFILEはPowerShellのプロファイルスクリプト(.bashrcのようなもの)のパスを表しています。
その後で、PowerShellを再起動します。
これでmiseのアクティベーションが完了しました。
miseのレジストリに登録されているツール群は、 LinuxやMac向けのものが中心のようですが、 ある程度Windowsにも対応しているようです。 手元で試したところ、GoやNode.js、Python、uvなどのツールは問題なくインストールできました。 例として、hugoをインストールしてみます
# hugoを検索
mise search hugo
# hugoのインストール可能なバージョン一覧を表示
mise ls-remote hugo-extended
# hugoの特定バージョンをインストール
mise install hugo-extended@0.152.2
# インストールしたhugoのバージョンを有効化
mise use --global hugo-extended@0.152.2
# プロジェクト内でのみ有効化する場合は、プロジェクトディレクトリで次のコマンドを実行
# mise.toml が作成されます
mise use hugo-extended@0.152.2
# インストールしたhugoのバージョンを確認
mise which hugopipxのインストール
バージョン管理ツールとしてmiseを導入しましたが、 レジストリがasdf用しかなくpoetryがうまくインストールできませんでした。 (uvは入ったのでそれでもよいのですが、利用しているプロジェクトもあり。。) そこで、Pythonのパッケージをグローバルにインストールできるpipxを導入しました。 pipxはScoopでインストールできます。 次のコマンドを実行して、pipxをインストールします。 (miseか何かでPythonをインストールしておかないと、動作しないかもしれません。)
scoop install pipxpipx --versionpipx ensurepath入れたかったpoetryですが、バージョン管理したいので、 poetryの公式ドキュメントに従って、pipxのsuffixオプションを使ってインストールします。
pipx install --suffix="@1.8.5" poetry==1.8.5poetry@1.8.5 --versionそれ以外のツール
それ以外のツールとしては、Dockerとgcloudを公式インストーラーで入れました。 どちらもセルフアップデート機能が備わっているため、 公式インストーラーで入れるのがよいかと思います。 (力の抜けたブログでいようと思うので、手順は省略します。 アップデートは忘れないようにしたいですね。)
おわりに
miseがとても便利で驚きました。 以前はpyenv-winとかでPythonのバージョン管理をしていたのですが、 セキュリティアップデートまでは対応できず、もう一歩ほしいと思っていました。 クロスプラットフォームでもある程度動作するので、 同じ構成で好きなOSを行き来しながら開発できそうです。