自動化・効率化
GitHubを非公開にしただけでは下書き保護にならない|Cloudflare Pagesで公開物を分ける方法
このブログのGitHubリポジトリは非公開ですが、それだけでは記事の下書きを公開サイトから守る仕組みにはなりません。
Cloudflare Pagesはビルド後の出力ディレクトリを公開するため、そこへ下書きHTMLを出してしまえば、元リポジトリが非公開でも公開サイトから読める状態になります。
非公開リポジトリと公開サイトは別
GitHubの非公開リポジトリは、許可されたユーザーだけがリポジトリ内容を閲覧できる設定です。
一方、Cloudflare PagesのGit連携では、リポジトリを元にビルドし、指定したビルド出力ディレクトリの内容をウェブサイトとして公開します。
そのため、「GitHubが非公開だから下書きHTMLを生成しても安全」とは考えず、公開ビルドの出力自体から下書きを除外するようにしました。
記事にdraft / publishedを持たせる
各記事データに公開状態を持たせています。
{
"status": "draft"
}
公開を決めた記事だけpublishedへ変更し、通常ビルドではpublishedの記事だけを対象にします。
未来日時も公開しない
公開状態がpublishedでも、公開日時が未来の場合は出力しないようにしています。
これにより、予約公開用の原稿を先にリポジトリへ保存しても、指定日時より前のビルドでは公開されません。
ただし、時刻が来ただけでCloudflare Pagesが自動再ビルドするわけではないので、実際の予約公開には別途デプロイのきっかけが必要です。
公開物はdistだけに分離する
このブログでは、Cloudflare Pagesの公開対象をdistディレクトリにしています。
記事の元JSON、WordPress移行用スナップショット、下書きデータなどはdistへコピーしません。
Cloudflare公式でも、Pagesは指定したビルド出力ディレクトリの内容をサイトとしてアップロードすると説明しています。
下書きへの内部リンクもビルドエラーにする
公開記事の本文から、うっかり下書きURLへリンクしてしまう事故も防ぐ必要があります。
そこでビルド後に全ローカルリンクを検査し、公開出力に存在しないURLへリンクしていた場合はビルドを失敗させるようにしています。
タイトルや本文の混入も検査する
下書きページ自体を出力しなくても、関連記事一覧や検索用データへ下書きタイトルが混ざる可能性があります。
このブログでは、下書きの記事タイトルやURLが公開HTMLに含まれていないかもビルド時に検査します。
下書きプレビューも本番と分ける
下書きを確認するためのプレビュー出力は、本番用distとは別ディレクトリへ作ります。
また、CIやCloudflare上では下書きプレビューを生成しないよう制限し、公開環境に下書きが出ないようにしています。
まとめ
- GitHubリポジトリの非公開設定と公開サイトの出力は別に考える
- 下書きはビルド対象から除外する
- 未来日時の記事も公開出力へ含めない
- 公開物は専用ディレクトリへ分離する
- 下書きURLへのリンクやタイトル混入も自動検査すると安全
WordPress.comからCloudflare Pagesへ移行した構成はこちら
参考情報
関連記事
Cloudflare Pagesでads.txtを設置する方法|AdSense用ファイルをルートへ自動生成する
Cloudflare Pagesで公開する静的サイトにGoogle AdSense用のads.txtを設置した実例。必要な記述形式、ルートURLへの配置、ビルド時の自動生成、独自ドメイン移行後の確認方法を解説します。
Cloudflare PagesにAdSenseコードを入れる方法|静的サイトの全ページへ自動挿入する
Cloudflare Pagesで公開する静的ブログへGoogle AdSenseコードを入れた実例。headへの配置、設定ファイルでの管理、全ページへの自動挿入、独自ドメイン移行時の確認ポイントまでまとめます。
Notta Brainとは?複数資料の分析・要約・資料作成までできるAIワークスペースを解説
Notta Brainの特徴を公式情報をもとに整理。会議記録やPDF・Word・Excel・PowerPointを横断して分析し、要約・レポート・スライド作成などに使えるAIワークスペースの機能と無料版・有料版の違いを解説します。