Wails (Go + React/TypeScript) で実装している、画像分類補助つきのデスクトップ画像ビューアです。
現在は Windows を本番ターゲット としつつ、開発・検証は Linux (WSL2) でも行える構成になっています。
image-observerはリポジトリ / プロジェクト名です。アプリの表示名(ウィンドウタイトル等)は Imago を使用します(#88)。
- フォルダ選択と再帰スキャン(隠しディレクトリは除外)
- 対応画像の一覧表示(拡張子ベース: jpg/jpeg/png/gif/webp)
_classification.json(および既存_classification.csv読み込み)による分類データ管理- タグ / 信頼度 / テキストによるフィルタ
- ディレクトリ単位のグルーピングと折りたたみ
- カード編集(folder/confidence/note)、サンプルモーダル表示
- 複数選択(checkbox / modifier / both)と一括操作
- 画像削除(Windows はごみ箱、非 Windows は削除)
- 競合検出(mtime ベース)と競合解決ダイアログ
- マルチビューア(最大数は設定で変更可、既定 8)
- ビューアの追加 / リネーム / 並べ替え / クローズ
- 各ビューア内でのタブ管理
- パネル分割(BSP レイアウト)
- タブ DnD(移動・並び替え・分割・別ビューア移動)
- 画像表示のズーム / パン、キーボードショートカット対応
- fsnotify ベースの再帰監視
- デバウンス(200ms)+ 変更集約
- 設定で
auto/off切り替え - 監視イベント受信時に一覧の再読込フローへ接続
- ログレベル
- UI スケール
- ビューア操作モード(ホイール動作など)
- 画像サイズ上限(MP)
- サムネイルサイズ / 生成モード / ワーカー数
- 一覧タブの複数選択モード
- 監視モード
- タグ色マッピング
- アプリ状態:
state.json - ユーザ設定:
settings.json - 分類データ:
_classification.json(フォルダごと) - いずれも不正値や競合を考慮したフォールバック / 検証付き
- 統合ログ:
app.log - ローテーション: 2MB, 最大 3 世代(
app.log,.1,.2) - パス:
- Windows:
%LOCALAPPDATA%\image-observer\logs\app.log - Linux:
~/.cache/image-observer/logs/app.log - macOS:
~/Library/Caches/image-observer/logs/app.log
- Windows:
.jpg.jpeg.png.gif.webp
- Go: 1.26.x
- Node.js: 22+
- npm: 10+
- Wails CLI: v2.12.x
Linux で wails dev / wails build する場合は Wails の依存ライブラリ(GTK/WebKit など)が必要です。wails doctor で確認してください。
# リポジトリルート
cd /home/runner/work/image-observer/image-observer
# フロント依存導入
cd frontend
npm ci
cd ..
# 開発実行
wails devcd /home/runner/work/image-observer/image-observer
wails build成果物は build/bin/ に出力されます。
本番向け Windows リリースは GitHub Actions の release.yml(タグ push)で作成します。
リリース EXE は、自己署名証明書を Secrets に設定している場合のみ CI で署名されます(自分の PC で警告なく起動するための自分用署名。設定手順と限界は docs/spec-self-signing.md)。
main.go の //go:embed all:frontend/dist を満たすため、frontend/dist プレースホルダを作ってから実行します。
cd /home/runner/work/image-observer/image-observer
mkdir -p frontend/dist
touch frontend/dist/.ci-placeholder
go test ./...cd /home/runner/work/image-observer/image-observer/frontend
npm ci
npm run test
npx tsc --noEmitdocs/ # 仕様・設計メモ
frontend/ # React フロントエンド
internal/ # Go 内部パッケージ(分類・設定・監視・サムネイル等)
main.go # Wails エントリーポイント
app.go # Wails バインド API
wails.json # Wails プロジェクト設定
- 要件の原本:
init.md - 実装方針ログ:
docs/todo.md - 各機能仕様:
docs/spec-*.md