Back to Blog
PythonStreamlit業務効率化Claude Code大学職員

振替伝票を自動生成するStreamlitアプリを作った話

はじめに

大学で経理業務に携わる中で、毎月必ず発生する「振替伝票の作成」という作業がありました。

過去の伝票データを参照して、決まったルールで振替伝票を作成する。単純作業だけど、件数が多いと地味に時間がかかる。しかもミスが許されない。

「これ、自動化できるよね?」

そう思い立って作ったのが、今回紹介する 振替伝票自動生成システム です。

解決したかった課題

Before: 手作業での振替伝票作成

  1. 過去伝票データ(Excel)から対象の伝票を探す
  2. 振替先の予算コード・財源コードを確認
  3. GLOVIAのインポート形式に合わせて手入力
  4. 借方・貸方のペアを確認

問題点:

  • 1件あたり3〜5分かかる
  • 月に数十件あると半日仕事
  • 予算コードの入力ミスが怖い

After: 自動生成システム

  1. 振替対象の伝票番号リストをアップロード
  2. 振替先の科目・予算コードを選択
  3. ボタンを押す
  4. 完成!

効果:

  • 数十件でも数分で完了
  • マスタ連携でミス防止
  • Excelでそのままダウンロード

技術スタック

| 技術 | 選定理由 | |-----|---------| | Python | データ処理の定番。pandasが強い | | Streamlit | 最速でWebアプリ化。デプロイも簡単 | | pandas | Excelとの相性が最高 | | openpyxl | Excel書き込み用 |

なぜStreamlit?

「社内ツールなのでWeb公開しない」という前提で、ローカルで動くデスクトップアプリっぽいものが欲しかった。

Streamlitなら:

  • Pythonだけで完結
  • インストール不要(ブラウザで動く)
  • UIコンポーネントが豊富
  • デプロイしなくても使える

アプリの構成

振替伝票自動生成/
├── app.py                 # メインアプリ
├── lib/
│   ├── data_loader.py     # データ読み込み
│   ├── voucher_processor.py # 伝票処理ロジック
│   ├── excel_writer.py    # Excel出力
│   ├── data_validator.py  # バリデーション
│   └── data_manager_ui.py # データ管理UI
├── data/                  # マスタデータ
└── output/                # 出力先

主要機能

1. 振替伝票生成

過去伝票データとマスタを突合し、借方・貸方のペアを自動生成。

# 借方(振替先)
row['財源コード'] = target_zaigen
row['予算コード'] = target_yosan
row['K'] = 0  # 借方フラグ

# 貸方(元伝票から引き継ぎ)
row['K'] = 1  # 貸方フラグ

2. 2段階の予算コード選択

予算コードが1000件以上あるので、まず科目で絞り込んでから選択できるようにした。

① 科目を選択:K110000 - 科研費
② 予算コードを選択:K110001 - ○○教授(基盤C)

3. データ管理機能

マスタデータを安全に更新できるUI。Excelを直接編集させるとデータ構造が壊れるリスクがあるため。

  • 閲覧:検索・フィルタリング・CSVエクスポート
  • 編集:セル単位の編集、行の削除
  • 追加:フォームからの新規追加
  • 検証:バリデーションエラーの一覧表示

Claude Codeでの開発

今回の開発は Claude Code をフル活用しました。

開発の流れ

  1. 要件を伝える

    「過去伝票データから振替伝票を自動生成したい。借方は指定した予算、貸方は元伝票のまま。」

  2. 基本実装

    • データ構造を説明してコード生成
    • Streamlitでプロトタイプ作成
  3. 改善要望

    「予算コードの選択がしづらい。科目ごとにフィルタしたい」 「Macのデスクトップアプリにしたい」 「データ更新時にユーザーが構造を壊さないようにしたい」

  4. イテレーション

    • 動作確認 → 修正依頼 → 反映 のサイクル

良かった点

  • コード全体を把握してくれる:ファイル間の依存関係を理解した上で修正
  • バグ修正が速い:エラーメッセージを見せるだけで原因特定
  • ドキュメント生成:マニュアルも自動作成

注意点

  • 大きな変更は確認しながら進める
  • 「とりあえず動く」と「本番品質」は別物
  • セキュリティやエッジケースは人間が確認

配布の工夫

社内配布用に以下を整備:

Windows向け

  • セットアップ.bat:Python仮想環境を構築
  • 起動.bat:アプリを起動

Mac向け

  • setup_mac.sh:セットアップ
  • .appバンドル:ダブルクリックで起動

共通

  • docs/マニュアル.md:使い方ガイド
  • docs/create_distribution.sh:配布用Zip作成

まとめ

開発にかかった時間

  • 基本実装:2時間
  • UI改善・機能追加:3時間
  • 配布準備・ドキュメント:1時間
  • 合計:約6時間

Claude Codeなしだと2〜3日はかかっていたと思います。

学んだこと

  1. Streamlitは社内ツールに最適

    • 学習コストが低い
    • Pythonの資産をそのまま活用
    • デプロイ不要で配布可能
  2. バリデーションは最初から入れる

    • 後からだと手戻りが大きい
    • ユーザーの入力ミスを防ぐのが最重要
  3. AI活用の肝は「要件の言語化」

    • 曖昧な指示より具体的な例
    • 動作確認 → フィードバック のサイクル

思わぬ副産物:予算管理システム

振替伝票を作っていて気づいたことがあります。

「これ、予算管理システムじゃん」

もともと予算コードはExcelで管理していました。1000件以上ある予算コードと財源コード、消費税区分の対応表。これを振替伝票生成のために読み込んで、UI上で検索・選択できるようにしたら...

  • 予算コードの一覧表示
  • 科目ごとのフィルタリング
  • 新規予算の追加
  • 既存データの編集・削除
  • バリデーションによるデータ整合性チェック

振替伝票ツールを作っていたら、オリジナルの予算管理システムができていた。

数千件程度なのでSQLを使うほどでもない。でもExcelだと壊れやすい。Pythonでサクッと作れて、ブラウザで使える。ちょうどいい規模感のアプリになりました。

これが業務効率化の面白いところで、ひとつの課題を解決しようとすると、関連する別の課題も一緒に解決できることがある。「振替伝票を自動化したい」から始まって「予算マスタを安全に管理したい」まで解決できた。

今後の展望

  • [ ] 過去伝票のDB化(現状は毎回Excelを全件読み込み)
  • [ ] 処理履歴のログ保存
  • [ ] 複数の振替パターンのプリセット機能
  • [ ] 予算執行状況の可視化(せっかくデータがあるので)

業務効率化ツールは「自分が困っている」ところから始まる。そして作っているうちに、思わぬ副産物が生まれることもある。小さくても確実に時間を節約できるツールを、これからも作っていきたいと思います。