Sprint Cycle 15

OGP画像生成、ヘルスチェックUptime、
LP最適化

2026-02-23 4 min read

概要

Sprint Cycle 15では、SNS共有時のビジュアル確立(OGP画像生成)、ヘルスチェックのUptime対応、Fly.ioとのヘルスチェック連携、ランディングページのパフォーマンス最適化を実施しました。

対応内容状態
OGP画像生成(SVG → PNG変換)完了
ヘルスチェックにUptime追加完了
Fly.ioヘルスチェック連携完了
GA/Adsプレースホルダー削除完了
DNS Prefetch最適化完了

1. OGP画像生成

SNSでリンクを共有した際に表示されるOGP(Open Graph Protocol)画像を作成しました。SVGでブランドデザインを作成し、rsvg-convertでPNGに変換。1200x630pxの標準サイズで59KBに収まっています。

Twitter、Facebook、LINEなどでミセバンAIのリンクを共有すると、ブランドカラーとロゴが映えるカードが表示されるようになりました。

2. ヘルスチェックにUptime追加

std::sync::OnceLock<Instant>でサーバー起動時刻を一度だけ記録し、/api/v1/healthのレスポンスにuptime_secondsフィールドを追加しました。

// OnceLock for server start time
static START_TIME: std::sync::OnceLock<std::time::Instant> = std::sync::OnceLock::new();

// Health response with uptime
struct HealthResponse {
    status: &'static str,
    version: &'static str,
    database: &'static str,
    uptime_seconds: u64,
}

OnceLockはスレッドセーフな一度きりの初期化を保証するため、サーバー起動時にInstant::now()を記録し、ヘルスチェック時に経過秒数を計算します。再起動の検知やアップタイム監視に活用できます。

3. Fly.ioヘルスチェック連携

fly.api.tomlにHTTPヘルスチェック設定を追加しました。Fly.ioのプラットフォームが自動的にアプリケーションの健全性を監視し、異常検知時にインスタンスを再起動します。

# fly.api.toml health check
[http_service.checks]
  [http_service.checks.health]
    interval = "30s"
    timeout = "5s"
    grace_period = "10s"
    method = "GET"
    path = "/api/v1/health"

30秒間隔でGETリクエストを送信し、5秒以内にレスポンスがなければタイムアウト。デプロイ直後は10秒のグレースピリオドで起動完了を待ちます。

4. GA/Adsプレースホルダー削除

ランディングページにGoogle AnalyticsとGoogle Adsのトラッキングコードが含まれていましたが、IDがプレースホルダー(G-XXXXXXXXXX)のままでした。未設定のトラッキングコードはブラウザから無駄なHTTPリクエストを発生させ、ページロードを遅延させます。

該当コードをコメントアウトし、実際のトラッキングIDが取得できた段階で有効化する方針としました。

5. DNS Prefetch最適化

ランディングページの<head>にGoogle Fonts、Supabase、API向けのdns-prefetchpreconnectタグを追加しました。ブラウザがページ描画前にDNS解決とTCPハンドシェイクを先行して行うため、外部リソースの初回ロード速度が改善されます。

テスト結果

13テスト合格。既存テストへの影響はありません。

ブランドビジュアルの確立、運用監視の強化、フロントエンドの最適化を同時に進め、プロダクトの完成度をさらに高めました。次のスプリントではユーザー向け機能の拡充に注力します。

← ブログ一覧に戻る 無料で始める →