JSON Target Photo Viewer - ビジネスライクなフォトビューアーの開発
プロジェクト概要
画像管理とJSONデータの効率的な閲覧を目的とした、Flask製Webアプリケーションです。特定フォルダ内のtarget.jsonファイルを自動検出し、関連する画像とデータを一元表示するフォトビューアーシステムを構築しました。
開発背景・目的
- 課題: 大量の画像フォルダとそれに紐づくJSONデータの効率的な管理
- 目標: ワンストップでの画像閲覧とデータコピー機能の実現
- デザイン要件: 企業環境でも使用できるシックなビジネスライクなUI
技術スタック
Backend
- Python Flask 3.0.0 - 軽量で高速なWebフレームワーク
- 標準ライブラリ - ファイル操作、JSON処理、subprocess制御
Frontend
- Bootstrap 5.3.0 - レスポンシブデザインフレームワーク
- Font Awesome 6.4.0 - アイコンライブラリ
- Vanilla JavaScript - 軽量なフロントエンド実装
- CSS3 - カスタムデザインとアニメーション
システム連携
- Windows Explorer API - ネイティブファイラー連携
主要機能
🔍 自動フォルダ検出
- 指定ディレクトリを再帰的にスキャン
target.jsonファイル存在チェック- 動的なフォルダリスト生成
🖼️ 画像管理システム
- ランダム画像選択: 各フォルダから最大5枚を自動選択
- 画像プレビュー: モーダルウィンドウでの拡大表示
- 多形式対応: JPG, PNG, GIF, BMP, WebPをサポート
📋 JSONデータ操作
- 項目別表示: JSONデータを読みやすい形式で表示
- 個別コピー: 各フィールドを単独でクリップボードにコピー
- 一括コピー: JSON全体の構造化コピー
🔗 システム連携
- フォルダオープン: Windowsエクスプローラーでディレクトリを開く
- ファイル選択表示: 特定ファイル(reference_image)を選択状態で表示
技術的ハイライト
1. パス処理の最適化
# Windows/Web間でのパス区切り文字の適切な変換
image_path = unquote(image_path)
image_path = image_path.replace('/', '\\')
image_path = os.path.normpath(image_path)
2. セキュアなファイル配信
# MIMEタイプの動的判定とセキュアな配信
mimetype, _ = mimetypes.guess_type(image_path)
if mimetype is None:
mimetype = 'application/octet-stream'
return send_file(image_path, mimetype=mimetype)
3. レスポンシブUI設計
/* CSS変数による一元的なテーマ管理 */
:root {
--navy-dark: #1a237e;
--navy-medium: #283593;
--gray-dark: #424242;
--gray-light: #e0e0e0;
}
4. 非同期ファイル操作
// Clipboard APIを使用した非同期コピー処理
navigator.clipboard.writeText(value).then(() => {
// UI フィードバック処理
}).catch(err => {
// エラーハンドリング
});
UI/UXデザイン
デザインコンセプト
- カラーパレット: 紺色×グレーの上品な配色
- タイポグラフィ: Segoe UIによる視認性重視
- レイアウト: カードベースの情報整理
インタラクション設計
- ホバーエフェクト: 要素の浮き上がりアニメーション
- ステータス表示: コピー成功時の視覚的フィードバック
- レスポンシブ対応: モバイル・デスクトップ両対応
開発プロセス
1. 要件定義フェーズ
- クライアント要件の詳細分析
- 技術選定とアーキテクチャ設計
- UIモックアップの作成
2. 実装フェーズ
- バックエンド先行開発: Flask APIの構築
- フロントエンド統合: Bootstrap + カスタムCSS
- 機能拡張: ユーザビリティ向上のための追加機能
3. 最適化フェーズ
- パフォーマンス調整: 画像読み込みの最適化
- エラーハンドリング: 堅牢性の向上
- ユーザビリティ改善: UIフィードバックの強化
解決した技術課題
文字エンコーディング問題
課題: Windowsパスの文字化けとJavaScript間でのデータ受け渡し
解決: Jinja2フィルターとJSONエスケープによる適切な処理
クロスプラットフォーム対応
課題: Windows固有のファイルシステム操作
解決: subprocess.runによるネイティブコマンド実行
非同期UI更新
課題: ユーザーアクションに対するリアルタイムフィードバック
解決: Fetch APIとPromiseベースの非同期処理
成果・効果
定量的成果
- 開発期間: 1日での完全実装
- ファイル数: 4ファイルでのシンプル構成
- 機能数: 8つの主要機能を実装
定性的効果
- 作業効率化: 手動ファイル操作からの脱却
- エラー削減: コピー&ペーストミスの防止
- ユーザビリティ向上: 直感的な操作インターフェース
技術スキルの実証
フルスタック開発能力
- Backend: Python/Flaskによるサーバーサイド開発
- Frontend: Modern JavaScriptとCSS3の活用
- Integration: システム間連携の実装
問題解決能力
- 即座の課題対応: リアルタイムでの機能追加・修正
- ユーザー中心設計: フィードバックに基づく継続的改善
- 技術選定: 要件に最適なツール・ライブラリの選択
コード品質管理
- 可読性重視: 自己説明的なコードとコメント
- 保守性確保: モジュール化された設計
- ドキュメント整備: 包括的な技術文書作成
今後の展開可能性
スケーラビリティ向上
- データベース連携による大規模データ対応
- Redis等によるキャッシュ機能実装
- マルチユーザー対応とアクセス制御
機能拡張
- 画像編集機能の統合
- AIによる画像分析・タグ付け
- バッチ処理機能の実装
クロスプラットフォーム対応
- macOS/Linux対応
- Docker化による環境構築の簡略化
- クラウドデプロイメント対応
このプロジェクトは、限られた時間内でのフルスタック開発能力と、ユーザーニーズに応える実践的なソリューション構築力を実証する事例として位置づけています。特にビジネス環境での実用性を重視した設計思想と、継続的な改善プロセスを通じた品質向上への取り組みは、実際の開発現場で求められる能力を示すものです。