はじめに
Python の軽量フレームワーク Flask と PostgreSQL を組み合わせ、CRUD操作を備えた「書籍管理アプリ (book-log-app)」を構築しました。
今回は単なるWeb画面の作成にとどまらず、レスポンシブデザイン、404エラーハンドリング、pytest による自動テスト、さらには将来的な Android モバイルアプリ連携を見据えた REST API(JSON出力) の実装までを一貫して行いました。開発手順と技術的なポイントをまとめます。
システム構成 & 使用技術
- バックエンド: Python 3.12 / Flask / psycopg2-binary
-
データベース: PostgreSQL 16 (
bookgram_db) - フロントエンド: Jinja2 / CSS3 (Flexbox & メディアクエリによるレスポンシブ対応)
- テスト環境: pytest / GitHub Actions (CI)
- バージョン管理: Git / GitHub
主な実装機能
1. データベース設計 & 自動マイグレーション
psycopg2 の RealDictCursor を活用し、レコードを Python 辞書形式で扱いやすく取得。アプリ起動時や初期化時に init_db.py 経由でスキーマの自動生成・カラム追加(memo TEXT 等)を行う設計としました。
2. UI/UXのブラッシュアップ & レスポンス対応
-
星評価表示:
rating(1〜5) に応じて動的に★/☆を表示。 -
検索 & 絞り込み: PostgreSQL の
ILIKEによるあいまい検索およびステータス絞り込み。 -
レスポンシブ配置: モバイル表示時にテーブルの横スクロール (
overflow-x: auto) やフォームの縦並び切替をCSSで実現。 -
改行の保持: メモ欄 (
textarea) で入力された改行コードをwhite-space: pre-wrap;で綺麗に表示。
3. 404エラーハンドリング
存在しない ID(例: /edit/99999)に直接アクセスされた際、サーバーエラー (500) ではなく安全に abort(404) を呼び出し、カスタム 404 ページをレスポンス。
4. Androidアプリ連携用 REST API (JSON) の実装
Web画面(HTML)とモバイルアプリ通信を同居させるため、/api/books プレフィックスで以下のような JSON レスポンスを返す REST API エンドポイントを追加しました。
-
GET /api/books: 書籍一覧の取得 (200 OK) -
GET /api/books/<id>: 書籍詳細の取得 (200 OK / 404 Not Found) -
POST /api/books: 書籍の新規追加 (201 Created) -
PUT /api/books/<id>: 書籍情報の更新 (200 OK) -
DELETE /api/books/<id>: 書籍の削除 (200 OK)
5. pytest による自動テストの徹底
Web UI の操作パターン(検索、CRUD、404判定)および REST API(JSON 送受信)に対する単体・結合テストを作成し、リファクタリング時にも堅牢性を保てる構成にしました。
まとめと今後の展望
Webアプリケーションとしての基本機能だけでなく、テストコードの充実と REST API 化を行ったことで、次フェーズの Android アプリ (Kotlin / Retrofit) とのデータ連携 へスムーズに移行できる準備が整いました!