親御さんの顧客管理を簡単に。検針から請求まで、すべてボタン一つ。
| 機能 | 説明 |
|---|---|
| 👥 顧客管理 | 顧客の名前、住所、電話番号などを保存 |
| 📏 検針入力 | 毎月のガス検針値を日付付きで記録 |
| 🧮 請求自動生成 | 検針差分から自動で料金を計算して請求を作成 |
| 💰 入金管理 | 誰がいつ払ったか、一目で分かる |
| 📊 一覧表示 | 顧客と請求をシンプルに表示 |
セットアップ不要。ブラウザだけあれば OK!
- https://github.com にアクセス
- ない場合は新規登録(30秒)
- このリンクをクリック
- 「Create fork」をクリック
- 少し待つ...
- https://streamlit.io/cloud にアクセス
- 「Sign in with GitHub」をクリック
- GitHub でログイン
- 「New app」をクリック
- 以下を入力:
- Repository:
maouM-cmd/gasu(またはあなたのフォークしたもの) - Branch:
main - Main file path:
streamlit_app.py - App URL: 好きな URL(例:
my-gas-app)
- Repository:
- 「Deploy」をクリック
- 1分待つと、自分だけの URL が出現
- ブックマークして使い続ける
これで、どこからでもアクセス可能です!
- Windows/Mac/Linux
- Python 3.9 以上(ダウンロード)
-
フォルダを作成
mkdir my-gas-app cd my-gas-app -
プロジェクトをダウンロード
git clone https://github.com/maouM-cmd/gasu.git . -
Python 環境を準備
python3 -m venv .venv source .venv/bin/activate # Mac/Linux # または .venv\Scripts\activate # Windows
-
パッケージをインストール
pip install -r requirements-streamlit.txt
-
アプリを起動
streamlit run streamlit_app.py
-
ブラウザが自動で開きます
✅ 顧客一覧: 登録した全顧客と基本情報
✅ 顧客登録: 新しい顧客を追加
✅ 検針入力: 毎月の検針値を記録
✅ 請求管理: 自動計算→入金記録
✅ 大きなボタン: 高齢者でも使いやすい
✅ シンプルメニュー: ゴチャゴチャしない
| Streamlit Cloud | インストール版 | |
|---|---|---|
| セットアップ | ☁️ 不要 | 💻 20分 |
| 毎月の費用 | 無料 | 無料 |
| どこからアクセス | 📱 どこからでも | 💻 そのパソコンのみ |
| 推奨 | 👴👵 親御さん向け | 🧑💻 開発者向け |
- ✅ 📊 顧客一覧: 登録済みの全顧客を表示
- ✅ 👤 顧客登録: 新規顧客の追加(基本料金・単価・税率設定)
- ✅ 📏 検針入力: 検針値の記録、日付管理
- ✅ 💵 請求管理: 自動生成、入金記録、一覧表示
- ✅ 🔄 自動計算: 検針差分から料金を自動計算
- ✅ 💾 データ保存: すべてローカルで安全に保存
- ✅ 🎯 高齢者UI: シンプル・大きなボタン・直感的操作
python3 -m venv .venv
source .venv/bin/activate # Mac/Linux
# または
.venv\Scripts\activate # Windows
pip install -r requirements-streamlit.txtstreamlit run streamlit_app.py→ ブラウザ: http://localhost:8501
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver→ ブラウザ: http://127.0.0.1:8000
| 用途 | 推奨方法 | 難易度 |
|---|---|---|
| 親御さん(最初から) | Streamlit Cloud | ⭐ 超簡単 |
| 親御さん(初心者向け) | インストール版 | ⭐☆ 簡単 |
| 開発者(カスタマイズしたい) | ローカル Streamlit | ⭐☆☆ 中程度 |
| 自分で本番環境を構築 | Django + Docker | ⭐☆☆☆ 高度 |
pip install -r requirements.txt
pytest -v成功例:
tests/test_billing_tariff.py::test_calculate_invoice_amounts PASSED
tests/test_integration_generate_invoices.py::test_generate_invoices PASSED
docker-compose up --buildgasu/
├── streamlit_app.py # Streamlit UI(推奨)
├── web/ # Django プロジェクト
│ ├── settings.py # 開発設定
│ ├── settings_prod.py # 本番設定
│ └── wsgi.py # WSGI エントリーポイント
├── billing/ # ビジネスロジック
│ ├── models.py # データモデル
│ ├── views.py # Django ビュー
│ ├── tariff.py # 料金計算ロジック
│ ├── utils.py # ユーティリティ関数
│ └── management/commands/ # 管理コマンド
├── templates/ # Django HTML テンプレート
├── tests/ # テストコード
├── deploy/ # デプロイ設定
│ ├── nginx.conf # Nginx 設定
│ └── gasu.service # systemd サービス
├── docker-compose.yml # Docker Compose 設定
└── requirements.txt # Python 依存パッケージ
- 顧客作成・編集フローの実装(フォーム/検針の過去データ表示)
- 請求計算の自動化(検針差分から請求作成)と請求の一括発行ワークフロー
- PDFレイアウト調整と印刷検証(A4、改ページ、フォント)
- 運用: バックアップ自動化・監査ログ出力・デプロイ手順
更新はブランチ feature/django-ui-start に push されています。PR: #2
サーバ上で定期的なバックアップを実行するには、crontab を利用できます:
# 毎日 深夜 2 時にバックアップ実行
0 2 * * * cd /path/to/gasu && python manage.py backup_dbまたは systemd timer:
[Unit]
Description=GASU Database Backup
After=network.target
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00
[Install]
WantedBy=timers.target本番環境では、バックアップファイルを暗号化することを推奨します:
# gpg で暗号化
gpg --symmetric --cipher-algo AES256 backups/db_*.sqlite3.gz
# 復号化
gpg --decrypt backups/db_*.sqlite3.gz.gpg | gunzip > db_restored.sqlite3また、バックアップファイルは 600 権限(所有者のみ読取可)に設定し、別のストレージ(S3、外部ディスク等)に保存することを推奨します。
- 開発環境: SQLite(ローカル)、認証なし(許容)
- 本番環境: PostgreSQL への移行を推奨(ユーザ認証、SSL接続、バックアップ等が充実)
# PostgreSQL への移行例
pip install psycopg2-binary
# settings.py の DATABASES を以下に変更
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.postgresql',
# 'NAME': 'gasu_db',
# 'USER': 'gasu_user',
# 'PASSWORD': '...',
# 'HOST': 'db.example.com',
# 'PORT': '5432',
# }
# }billing/models.py の AuditLog モデルですべての重要操作(請求作成、入金確認等)がログされます。管理画面で確認できます。
- Ubuntu 20.04 LTS 以上または同等のサーバ
- PostgreSQL 12 以上(推奨)
- Nginx 1.18 以上
- Python 3.9 以上
- サーバのセットアップ
# パッケージ更新
sudo apt update && sudo apt upgrade -y
# PostgreSQL インストール(例)
sudo apt install -y postgresql postgresql-contrib
# Nginx インストール
sudo apt install -y nginx
# Python 環境
sudo apt install -y python3.11 python3.11-venv python3.11-dev
# その他必要なライブラリ
sudo apt install -y build-essential libpq-dev libcairo2-dev libpango1.0-dev- アプリケーション展開
# アプリケーションディレクトリ作成
sudo mkdir -p /opt/gasu
cd /opt/gasu
# リポジトリをクローン
sudo git clone https://github.com/your-repo/gasu.git .
# 所有権設定
sudo chown -R gasu:gasu /opt/gasu- 環境変数設定
# .env ファイルを作成
cp .env.example .env
# .env を編集
sudo nano .env
# SECRET_KEY, DB_PASSWORD, ALLOWED_HOSTS 等を設定- 仮想環境と依存インストール
cd /opt/gasu
# 仮想環境作成
python3.11 -m venv .venv
source .venv/bin/activate
# 依存インストール(本番向けsettings_prodを使用)
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt- PostgreSQL データベース設定
# PostgreSQL に接続
sudo -u postgres psql
# ユーザとデータベース作成
CREATE USER gasu_user WITH PASSWORD 'your-password';
CREATE DATABASE gasu_db OWNER gasu_user;
ALTER ROLE gasu_user SET client_encoding TO 'utf8';
ALTER ROLE gasu_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE gasu_user SET default_transaction_deferrable TO on;
ALTER ROLE gasu_user SET default_transaction_level TO 'read committed';
\q- Django マイグレーション
cd /opt/gasu
source .venv/bin/activate
export DJANGO_SETTINGS_MODULE=web.settings_prod
python manage.py migrate
python manage.py collectstatic --noinput- システムユーザー作成
# システムユーザ(gasu)作成
sudo useradd -m -s /bin/bash gasu || true- Gunicorn と systemd 設定
# systemd service ファイルをコピー
sudo cp deploy/gasu.service /etc/systemd/system/
# service ファイルを編集(パスを確認)
sudo nano /etc/systemd/system/gasu.service
# systemd リロード
sudo systemctl daemon-reload
# サービス有効化・起動
sudo systemctl enable gasu
sudo systemctl start gasu
# ステータス確認
sudo systemctl status gasu- Nginx 設定
# Nginx 設定をコピー
sudo cp deploy/nginx.conf /etc/nginx/sites-available/gasu
# シンボリックリンク作成
sudo ln -s /etc/nginx/sites-available/gasu /etc/nginx/sites-enabled/
# 既存デフォルト設定を削除(オプション)
sudo rm /etc/nginx/sites-enabled/default
# Nginx 設定をテスト
sudo nginx -t
# Nginx 再起動
sudo systemctl restart nginx- SSL 証明書(Let's Encrypt)
# Certbot インストール
sudo apt install -y certbot python3-certbot-nginx
# 証明書取得
sudo certbot certonly --nginx -d example.com -d www.example.com
# Nginx 設定で HTTPS を有効化(deploy/nginx.conf の HTTPS セクションをコメント解除)
# その後 nginx -t && systemctl restart nginx- バックアップスケジュール設定
# Crontab 編集
sudo crontab -e -u gasu
# 毎日 2 時にバックアップ
0 2 * * * cd /opt/gasu && source .venv/bin/activate && python manage.py backup_db
# バックアップファイルを暗号化(オプション)
# 15 2 * * * gpg --symmetric --cipher-algo AES256 /opt/gasu/backups/db_*.sqlite3.gz > /dev/null 2>&1# ログ確認
sudo tail -f /opt/gasu/logs/error.log
# Gunicorn ステータス確認
sudo systemctl status gasu
# Nginx ステータス確認
sudo systemctl status nginx
# ブラウザでアクセス
# https://example.com###セキュリティ点検リスト
-
SECRET_KEYが強力なランダム値に設定されているか -
DEBUG = Falseに設定されているか -
ALLOWED_HOSTSに本番ドメインを指定しているか - PostgreSQL ユーザーで強力なパスワードを使用しているか
- SSL 証明書が有効か(https:// で接続できるか)
- バックアップスケジュールが設定されているか
- ファイアウォール(ufw)で不要なポートを閉じているか
- 定期的なセキュリティアップデートを行う体制になっているか
Gunicorn が起動しない
sudo systemctl restart gasu
sudo journalctl -u gasu -n 20Nginx が接続できない
sudo nginx -t
curl -I http://127.0.0.1:8000データベース接続エラー
# .env の DB_* 設定を確認
psql -U gasu_user -d gasu_db -h localhostA: はい、完全無料です。Streamlit Cloud も無料枠があります。
A: はい。「インストール版」を選べば、インターネット不要です(セットアップ時のみ必要)。
A: はい。データはあなたのパソコンまたはクラウド上に保存され、外部に送信されません。
A:
- Streamlit Cloud版: 自動バックアップあり
- インストール版: ファイルをコピーするだけ(
gas_billing.dbファイルをバックアップ)
A: はい。Streamlit Cloud版なら、スマホのブラウザ(Safari/Chrome)で使えます。
A: このREADMEの下の方に技術詳細があります。
解決策:
- https://www.python.org/ からダウンロード
- 「Add Python to PATH」にチェックを入れてインストール
- コマンドラインを再起動
解決策:
- ブランチが
mainになっているか確認 - メインファイルが
streamlit_app.pyか確認 - 5分待ってみる(デプロイ中かもしれません)
解決策(インストール版):
gas_billing.dbファイルは?を確認- なければ、バックアップから復元
解決策:
- ページをリロード(F5 キー)
- ブラウザを変える(Chrome推奨)
問題が起きた場合:
- 上の「トラブルシューティング」を確認
- GitHub Issues で報告: https://github.com/maouM-cmd/gasu/issues/new
gasu/
├── streamlit_app.py # Streamlit アプリ本体
├── requirements-streamlit.txt # Python パッケージ一覧
├── .streamlit/
│ └── config.toml # UI テーマ設定
│
├── web/ # Django プロジェクト(別UI)
├── billing/ # ビジネスロジック
├── docker-compose.yml # Docker 設定
└── README.md # このファイル
- Web Framework: Streamlit (フロントエンド) + Django (バックエンド)
- Database: SQLite(開発) / PostgreSQL(本番)
- Language: Python 3.9+
- Deployment: Streamlit Cloud / Render.com / VPS
# Streamlit版
streamlit run streamlit_app.py
# Django版
python manage.py runserverpytest -vこのプロジェクトは MIT ライセンスの下で公開されています。
🌟 このプロジェクトが役に立ったら、GitHub Star をお願いします!
-
GitHub アカウントに本リポジトリをフォーク:
https://github.com/maouM-cmd/gasu/fork -
Render.com にログイン:
https://render.com -
以下のボタンをクリック:
-
フォームで以下を入力:
- Service Name:
gasu(任意) - Repository:
https://github.com/{your-username}/gasu - Branch:
feature/django-ui-start(またはmain) - Build Command: 自動設定
- Start Command: 自動設定
- Service Name:
-
確認画面で Deploy ボタンをクリック
-
デプロイが完了すると、自動生成されたURLが表示されます(例:
https://gasu-xxxx.onrender.com)
- ブラウザでURLにアクセス
- ログイン画面が表示されます
- デモ画面を見たい場合:
- プロジェクトのダッシュボードで「Shell」タブを開き、以下を実行:
python manage.py create_demo
- ユーザー:
demo/ パスワード:demo123
- プロジェクトのダッシュボードで「Shell」タブを開き、以下を実行:
デプロイが失敗する
- ダッシュボードの「Logs」タブでエラーを確認
requirements.txtに必要なパッケージが含まれているかチェック
データベース接続エラー
- Render が自動生成した PostgreSQL サービスをアプリが正しく参照しているか確認
render.yamlファイルが存在するか確認
Render 上での Static Files / Media Files
- Render では SQLite が永続化されない(コンテナの再起動時に消失)
- 本番運用では環境変数
DATABASE_URLで PostgreSQL を使用(自動セットアップ済み)