GnuCashで日本株の株価を自動取得する(PostgreSQL&Perl連携)
GnuCashの株価取得問題とは
日本の株価の取得は長らく
http://liosk.blog103.fc2.com/blog-entry-185.html
https://github.com/LiosK/Finance–Quote–YahooJapan
にお世話になってきました。GUI,CLIとも取得できていたのですが、 gnucash-cli --quotes get ではあるバージョンから取得できなくなりました。これは GnuCash が内部で「yahoo_japan」というデータ源を認識していないためです。
なぜこんなことが起きる?
GnuCash の GUI版では初期化順序が異なるため動作しますが、CLI版では未知のデータ源をスキップしてしまいます。つまり、CLI でyahoo_japanを使用するには、別のルートでデータを集める必要があるということです。
解決策:Finance::Quote で直接 DB に書き込む
GnuCash-CLI を使わず、Perl の Finance::Quote モジュールを使って、PostgreSQL データベースに直接株価を書き込みます。この方法なら yahoo_japan をCLIからも使えて問題を回避でき、Windows・Ubuntu の両環境で動作します。

セットアップ手順
【Windows の場合】
- Strawberry Perl をインストール
- スクリプト内の DB接続先(PostgreSQL IP)を確認
- 環境変数
ALPHAVANTAGE_API_KEY、FQ_CURRENCYを設定 - Perl スクリプトを実行
【Ubuntu の場合】
libdbi-perl、libdbd-pg-perlをインストールFinance::Quoteを CPAN からインストール- スクリプトを
/usr/local/bin/に配置 - crontab で特定時刻 に自動実行するよう設定
注意点
- 日本株シンボル:「7203.T」ではなく「7203」(4桁)で指定
- Alpha Vantage の制限:無料枠は 1日 25リクエストまで
- GnuCash の DB ロック:GUI版を起動しながらでは動作しません。スクリプト実行時は GUI を閉じてください
まとめ
GnuCash と PostgreSQL、Perl を組み合わせることで、日本株を含むあらゆる資産の株価を自動取得・更新できます。一度セットアップすれば、cron等で毎日自動で最新の価格情報が DB に反映されるため、管理がより正確になります。Windows・Linux 両対応なので、どのような環境でも導入可能です。
