# ファイルベースのpure Rubyデータベース"KirbyBase"を使う _published: 2007/05/22_ ![alt](http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/shunsuk/20070522/1179825889) 「SQLiteが入ってないレンタルサーバーでSQLiteを動かす計画(敗北編)」では、SQLiteをアプリごと配置しようとして失敗しました。失敗の原因はglibcのバージョンの不整合です。要するにC言語で書かれたライブラリにアクセスしようとしたのが間違いだったわけです。 それならばC言語を使わずにRubyだけでデータベースを作ってしまおうと思いつきました。Rubyにはファイルにアクセスするインターフェイスがあるので、実現はできそうです。でもその前に、既にRubyで作られたデータベースが存在するのではないかと思い、検索してみました。 そして見つけたのがpure Rubyのデータベース"KirbyBase"です。それほどメジャーではないようです。ダウンロードページを見つけるだけでも苦労しました。下のページからダウンロードできます。Python製のデータベースもあるようですね。 - [NetPro Technologies - Ruby Programming, Rails Web Development - Farmington Hills, Michigan - Web Development and Programming](http://www.netpromi.com/kirbybase_ruby.html) ダウンロードしたファイルを解凍して、kirbybase.rbをアプリのディレクトリに配置します。ここから先はバージョン 2.6 を使った記述となります。APIリファレンスがシンプルで読みやすいので、動かすのは簡単でした。 まずは当然、インクルード。 ```ruby require 'kirbybase' ``` データベースの作成。KirbyBaseではデータベースの概念がSQLiteと違うので注意が必要です。SQLiteは「データベース=ファイル」で、データベースファイルを作成します。一方、KirbyBaseでは「データベース=ディレクトリ」で、ディレクトリの下にテーブルファイルを作成します。テーブルファイルのデフォルトの拡張子は `.tbl` です。 ```ruby db = KirbyBase.new(:local, nil, nil, './sample') db.create_table(:memo, :name, :String, :body, :String, :created_at, :DateTime ) ``` 上のコードの `sample` はファイルではなくてディレクトリですね。あらかじめ `sample` ディレクトリを作成しておきます。そして `:memo` がテーブル名です。 `sample` ディレクトリの下に `memo.tbl` が作成されます。さらに注意点、テーブル名と列名は文字列ではなくシンボルで指定する必要があります。 データの挿入。 ```ruby db = KirbyBase.new(:local, nil, nil, './sample') tbl = db.get_table(:memo) tbl.insert('shunsuk', 'Hello, world!', DateTime.now) ``` 出来上がったtblファイルをテキストエディタで開いてみると、列を `|` で区切っただけのシンプルな作りです。 データの取得。 ```ruby db = KirbyBase.new(:local, nil, nil, './sample') tbl = db.get_table(:memo) result = tbl.select result.each do |r| puts r[0] end ``` ここでも注意。パラメータを指定せずに `select` メソッドを使うと、レコードの配列の0番目にはレコード番号が入ります。つまり `puts r[0] `の結果は `shunsuk` ではなく `1` となります。 という感じで、簡単に動かすことができました。サーバーに配置するときも、アプリのディレクトリに `kirbybase.rb` を入れておくだけなので楽勝です。 KirbyBaseではSQLを使うことができません。しかし、クエリ文の解析処理がない分、高速に動くのではないかと思います。SQLが使えないので、他のDBからの移行は面倒ですが。でも、pure Rubyというメリットは大きいですね。どんなサーバー環境でもOKですよ。 はてなダイアリーの「スーパーpre記法(シンタックス・ハイライト)」の存在を今日初めて知りました。これは便利。