今日から、新しいアプリの開発日誌シリーズをスタートしたいと思います。
タイトルは「電子帳簿リネーマー」。
これは、私自身が個人事業主として毎月のように繰り返している「ある面倒な作業」を、半自動化するためのデスクトップアプリです。今までWordPressのプラグインやモバイルアプリは作ってきましたが、PCネイティブアプリの開発は今回が初めて。未知のことだらけですが、その過程をシリーズで記録していこうと思います。
どんな作業を自動化したいのか?
私のような個人事業主は、ネットで何かを買ったり、サブスクを利用したりするたびに、領収書PDFをダウンロードします。
そして、それらを会計ソフトに添付するために、毎回ファイル名を書き換えて、フォルダに仕分けしています。
たとえば、Amazonで1,500円の買い物をして、領収書PDFをダウンロードしたとします。元のファイル名は、こんな感じです:
amazon-receipt-12345.pdf
これだと、何の領収書か後で分かりません。そこで私は、電子帳簿保存法のルールに準拠したファイル名に書き換えています:
20260531_1500_Amazon.pdf
これでファイル名だけで「いつ・いくら・どこで」が分かるようになります。検索もできるし、年度末の整理も楽になります。
1回の作業フローを書き出してみると…
実際にやっていることを書き出すと、毎回こんな手順です:
- PDFをダウンロードする
- PDFを開いて金額を読む(例: 1,500円)
- 購入先を確認する(例: Amazon)
- 日付を付ける(例: 20260531)
- ファイル名を
20260531_1500_Amazon.pdfのように変更する - 月別フォルダ(
2026年/05月/など)に振り分ける - 会計ソフトに添付して、仕訳ボタンを押す
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ライブラリの選定、実際にどんなコードで動かしているのか、を共有したいと思います。
それでは、次回もよろしくお願いします。
