2020-06-09

【備忘録】MSYS2 で Vala を試してみた

Vala は GObject を利用した C 言語のソースコードを生成する、セルフホスティングコンパイラを持つオブジェクト指向言語です。C# に似た構文を持ち、無名関数シグナルプロパティジェネリクスメモリ管理例外処理型推論、および、for-each など、C 言語にはない言語仕様を持っています。

Wikipedia より引用・編集

参考サイト [1] で Linux (Fedora) で Vala を試した例を紹介しましたが、Windows の MSYS2 上でも Vala を利用できたので忘備録としてまとめました。

本ブログ記事では下記の OS 環境で動作確認をしています。

Windows 10 / MSYS2 (msys2-runtime 3.1.5-3) x86_64

Hello World!

最初の Hello World! のプログラムは、参考サイト [1] と同じく、Wikipedia の Vala の説明で紹介されている、GTK+ を使って GUI を作成するサンプルプログラムを、メッセージだけ日本語 (UTF-8) にしたものにしました。

hellogtk.vala
using Gtk;
 
int main (string[] args) {
    Gtk.init (ref args);
    
    var window = new Window ();
    window.title = "Hello, World!";
    window.border_width = 10;
    window.window_position = WindowPosition.CENTER;
    window.set_default_size(350, 70);
    window.destroy.connect (Gtk.main_quit);
    
    var label = new Label ("こんにちは、世界!");
    
    window.add (label);
    window.show_all ();
    
    Gtk.main ();
    return 0;
}

まず、PyGObject を利用するための環境を整えます。これは Python でも GObject を利用した GUI プログラミング環境を使うので、Python のために用意する環境が、そのまま Vala の環境になると考えているからです。

$ pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-python3 mingw-w64-x86_64-python3-gobject

Vala をインストールします。

$ pacman -S mingw-w64-x86_64-vala

C でコンパイルするため、GCC のツールチェーンをインストールします。

$ pacman -S mingw-w64-x86_64-toolchain

準備が整ったので valac でサンプルをコンパイルして実行します。

$ valac -v --pkg gtk+-3.0 hellogtk.vala
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/glib-2.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/gobject-2.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/gtk+-3.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/gio-2.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/atk.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/cairo-gobject.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/cairo.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/gdk-pixbuf-2.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/gdk-3.0.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/pango.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/harfbuzz-gobject.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/pangocairo.vapi'
Loaded package `D:\msys64\mingw64\share/vala-0.48/vapi/x11.vapi'
cc -o 'D:/msys64/home/KTAKAHAS/vala-samples\hellogtk' 'D:/msys64/home/KTAKAHAS/viro -ID:/msys64/mingw64/include -ID:/msys64/mingw64/include/gdk-pixbuf-2.0 -ID:/lude -ID:/msys64/mingw64/include/cairo -ID:/msys64/mingw64/include/pixman-1 -ID:b-2.0/include -ID:/msys64/mingw64/include -ID:/msys64/mingw64/include/cairo -ID:-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lpangowin32-1.0 -lgdk_pixbuf-2.0
$ ./hellogtk.exe
hellogtk.exe の実行例

わざわざ Vala を使わなくとも、PyGObject を利用した Python スクリプトのままで自分の環境では運用できますが、配布する場合にはバイナリの方が都合のよい場合があります。状況に応じて使い分けられるように、使いこなせるようになりたいです。

参考サイト

  1. bitWalk's: Vala を試してみた [2020-06-06]
  2. Projects/Vala - GNOME Wiki!
  3. Tutorial for beginners (Vala)
  4. Groups - MSYS2 Packages

ブログランキング・にほんブログ村へ
にほんブログ村

0 件のコメント: