1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python / Flask】PostgreSQLと連携した書籍管理Webアプリを開発!レスポンシブUIからREST API設計、pytest自動テストまで網羅

1
Posted at

はじめに

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) とのデータ連携 へスムーズに移行できる準備が整いました!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?