本レポートでは、PythonとStreamlitを用いて開発された「QRコード生成Webアプリケーション」の技術構成、開発プロセス、および機能について解説します。
1. プロジェクト概要
ユーザーが入力したテキストからQRコードを即座に生成し、カスタマイズ(色、サイズ、余白)してダウンロードできるWebアプリケーションです。直感的なUIと高速な動作を重視して設計されています。
公開URL: https://toma4423-code-of-q-web-app-kygncj.streamlit.app/
2. 採用技術スタック
本プロジェクトでは、以下の技術を採用しています。
Python 3.12+
Streamlit
uv
Ruff
Streamlit
uv
Ruff
コア技術
- Python: バックエンドロジックの記述に使用。
- Streamlit: フロントエンドおよびアプリケーションサーバーとして使用。Pythonのみで迅速にインタラクティブなWebアプリを構築できるため採用。
- Pillow (PIL): 画像処理ライブラリ。生成されたQRコードの画像操作やフォーマット変換に使用。
- qrcode: QRコード生成の標準的なライブラリ。バージョン管理や誤り訂正レベルの制御が可能。
開発・運用ツール(モダン化)
従来のpip + requirements.txt構成から、より高速で堅牢なツールチェーンへ移行しました。
- uv: Rust製の超高速Pythonパッケージマネージャー。依存関係の解決と仮想環境の構築を高速化し、
pyproject.tomlベースの管理を実現。 - Ruff: Rust製の高速Linter兼Formatter。コードの品質維持とスタイル統一を自動化。
3. 主な機能と実装詳細
🎨 高度なカスタマイズ
サイドバーのコントロールを使用して、リアルタイムにQRコードを調整できます。
- サイズ・余白調整: スライダーUIによる直感的な操作。
- カラーピッカー: 前景色(QRコード部分)と背景色を自由に設定可能。
💾 マルチフォーマット出力
用途に合わせて以下の形式でダウンロード可能です。
- PNG/JPEG: 一般的な画像利用向け。
- SVG: 拡大縮小しても劣化しないベクター形式。Webや印刷物向け。
4. 開発ワークフローの改善
開発効率とコード品質を向上させるため、以下のワークフローを確立しました。
セットアップの自動化
setup.sh / setup.bat を更新し、uv sync コマンド一発で環境構築が完了するようにしました。
# 依存関係の同期と環境構築
uv sync品質保証(QA)
run_tests.sh により、テストとLintを統合的に実行可能です。
- 静的解析:
uv run ruff check --fix .でコードの問題を自動修正。 - 単体テスト:
unittestフレームワークを使用し、QRコード生成ロジックの整合性を検証。特にqrcodeライブラリのバージョンアップ(v7.x -> v8.x)に伴う仕様変更(画像オブジェクトの構造変化など)に対応しました。
5. まとめ
本プロジェクトは、Streamlitによる迅速なUI構築と、uv/RuffというモダンなPythonツールチェーンを組み合わせることで、開発速度と保守性の両立を実現しました。ユーザーにとって使いやすく、開発者にとってメンテナンスしやすいアプリケーションとなっています。