C言語GUI入門|本コンテンツで使用する開発環境

本コンテンツでは、Windows上でC言語によるGUIアプリ開発を学びます。開発環境には、Windows、MSYS2、GCC、GTK 4、Visual Studio Codeを使用し、MSYS2の中ではUCRT64環境に統一します。

それぞれのツールには異なる役割があります。

  • Windowsは、開発環境と完成したGUIアプリを動かす土台
  • MSYS2は、GCCやGTK 4を導入、管理するための環境
  • UCRT64は、Windows向けプログラムを作るために使用するMSYS2の開発環境
  • GCCは、C言語のソースファイルを実行ファイルへ変換するコンパイラ
  • GTK 4は、ウィンドウやボタンなどのGUI機能を提供するライブラリ
  • Visual Studio Codeは、ソースファイルを作成、編集するテキストエディター

この記事では、これらの役割と関係を詳しく解説します。第1章ではまだインストールやプログラム作成は行わず、これから使用する開発環境の全体像を理解していきましょう。

本コンテンツで使用する開発環境の全体像

C言語でGUIアプリを作成するには、C言語のソースファイルを編集する道具、コンパイルする道具、GUI機能を提供するライブラリが必要です。

本コンテンツでは、次の組み合わせを使用します。

構成要素本コンテンツで使用するもの主な役割
オペレーティングシステムWindows開発環境とGUIアプリを動かす
開発環境の管理MSYS2GCCやGTK 4などを導入、更新する
MSYS2の実行環境UCRT64Windows向けのC言語プログラムを作る
CコンパイラGCCC言語のソースファイルをコンパイルする
GUIライブラリGTK 4ウィンドウやウィジェットを提供する
テキストエディターVisual Studio Codeソースファイルを作成、編集する
C言語の編集支援Microsoft C/C++拡張機能入力補完やエラー表示などを追加する
ターミナルMSYS2 UCRT64 Bashコンパイルや実行などの操作を行う

これらは、どれか1つですべてを行うものではありません。それぞれが自分の役割を担当し、連携して1つの開発環境になります。

図1:本コンテンツで使用する開発環境

この図から分かること

Visual Studio Codeはソースファイルの編集、GCCはコンパイル、GTK 4はGUI機能の提供を担当します。MSYS2 UCRT64は、Windows上でGCCやGTK 4を利用するための環境です。

それぞれは別のソフトウェアですが、連携することでC言語のソースファイルからWindows向けのGUIアプリを作成できます。

Windowsの役割

本コンテンツでは、開発と実行の両方をWindows上で行います。

Windowsは、次のものを動かす土台になります。

  • MSYS2
  • GCC
  • GTK 4
  • Visual Studio Code
  • MSYS2 UCRT64ターミナル
  • 作成したコンソールアプリ
  • 作成したGUIアプリ

完成したGUIアプリでは、Windowsのデスクトップ上にウィンドウが表示されます。ボタンのクリック、キーボードからの入力、ウィンドウを閉じる操作などもWindowsを通してGTK 4へ伝えられます。

Windows上にLinuxを導入するわけではない

MSYS2という名前を初めて見ると、Windowsの中にLinuxをインストールするように感じるかもしれません。しかし、本コンテンツではLinuxの仮想マシンを動かすわけではありません。

MSYS2は、Windows上で開発に便利なツールやライブラリを利用できるようにする環境です。UCRT64向けのGCCで作成するのは、Windows上で動く実行ファイルです。

Windowsを対象にする理由

C言語のGUI開発では、開発環境の準備が最初の難関になりやすいところです。本コンテンツでは、学習環境をWindowsへ統一することで、インストール、ディレクトリ、コンパイル、実行の手順を同じ流れで説明します。

作成するプログラムは、最終的にWindows向けのexeファイルになります。

MSYS2とは

MSYS2は、Windows上でソフトウェアを開発するためのツールやライブラリを導入しやすくする環境です。

MSYS2の公式サイトでは、Windows向けのネイティブソフトウェアをビルド、インストール、実行するためのツールやライブラリを提供する環境と説明されています。

本コンテンツでは、MSYS2を使って次のものを準備します。

  • GCC
  • GTK 4
  • pkg-config
  • 開発に必要なヘッダファイル
  • 開発に必要なライブラリ
  • Bashなどのコマンド操作環境
  • そのほかの関連ツール

MSYS2はコンパイラではない

MSYS2そのものがC言語をコンパイルするわけではありません。

C言語のコンパイルを担当するのは、MSYS2を使ってインストールするGCCです。MSYS2は、GCCやGTK 4を導入し、それらを連携させやすくする環境と考えると分かりやすいでしょう。

MSYS2はGUIライブラリではない

MSYS2自体がウィンドウやボタンを作るわけでもありません。

GUI機能を提供するのはGTK 4です。MSYS2は、Windows向けに用意されたGTK 4のパッケージをインストールし、管理するために使用します。

pacmanでパッケージを管理する

MSYS2では、pacmanというパッケージ管理システムを使用します。

パッケージとは、GCCやGTK 4などのソフトウェアを、インストールしやすい形にまとめたものです。

pacmanには、次のような役割があります。

  • パッケージ情報を取得する
  • 必要なパッケージをインストールする
  • インストール済みパッケージを更新する
  • 不要になったパッケージを削除する
  • 関連して必要になるパッケージも導入する

MSYS2公式ドキュメントでも、pacmanを使ってバイナリパッケージのインストール、削除、更新を管理すると説明されています。

GTK 4は複数の関連ライブラリを利用しますが、パッケージ管理システムを使うことで、必要なものをまとめて導入しやすくなります。

MSYS2には複数の環境がある

MSYS2をインストールすると、目的の異なる複数のターミナルや開発環境が利用できるようになります。

代表的な環境には、次のようなものがあります。

環境主な用途
MSYSMSYS2自体の管理やUNIX風ツールの実行
UCRT64UCRTを利用する64ビットWindows向け開発
MINGW64従来のMSVCRTを利用する64ビットWindows向け開発
CLANG64Clangを利用する64ビットWindows向け開発
CLANGARM64ARM64版Windows向け開発

どれも同じMSYS2に含まれていますが、使用するコンパイラ、ライブラリ、保存場所などが異なります。

本コンテンツでは、UCRT64環境だけを使用します。

MSYS2 UCRT64環境とは

UCRT64は、64ビットWindows向けのプログラムを作成するためのMSYS2環境です。

UCRTはUniversal C Runtimeの略です。C言語の標準ライブラリに関係するWindowsの実行環境で、Windows 10以降ではオペレーティングシステムの構成要素として提供されています。

MSYS2の公式資料では、どの環境を選ぶか迷う場合はUCRT64を選ぶよう案内されています。

UCRT64環境に含まれるもの

本コンテンツで使用するUCRT64環境には、次のようなものを導入します。

  • UCRT64向けGCC
  • UCRT64向けGTK 4
  • UCRT64向けpkg-config
  • Windows向けのヘッダファイル
  • Windows向けのライブラリ
  • 関連するDLL
  • Bashから利用する開発ツール

UCRT64向けGCCのパッケージは、MSYS2のucrt64リポジトリで提供されています。

GTK 4も同じucrt64リポジトリのパッケージを使用します。

なぜ環境をUCRT64に統一するのか

MSYS2では、異なる環境のツールやライブラリを混ぜて使用すると、正しくコンパイルできなかったり、実行時にDLLを読み込めなかったりすることがあります。

そのため、本コンテンツでは次の内容をUCRT64へ統一します。

  • 起動するターミナル
  • 使用するGCC
  • インストールするGTK 4
  • pkg-configが参照する情報
  • コンパイルに使用するライブラリ
  • 実行時に利用するDLL

UCRT64向けGCCとUCRT64向けGTK 4を組み合わせれば、同じ環境の中で一貫して開発できます。

図2:MSYS2とUCRT64環境の関係

この図から分かること

MSYS2の中には、MSYS、UCRT64、MINGW64、CLANG64など、目的の異なる複数の環境があります。

本コンテンツではUCRT64を選び、その環境向けに提供されるGCC、GTK 4、pkg-config、関連DLLを使用します。

単にMSYS2のターミナルを開けばよいのではなく、MSYS2 UCRT64ターミナルを使用することが大切です。

GCCとは

GCCは、GNU Compiler Collectionの略で、C言語を含む複数のプログラミング言語に対応したコンパイラ群です。GCC公式サイト

本コンテンツでは、GCCのCコンパイラを使用します。

GCCの役割

C言語で作成したソースファイルは、そのままではWindowsが実行できません。

GCCは、ソースファイルを読み取り、Windowsが実行できる形式へ変換します。この処理をコンパイルと呼びます。

大まかな流れは次のようになります。

C言語のソースファイル
        ↓
GCCでコンパイル
        ↓
必要なライブラリと結合
        ↓
Windows向け実行ファイル

GTK 4を使わない通常のC言語プログラムでは、C言語の標準ライブラリなどを利用して実行ファイルを作ります。

GTK 4を使うプログラムでは、GTK 4のヘッダファイルやライブラリも必要になります。

GCCはソースファイルを編集しない

GCCは、ソースファイルを作成、編集するソフトウェアではありません。ソースファイルの編集にはVisual Studio Codeを使用します。

GCCは、完成したソースファイルを受け取り、内容を確認して実行ファイルを作成します。

GCCがエラーや警告を表示する

ソースファイルに問題がある場合、GCCはエラーや警告を表示します。

  • 文法に誤りがある
  • セミコロンが不足している
  • 変数名が間違っている
  • 必要なヘッダファイルが見つからない
  • ライブラリが見つからない
  • 使用していない変数がある
  • 型の扱いに問題がある

エラーがあると、実行ファイルを作成できないことがあります。警告が表示された場合は、実行ファイルが作成されても、プログラムに問題がないか確認する必要があります。

コンパイルとエラーの読み方は、第3章で詳しく学習します。

GTK 4の役割

GTK 4は、C言語でGUIアプリを作成するためのライブラリです。

C言語の標準機能だけでは、ウィンドウ、ボタン、入力欄などを直接作成できません。GTK 4を利用することで、GUIに必要な機能をC言語のプログラムから呼び出せるようになります。

GTK 4が提供する代表的な機能は次のとおりです。

  • ウィンドウの作成
  • ラベルによる文字表示
  • ボタンの作成
  • 入力欄の作成
  • メニューの作成
  • ウィジェットの配置
  • マウスやキーボード操作の受け取り
  • シグナルとコールバック関数
  • GTK CSSによる装飾
  • 画像の表示
  • ダイアログの表示

GTK 4はGCCとは別のもの

GCCとGTK 4は、どちらも開発に必要ですが役割が異なります。

比較項目GCCGTK 4
種類コンパイラGUIライブラリ
主な役割ソースファイルをコンパイルするGUI機能を提供する
ウィンドウの作成担当しない担当する
実行ファイルの作成担当するGCCから結合されて利用される
エラーや警告の表示行うGTK利用時の情報を提供することがある

GCCだけではGTK 4のウィンドウを作れません。GTK 4だけでもC言語のソースファイルをコンパイルできません。両方を組み合わせて使用します。

pkg-configの役割

GTK 4を使うプログラムをコンパイルするときは、GTK 4のヘッダファイルとライブラリの場所をGCCへ伝える必要があります。

GTK 4は複数の関連ライブラリで構成されているため、それらの情報をすべて手作業で指定するのは大変です。

pkg-configは、GTK 4を利用するために必要な情報を調べ、GCCへ渡しやすい形で提供します。

pkg-configが扱う情報には、次のようなものがあります。

  • ヘッダファイルの場所
  • ライブラリの場所
  • 使用するライブラリ名
  • コンパイルに必要なオプション
  • リンクに必要なオプション

具体的な使い方は、第4章でGTK 4プログラムをコンパイルするときに説明します。

Visual Studio Codeとは

Visual Studio Codeは、Microsoftが提供しているソースコードエディターです。

本コンテンツでは、C言語のソースファイルを作成、編集するために使用します。

Visual Studio Codeには、次のような機能があります。

  • ソースファイルの作成と編集
  • ファイルやディレクトリの一覧表示
  • 文字の検索と置換
  • 行番号の表示
  • タブによる複数ファイルの切り替え
  • 括弧の対応表示
  • 統合ターミナル
  • 拡張機能による機能追加
  • ビルドタスクの登録

Visual Studio Codeはコンパイラではない

Visual Studio Codeをインストールしただけでは、C言語のプログラムをコンパイルできません。

Visual Studio Codeはソースファイルを編集するためのソフトウェアです。コンパイルを担当するGCCは、別にインストールする必要があります。

操作使用するもの
ソースファイルを書くVisual Studio Code
ソースファイルを保存するVisual Studio Code
C言語としてコンパイルするGCC
GUI機能を利用するGTK 4
コンパイル操作を入力するMSYS2 UCRT64 Bash
完成したアプリを動かすWindows

C/C++拡張機能

Visual Studio CodeへMicrosoftのC/C++拡張機能を追加すると、C言語の編集を支援する機能を利用できます。

代表的な機能は次のとおりです。

  • 文法に応じた色分け
  • 入力候補の表示
  • 関数や変数の情報表示
  • 定義した場所への移動
  • コード内の問題表示
  • IntelliSenseによる編集支援

Visual Studio Codeの公式資料でも、C/C++拡張機能によって、構文の色分け、入力補完、情報表示、エラーチェックなどが追加されると説明されています。

ただし、拡張機能もコンパイラそのものではありません。実際のコンパイルにはGCCを使用します。

UTF-8で保存する

本コンテンツでは、C言語のソースファイルをUTF-8で保存します。

GTK 4の画面には、日本語のラベルやメッセージを表示できます。ソースファイルの文字コードをUTF-8へ統一することで、日本語文字列を扱いやすくします。

文字コードが異なると、日本語が文字化けしたり、想定した表示にならなかったりすることがあります。

Visual Studio Codeの統合ターミナル

Visual Studio Codeには、編集画面の下部にターミナルを表示する統合ターミナルがあります。

統合ターミナルを使用すると、Visual Studio Codeの画面を閉じずに、次の操作を行えます。

  • 現在のディレクトリを確認する
  • 作業ディレクトリへ移動する
  • GCCでコンパイルする
  • 作成された実行ファイルを確認する
  • プログラムを実行する
  • pkg-configでGTK 4を確認する
  • コンパイルエラーを確認する

Visual Studio Codeでは、実行するシェルをターミナルプロファイルとして登録できます。

本コンテンツでは、MSYS2 UCRT64 BashをVisual Studio Codeへ登録し、既定のターミナルとして使用します。

図3:編集からGUIアプリ実行までの流れ

この図から分かること

Visual Studio Codeでソースファイルを編集し、MSYS2 UCRT64 BashからGCCを使用してコンパイルします。

GTK 4を使うプログラムでは、GCCがGTK 4のヘッダファイルやライブラリを利用して実行ファイルを作成します。完成した実行ファイルを起動すると、Windows上にGUIアプリのウィンドウが表示されます。

Visual Studio Codeだけで、編集、コンパイル、GUI作成のすべてを行っているわけではありません。複数の道具が連携していることが分かります。

PowerShellとMSYS2 UCRT64 Bashの違い

Windowsでは、PowerShellもターミナルとして利用できます。しかし、本コンテンツではGTK 4プログラムのコンパイルにMSYS2 UCRT64 Bashを使用します。

比較項目PowerShellMSYS2 UCRT64 Bash
主な用途Windowsの操作や管理UCRT64開発環境でのビルド
コマンドの書き方PowerShell形式Bash形式
UCRT64のGCC設定によっては利用可能環境内で利用しやすい
UCRT64のGTK 4追加設定が必要になる場合があるパッケージと連携しやすい
pkg-config環境設定が必要UCRT64向け情報を参照しやすい
本コンテンツでの使用基本的に使用しないコンパイルと実行に使用する

Bash向けに書かれたコマンドをPowerShellでそのまま実行すると、期待どおりに処理されない場合があります。

学習中は、説明と同じMSYS2 UCRT64 Bashを使用することで、環境の違いによるエラーを減らせます。

WindowsのパスとMSYS2のパス

WindowsとMSYS2では、同じディレクトリを異なる形式で表します。

本コンテンツでは、作業ディレクトリとして次の場所を使用します。

C:\cgui

WindowsのエクスプローラーやVisual Studio Codeでは、C:\cguiと表します。

MSYS2 UCRT64 Bashでは、同じ場所を次のように表します。

/c/cgui
使用する画面パスの表記
WindowsエクスプローラーC:\cgui
Visual Studio CodeC:\cgui
MSYS2 UCRT64 Bash/c/cgui

表記は異なりますが、どちらも同じディレクトリを指しています。

具体的な作成方法と移動方法は、第2章で解説します。

各ツールを混同しないことが大切

初めて開発環境を構築するときは、どのツールが何を行っているのか分からなくなることがあります。

次のように役割を分けて考えましょう。

ソースファイルを書けない場合

確認する対象はVisual Studio Codeです。

  • ファイルを開いているか
  • C言語のソースファイルとして保存しているか
  • 編集できる状態か
  • 文字コードがUTF-8になっているか

コンパイルできない場合

確認する対象はGCCとMSYS2 UCRT64環境です。

  • UCRT64 Bashを使用しているか
  • GCCがインストールされているか
  • 正しい作業ディレクトリにいるか
  • ソースファイル名が正しいか
  • ソースファイルに文法エラーがないか

GTK 4が見つからない場合

確認する対象はGTK 4、pkg-config、UCRT64環境です。

  • UCRT64向けGTK 4がインストールされているか
  • pkg-configがGTK 4を認識しているか
  • 別のMSYS2環境を使用していないか
  • PowerShellでBash向けの操作をしていないか

GUIアプリを起動できない場合

確認する対象は実行ファイルと関連DLLです。

  • 実行ファイルが作成されているか
  • 必要なGTK関連DLLを読み込めるか
  • UCRT64環境から実行しているか
  • エラーメッセージが表示されていないか

問題が起きたときに、どの道具の役割で失敗しているのかを切り分けられると、原因を見つけやすくなります。

本コンテンツでこの組み合わせを使用する理由

本コンテンツでWindows、MSYS2 UCRT64、GCC、GTK 4、Visual Studio Codeを使用する主な理由は次のとおりです。

  • Windows上でC言語のGUI開発を学べる
  • C言語からGTK 4を直接利用できる
  • GCCでコンソールアプリとGUIアプリの両方を作成できる
  • MSYS2で必要なツールやライブラリを管理できる
  • UCRT64環境に統一して学習できる
  • Visual Studio Codeでソースファイルを編集しやすい
  • 統合ターミナルからコンパイルと実行を行える
  • 無料で利用できるツールを中心に構成できる
  • 第6章のGUI電卓や第8章の○×ゲームを作成できる
  • 完成したアプリをWindows向けに配布できる

この環境で学習すると、C言語のプログラム作成だけでなく、ライブラリの利用、コンパイル、リンク、イベント処理、GUI画面の設計、Windows向け配布まで一連の流れを体験できます。

図4:開発環境を正しく使い分ける

この図から分かること

Visual Studio Codeはソースファイルの編集に使用し、MSYS2 UCRT64 Bashはコンパイルや実行の操作に使用します。GCCはソースファイルを実行ファイルへ変換し、GTK 4はGUIに必要な機能を提供します。

開発中に問題が起きたときは、編集、コンパイル、GUIライブラリ、実行環境のどこに原因があるのかを分けて考えることが大切です。

第2章では、この全体構成を実際のWindows上に準備し、GCC、GTK 4、pkg-config、gtk4-demoが正しく利用できることを確認します。