Flaskで領収書を管理するWebアプリの作成を試みる

領収書の管理が面倒になってきたので、Flaskで領収書を管理するWebアプリの作成を試みます。色々つけたい機能を考えていると、FlaskよりもDjangoの方が楽なんじゃないかなと思っています。しかし、Djangoは触ったことがなく作成に時間がかかりそうなので、一旦Flaskで作ってみて時間があればDjangoで作り直そうと考えています。

作成済みの機能

入力フォーム

アップロードするファイルを見ながら、必要項目にデータを入力。

データベースへの登録項目

  • 取引日
  • 取引相手
  • 金額
  • アップロードしたファイルのPATH
  • 登録年月日(自動入力)

アップロードしたファイルの閲覧

クリックでアップロードしたファイルを1つずつ閲覧(ダウンロード)。ただし、セキュリティなし。

追加したい機能

最近、特に忘れやすいので思いついた機能を記録しておきます。

ログイン機能

ローカル環境で運用する場合は、必要ないかもしれないが、Webアプリとして運用するにはログイン機能は必須。

アップロードファイルの制限

ファイルの種類とサイズを制限する。jpgとPDF、サイズはMAXで1M-2Mぐらいかな。

検索機能

取引日、取引相手、金額、最低でもこの3つの項目から複合的に検索できるようにする。

合計金額表示

標準時はこれまでの合計金額、検索後は検索結果の合計金額を表示する。

変更削除履歴

アプリ上からは、登録したデータは変更も削除も出来ない仕様だが、内部ログとして変更削除履歴機能をつけておきたい。

重複確認

基本的に、登録したデータは削除出来ないので、データを登録する前に重複していないか確認できるようにする。ファイル名はsecureな名前に変更される可能性があるので、重複チェックは取引日と金額をベースにする。

ファイルの一括ダウンロード

個別にファイルの閲覧、ダウンロードだけではなく、アップロードしたファイルを一括ダウンロードできるようにしたい。出来れば検索結果に適合したファイルだけ一括ダウンロードできるようにする。

CSV形式でエクスポート

登録したデータをCSVファイルとしてダウンロードできるようにする。

次年度更新

登録したデータとファイルは1年毎に管理したいので、次年度更新するとデータベースとアップロードディレクトリを自動で作成できるようにしたい。

データベースの移行

現在はsqliteで作成しているが、将来的にはMySQLやPostgreSQLに移行する。ソースコードではSQLAlchemyで書いているので、比較的簡単に移行できるのかな?

運用サーバー

ブログを書きながら冷静に考えてみると、ちょっと、このアプリは完成できないかもしれません。やっぱり、Webアプリって、すごく難しいです。特に、セキュリティ面が。セキュリティの知識が無いので、データベースの流出や改ざんの危険性がかなり高いです。

このブログでデモアプリを稼働させていますが、レンタルサーバーなのでroot権限がなく出来ることも限られています。私に知識がないため、ローカル環境で動いていたソースコードも、レンタルサーバーでは動かなかったりします。大事なデータをsqliteで運用するのも怖いです。

かといって、VPSサーバーに移行すると、さらにセキュリティの知識が必要です。今のままだと、VPSサーバーごと乗っ取られそうです。

というわけで、私の場合、現状ではローカル環境での運用しか選択肢がありません。

設置デモ

データベースへの登録は切ってあります。

ダウンロード機能は、切ってある時があります。

テスト用データを5000件登録済みです。プログラムで適当に作ったデータなので、IDと日付に関連がありませんが、実際の運用ではID順と日付順は似た結果になると思います。

https://dattesar.com/manage-receipt-demo/

追加機能 v0.1

  • ログイン機能
  • 登録ファイルのプレビュー機能
  • 検索機能
  • 合計金額表示

https://dattesar.com/manage-receipt-demo-noregi/