2020-06-06

Vala を試してみた

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

Wikipedia より引用・編集

Linux のディストロの一つ、elementary OS を評価していて、コアアプリケーションの開発に Vala というプログラミング言語を使用していることを知り、どんなものか調べてみました。

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

Fedora 32 (Workstation Edition) x86_64

Hello World!

最初の Hello World! のプログラムは、Wikipedia の Vala の説明で紹介されている、GTK+ を使って GUI を作成するサンプルプログラムを、メッセージだけ日本語にしたものにしました。

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;
}

Wikipedia に紹介されている通り実行してみましたがエラーになりました。

[bitwalk@fedora-pc vala]$ valac --pkg gtk+-3.0 hellogtk.vala
bash: valac: コマンドが見つかりませんでした...
コマンド valac' を提供するためにパッケージ 'vala' をインストールしますか? [N/y] y


 * キューで待機中... 
以下のパッケージはインストールされるべきものです:
 libvala-0.48.6-1.fc32.x86_64 Vala compiler library
 vala-0.48.6-1.fc32.x86_64 A modern programming language for GNOME
変更したまま継続しますか? [N/y] y


 * キューで待機中... 
 * 認証を待ち受け中... 
 * キューで待機中... 
 * パッケージをダウンロード中... 
 * データを要求中... 
 * 変更をテスト中... 
 * パッケージのインストール中... 
/home/bitwalk/ドキュメント/vala/hellogtk.vala.c:7:10: 致命的エラー: gtk/gtk.h: そのようなファイルやディレクトリはありません
    7 | #include <gtk/gtk.h>
      |          ^~~~~~~~~~~
コンパイルを停止しました。
error: cc exited with status 256
Compilation failed: 1 error(s), 0 warning(s)

[bitwalk@fedora-pc vala]$

GTK の開発環境が入っていませんでした。とりあえず下記のようにして環境を整えます。

[bitwalk@fedora-pc vala]$ sudo dnf install gtk3-devel gstreamer1-devel clutter-devel webkit2gtk3-devel libgda-devel gobject-introspection-devel
メタデータの期限切れの最終確認: 0:01:49 時間前の 2020年06月06日 18時36分18秒 に実施しました。
パッケージ gobject-introspection-devel-1.64.1-1.fc32.x86_64 は既にインストールされています。
依存関係が解決しました。
================================================================================
 Package                     Arch       Version               Repository   Size
================================================================================
インストール:
 clutter-devel               x86_64     1.26.4-1.fc32         fedora      394 k
 gstreamer1-devel            x86_64     1.16.2-2.fc32         fedora      484 k
 gtk3-devel                  x86_64     3.24.20-1.fc32        updates     4.3 M
 libgda-devel                x86_64     1:5.2.9-4.fc32        fedora      2.9 M
 webkit2gtk3-devel           x86_64     2.28.2-2.fc32         updates     289 k
依存関係のインストール:
 at-spi2-atk-devel           x86_64     2.34.2-1.fc32         fedora      9.8 k
...
(途中省略)
...
webkit2gtk3-jsc-devel       x86_64     2.28.2-2.fc32         updates     138 k

トランザクションの概要
================================================================================
インストール  52 パッケージ

ダウンロードサイズの合計: 15 M
インストール済みのサイズ: 107 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/52): graphite2-devel-1.3.14-1.fc32.x86_64.rp 539 kB/s |  40 kB     00:00    
...
(途中省略)
...
  webkit2gtk3-jsc-devel-2.28.2-2.fc32.x86_64                                    

完了しました!
[bitwalk@fedora-pc vala]$ sudo dnf install devhelp gtk3-devel-docs gstreamer1-devel-docs clutter-doc
...
(途中省略)
...
完了しました!
[bitwalk@fedora-pc vala]$

再度、valac でコンパイルしてみます。なにもメッセージがでないのは寂しいので、 -v オプションをつけました。

[bitwalk@fedora-pc vala]$ valac -v --pkg gtk+-3.0 hellogtk.vala
Loaded package `/usr/share/vala-0.48/vapi/glib-2.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/gobject-2.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/gtk+-3.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/gio-2.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/atk.vapi'
Loaded package `/usr/share/vala-0.48/vapi/cairo-gobject.vapi'
Loaded package `/usr/share/vala-0.48/vapi/cairo.vapi'
Loaded package `/usr/share/vala-0.48/vapi/gdk-pixbuf-2.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/gdk-3.0.vapi'
Loaded package `/usr/share/vala-0.48/vapi/pango.vapi'
Loaded package `/usr/share/vala-0.48/vapi/harfbuzz-gobject.vapi'
Loaded package `/usr/share/vala-0.48/vapi/pangocairo.vapi'
Loaded package `/usr/share/vala-0.48/vapi/x11.vapi'
cc -o '/home/bitwalk/ドキュメント/vala/hellogtk' '/home/bitwalk/ドキュメント/vala/hellogtk.vala.c' -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include -I/usr/include/at-spi-2.0 -pthread -lgtk-3 -lgio-2.0 -latk-1.0 -lgdk-3 -lgdk_pixbuf-2.0 -lcairo-gobject -lharfbuzz-gobject -lpangocairo-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lcairo -lX11
[bitwalk@fedora-pc vala]$

無事コンパイルができたので、実行してみました。

[bitwalk@fedora-pc vala]$ ls
hellogtk  hellogtk.vala
[bitwalk@fedora-pc vala]$ ./hellogtk
hellogtk の実行例

手軽に Gtk+ を利用した GUI プログラミングができそうです。最近 PyGObject で GUI プログラミングをちまちま始めていますが、Vala もやってみたくなってしまいました。少しずつサンプルを試していくことにします。

参考サイト

  1. Projects/Vala - GNOME Wiki!
  2. Tutorial for beginners (Vala)
  3. Gtk+ — Fedora Developer Portal

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

0 件のコメント: