自社プロダクト開発中
Web・モバイル・管理画面のサービス基盤
公開 Web、編集者向けの管理画面、モバイルアプリを 1 つの API で支える構成です。外部データの取り込みから、審査・公開・通知までの流れを持っています。
構成
クライアント
- 公開 Web・管理画面Next.js 16(App Router)
- モバイルFlutter
サーバー
- APIGo / Gin
- 取り込みバッチGo
データ
- DBMySQL 8.4
- 全文検索Meilisearch
運用
- CI/CDGitHub Actions → コンテナレジストリ → VPS
- 配信Docker Compose / Caddy(TLS)
- 監視Prometheus 形式のメトリクス / Webhook 通知
技術的なポイント
- 依存を絞った Go のバックエンド — JWT、OpenID Connect(Google / Apple)の署名検証、Web Push の暗号化(RFC 8291 / 8292)、メトリクスを標準ライブラリで実装しています。外部パッケージは最小限です。
- 止まらない検索 — 全文検索エンジンに障害が起きたら、DB の検索に自動で切り替えます。起動時には索引を作り直します。
- 冪等な取り込みと通知 — 取り込みは重複防止キーを使うので、何度実行しても結果は同じです。通知は集合ベースの SQL で作るので、同じ通知が二重に届きません。
- 多層のセキュリティ — 4 段階の権限管理(RBAC)を備えています。巡回やプッシュ通知で内部ネットワークへアクセスされないよう、SSRF を防いでいます。秘密鍵が設定されていなければ、その機能自体を無効にします。
- CI で品質を自動チェック — CI で次の 4 つを毎回実行しています。
- OpenAPI 仕様と実装の双方向の突き合わせ
- 使い捨ての DB を使った統合テスト
- Playwright による E2E テスト
- axe-core によるアクセシビリティ監査(WCAG 2.2 AA の違反ゼロを維持)
- 安全なデプロイ — CI を通ったコミットに固定したイメージだけを本番に配布します。DB のマイグレーションは起動時に自動で適用します。バックアップと復元の練習用スクリプトも用意しています。