[Perl] DBIx::Skinnyを使ったお手軽データストア[Perl] Simple data store using DBIx::Skinny

暑くなってきてワインからビールにスイッチして楽しんでいます。松浦です。

フランスはベルギーから近く、レフ(250ml*12)が7ユーロ、デュベルやシメイは
330mlで1.5ユーロくらい、ヒューガルデンはレフよりちょっと高いくらいで
手に入ります。レフをベースに色々挟んでビール生活を満喫しています

今日はO/Rマッパーを使って、気象データをデータベースに保存していく
お手軽な方法を紹介します。似たようなケースは色々な所で遭遇するので、
DBI等を使って直接SQLを書かず、自分の好きなO/Rマッパーでさっさと
済ませるのが得策です。

Perl界隈のO/RマッパーはDBIx::Classがメジャーですが、
今回使ったDBIx::Skinnyはより軽いDBIx::Classを目指したO/Rマッパーで、
基本的な機能は十分揃っています。後継のTengというO/Rマッパーもあります。
どの言語でも基本的にO/Rマッパーは用意されているので、使ってない方は
色々と調べてみて下さい。

環境

Mac OSX (10.7.4)
Perl (5.16.0)
SQLite (3.7.7)
DBIx-Skinny-0.0742
DBIx-Skinny-Schema-Loader-0.24

想定

ローカルのWEBサーバ(192.168.10.1)にアクセスすると、
下記のデータがJSON形式で取得出来ると想定します。
時々刻々と変化する気象データを保存するのが目的です。

今回、準備するファイルは下記の5つです。
main.plを実行するとサーバからデータを取得し、データベースに保存します。

データベースの準備

sensor.sqlを上記気象データに合わせて、下記の様に決定します。

次にデータベースを作成します。
> cd data
> sqlite3 sensor.db < sensor.sql

O/Rマッパーの準備

・lib/MySensor/DB.pm

データベースへの接続情報を記述します。
username, passwardを設定していなくても上記のように
空のパートを記述する必要があります。

・lib/MySensor/DB/Schema.pm

load_schemaが呼ばれるとここではsensor.dbの中を見て、
カラム名や型などのschemaを自動的に作ってくれます。
今回の様なシンプルなケースではloaderを使うと非常に楽です。
もちろん自分で指定することも可能です。

メインプログラム(データの取得・保存)

・main.pl

> perl main.pl
とすることで、データの取得および保存が完了です。
Loaderで自動的にSchemaを生成し、データベースへのINSERTは
$db->createの所で、ハッシュを渡してあげるだけです。
ちょっとしたデータストアを行いたいシーンで重宝します。
もちろん、本格的なアプリケーションを書く時もですけど

参考URL

・DBIx::Skinny – JPerl Advent Calendar 2009
http://perl-users.jp/articles/advent-calendar/2009/dbix-skinny/

by MATSUURA Satoshi