導入(問題提起)

「手元のExcelファイルが重すぎて開かない」「誰かが開いていると編集できない」「いつの間にか計算式が壊れている」——。 多くの現場で、業務効率化のために導入されたはずのExcelが、逆に「業務のボトルネック」になっているケースが散見されます。

特に小さな会社やチームにおいて、最初の一歩として最適なのがPythonとSQLiteを組み合わせたWebシステム開発です。 本記事では、なぜPythonとSQLiteが業務システムに向いているのか、そしてどのように構築を進めるべきかを具体的に解説します。

課題説明:なぜExcel管理は限界を迎えるのか

業務が拡大するにつれ、Excelによる「台帳管理」には以下のような構造的な課題が浮上します。

  1. データの不整合(ゴミデータの蓄積)
  2. Excelは自由度が高すぎるため、日付を入れるべき場所にテキストが入ったり、表記揺れ(「株式会社」と「(株)」など)が発生したりします。これにより、正確な集計が困難になります。

  3. 同時アクセスの競合
  4. 共有サーバー上のExcelは、基本的に「1人しか編集できない」仕組みです。チームで在庫や案件をリアルタイムに更新したい場合、待ち時間が発生し、作業効率が著しく低下します。

  5. 変更履歴の喪失
  6. 「誰が、いつ、どこを、なぜ変えたのか」を追跡することが難しく、ミスが起きた際の原因究明や、過去の状態への復元が困難です。

  7. セキュリティと権限管理の不備
  8. 「この列だけは見せたくない」「このシートは閲覧専用にしたい」といった細かな制御が難しく、情報漏洩や誤消去のリスクが常に付きまといます。

解決方法:Python + SQLite という選択肢

これらの課題を解決する最も軽量かつ強力な構成が、Python WebアプリSQLiteの組み合わせです。

なぜ Python なのか?

Pythonは読みやすく書きやすい文法を持ち、Webシステム開発に必要なフレームワーク(Bottle, FastAPI, Flaskなど)が充実しています。また、データ処理や自動化、AI連携にも強いため、作ったシステムを将来的に拡張していくのが非常に容易です。さらに、豊富なライブラリにより、Excelファイルの読み書きやPDF出力、外部API(LINEやSlack、チャットボット)との連携も数行のコードで実現できます。

なぜ SQLite なのか?

SQLiteは「ファイル1つで動作するデータベース」です。サーバーのインストールや複雑な設定が不要で、バックアップもファイルをコピーするだけ。 「数万人で同時アクセスする」ような大規模サービスには向きませんが、数十人規模の社内ツールや業務システムとしては、十分すぎるほどの性能と安定性を誇ります。特別なデータベース管理者が不要である点は、小さな会社にとって最大のメリットと言えるでしょう。

実現できること

  • 入力チェック(バリデーション):必須項目の未入力や、不正な数値入力を防ぎ、正しい形式のデータしか保存させない。
  • マルチユーザー対応:ブラウザ経由で、複数人が同時に閲覧・更新できる。
  • 自動ログ記録:全ての更新操作(誰が・いつ・どの値を・何に変えたか)をデータベースに記録し、透明性を高める。
  • モバイル対応:スマホやタブレットから現場で直接入力が可能になり、事務所に戻ってからPCに入力し直す二度手間を解消する。
  • 権限管理:部署や役職に応じて、閲覧・編集できる範囲をきめ細かく制御。

運用上のメリットと注意点

システム化には、単なる効率化以上のメリットがあります。

1. セキュリティとバックアップ

Excelファイルはコピーや持ち出しが容易で、パスワード保護も脆弱です。Webシステムにすることで、アクセス制限やログイン認証を強化できます。また、SQLiteはファイル1つで構成されるため、定期的なクラウドストレージへの自動バックアップ(Google Drive, Dropbox, AWS S3等)も非常に簡単です。

2. 保守性と拡張性

「とりあえず作った」システムでも、Pythonであれば後から機能を追加するのが容易です。例えば、在庫が少なくなったら自動的にメールを送信する、顧客の誕生日にクーポンを配信する、といったマーケティングオートメーション(MA)に近い動きも、既存の仕組みを壊さずに実装できます。

3. 注意点:SQLiteの同時書き込み制限

SQLiteは「読み込み」には非常に強いですが、「書き込み」は一度に1つのプロセスしか行えません。そのため、1秒間に数百件のデータが更新されるような高頻度の書き込みが発生する業務には向きません。しかし、一般的な社内の事務作業や在庫管理、顧客管理において、人間が手入力する程度の頻度であれば、全く問題なく動作します。

具体例:タスク管理・在庫管理システムの設計

例えば、簡単な「業務管理システム」を構築する場合、以下のようなステップで進めます。

1. データベース設計(SQLite)

まずは管理したい項目をテーブル定義(DDL)として書き出します。


CREATE TABLE items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    stock_count INTEGER DEFAULT 0,
    category TEXT,
    location TEXT,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE stock_logs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    item_id INTEGER,
    change_amount INTEGER,
    user_id TEXT,
    reason TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY(item_id) REFERENCES items(id)
);

このように、台帳(items)と履歴(stock_logs)を分けることで、「現在の在庫数」だけでなく「なぜ在庫が減ったのか」という経緯も完璧に追跡できるようになります。

2. バックエンド構築(Python)

超軽量フレームワーク「Bottle」を使用すれば、数行でWebサーバーが立ち上がります。


from bottle import route, run, template, request, redirect
import sqlite3

DATABASE = 'business.db'

def get_db():
    return sqlite3.connect(DATABASE)

@route('/items')
def list_items():
    conn = get_db()
    curr = conn.cursor()
    curr.execute("SELECT id, name, stock_count FROM items ORDER BY id DESC")
    rows = curr.fetchall()
    conn.close()
    return template('items_list', rows=rows)

@route('/items/update', method='POST')
def update_item():
    item_id = request.forms.get('id')
    amount = int(request.forms.get('amount'))
    conn = get_db()
    curr = conn.cursor()
    # 在庫更新と履歴保存をトランザクションで実行
    curr.execute("UPDATE items SET stock_count = stock_count + ? WHERE id = ?", (amount, item_id))
    curr.execute("INSERT INTO stock_logs (item_id, change_amount) VALUES (?, ?)", (item_id, amount))
    conn.commit()
    conn.close()
    return redirect('/items')

run(host='0.0.0.0', port=8080)

このコードは極めてシンプルですが、Webブラウザから操作できる立派なPython Webアプリの核となります。ここからデザイン(CSS)を整え、ログイン機能を追加することで、実戦的なシステムへと育っていきます。

3. Excel Web化のポイント

既存のExcelデータをシステムへ移行する際は、CSV経由で一括インポートする機能を最初に作ります。これにより、「今日からWebシステムに切り替える」という移行がスムーズになります。また、現場の人間が使い慣れたExcel形式でデータを出力したい場合も、Pythonなら簡単に「WebのデータをExcelファイル(.xlsx)として書き出す」機能が作れるため、既存業務との共存も可能です。

まとめ:小さく始めて大きく育てる

Excel Web化は、一度に全てをシステム化しようとすると、要件定義に時間がかかりすぎて頓挫しがちです。まずは「一番困っている特定の台帳」だけをPythonでWeb化し、SQLiteにデータを集約することから始めてください。

その小さな成功体験が、社内のデジタル化(DX)を加速させる原動力になります。Pythonなら、後から「PDF帳票出力」や「AIによる需要予測」「LINE連携」といった高度な機能を追加するのも自由自在です。

まずは、身近なExcelファイルを一つ、Webシステムへ置き換えてみることから、御社のIT化の第一歩をスタートさせてみませんか?

問い合わせ導線

自社専用の使いやすいシステムが欲しい、今のExcel業務をスマートにしたいとお考えの方は、ぜひ monou にご相談ください。 お客様の業務フローに合わせた、シンプルで堅牢なWebシステム開発をお手伝いいたします。 中小企業様の「小さなDX」を、確かな技術力でサポートします。

「Webシステム開発のご相談は monou まで」

お問い合わせはこちらから