C言語GUI入門|MSYS2を更新する

MSYS2をインストールした直後は、パッケージ情報やMSYS2本体が最新の状態とは限りません。GCCやGTK 4をインストールする前に、MSYS2全体を更新しておきましょう。

この節では、MSYS2に標準で用意されているpacmanを使い、次の作業を行います。

  1. パッケージ情報を最新にする
  2. MSYS2の基本部分を更新する
  3. インストール済みパッケージを更新する
  4. 必要に応じてターミナルを再起動する
  5. 更新コマンドをもう一度実行して完了を確認する

MSYS2はローリングリリース方式を採用しており、個別のパッケージだけを部分的に更新するのではなく、システム全体を更新する方法が基本です。

本コンテンツでは、次のコマンドを使用します。

pacman -Syu

MSYS2の公式更新手順ではpacman -Suyという並びで紹介されていますが、S、y、uという同じオプションを指定しているため、処理内容は同じです。この記事では、一般的によく見かけるpacman -Syuで統一します。

pacmanとは

pacmanは、MSYS2でソフトウェアを管理するためのパッケージ管理ツールです。

パッケージとは、MSYS2本体、GCC、GTK 4、各種ライブラリなどを、インストールできる形にまとめたものです。

pacmanを使うと、次の作業を行えます。

  • パッケージをインストールする
  • インストール済みパッケージを更新する
  • 不要なパッケージを削除する
  • パッケージ情報を検索する
  • 必要な依存パッケージを自動的に導入する
  • パッケージのバージョンを管理する

たとえば、GTK 4をインストールするときには、GTK 4本体だけでなく、動作に必要な複数のライブラリも関係します。pacmanは依存関係を調べ、必要なパッケージをまとめてインストールします。

パッケージ情報とは

MSYS2のサーバーには、利用できるパッケージの情報が保存されています。

パッケージ情報には、主に次の内容が含まれています。

  • パッケージ名
  • バージョン
  • ファイルサイズ
  • 依存するパッケージ
  • ダウンロード先
  • 対象となるMSYS2環境

一方、パソコン側にも、以前取得したパッケージ情報が保存されています。

pacmanは、サーバー側の新しい情報とパソコン側の情報を照らし合わせ、更新できるパッケージを判断します。

場所保存されているもの
MSYS2のサーバー公開されている最新のパッケージと情報
パソコン内現在インストールされているパッケージと取得済みの情報
pacman両方を比較してインストールや更新を行う

図1:pacmanがパッケージを更新する仕組み

この図から分かること

pacmanは、MSYS2のサーバーから最新のパッケージ情報を取得し、パソコンへインストールされているパッケージと比較します。

新しいバージョンが見つかると、必要なファイルをダウンロードして更新します。GCCやGTK 4をこれから導入するときも、同じpacmanを使用します。

更新前の準備

MSYS2の更新では、複数のパッケージをダウンロードします。更新を始める前に、次の点を確認しましょう。

  • インターネットへ接続されている
  • パソコンに十分な空き容量がある
  • ノートパソコンでは電源へ接続している
  • 時間に余裕がある
  • ほかのMSYS2ターミナルを閉じている
  • Visual Studio CodeでMSYS2の統合ターミナルを開いていない
  • 編集中のファイルを保存している

MSYS2の基本部分が更新される場合は、すべてのMSYS2プロセスを終了するよう求められます。Visual Studio Codeの統合ターミナルでMSYS2を動かしている場合も、あらかじめ閉じておくと安全です。

MSYS2 UCRT64ターミナルを起動する

更新作業は、MSYS2 UCRT64ターミナルで行います。

  1. Windowsのスタートボタンをクリックする
  2. 検索欄にMSYS2 UCRT64と入力する
  3. 検索結果からMSYS2 UCRT64を選択する
  4. ターミナルが開くことを確認する
  5. プロンプトにUCRT64と表示されていることを確認する

プロンプトは、次のような表示になります。

ユーザー名@コンピューター名 UCRT64 ~
$

ユーザー名やコンピューター名は、使用しているパソコンによって異なります。UCRT64と表示されていれば、本コンテンツで使用する環境が起動しています。

MSYS2全体を更新する

ターミナルへ次のコマンドを入力し、Enterキーを押します。

pacman -Syu

pacman -Syuを実行すると、パッケージ情報の更新、MSYS2の基本部分の更新、インストール済みパッケージの更新が順番に行われます。

pacman -Syuのオプション

オプション長い形式役割
-S--syncサーバー上のパッケージと同期する
-y--refresh最新のパッケージ情報を取得する
-u--sysupgrade更新できるインストール済みパッケージを更新する

つまり、pacman -Syuは、パッケージ情報を新しくしてから、システム全体を更新するコマンドです。pacmanの公式マニュアルでも、-yはパッケージデータベースの更新、-uは古くなったパッケージ全体の更新と説明されています。

パッケージ情報が更新される

コマンドを実行すると、最初にパッケージデータベースの同期が行われます。

表示例は次のようになります。

:: Synchronizing package databases...
 clangarm64 is up to date
 mingw32 is up to date
 mingw64 is up to date
 ucrt64 is up to date
 clang64 is up to date
 msys is up to date

環境や時期によって、表示されるリポジトリの名前や順番は異なる場合があります。

主な表示の意味は次のとおりです。

表示意味
Synchronizing package databasesパッケージ情報を同期している
ucrt64UCRT64環境用のパッケージ情報
msysMSYS2本体側のパッケージ情報
is up to date情報がすでに最新の状態
downloading新しい情報をダウンロードしている

進行状況が100%になるまで待ちます。

パッケージ情報だけを更新して終了しない

pacmanには、パッケージ情報だけを更新する次のコマンドもあります。

pacman -Sy

ただし、本コンテンツでは、通常の更新作業にpacman -Syだけを使用しません。

MSYS2はシステム全体の更新を前提としており、パッケージ情報だけを新しくして、インストール済みパッケージを古いまま残す部分更新は避ける必要があります。パッケージ同士のバージョンが合わなくなり、正常に動作しなくなる可能性があるためです。

更新するときは、-uまで含めた次のコマンドを使用しましょう。

pacman -Syu

MSYS2本体が更新される

パッケージ情報の同期が終わると、MSYS2の基本部分に更新がないか確認されます。

次のような表示が現れます。

:: Starting core system upgrade...

ここで確認されるのは、MSYS2の動作そのものに関係する重要なパッケージです。

たとえば、次のようなものが含まれます。

  • Bashなどのシェル
  • pacman本体
  • MSYS2のランタイム
  • パッケージ署名に関する情報
  • 基本的なコマンド
  • ターミナルの動作に関係するファイル

更新対象がある場合は、パッケージ名、現在のバージョン、新しいバージョン、ダウンロードサイズなどが表示されます。

更新の確認に答える

更新を実行してよいか確認するメッセージが表示されます。

:: Proceed with installation? [Y/n]

更新を続ける場合は、Yを入力してEnterキーを押します。

Y

Yが大文字で表示されている確認では、何も入力せずにEnterキーだけを押してもYを選んだことになります。

初めて操作するときは、選択を明確にするためにYを入力してEnterキーを押すと分かりやすいでしょう。

確認表示の読み方

表示操作
[Y/n]Yが既定値。Enterキーだけでも続行する
[y/N]Nが既定値。Enterキーだけでは続行しない
Y処理を続ける
n処理を中止する

大文字で表示されている側が、Enterキーだけを押した場合に選ばれる項目です。

更新中はターミナルを閉じない

更新を開始すると、必要なパッケージのダウンロードとインストールが行われます。

表示例は次のようになります。

:: Retrieving packages...
:: Processing package changes...
:: Running post-transaction hooks...

この処理中は、次の操作を避けてください。

  • ターミナルを手動で閉じる
  • パソコンの電源を切る
  • Windowsを再起動する
  • インターネット接続を切る
  • 複数のpacmanを同時に実行する
  • 更新ファイルをエクスプローラーから削除する

進行状況が一時的に止まって見えても、すぐにターミナルを閉じないでください。大きなパッケージの展開や設定処理に時間がかかる場合があります。

MSYS2プロセスの終了を求められた場合

MSYS2の基本部分が更新されると、次のような確認が表示される場合があります。

:: To complete this update all MSYS2 processes including this terminal will be closed.
   Confirm to proceed [Y/n]

これは、現在動いているMSYS2のランタイムを使用したまま、そのランタイムを更新できないためです。

Yを入力してEnterキーを押します。

Y

確認すると、現在のターミナルを含むMSYS2のプロセスが終了します。ターミナルのウィンドウが自動的に閉じても、エラーではありません。

MSYS2の公式更新手順でも、基本パッケージの更新時にはすべてのMSYS2プロセスを終了し、新しいターミナルを起動して更新を再実行するよう案内されています。

図2:MSYS2本体を更新してターミナルを再起動する流れ

この図から分かること

MSYS2本体の重要なパッケージが更新される場合は、更新途中でターミナルが閉じます。

これは更新の失敗ではありません。古いMSYS2プロセスを終了し、新しくなった環境で残りの更新を続けるために必要な動作です。

ターミナルが閉じたら、MSYS2 UCRT64をもう一度起動し、同じ更新コマンドを再実行します。

MSYS2 UCRT64ターミナルを再起動する

ターミナルが閉じたら、次の手順で起動し直します。

  1. Windowsのスタートボタンをクリックする
  2. MSYS2 UCRT64を検索する
  3. MSYS2 UCRT64を起動する
  4. プロンプトにUCRT64と表示されていることを確認する

ここで、MSYS2 MSYSやMSYS2 MINGW64ではなく、MSYS2 UCRT64を選びます。

Visual Studio Codeの統合ターミナルを設定済みの場合でも、環境構築の途中ではスタートメニューからMSYS2 UCRT64を起動すると、使用中の環境を確認しやすくなります。

更新コマンドをもう一度実行する

再起動したターミナルで、同じコマンドをもう一度実行します。

pacman -Syu

1回目の更新でMSYS2の基本部分が更新され、2回目の更新で残りのパッケージが更新されます。

2回目には、次のような処理が進みます。

:: Synchronizing package databases...
:: Starting core system upgrade...
:: Starting full system upgrade...

Starting full system upgradeは、インストール済みパッケージ全体の更新を開始するという意味です。

更新対象がある場合は、パッケージの一覧が表示されます。内容を確認し、次の質問にYで答えます。

:: Proceed with installation? [Y/n] Y

インストール済みパッケージが更新される

MSYS2本体の更新後は、インストール済みの一般パッケージが更新されます。

今後GCCやGTK 4をインストールすると、これらもpacman -Syuの対象になります。

更新対象主な内容
MSYS2基本パッケージpacman、Bash、ランタイムなど
UCRT64パッケージUCRT64向けのGCCやライブラリ
GTK 4関連パッケージGTK 4本体、関連ライブラリ、DLL
開発ツールmake、pkg-configなど
補助ツールファイル操作や圧縮などに使用するコマンド

pacmanは、パッケージ同士の依存関係も確認しながら更新します。あるライブラリの新しいバージョンが必要な場合は、そのライブラリも更新対象に含まれます。

更新完了を確認する

更新が完了すると、再び入力待ちのプロンプトが表示されます。

ユーザー名@コンピューター名 UCRT64 ~
$

エラーが表示されず、プロンプトへ戻れば、その回の更新処理は終了しています。

念のため、もう一度次のコマンドを実行します。

pacman -Syu

すべてが最新の場合は、次のような内容が表示されます。

:: Synchronizing package databases...
 ucrt64 is up to date
 msys is up to date
:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
 there is nothing to do

there is nothing to doは、更新するパッケージがないという意味です。エラーではなく、MSYS2全体が最新の状態になっていることを示します。

表示されるリポジトリ名や順番は、MSYS2のバージョンによって異なる場合があります。

更新の基本的な流れ

MSYS2をインストールした直後の更新は、次の流れで進みます。

手順操作状態
1MSYS2 UCRT64を起動する更新前
2pacman -Syuを実行するパッケージ情報を同期する
3Yを入力する更新を開始する
4MSYS2本体を更新する必要に応じてターミナルが閉じる
5MSYS2 UCRT64を再起動する新しい環境で起動する
6pacman -Syuを再実行する残りのパッケージを更新する
7再びpacman -Syuを実行する更新漏れがないか確認する
8there is nothing to doを確認する更新完了

基本部分の更新がない場合は、ターミナルが閉じず、そのままインストール済みパッケージの更新まで進みます。その場合でも、更新後にターミナルを一度閉じて起動し直すと、新しくなった環境を確実に使用できます。

図3:MSYS2の更新を完了するまで

この図から分かること

MSYS2の更新は、pacman -Syuを1回実行するだけで終わらない場合があります。

MSYS2本体が更新されたときは、UCRT64ターミナルを再起動し、同じコマンドをもう一度実行します。最後にthere is nothing to doと表示されるまで確認すると、更新漏れを防げます。

よくある疑問と対応方法

ターミナルが突然閉じた

MSYS2本体の更新中に、すべてのMSYS2プロセスを終了する確認へYと答えると、ターミナルは自動的に閉じます。

これは正常な動作です。MSYS2 UCRT64を起動し直し、pacman -Syuを再実行してください。

エンターキーを押してもコマンドが実行されない

pacmanが確認への入力を待っている可能性があります。

画面の最後に次のような表示がないか確認します。

[Y/n]

更新を続ける場合は、Yを入力してEnterキーを押します。

ダウンロードが進まない

一時的にダウンロード先のサーバーが混雑している可能性があります。

しばらく待っても進まない場合は、エラーメッセージを確認してから、時間を空けてpacman -Syuを再実行します。更新処理中に強制的にターミナルを閉じるのは避けましょう。

failed retrieving fileと表示された

パッケージのダウンロードに失敗したことを示します。主な原因は次のとおりです。

  • インターネット接続が切れている
  • ダウンロード先のサーバーが一時的に利用できない
  • 社内や学校のネットワークで通信が制限されている
  • セキュリティソフトやプロキシの影響を受けている

まずインターネット接続を確認し、少し時間を空けてpacman -Syuを再実行します。

ターミナルを再起動しても更新対象が表示される

更新対象が残っている場合は、画面の指示に従って更新を続けます。1回目で基本部分、2回目で残りのパッケージが更新されることがあるため、更新対象が表示されること自体は問題ではありません。

パソコンを再起動する必要はあるか

通常は、Windows全体を再起動する必要はありません。MSYS2 UCRT64ターミナルを閉じて、起動し直せば十分です。

ただし、更新中に問題が発生した場合や、セキュリティソフトなどの影響でファイルが使用中になっている場合は、Windowsの再起動で改善することがあります。

更新作業で避けたい操作

MSYS2のパッケージを安全に保つため、次の操作は避けましょう。

  • pacman -Syだけを実行して更新を終える
  • 更新中にターミナルを強制終了する
  • 複数のターミナルでpacmanを同時に実行する
  • 更新対象の一部だけを自己判断で除外する
  • C:\msys64内のパッケージファイルを手動で削除する
  • 更新エラーを無視してGCCやGTK 4をインストールする
  • MSYS2本体とUCRT64パッケージのバージョンを不ぞろいにする

MSYS2は全体のパッケージが連携して動く環境です。個別のファイルを手動で入れ替えるのではなく、pacmanを通して管理しましょう。

今後も定期的に更新する

MSYS2は、一度更新すればずっと同じ状態で使えるものではありません。

GCCやGTK 4などの新しいバージョン、不具合の修正、セキュリティ上の修正が公開されるため、定期的に次のコマンドを実行します。

pacman -Syu

特に、しばらくMSYS2を使用していなかった場合や、新しいパッケージをインストールする前には、全体を更新しておくとトラブルを減らせます。

MSYS2の更新が完了したら、次はUCRT64向けのGCCと開発ツールをインストールできる状態になります。