YNABへの支払いをやめよう:DockerでActual Budgetをセルフホストして無料で利用する方法

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

午前2時のサブスクリプション・ショック

それは午前2時のことでした。YNABのサブスクリプションが年間109ドルで更新されるという通知が届いたのです。すでに持っているお金を管理するためだけに、毎年100ドル以上を支払うのは何かが違うと感じました。部屋の隅にはメディアサーバーからホームオートメーションまであらゆるものをこなすサーバーラックがあるのに、なぜ最も機密性の高い財務データをサードパーティのクラウドに預けているのでしょうか?

私が必要としていたのは、自分のハードウェア上で動作するゼロベース予算(ZBB)ツールでした。高速でプライバシーが守られ、信頼できるものである必要がありました。**Actual Budget**はその条件に完璧に合致しました。これはローカルファーストで暗号化されたアプリケーションであり、Dockerベースのホームラボ(HomeLab)にシームレスに統合できます。台帳を自分のサーバーに移すことは、単なる節約ではなく、「デジタルの主権」を取り戻すことなのです。

クイックスタート:5分でデプロイ

複雑なインストーラーで時間を無駄にする必要はありません。Docker Composeは、クリーンでサーバー間の移動も簡単なため、ここでの「ゴールドスタンダード」です。Linuxマシン、Raspberry Pi、またはSynology NASでDockerとComposeが動作していることを前提としています。

まず、スタック用の専用ディレクトリを作成します:

mkdir -p ~/homelab/actual-budget
cd ~/homelab/actual-budget

次に、docker-compose.ymlファイルを作成します:

services:
  actual_server:
    image: actualbudget/actual-server:latest
    container_name: actual_budget
    ports:
      - 5006:5006
    volumes:
      - ./data:/data
    restart: unless-stopped

次のコマンドでコンテナを起動します:

docker compose up -d

ブラウザを開き、http://[サーバーのIPアドレス]:5006にアクセスしてください。すぐにセットアップ画面が表示されるはずです。これが個人財務管理における「Hello World」の瞬間です。しかし、まだ銀行の詳細を入力しないでください。暗号化されていないHTTPポートのまま放置するのは、大きなセキュリティリスクです。

アーキテクチャの仕組み

Actual Budgetは、多くのウェブアプリとは異なり「ローカルファースト」の哲学を採用しています。ブラウザやスマートフォンが実際のSQLiteデータベースを保持し、デプロイしたDockerコンテナは同期リレーとして機能します。外出先で5ドルのコーヒー代を記録すると、アプリはその変更をサーバーに送信し、サーバーがそれをデスクトップにプッシュします。この設計により、サーバーが一時的にオフラインになっても、アプリは完全に機能し続けます。

データボリュームの保護

./data:/dataのマッピングは、セットアップの核心です。このフォルダには、暗号化された予算ファイルが保存されます。Dockerコンテナは一時的なもの(エフェメラル)です。ボリュームのマッピングなしにコンテナを削除すると、データは消失してしまいます。必ずこのディレクトリのバックアップを取るようにしてください。Actualは軽量で、通常150MB未満のRAMしか消費しないため、システムに負荷をかけることはありません。

パーミッションエラーの修正

コンテナのログにEACCES: permission deniedと表示される場合、修正は簡単です。Actualのイメージは通常UID 1000として実行されます。ホストマシンでchown -R 1000:1000 ./dataを実行することで、権限を修正できます。これにより、コンテナがディスクに予算の変更を書き込む権限を持つようになります。

セキュリティとリモートアクセス

YNABを完全に置き換えるには、買い物をしている外出先からも予算にアクセスできる必要があります。公共のWi-Fi経由でHTTPを使用して生の財務データを送信するのは賢明ではありません。暗号化されたトンネルが必要です。

Nginx Proxy ManagerによるSSL化

Nginx Proxy Manager(NPM)を使用している場合は、finance.yourdomain.comのようなサブドメインをサーバーのIPの5006ポートに向けてください。必ず「Force SSL」と「HTTP/2」を有効にしましょう。よりプライベートな経路を好むなら、Tailscaleが優れた代替案です。ポートをインターネットに公開することなく、安全なメッシュVPN経由でサーバーにアクセスできます。

モバイルでの利用体験

Actualは、ネイティブアプリのダウンロードではなく、プログレッシブウェブアプリ(PWA)を使用します。HTTPSが機能したら、iPhone SafariまたはAndroidのChromeでURLを開き、「ホーム画面に追加」をタップしてください。ネイティブアプリのような操作感で、オフラインでも動作し、接続が回復した瞬間に同期されます。

銀行との同期

手入力は支出を意識する最良の方法ですが、自動化は時間を節約してくれます。Actualは北米の銀行向けに**SimpleFIN**、欧州向けに**GoCardless**をサポートしています。これらのサービスは通常、少額の月額料金(約2ドル)がかかりますが、認証情報は暗号化され、コアアプリとは別に管理されます。

セルフホスト家計管理のプロのコツ

洗練されたSaaSからセルフホストのソフトウェアに切り替えるには、いくつかの習慣の変化が必要です。システムをスムーズに運用するための私の工夫を紹介します:

  • 暗号化キーを安全に保管する: セットアップ中にデータを暗号化するためのパスワードが求められます。ここには「パスワードのリセット」ボタンはありません。このキーを紛失すると、データは永遠に失われます。Bitwardenのようなパスワードマネージャーに保存してください。
  • バックアップを自動化する: cronジョブを使用して、データフォルダを別の場所にrsyncします。私は毎晩午前3時に、オフサイトのRaspberry Piにバックアップをプッシュしています。
  • 「未分類」戦略: 最初のインポート時に完璧主義に陥らないでください。すべてを一つのバケットに放り込み、週に一度コーヒーを飲みながら整理しましょう。

Actual Budgetのセットアップは、やりがいのある週末プロジェクトになります。リバースプロキシで同期を完璧に動作させるのに、私は約30分かかりました。今では、月額料金ゼロでプロ仕様の家計管理ツールを手にしています。住宅ローンや給与のデータが広告のためにスクレイピングされていないという安心感は、その手間に見合う価値があります。

Dockerイメージの更新後に502 Bad Gatewayが表示されても、慌てないでください。docker logs -f actual_budgetでログを確認しましょう。通常、サーバーがデータベースのマイグレーションを実行しているだけです。60秒ほど待ってページを更新すれば、家計簿に戻ることができます。

Share: