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 もやってみたくなってしまいました。少しずつサンプルを試していくことにします。
参考サイト
にほんブログ村
0 件のコメント:
コメントを投稿