[ruby-gnome2-doc-cvs] [Hiki] update - gconf2-tut

Back to archive index

ruby-****@sourc***** ruby-****@sourc*****
2004年 3月 23日 (火) 21:20:21 JST


-------------------------
REMOTE_ADDR = 218.231.161.247
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/ja/?gconf2-tut
-------------------------
  = Ruby/GConf2チュートリアル
  Ruby/GConfって何者かというと、要はアプリケーションの設定ファイルなんかを保存・読み出ししたりするためのライブラリだ。
  データを保存・読込するだけではなく、ロックとかも勝手にやってくれるし、変更がかかるとイベントをあげたりもできる。かなり高機能なくせして使う方はメチャクチャ簡単というすばらしーライブラリだ。ほれぼれ。
  
  詳しくは((<岡さんのGConf日本語訳|URL:http://www.globe.to/~oka326/archive/gnome/gconf/doc/index.html>))を見てね。
  
  == ともかく、まずは使ってみる
  
   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'
-  require 'gtk2'
   
-  Gtk.init
-  
   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.initとGtk.mainだけど、GConf::notify_addがGTK+のイベント機構を利用しているのでGUIは使ってないのだけど必要というわけ。
  
  んでもって、これをtest2.rbとでも保存して起動しておき、先ほどのtest.rbを実行してみると、情報が表示される。
  
  すばらしい。
  
  ちなみに、これでチャットプログラムができるんじゃないかとちょっとわくわくしたんだけど、実はgconfdがユーザ単位なので、そういった用途には向かないのでした。
  
  かわりに、これを使って((<gconfclock|en:gconfclock>))というのを作ってみたので試してみてね。
  
  === ChangeLog
- :2004-03-14 ((<むとう>))
-  「変更の通知」の例でGtk.initの呼び出しを追加しました。Gtk.initは内部でパラメータの解析やsignalの初期化、GUI周りの初期化、イベントハンドラの初期化等を行っているのでGtk.mainを使う場合には呼び出しておいた方が安全だと思います。
- 
  :2003-06-19 ((<むとう>))
   Initial release





ruby-gnome2-cvs メーリングリストの案内
Back to archive index