Transcript
00:00:00数ヶ月前、このチャンネルで Homebrew を
00:00:05「Nix の圧倒的な機能の前に霞む、石器時代のツール」と評する動画を公開しました。
00:00:12だからこそ、今ここで改めてお伝えしなければなりません。
00:00:17その「石器時代のツール」が、数年ぶりにメジャーバージョン「Homebrew 6.0」をリリースしたのです。
00:00:23目玉は新機能の目 ordered ではなく、セキュリティの全面刷新です。Homebrew は大きく進化しました。
00:00:30単なるバージョン番号の変更以上に興味深い内容ですので、具体的な変更点を説明しましょう。
00:00:38これまでの Homebrew では、サードパーティの tap(他人のパッケージリポジトリ)を追加すると、
00:00:45Homebrew はその中にある Ruby コードをそのまま実行していました。
00:00:51どんな tap であろうと、任意のコードを何の疑いもなく実行していたのです。
00:00:56今やパッケージマネージャーはサプライチェーン攻撃の最大の標的であり、
00:01:01NPM をはじめ、多くのシステムが何度も被害を受けています。「渡されたコードをそのまま実行する」のは非常に危険なデフォルト設定です。
00:01:08Homebrew 6.0 の新機能はそれを無くすために登場しました。それが「Tap Trust」です。
00:01:15このようなコーディングのヒントが好きな方は、ぜひチャンネル登録をお願いします。
00:01:19では、日常的に最も実感する部分から見ていきましょう。「brew version」を実行すると 6.0 と表示されます。
00:01:25依存関係のあるパッケージをインストールする際の挙動に注目してください。
00:01:31勝手に処理を進めるのではなく、インストール予定の要約を表示し、ユーザーの確認を待つようになります。
00:01:38これが新しい「Ask モード」で、開発者向けにデフォルトで有効化されています。
00:01:44小さな変化ですが、システムに変更を加える前に必ず計画を確認できます。
00:01:50そして目玉機能が「Tap Trust」です。サードパーティの tap を追加しようとすると、
00:01:56「この tap はまだ信頼されていません」と表示され、明示的に許可するまでコードを 1 行も実行しません。
00:02:03「brew trust」で明示的に信頼して初めて実行されます。公式 tap は最初から信頼されているため、
00:02:09通常の Brew の使い心地はまったく変わりません。
00:02:16しかし、GitHub の README で見つけた野良 tap には鍵がかかるようになり、
00:02:20手動での承認が必要になります。現代のセキュリティを考えると、非常に賢明な判断でしょう。
00:02:25アップグレードはこれだけではありません。内部メタデータシステムが標準化され、
00:02:30細かな通信を何度も行う代わりに、一括でパッケージ情報をダウンロードできるようになりました。
00:02:37これにより「brew update」が大幅に高速化されました。
00:02:45また、Homebrew 版 npx と言える「brew execute」コマンドが新設され、
00:02:51ツールを永続インストールせずに単発実行できるようになりました。
00:02:58さらに、インストール済みパッケージのセキュリティ脆弱性をスキャンする「brew vulns」も追加されています。
00:03:046.0 では、Mac のインストーラーパッケージ経由で root 権限のコード実行が可能な脆弱性を含む、
00:03:093 案のセキュリティホールが修正されています。まさに本格的なセキュリティアップデートです。
00:03:14Brew doctorは信頼されていないタップを検知した瞬間、エラーを出すようになりました。そして多くの標準的なGitHub
00:03:20Tap Trust は破壊的変更(breaking change)です。
00:03:28サードパーティ tap に依存している CI パイプラインがある場合、
00:03:35「brew doctor」は未信頼の tap を検出した時点でエラーを吐くようになります。
00:03:41多くの標準的な GitHub Actions は最初のステップで brew doctor を実行するため、
00:03:46アップデート後にビルドが突然失敗する現象が発生しています。
00:03:51解決策は設定でそれらの tap を信頼済みとして明記することですが、手動で設定を行う必要があります。
00:03:58Ask モードも同様です。確認なしでインストールされることを前提としたスクリプトは、
00:04:04新しいプロンプトの応答待ちで永久に停止する可能性があります。
00:04:10日常的にアプリを導入するだけの一般ユーザーであれば、見た目の変化はほとんどありません。
00:04:16表面的なデザイン変更ではなく、セキュリティとアーキテクチャのためのリリースなのです。
00:04:22ここで誤解を解いておきましょう。「Rust で再構築される」という噂がありましたが、
00:04:27Homebrew が Rust で書き直されることは(少なくとも現時点では)ありません。
00:04:33それらを先に対処すれば問題ありません。また、Intel Macをお使いの方はご注意を。6.0では
00:04:40今後数年間にわたるIntelサポート終了のタイムラインが示されています。新しいMacであるApple Siliconをお使いなら
00:04:46ほとんどの人にとって、答えは「YES」です。3 案のセキュリティ修正が適用されますし、
00:04:53意図にかかわらず「brew update」を実行すれば自動的に 6.0 へ移行します。
00:04:59慎重になるべきなのは、サードパーティ tap を使う CI や、自動インストールスクリプトを運用している人だけです。
00:05:05それらを事前に調整しておけば問題ありません。
00:05:10なお、Intel Mac をお使いの方はご注意ください。
00:05:156.0 では今後数年かけた Intel サポート終了へのスケジュールが明確化されました。
00:05:21Apple Silicon(M シリーズ)のユーザーはまったく問題なく、新しい M5 チップへのサポートも追加されています。