新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

Ruby/GConf2チュートリアル

Ruby/GConf2チュートリアル

Ruby/GConfって何者かというと、要はアプリケーションの設定ファイルなんかを保存・読み出ししたりするためのライブラリだ。 データを保存・読込するだけではなく、ロックとかも勝手にやってくれるし、変更がかかるとイベントをあげたりもできる。かなり高機能なくせして使う方はメチャクチャ簡単というすばらしーライブラリだ。ほれぼれ。

詳しくは岡さんのGConf日本語訳を見てね。

ともかく、まずは使ってみる

require 'gconf2'
client = GConf::Client.new

#データの読込
p client["/apps/hoge/stage"]
p client["/apps/hoge/name"]

#データの書込
client["/apps/hoge/stage"] = 1
client["/apps/hoge/name"] = ARGV[0]

上記をtest.rbとして保存して、何回か実行してみよう。

$ruby test.rb "hoge"
$ruby test.rb "fuga"

この例ではわざと読込を先にやっているので1度目はnilが出力されるけど、2度目以降に実行したときは1, hogeが、次はfugaが出力される。 たったこれだけで永続的にデータを保存・読み出しできるってすごいっ!

ちなみに、データ自体はユーザ単位にgconfdというデーモンが管理していて、 非同期で$HOME/.gconf/apps/hoge/%gconf.xmlというファイルにXML形式で書き込まれる。 あ、そうそう、この場合、"/apps/hoge/stage", "/apps/hoge/name"がそれぞれキー項目になる。 データには基本的な型(String, 数値, true/false, 前記の配列)しかサポートしていないけど、設定情報としては十分でしょう。

変更の通知

GConfの大きな特徴の一つとして、設定値に変更があった場合にそのことをイベントとして通知することができる。しかも、同じユーザであれば、この通知は別プロセスに対しても有効だ。

具体的には以下のようなコードを書く。

require 'gconf2'

client = GConf::Client.new
client.add_dir("/apps/hoge")
client.notify_add("/apps/hoge/name") do |client, entry|
  p entry.value
end

Gtk.main
  • GConf::Client#add_dirで「あるディレクトリ」以降のキーを監視する
  • GConf::notify_add?で"/apps/hoge/name"というキーに変更が起きたときのイベントをブロックとして渡す
  • GConf::Entry#valueで値を出力する

としている。Gtk.mainだけど、GConf::notify_add?がGTK+のイベント機構を利用しているのでGUIは使ってないのだけど必要というわけ。

んでもって、これをtest2.rbとでも保存して起動しておき、先ほどのtest.rbを実行してみると、情報が表示される。

すばらしい。

ちなみに、これでチャットプログラムができるんじゃないかとちょっとわくわくしたんだけど、実はgconfdがユーザ単位なので、そういった用途には向かないのでした。

かわりに、これを使ってgconfclockというのを作ってみたので試してみてね。

ChangeLog

2003-06-19 むとう
Initial release
更新日時:2006/07/02 14:42:41
キーワード:
参照:[tutorials]