BeancountとFavaによるスクリプト可能なワークフロー
Beancount(プレーンテキストの複式簿記会計ツール)とFava(そのウェブインターフェース)は、高度に拡張可能でスクリプト可能です。これらの設計により、Pythonスクリプトを書くことで、財務タスクの自動化、カスタムレポートの生成、アラートの設定が可能です。あるユーザーの言葉を借りれば、「データが非常に便利な形式で存在し、自分の好きなように自動化できるのが本当に気に入っています。ディスク上のファイルのようなAPIはなく、統合が簡単です。」このガイドでは、初心者向けの自動化から高度なFavaプラグインまで、スクリプト可能なワークフローの作成について説明しま す。
はじめに:PythonスクリプトとしてBeancountを実行する
具体的なタスクに入る前に、Beancountがインストールされていることを確認してください(例:pip install beancount
経由)。BeancountはPythonで書かれているため、独自のスクリプトでライブラリとして使用できます。一般的なアプローチは次のとおりです。
-
Beancountのレジャーをロードする:Beancountのローダーを使用して、
.beancount
ファイルをPythonオブジェクトに解析します。例えば:from beancount import loader
entries, errors, options_map = loader.load_file("myledger.beancount")
if errors:
print("Errors:", errors)これにより、
entries
(トランザクション、残高など)のリストと、メタデータを含むoptions_map
が取得されます。すべてのアカウント、トランザクション、残高がコード内でアクセスできるようになります。 -
Beancount Query Language(BQL)を活用する:手動で反復処理する代わりに、SQLのようなクエリをデータに対して実行できます。たとえば、月ごとの合計費用を取得するには、クエリAPIを使用できます。
from beancount.query import query
q = query.Query(entries, options_map)
result = q.query("SELECT month, sum(position) WHERE account ~ 'Expenses' GROUP BY month")
print(result)これは、Beancountのクエリシステムを使用してデータを集計します。(内部的には、これは
bean-query
コマンドが行うことと似ていますが、ここではスクリプトで使用しています。)実際、Beancountの作者は、ファイルをロードし、Python API経由で直接run_query()
を呼び出すことで、ループ内で外部コマンドを呼び出す必要がないと述べています。 -
プロジェクト構造を設定する:スクリプトをレジャーと一緒に整理します。一般的なレイアウトは、インポーター(外部データを取得/解析するため)、レポートまたはクエリ(分析スクリプト用)、およびドキュメント(ダウンロードされたステートメントを保存するため)のディレクトリを持つことです。たとえば、あるユーザーは次のように保持しています。
importers/
– カスタムPythonインポートスクリプト(テスト付き)、queries/
– レポートを生成するスクリプト(python3 queries/...
で実行可能)、documents/
– ダウンロードされた銀行のCSV/PDFをアカウントごとに整理。
この設定により、スクリプトを手動で実行したり(例:python3 queries/cash_flow.py
)、スケジュールしたり(cronまたはタスクランナー経由)して、ワークフローを自動化できます。