記事一覧 プロジェクト集 検索 このサイトについて
RSS English

YAML設定で運用するNext.js管理コンソール — 複数サイト・複数アクションの一元化

本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。 前回の記事 で、組織向けに「非エンジニアが操作できる管理コンソール」をGitHub App + Cloudflare Accessで構築した話を書きました。本記事はその続編で、「サイトを増やしてもコードに触らずに済む」「1サイトに複数アクションを持たせる」 ために、設定をYAMLに外部化した設計を整理します。 当初の設計の限界 最初は src/lib/sites.ts に TypeScript の配列としてサイトを直書きしていました。 export const SITES = [ { id: 'site-a', url: 'https://site-a.example.com/', action: { type: 'github-workflow', repo: '...', workflow: 'admin.yml' }, }, // ... ] この設計には以下の問題がありました。 サイトを追加するたびにコード変更が必要 — i18nテキスト用にmessages.jsonも編集 1サイト1アクションが前提になっていた — 「デプロイ」「再インデックス」「バックアップ」など複数を扱いたいときに表現できない OSSとして配布したときに利用者がコードを触らないと動かせない — 設定がコードに混在しているとフォークして編集する流れになり、本家の更新を取り込みにくい YAML 1ファイルへの集約 これを config.yml 1ファイルへの集約に書き換えました。アプリのブランディング・サイト定義・アクション定義・各テキストのja/en、すべてここに入ります。 app: title: ja: 管理コンソール en: Admin Console homePage: heading: ja: 管理コンソール en: Admin Console lead: ja: 各サイトのカードを開いて、操作を実行できます。 en: Open a site card to run operations. sites: - id: site-a name: ja: サイトA en: Site A description: ja: サイトAの説明 en: Description url: https://site-a.example.com/ actions: - id: deploy label: ja: デプロイを実行 en: Deploy description: ja: ビルドして公開します。 en: Build and publish. type: github-workflow repo: your-org/site-a workflow: deploy.yml ref: main - id: es-sync label: ja: ESインデックス更新 en: Re-index description: ja: Elasticsearchを再同期します。 en: Re-syncs Elasticsearch. type: github-workflow repo: your-org/site-a workflow: es-sync.yml ref: main inputs: - name: dry_run type: boolean default: false label: ja: Dry run en: Dry run 利用者は このファイルだけ を編集すれば、コードを書かずに: ...

GitHub App と Cloudflare Access で構築する組織向け管理コンソール

本記事は生成AIと共同で執筆しています。事実関係は可能な範囲で公式ドキュメント等と照合していますが、誤りが含まれている可能性があります。重要な判断を行う前にご自身でも一次情報をご確認ください。 ある組織で運用している複数のデータベースサイトについて、データ更新を担当する非エンジニアの方が自分で再ビルドや再インデックスを実行できるよう、統合の管理コンソールを構築しました。 GitHubアカウントもVercelアカウントも持たない作業者が、Webブラウザだけで操作できるようにするのが目的です。本記事ではその構成、特に GitHub への認証で Personal Access Token (PAT) ではなく GitHub App を選んだ理由 と、フロント側を Cloudflare Access (Zero Trust) で守ることでアプリ側の認証コードを省いた設計を整理します。 構成 [作業者] ↓ メール認証(Cloudflare Access / Zero Trust) [admin.example.com] ← Next.js on Cloudflare Pages ↓ GitHub App (installation token) [GitHub Actions: workflow_dispatch] ↓ [各リポジトリの admin.yml が npm run es:sync などを実行] ホスティング: Cloudflare Pages(@opennextjs/cloudflare) 認証: Cloudflare Access(メールワンタイムパスワード) 認可(vs GitHub): GitHub App の Installation Token 実行基盤: GitHub Actions の workflow_dispatch 各サイトにあらかじめ用意してある npm run es:sync 等のスクリプトをそのまま GitHub Actions から呼ぶ形にしたため、既存スクリプトには手を入れていません。 ...