家計簿をつけよう!!

はじめまして、oZともうします。 前任者のTake60さんが家庭の事情とやらで執筆不可能になったので、 今回からこのコーナーを担当させていただきます(_O_) ペンネームは、まあWizardということにでもしておいてください。

皆さんはFreeBSDを使っていると、家族から白い目で見られませんでしょうか? 私の場合、妻がもともとパソコンなるものを使ったことが無かったため、 「こういうものだ」として強引にFreeBSDを使うようにしてしまいました [1]。 やはり、彼女らは使えるものがないと、とりあえず現状で満足してしまいますので、 なんとか、家族と一緒に楽しめるものがあればいいなと思っています。

というわけで、第一回目は嫁さんを取り込もうという目的のもと、 家計簿をつけるためのソフトウエアについて御紹介します。

家計簿専用ソフトウエア

NetBSDのpkgsrcにはそのままずばりfinanceというカテゴリが存在します。 ところが、FreeBSDではmiscやdeskutilsなどに分散されていますので、 注意してください。

このようなソフトウエアで後で詳しく紹介しないものをあげると、 xfinansxinvest(deskutils/xinvest)、 emma(misc/emma) [2] があります。

このうち、xfinansは昔懐かしいXawをつかったユーザインターフェースながら、 gnuplotを利用したグラフ作成の機能を持っています。 残念ながら日本語を扱うためには、かなりの作業が必要でしょう。 また、奥様の利用のためにはxinvest [3] はちょっとつらいと思います。

Gnofin

Gnofin (deskutils/gnofin) はGNOMEと一緒に利用することを考えられたアプリケーションですが、 単独での動作も全然問題ありません。

インポートできるフォーマットとしてはQIFやCBBが、 エクスポートできるフォーマットとしては、 互換性のための古いフォーマット以外にも、 HTMLやLaTeX、 タブ区切りテキストがあります。 このうち、LaTeXに関しては日本語の取り扱いがうまくいかないようです。

データはアカウント(口座)単位で入力しますが、 各入力項目に分類を付加することが可能です。 標準で用意されているもの以外にも、 自分で入力可能なので、必要なものを用意していきましょう。 アカウントの作成は、 アカウントメニューから挿入を選びます。 銀行ごとや現金、図書券などを入力しておけばいいと思います。 アカウントはタブで切替えが可能です。

一般的な設定は編集メニューの設定から 行います。 特に標準の設定で問題は起こらないと思います。

取引タイプですが、編集メニューの 取引タイプから行います。 項目によって、支出などのように負の値しか取れないものなどの設定があります。 小切手(Check)などのように、 必要ならば振りだし番号に相当する順番を付加することが可能です。

ツールメニューは現在のところ全く実装されていません。

グラフでの分類毎の表示などがあれば便利なのですが、 タブ区切りテキストを加工してgnuplotなどの グラフ作成ソフトウエアを使えば作成可能なので、 UNIX的な使い方からはこれが正解なのかもしれません。

図 1. Gnofinの画面

Gnucash

Gnucash(deskutils/gnucash)もおなじように GNOMEアプリケーションです。 機能的にはこちらの方が充実しているのですが、 アカウント内のデータ表時の国際化部分でおかしい所があるので、 実用的ではありません。

機能的には、得に報告書(Report)関連が充実しています。 また、Scheme(guile)を使った報告書作成機能がありますので、 自分の欲しい機能を組込みで作成することも可能です。

しかし、筆者の手元の環境では見事に良く落ちます。

図 2. Gnucashの画面

Moneydance

Moneydance(deskutils/mondeydance)は、 Javaで記述されたアプリケーションで国際化機能をうまく使い、 日本語の取り扱いにも問題がありません。 しかし、支出/収入項目などは英語のままです。 このソフトウエアは有賞で登録が必要で、2001年7月11日現在の価格は$33.99になっています。 しかし、お試しの利用は特に問題がありません。

さすがに商用のソフトウエアだけに、 最初からの支出/収入項目の充実や グラフ表示、 レポート作成 など充実しています。

トップ画面では、スケジュールも表示されており、 スケジューラとしても利用可能です。 また、リアルタイムで、為替交換レートが表示されているのも驚きです。 各アカウント画面から、トップ画面に戻るにはAccount:から My Finances (Root)を選びます。

図 3. MoneyDanceの画面

スプレッドシートでつけちゃおう

あとで加工を自由にしたければ、最低限スプレッドシートにしちゃうという人も多いでしょう。 定型的なものを用意しておけば、奥さんも利用可能かも知れません。 ここでは、日本語の入力のできるスプレッドシートのみについて簡単に説明します。 他にも、mathdeskutilsなどにも スプレッドシートはたくさん存在しますので、 興味のある方は御覧ください。

GNU Oleo

GNU Oleo (日本語情報) (japanese/oleo)は 古くから日本語されているスプレッドシートです。 本家は長らく開発が停滞していたのですが、 最近になって1.99系として開発が再開した模様です。 ちなみに、japanese/oleoは1.6系のものになっています。 1.99系ではMotifを利用したGUIが利用可能になっています。 また、Motifを利用した場合は、 graphics/plotutilsを使ったグラフの作成も可能になっています。 環境変数DISPLAYが設定されていない場合は、 CUIモードとしても動作可能です。

1.99系を利用する場合でMotifを利用する場合は、 math/gnumericにおいて、

	  make -DWITH_MOTIF
	
のようにして、作成する必要があります。

oleoはGNUのアプリケーションですので、 デフォルトのキーバインドはEmacsライクなものです。 とりあえず、日本語訳されたドキュメントが /usr/local/share/doc/oleo/ja_JP.EUC/USING.eucJPにありますので、 こちらを参照してから利用を始めた方が無難です。 また、pkg-descファイルにも説明が書いてありますので、 pkg_info ja-oleo-1.6等として参照しておいたほうがよいでしょう。

図 4. Oleoの動作画面

Gnumeric

Gnumeric(japanese/gnumeric)はGNUで開発されたスプレッドシートで、 GNOMEアプリケーションです。 データの統計的な解析が可能になっていることや、 プラグインによる様々なデータフォーマットのインポートが可能になっているのが特長です。

数式は=のあとに入力します。 普通にセルを指定しておけば、 コピーした場合、適当な数式に変換されます。 例えば、バランスのセルF3は=F2+E3-D3ですが、 コピーすることでF4には=F3+E4-D4が入ります。 数式を記述している時にセル参照を行うと、赤でセルを明示してくれて、 非常に分かりやすいです。

図 5. Gnumericの動作画面

株式情報取得ソフトウエア

株式の情報を取得し、表示してくれるソフトウエアも存在します。 これらには、 xquote(misc/xquote) [4]や portsには入っていませんが、 tclticker(アーカイブ)があります。 両者とも米国yahooの株式サービスからデータを取得し、表示する機能を持っています。 しかし、日本で等価なサービスが行われているのか、株をやらない筆者は知りません(^_^;) 後者は、Tcl/Tkの部品として、自分の作成したアプリケーションに組み込むことも可能になっています。

フィルターやスクリプトでガシガシやっちゃおう!!

やはりUNIXといえば、ツールキットアプローチです。 フィルターを使って加工すれば、グラフ化なども思い通りです。 ここではそのような方法で家計簿をつけることを考えてみましょう。

CSVを扱う

CSV(Comma Separated Value)は基本的 [5] には","で区切られたデータです。 スプレッドシートなどでは、 このファイルの入出力機能を持っているものがかなりあり、 情報交換のための便利なフォーマットです。

portsには、 Perlインターフェース (databases/p5-DBD-CSV)や Rubyによるインターフェース (textproc/ruby-csv)、 更に Pytoonインターフェース (textproc/py-csv)が用意されています。 今回は、Perlインターフェースの説明を行います。

PerlをつかったCSVの操作

Perlにはモジュールという仕組みがあり [6]、 オブジェクト指向的にプログラムを作成することが可能になっています。 特にデータベース回りではDBIと呼ばれる統一インターフェースを用いて、 DBMS(Database Management System)への操作が可能になっています。 具体的には、インターフェースとしてSQLを使ってデータベースへアクセスするのですが、 DBMSにはPostgreSQLをはじめ様々ものが存在しています。 その中で、DBD::CSV(databases/p5-DBD-CSV)は CSVデータを扱うためのモジュールです。 CSVになっていれば、スプレッドシートで読み込みが可能なものも多いので、 かなり便利に利用可能でしょう。 更に、将来的にすごく頻繁にお金を動かすようになった場合も、 DBMSをすげかえることで、十分な性能が期待できるでしょう。

基本的には、use DBI;で先頭でDBIを読み込んでおきます。 DBD::CSV自体は初期化時に自動的に読み込まれます。 詳しい説明は省略しますが、これを利用したプログラム例を 図6に示します。

CSVファイルの文字コードはEUCでMS-DOS形式でなければならないので、 注意してください。

図 6. DBD::CSVの利用例

#!/usr/bin/perl
use DBI;

$dbdir="test"; # CSVデータが入っているディレクトリ
my($dbh)=DBI->connect ("DBI:CSV:f_dir=$dbdir")
  or die "Cannot connect: " . $DBI::errstr;

# moneyが実際のCSVデータ
my($query)="SELECT id,memo,expence FROM money WHERE expence>500";
my($sth)=$dbh->prepare($query);
$sth->execute();
while ( @row = $sth->fetchrow_array ) {
  print "$row[1] is too expensive($row[2])!!¥n";
}

おわりに

今回は奥様を取り込もうということで、 家計簿に利用できそうなソフトウエアを紹介しました。 前任者とは違い、軽い内容を中心に書いていきたいと思っています。 御要望があれば編集部までお願いします(_O_)

注意

[1]

本当は、sedawk使いになって欲しかったんですが、 メール読みとWeb閲覧だけで十分らしく、ここ数年の進捗はありません。

[2]

portsでは現状コンパイルできません。 こまごまと書き換えれば動きます。

[3]

コマンド名はXinvestです。

[4]

実行ファイル名はXquoteなので、注意してください。

[5]

基本的には、と書いたのには理由があり、 若干変なクオート規則があるのがちょっと嫌です。 詳細なフォーマットは、 textproc/ruby-csvをインストールした時に得られる、 /usr/local/share/doc/ruby/csv/README.txtを参照してください。

[6]

portsの中で頭にp5-とついているものは、 Perl 5用のモジュールです。