Ruby - 設定(conf,ini etc)ファイル読み込み!

Updated:


Unix 系でも Windows 系でも設定ファイルに以下のような形式のテキストファイルを使用している事が多々あります。 confファイルとか、iniファイルとか、またはそれ以外の拡張子だったりします。 いずれにせよ、テキストファイルです。

[hoge]
foo = /abc/def/ghijklmn
bar = 127.0.0.1
baz = hogehoge

Ruby でこのようなファイルを読み込む場合、以前の自分なら1行ずつ読み込んで、コツコツと解析しながら処理していました。 しかし、このようなファイルを読み込む為の Gem パッケージが公開されているので最近はそれを使用しています。

使用方法

検証確認した Ruby は 1.9.3-p194 です。

1. 設定ファイル作成

以下に注意して設定ファイルを作成します。

  • セクション名は “[” と “]” で囲む。
  • 各プロパティは1行に「名前」+ “=” +「値」の形式で記述する。
  • ”;” や “#” はコメントである。

作成場所は “/home/hoge/work/” ディレクトリで、ファイル名は “test.conf” としています。

# Setting for hoge
[hoge]
foo = /abc/def/ghijklmn
bar = 127.0.0.1
baz = hogehoge

; Setting for fuga
[fuga]
foo = /mnl/kji/hgfedcba
bar = 255.255.255.0

2. Gem パッケージ inifile の検索

試しに、これからインストールする Gem パッケージ inifile が存在するか確認してみました。

$ gem search -r inifile

*** REMOTE GEMS ***

inifile (1.1.0)
zfinifile (1.0.0)

ありました。

3. Gem パッケージ inifile のインストール

Gem パッケージ inifile をインストールします。

$ gem install inifile
Fetching: inifile-1.1.0.gem (100%)
Successfully installed inifile-1.1.0
1 gem installed
Installing ri documentation for inifile-1.1.0...
Installing RDoc documentation for inifile-1.1.0...

4. Gem パッケージ inifile のインストール確認

Gem パッケージ inifile をインストールできているか確認します。

$ gem list inifile

*** LOCAL GEMS ***

inifile (1.1.0)

インストールできています。

5. 動作確認用 Ruby スクリプト作成

動作確認用スクリプトを作成します。 オブジェクト指向にしてみました。 作成場所は “/home/hoge/work/” ディレクトリで、ファイル名は “test_ini.rb” としています。

require 'inifile'

class TestIni

  def initialize

    @ini = IniFile.load("/home/hoge/work/test.conf")
  end

  def display( section, name )

    val = @ini[section][name]
    puts "[#{section}] #{name} = #{val}"
  end
end

ini = TestIni.new
ini.display( 'hoge', 'foo' )
ini.display( 'hoge', 'bar' )
ini.display( 'hoge', 'baz' )
ini.display( 'fuga', 'foo' )
ini.display( 'fuga', 'bar' )
ini.display( 'fuga', 'baz' ) # 存在しない値のチェック用

6. 動作確認用 Ruby スクリプト実行

作成した Ruby スクリプトを実行してみます。

$ ruby test_inifile.rb
[hoge] foo = /abc/def/ghijklmn
[hoge] bar = 127.0.0.1
[hoge] baz = hogehoge
[fuga] foo = /mnl/kji/hgfedcba
[fuga] bar = 255.255.255.0
[fuga] baz = 

正常に取得できました。 存在しない値もエラーにならず空文字で返ってきました。 空白行が存在しても問題ありませんでした。 コメント行も正常に認識しているようです。


これは、非常に便利な Gem パッケージで当方はよく使用しています。 (主にデータベース接続情報を記載したりしています)

以上。





 

Sponsored Link

 

Comments