特集

年末のPC大掃除を効率化! OS初期化後のアプリのインストールを自動化しよう

「Chocolatey」を使ったスクリプトでアプリをインストール

最新のWindows 10はOSの初期化が簡単

 令和最初の1年も、あっという間に終わってしまいました。仕事は今週で納めて、週末は大掃除……というご家庭も多いのではないでしょうか。ついでにPCもOSをクリーンアップして、環境を再構築するなんてユーザーも筆者だけではないでしょう。

 最新のWindows 10ではOSの初期化が簡単になっており、インストールディスクが不要になりました。また、「OneDrive」や「Dropbox」といったオンラインストレージにファイルを保存するようにしておけば、わざわざバックアップファイルから復元しなくても、まっさらな環境にいつも使うファイルがすぐにダウンロードされます。“窓の杜”はいろんなアプリを試す関係で定期的にOSの初期化を(テスト端末・仮想環境の数だけ!)行う必要があるのですが、環境の再構築は以前よりも随分手軽になりました。

オンラインストレージにファイルを保存するようにしておけば、わざわざバックアップファイルから復元しなくても、まっさらな環境にいつも使うファイルがすぐにダウンロードされる

 とはいえ、いまだに手作業で行わなければならないセットアップ処理も少なくありません。

  • アプリのダウンロードとインストール
  • 有償アプリのライセンス登録
  • アプリのカスタマイズ
  • オンラインサービスのアカウントセットアップ
  • 「WSL」など、追加機能の有効化とセットアップ
  • 作業円滑化のための追加処理(NASへのショートカット作成、社内VPNの登録)

 環境を丸ごとイメージバックアップして復元するという手もあるのですが、筆者の場合、OSの初期化で“クリーンな環境”を得ることも目的の1つなので、あまり使いたくありません。イメージバックアップでは余計なデータやカスタマイズまで再現されてしまうし、OSの初期化にあわせてハードウェア構成に手を入れる(ディスクを増設したり、GPUを入れ替えたり)と、復元に失敗する可能性もあります。少々面倒ですが、やはり自分で作業環境を再構築する方が目的にあっています。

 とはいえ、面倒ごとはなるべく避けた方がよいでしょう。たとえばアプリのカスタマイズ作業の場合であれば、日頃からデフォルトの設定でアプリを使うように心がけることでカスタマイズの必要は減りますし、設定ファイルのコピーで済むアプリであればオンラインストレージからの復元で済ませることができるでしょう。また、なるべく“Microsoft Store”から有償アプリを購入するようにすれば、ライセンスの登録を省くことができます。

 なかでもお勧めは、毎回行うような定型処理はスクリプトにしてしまうことです。オンラインストレージにセットアップスクリプトを置いておけば、OSの初期化とオンラインストレージの同期のあとにスクリプトを実行するだけで、いつも使っている環境を再構築できます。

 そこで今回は、OS初期化後のセットアップをスクリプトで行う方法を2回に分けて紹介したいと思います。前編となる本稿では、「Chocolatey」を利用していつも使うアプリのダウンロードとインストールを自動化します。

「Chocolatey」とは?

パッケージ管理システム「Chocolatey」

 「Chocolatey」とは“パッケージ管理システム”と呼ばれるソリューションの1つで、コマンドラインでアプリケーションの導入や削除が行えるようにしたものです。アプリには“これを利用するには、まずあれをインストールしておかなければならない”といった“依存性”を持つものが少なくないですが、パッケージ管理システムはこの解決も自動で行ってくれます。GUIのインストーラーでアプリをセットアップする方が初心者にとってはわかりやすく、インストールの際にこまごまとしたカスタマイズが目視で行えるのも魅力ですが、スクリプトで処理を自動化したい場合はコマンドラインでインストールできるのがメリットになります。

 実はWindows環境で利用できるパッケージ管理システムは「Chocolatey」だけではありません。最近では管理者権限不要の「Scoop」を利用する人が増えているようですし、OS標準でも「PackageManagement」(“Install-Package”コマンド)が用意されています。

 今回「Chocolatey」を用いることにしたのは、単に筆者が数年来愛用しており、馴れているからというだけに過ぎません。「Chocolatey」には、

  • 実行の際に管理者権限が必要
  • アプリのアンインストールがうまくいかない場合がある

など、不満に感じるところも少なくないので、「Scoop」を試してみるのもよいでしょう。「PackageManagement」を利用する場合は、結局「Chocolatey」をソースとして追加することになるので、「Chocolatey」の使い方を学んでおいて損はないです。

「Chocolatey」をインストールし、実際に使ってみる

 まず、「Chocolatey」の動作環境を確認しましょう。通常はこれらが問題になることがないはずです。

  • Windows 7/Server 2003以降
  • Windows PowerShell 2.0以降(「PowerShell Core」は未対応)
  • .NET Framework 4以降

 「Chocolatey」をインストールするには、シェルを管理者権限で起動し、インターネット経由でセットアップスクリプトを取得して実行します。

シェルを管理者権限で起動

 Windows 10の場合、[スタート]ボタンの右クリックメニュー([Windows]+[X]キー)にある[PowerShell(管理者)]コマンドで「PowerShell」を起動し、「Chocolatey」のWebサイトに掲載されている以下のコマンドをコピー&ペーストして実行するだけです(「コマンド プロンプト」の場合は、あとで解説)。

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

 “Set-ExecutionPolicy Bypass”は、「PowerShell」のセキュリティを一時的に緩めるためのコマンドです。

 “iex”は“Invoke-Expression”の略(エイリアス)で、指定された文字列(今回は“WebClient”を生成して“install.ps1”スクリプトをダウンロードするというコマンド)を評価・実行します。

セットアップコマンドをコピー&ペーストして実行

 本来、このようにインターネットから(訳のわからない、怪しい)スクリプトを取得してそのまま実行するのは推奨されることではありませんが、“install.ps1”は内容を事前に確認できる上、多くのユーザーがすでに利用しているのも関わらず問題はないので、十分に信頼できるとみなしてよいでしょう。

 「Chocolatey」のアプリパッケージ(ほとんどはMSIインストーラーにスクリプトを添付してZIPで固めたものです)も、最低限のチェックと署名が施されており、信頼できるものとみなせます。ただし、本当であれば安全かどうか自分でチェックすべきものですし、セキュリティ対策を怠ってはなりません。

 「Chocolatey」のセットアップが完了すると、“choco install (アプリパッケージ名)”コマンドで簡単にアプリをインストールできるようになります(要管理者権限)。たとえば、OSをクリーンアップしたらまず「Microsoft Edge」で「Google Chrome」をインストールするというユーザーは少なくないと思いますが、それは以下のコマンドで行えます。

choco install googlechrome

 「Chocolatey」でインストール可能なアプリは、「Chocolatey」のWebサイトで検索するとよいでしょう。アプリパッケージのページにはインストールコマンドが掲載されており、ワンクリックでコピーできるようになっています。

「Chocolatey」の「Google Chrome」アプリパッケージのWebページ。インストールコマンドが掲載されている

覚えておいた方がよい「Chocolatey」コマンド

「Chocolatey」は基本的に“choco install”“choco uninstall”さえ覚えていれば使えますが、余裕があれば以下のコマンドも覚えておくとよいでしょう。

 パッケージを検索する:Webでアプリパッケージの名前を確認するのが面倒な時は、“choco search”などを利用します。

  • choco search <filter> [<options/switches>]
  • choco list <filter> [<options/switches>]

 パッケージのインストールを制御する:“choco install”では追加オプションを指定することで、バージョンの指定やサイドバイサイド(複数バージョンの共存)インストールが可能です。

  • choco install *** --version ***:バージョンを指定する
  • choco install *** -y:インストールの確認をスキップする
  • choco install *** -m:サイドバイサイドインストールを行う

 たとえば、複数バージョンの「Ruby」を同一環境へインストールし、インストールの確認をスキップしたい場合は、以下のようにします。

choco install ruby --version 1.9.3.55100 -my
choco install ruby --version 2.0.0.59800 -my
choco install ruby --version 2.1.5 -my

スクリプトにするには?

スクリプトで処理を完全に自動化する

 さて、「Chocolatey」の基本の基本がわかってきたところで、今度はこれをスクリプトにしてみます。スクリプト化するにあたって解決しなければならないのは、以下の3点です。

  • 管理者権限で実行する
  • 「PowerShell」のセキュリティ(ExecutionPolicy)のバイパス
  • “choco install”の確認をスキップする(でないと、毎回スクリプトが止まる)

 1つ目の“管理者権限で実行する”をクリアするため、今回はスクリプトをバッチファイル(*.bat)にすることにしました。右クリックメニューから簡単に[管理者権限として実行]コマンドが利用できるからです。PowerShellスクリプト(*.ps1)の右クリックメニューには残念ながらこのコマンドがありません(管理者権限付きで起動するようにスクリプトを書くことは可能ですが、今回は割愛)。

バッチファイルなら右クリックメニューから簡単に[管理者権限として実行]コマンドを利用できる

 2つ目の問題は、「PowerShell」の“Set-ExecutionPolicy”コマンドレットを利用でポリシーを“Restricted(制限する。初期値)”から“RemoteSigned(Webから入手したスクリプトには署名が必要)”に緩めることで解決。「Chocolatey」によるアプリのインストールが完了したら、セキュリティ上の理由で初期値へ戻しておくことにします。

「PowerShell」のセキュリティ(ExecutionPolicy)を緩めないとエラーで先に進めない

 3つ目の問題は、“choco install”コマンドに“-y”オプションを追加することで解決できます。

 これらの3つを踏まえると、セットアップスクリプトは以下のようになるでしょう(“REM”はコメント行です)。

@REM セキュリティを一時的に緩める
powershell Set-ExecutionPolicy RemoteSigned

@REM 「Chocolatey」をインストール
powershell iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

@REM アプリのインストール(一時的に「Chocolatey」のインストールフォルダーへパスを通します)
set path=%path%;%ChocolateyInstall%

choco install -y googlechrome



@REM セキュリティ設定を元に戻す
powershell Set-ExecutionPolicy Restricted

ECHO "すべての処理が完了しました。"
PAUSE

 インストールするアプリは、それぞれ環境に合わせて選んでください。筆者の場合は、これに加え、以下のアプリなどを足しています。

 次回は、アプリのインストール以外でよくやるセットアップ処理を紹介します。