GnuCashで日本株の株価を自動取得する(PostgreSQL&Perl連携)

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 の両環境で動作します。

GnuCash株価取得スクリプト実行画面

セットアップ手順

【Windows の場合】

  • Strawberry Perl をインストール
  • スクリプト内の DB接続先(PostgreSQL IP)を確認
  • 環境変数 ALPHAVANTAGE_API_KEYFQ_CURRENCY を設定
  • Perl スクリプトを実行

【Ubuntu の場合】

注意点

  • 日本株シンボル:「7203.T」ではなく「7203」(4桁)で指定
  • Alpha Vantage の制限:無料枠は 1日 25リクエストまで
  • GnuCash の DB ロック:GUI版を起動しながらでは動作しません。スクリプト実行時は GUI を閉じてください

まとめ

GnuCash と PostgreSQL、Perl を組み合わせることで、日本株を含むあらゆる資産の株価を自動取得・更新できます。一度セットアップすれば、cron等で毎日自動で最新の価格情報が DB に反映されるため、管理がより正確になります。Windows・Linux 両対応なので、どのような環境でも導入可能です。

RAID1を構築しLVMとして認識させる

sddとsdeとして認識したドライブをGPTでパーテーション作成、RAIDとして登録
sudo parted /dev/sdd mklabel gpt
sudo parted /dev/sdd mkpart primary 0% 100%
sudo parted /dev/sdd set 1 raid on
sdeも同様

mdadmをインストールしRAID1構築
sudo apt -y install mdadm
sudo mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdd1 /dev/sde1

進捗確認を確認、数時間かかる
sudo cat /proc/mdstat

物理ボリューム作成、既存のLVM Storage2に追加
sudo pvcreate /dev/md1
sudo vgextend Storage2 /dev/md1