Flutter Desktopで「電子帳簿リネーマー」を開発中です(開発日誌 #1)

今日から、新しいアプリの開発日誌シリーズをスタートしたいと思います。

タイトルは「電子帳簿リネーマー」。

これは、私自身が個人事業主として毎月のように繰り返している「ある面倒な作業」を、半自動化するためのデスクトップアプリです。今までWordPressのプラグインやモバイルアプリは作ってきましたが、PCネイティブアプリの開発は今回が初めて。未知のことだらけですが、その過程をシリーズで記録していこうと思います。

目次

どんな作業を自動化したいのか?

私のような個人事業主は、ネットで何かを買ったり、サブスクを利用したりするたびに、領収書PDFをダウンロードします。

そして、それらを会計ソフトに添付するために、毎回ファイル名を書き換えて、フォルダに仕分けしています。

たとえば、Amazonで1,500円の買い物をして、領収書PDFをダウンロードしたとします。元のファイル名は、こんな感じです:

amazon-receipt-12345.pdf

これだと、何の領収書か後で分かりません。そこで私は、電子帳簿保存法のルールに準拠したファイル名に書き換えています:

20260531_1500_Amazon.pdf

これでファイル名だけで「いつ・いくら・どこで」が分かるようになります。検索もできるし、年度末の整理も楽になります。

1回の作業フローを書き出してみると…

実際にやっていることを書き出すと、毎回こんな手順です:

  1. PDFをダウンロードする
  2. PDFを開いて金額を読む(例: 1,500円)
  3. 購入先を確認する(例: Amazon)
  4. 日付を付ける(例: 20260531)
  5. ファイル名を 20260531_1500_Amazon.pdf のように変更する
  6. 月別フォルダ(2026年/05月/ など)に振り分ける
  7. 会計ソフトに添付して、仕訳ボタンを押す

1件あたり1〜2分くらい。それほど時間はかかりませんが、これが毎日のように発生するんです。

私はマネーフォワードクラウド会計を使っているのですが、銀行口座やクレジットカードの引き落としがあると、「未処理」として赤いマークがつきます。

赤マークがついた案件を放置していると、後で「これ、何の引き落としだっけ?」と分からなくなるので、割と数日に1回は仕訳作業をしています。

つまり、月に何度も、地味に繰り返している作業なんです。

これを半自動化したい

毎回手で書き換えるのを、PDFをドラッグ&ドロップするだけで:

  • 日付を自動で読み取る
  • 金額を自動で読み取る
  • 取引先を自動で判定する
  • ファイル名を YYYYMMDD_金額_取引先.pdf の形式に変換する
  • 月別フォルダに自動で振り分ける

ここまで自動でやってくれたら、私の作業は「確認してOKボタンを押すだけ」になります。理想は「3秒で1件処理できるアプリ」です。

なぜPCネイティブアプリなのか?

最初は「モバイルアプリでもいいかな?」とも考えました。でも、よく考えると領収書PDFを扱う作業は、ほぼ100% PC上で完結しています。

  • 領収書PDFはPCでダウンロードすることが多い
  • ドラッグ&ドロップが便利なのはPC
  • ファイル操作はPCの方がしやすい
  • 会計ソフトもPCで使う人が多い

なので、今回は迷わずPCネイティブアプリにしました。

技術的な肝は「PDFからの情報読み取り」

このアプリの肝になるのが、PDFからどうやって情報を読み取るかです。

人間の目で見れば「日付」「金額」「取引先」はすぐ分かりますが、コンピューターにとっては「ただの文字列」。

しかも、領収書のフォーマットは取引先ごとにバラバラです。

  • Amazonの領収書: 「ご請求金額: ¥1,500」のような表記
  • Adobeの領収書: 「合計金額(円) 1,580」のような表記
  • Microsoftの領収書: 「JPY 14,900.00 税金を含む」のような表記
  • 自動車税納付書: 「令和7年5月10日」のような和暦

正規表現と判定ロジックで、こうした多様なフォーマットに対応していく必要があります。

開発スタックは「Flutter Desktop」

PCアプリの開発フレームワークはいくつかありますが、私はモバイルアプリで使い慣れたFlutterを選びました。

Flutter Desktopなら、同じコードベースでMacもWindowsもLinuxもビルドできるのが大きな魅力です。

未知のことだらけ

PCネイティブアプリの開発は初めてなので、悩みどころも山積みです。

  • Mac専用にする? それともWindowsも対応する?
  • どうやって公開するの? App StoreやMicrosoft Storeで?
  • それともダウンロード販売?
  • ライセンス管理はどうする?
  • Macの公証(Notarization)って何?
  • インストーラーはどうやって作るの?

これから一つひとつ調べながら、進めていきます。

今日までの進捗

実は、すでにいくつかの機能は実装できています。

  • PDFからのテキスト抽出
  • 日付候補の自動抽出(複数フォーマット対応)
  • 金額候補の自動抽出(優先順位付き)
  • 月別フォルダへの自動保存

Amazonの領収書だけでもフォーマットがいくつもあって、思った以上に苦戦しています。たとえば、同じAmazonでも:

  • 「ご請求金額: ¥1,500」と書かれているもの
  • 「合計 ¥1,500」とだけ書かれているもの
  • 「¥1,500」と金額だけ並んでいるもの
  • 適格請求書フォーマット(2023年10月のインボイス制度以降に出てきた新しい形式)

それぞれパターンが違うので、丁寧に対応していく必要があります。

シリーズで書いていきます

このアプリの開発過程を、シリーズで書いていきたいと思います。

「自分が毎日面倒に思っている作業を、自分のコードで解決する」というのは、個人開発の中でも特に楽しい体験です。同じような悩みを持っている個人事業主の方や、Flutter Desktopに興味がある方の参考になれば嬉しいです。

次回は、PDFテキスト抽出について技術的な部分を書く予定です。Flutterで使える PDFライブラリの選定、実際にどんなコードで動かしているのか、を共有したいと思います。

それでは、次回もよろしくお願いします。


目次