見出し画像

パッケージ管理システムのすすめ

Windowsではあまりなじみのない人が多そうなパッケージ管理システム。LinuxやmacOSでは割と普通に使われていて便利なものです。というわけで、パッケージ管理システムを使いましょうというご紹介です。
特にソフトウェア開発をやりたい人は必須かと思います。

パッケージ管理システムとは

ざっくり言えばアプリのインストールと管理を楽にしてくれる便利なツールです。Linuxではディストリビューションで使うツールは異なりますがパッケージ管理ツールを使うのが当たり前。macOSでもhomebrewというパッケージ管理ツールが有名です。ストアからアプリを入れる人も多いとは思いますが、homebrewを利用している人も多いです。

Windowsでアプリを入れようと思った場合、大体、こんな手順になることが多いでしょう。

  1. ほしいアプリの公式サイトや、窓の杜などのアプリを紹介するサイトなどからアプリをダウンロード

  2. ダウンロードしたものが*.msiや*.exeならばインストーラーなのでそれを実行、あとは画面の指示に従ってマウスをクリック

  3. *.zipであればどこかのフォルダに置いて、必要に応じてパスの設定などを行う

難しいことではないですが、いちいちダウンロードして、それを解凍や実行し、画面の指示に従ってインストール先やオプションなどを入力し…とそれなりに手間がかかります。

これをコマンドライン(CLI)からコマンド一発でやってくれるのがパッケージ管理ツールです。
アプリによってはそのアプリ本体以外に必要なものがあることも。それをまた探してきてインストールしてというのは面倒です。が、パッケージ管理ツールならばその辺も自動・半自動で処理してくれるので、ランタイムライブラリを探しに行く必要もありません。

強いて面倒な点を挙げると、多くの場合はコマンドラインからコマンドを打つ必要な点でしょうか。普段、マウス操作に慣れている人からすると、わざわざコマンドプロンプトを立ち上げてコマンドを打つのは面倒と思うかも。
ただ、普通にインストールした場合、そのあと、何度もマウスのボタンをクリックすることになりますが、多くの場合、パッケージ管理ツールでインストールした場合は、黙って見ているだけで何もする必要がないことが多いです(たまに、確認とか追加情報を入れる必要がある場合もある)。

Windows以外では普通なパッケージ管理ツール

例えば、LinuxなどのUNIX系のOSの場合、昔はソースをダウンロードしてきて、ビルドを自分でやるのが一般的でした。ですが、そのためにはコンパイラなどのツールが必要だし、作業手順が複雑なものも。
そのため、割と昔からパッケージ管理ツールというものが登場し、アプリのインストールを簡単にできるようになっていました。

一方、Windowsの場合はソースから自分でビルドするというのはまれで、多くの場合、インストーラーをダウンロードしてきてインストールするのが一般的。そういう意味ではLinuxなどの比べると手軽だったので、逆にパッケージ管理ツールというものがあまり普及してきませんでした。

その点では、macOSもWindowsに近い感じなのですが、homrebrewというパッケージ管理ツールを使う人も多いです。macOSそのものはLinuxに近いものですし、ITエンジニアなどの利用が多いことが影響しているのでしょうか。ただ、一般のmacOSユーザはパッケージ管理ツールを使わずにストアやダウンロードしたインストーラーを実行する人が多いかもしれません。

パッケージ管理ツールの何がよいのか

一般の利用者にはあまり刺さらないかもしれませんが、これらを使うことでのメリットがいくつかあります。

いちいち公式サイトをWeb検索しなくてよい

その代わり、コマンドを入力しないといけないのですが。ただ、例えばGoogleで検索してそれっぽいサイトを見つけ、そこでダウンロードページを探して、自分の環境に合わせたものをダウンロードする…ということが、1個のコマンドで済んでしまいます。さらにインストールも1個のコマンドでだいたい終わるので、探してダウンロードしてインストールまでをだいたい2コマンド、最初からインストールしたいものの名前がわかっていれば1コマンドで終わります。

アップデートも簡単

これらのインストールしたソフトがアップデートしたらどうでしょう。これはアプリによって違いますが、おおむね、以下のようなパターンに分かれるかと思います。

  • アプリが最新版をチェックして教えてくれるので、指示に従ってアップデート

  • アプリが最新版をチェックして教えてくれるが、自分で公式サイトからダウンロードしてインストール

  • アプリでは最新版をチェックしていないので、自分で確認してアップデートされていたらダウンロード&インストール

これを、インストールしたアプリごとにそれぞれやらないといけません。

パッケージ管理ツールを使えば、多くの場合アップデートを確認するコマンドと、実際にアップデートをするコマンドの2コマンドで済みます。これは、ツールを使ってインストールしたすべてのアプリが対象なので、どれだけ多くのアプリをインストールしていてもまとめて2コマンドで済みます。

アプリ毎に異なる手順を覚えなくてよい

最初にも書いたとおり、アプリによってどこに確認に行くか、インストーラーなのかZIPファイルなのか、インストーラーかと思ったら単なる自己解凍形式で自分で作業が必要だとか、アプリのインストール先フォルダもバラバラだとか、ケースバイケースかと思います。

パッケージ管理ツールを使う場合、覚えるのはパッケージ管理ツールの使い方のみ。あとは、ツールがカバーしてくれるので、インストールやアップデートについてアプリ毎に細かいことを覚える必要はありません。

(比較的)安全

絶対安全とは言い切れない部分もありますが、Webで検索してダウンロードしたアプリはもしかしたら怪しいものや偽物かもしれません。
その点、パッケージ管理ツールで扱っているものは誰かしらチェックしているはずなので、比較的安全であると考えてよいとは思います。
ただし、GoogleやAppleのアプリストアに怪しいアプリがあることで分かる通り、絶対安全、安心ではありません。

また、普通にブラウザでダウンロードした場合、通信状態によっては途中で切れてしまうこともあります。その場合は実行してみてエラーになってわかることも。パッケージ管理ツールの場合、正常にダウンロードできたか、管理されているものと同じものかをたいていチェックしています。ですので、途中で切れたりすると自動的にやり直してくれるか、ちゃんとエラーになります。

パッケージ管理ツールの弱点とは

よいことづくめのようなパッケージ管理ツールにも弱点が。それも簡単に紹介しておきます。

コマンドラインでの操作が必要

慣れればマウスカーソルを動かしてボタンをクリックするより早いのですが、今どきはマウスによるGUI操作しかしたことないことが多いでしょう。そうすると、コマンドライン(CLI)って面倒じゃないの?と思うかもしれません。

Linux以外では非公式機能

Linuxではディストリビューションごとに公式のパッケージ管理ツールがあります。が、macOSならばhomebrewは広く使われているもののAppleの公式機能ではありません。そうそうないとは思いますが、homebrewの提供元がなくなったりすれば使えなくなる可能性もあります。

Linuxではパッケージ管理ツールがなくなることはないと思いますが、例えばディストリビューションを乗り換えると違うツールになる可能性もあるし、同じディストリビューションでも公式ツールが変更になるかもしれません。その場合、新しいツールの使い方を覚える必要があります。

パッケージ管理ツールで扱ってないアプリもある

そして、すべてのアプリがパッケージ管理ツールでサポートされているわけではありません。例えば、マイクロソフトのOfficeなどはマイクロソフト以外からの入手は不可能でしょう。
Windowsには多くの無償ソフトがありますが、それらもパッケージ管理ツールでは対応していないかもしれません。使いたいソフトがなければせっかくのツールも意味がないですよね。
特に国産アプリは対応していないことが多い感じです。

なぜソフトウェア開発者は使うべきなのか

最初に書いたとおり、ソフトウェア開発に携わろうという人であれば、パッケージ管理ツールを使うべきだと自分は考えます。
その理由をピックアップします。

Windows以外では普通なので慣れておこう

上でも書いたとおり、Linuxではパッケージ管理ツールの利用はもはや必須とも言えますし、macOSでも多くのソフトウェア開発者はhomebrewというツールを利用しています。
Windowsアプリしか作らない、Windows環境でしか開発しないというのであれば別ですが、多くの場合、Linux系のOSを使う機会もそれなりにあるはず。自分で環境整備できるくらいのスキルは必要なので、パッケージ管理ツールくらい使えるようになっておいたほうがよいだろう、というのが理由の一つです。

開発に使うようなツールはたいてい揃っている

アプリによってはツールに対応していないと書きましたが、一般的な開発ツール(エディタとか統合開発環境、コンパイラや関連ツールなど)は多くの場合対応しています。
それらのバージョン管理も考えると、まとめてできたほうが便利ですよね。

ただし1点だけ注意点があります。場合によっては最新版が常によいとは限らないということ。言語のバージョンや各種ライブラリのバージョンなど、特定のものしか対応していないということもあります。また、最新版は不具合があることや、機能が変わっていて既存のものへの修正が必要なこともあります。
パッケージ管理ツールで無造作にまとめてアップデートしてしまうと問題が出ることもあるので注意してください。
(そうならないような仕組みの作り方とか気にする必要があることも。最近のプログラミング言語はその辺も考えられているので、気にしなくてもよい場合もあります。逆に言うとパッケージ管理ツールを使わないほうがよいケースもあります。その辺は個別の話なのでここでは割愛)

Widndowsのパッケージ管理ツール

最後に、Windowsのパッケージ管理ツールについて。macOSにおけるhomebrewほど「定番」と言えるか微妙ですが、有名どころとしては以下の3つがあるようです。

WinGet

マイクロソフト公式なので、ある意味一番安心できます。ただ、公式だからと言ってマイクロソフトのことですからいつまでサポートしてくれるのやら、という不安もあります。

Windows11や、最近のWindows10には最初から入っているので、改めて何かをインストールする必要がないというのは手軽です。

今回紹介する3ツールの中では公式ながら最後発なので、対応アプリ数が少ないというのはありますが、公式だけに大手メーカー製品にも対応していることもあるよう。
例えば、マイクロソフトのアプリは不思議ではないとして、マウスでおなじみのロジクール(海外ではlogitech)のアプリが対応していたりします(WinGetを使ってインストールしていないものも、WinGetでアップデートできる?ただ、何やらエラーが出たので微妙)。
例えば、「winget list」とコマンドラインから実行すると、いろいろなアプリの名前が出てくるはず。ストアアプリも対応しているようです。
ただ、インストール中にマウス操作が必要なこともありました(キーボードショートカットでマウスなしでもいけますが、どちらにしろCLIで完結しない)。

chocolatey

一番古いツール(と言っても次のScoopとは2年くらいしか違わない)なので、一番対応アプリも多いです。

ただ、今となってはあまり人気がないよう。Googleトレンドでこの3つを過去5年で比較すると、ワールドワイドではScoopの圧勝で、WinGet、Chocolateyが五十歩百歩。日本でも傾向は同じですが、WinGetとChocolateyが若干増える感じです。

すでに使っているなら別として、積極的に選ぶ理由はなさそうです。

Scoop

「タイトル未設定」と表示されてしまうのはnote.com側の問題?

上の2つとは違う特徴は、インストール先がWindows標準のアプリインストールフォルダではなく、ユーザー毎のディレクトリの下であること。そして、そのために管理者権限が不要なこと。
1台のPCのユーザによってインストールするアプリやバージョンを分けたい場合にはこちらのほうが良いかも。特に会社などで管理者権限が使えない場合に有効ですが、その場合はそもそもアプリを勝手にインストールすること自体がNGだったりするので、よく確認して使ってください。

どれがいいのか?

Chocolateyを積極的に選択する意味はあまりなさそうなので、WinGetかScoopでしょうか。
WinGetは普通にインストールしたものもこれでアップデートできたりするので、これはこれで使うのは良さそうです。となると、あえて別の非公式ツールであるScoopを使うのかどうか。

Scoopの場合、自分でインストールに使うファイルを用意することも可能なので、腕に覚えのある人が使うことがある模様。

あとはまあ、使いたいソフトがあるかどうかという身もふたもない話になります。有名どころのツールはどちらでも問題なさそうな感じですが、とりあえず両方入れてみて、それぞれで必要なツールがあるか、バージョンはどうかを確認するのがよさそう。基本はWinGet、それでないものはScoopというような運用になりそうです。
ただ、インストール先が違うため、場合によっては同じアプリが違うところに重複インストールされてしまうことも。ですので、よくわからない場合は混在は避けた方がよいです。その場合、最初から入っているWinGetを使う方が無難でしょう。

よく使うアプリを探してみた

非常に偏っていますが、自分がよく使うアプリ類を探してみました。(Scoopはextrasを含む、6/26 日本時間の夕方時点)

  • TeraPad: どちらもなし

  • Tera Term:どちらも4.106

  • WinScp:どちらも6.1.1

  • notepad++:どちらも8.5.4(scoopではnotepadplusplus)

  • WinDiff:scoopのみ(2.1.0)

  • WinMerge:どちらも2.16.30

  • Chrome:どちらも114.0.5735.134

  • Chrome Driver:どちらも114.0.5735.90

  • Edge:WinGetのみ(114.0.1823.58)

  • Edge Driver:どちらも114.0.1823.58

  • Vivaldi:WinGet 6.0.2979.15、Scoop 6.1.3035.100

  • OpenSSL:どちらも3.1.1

  • Python3:どちらも3.11.4 ※最新版のみ記載、WinGetはとくに多数のバージョンが表示される

  • Ruby:WinGetは3.2.0-1、Scoopは3.2.2-1

  • Rust:どちらも1.70.0

  • Go:どちらも1.20.5

  • VS code:どちらも1.79.2

  • Docker Desktop:WinGetのみ(4.20.1)

  • Docker CLI:どちらも24.0.2

  • Virtual Box:WinGetのみ(7.0.8)

  • CPU-Z:どちらも2.06

  • CrystalDiskMark:WinGet 8.0.4、Scoop 8.0.4c

  • CrystalDiskInfo:WinGet 9.0.1、Scoop 9.0.1a

  • PowerToys:どちらも0.70.1

どちらもsearchコマンドで検索しました。Scoopは都度ネット経由で問い合わせるのか、自分の環境ではワンテンポ遅い感じ。WinGetはだいたいはすぐに結果が返ってきます。
有名どころはどちらにもありますが、たまにScoopの方が新しいことも。おそらく有志が追加してくれているのかと思います。

とりあえずWinGetを使ってみよう

最初から入っているからという理由なので、別にScoopでもよいのですが、とにかく、パッケージ管理ツールを使ってみましょう、という話。ついでにコマンドラインに慣れるとなおよし。ソフトウェア開発やるなら、ケースにもよりますがコマンドラインは避けて通るのはなかなか難しいので。


拙い記事でございますが、サポートしてもよいよという方はよろしくお願いします。著者のやる気アップにつながります。