サイトを予約更新できるようにした
昨日の記事「(サイトを予約更新したい)」の続き。
ビルド時点の日付と、ファイルのメタデータやブログのディレクトリパスなどをチェックして、予約投稿のつもりで未来日を指定したファイルがアップロードされないようにした。
- ブログの Index ページなどをビルドする時
- ファイルパスから日付情報を取得し、未来日の記事を除外 → 未来日の記事が表示されないようになる
- 更新履歴を管理する
news.yaml
とそれを表示する HTML ページをビルドする時- 未来日の更新履歴が書かれていても除外 → 未来日の更新が表示されないようになる
- Atom フィード生成時
- 未来日のブログ記事、未来日の更新履歴を除外 → 未来日のフィードが配信されないようになる
- サイトマップ XML をビルドする時
- 各ページの末尾に表示されている「Created」の値が未来日なファイルを除外 → その日に当該ページがアップロードされるまで、存在しないページが追加されないようになる
- 全ページをアップロードするスクリプト
- 各ページの末尾に表示されている「Last-Modified」の値が未来日なファイルを除外
- ブログに関してはファイルパスから日付情報を取得し、未来日の記事を除外 (何かのミスで Last-Modified が未来日でなくても除外できるようにする)
- → 予約更新分が先にアップロードされてしまうことを防ぐ
master
ブランチのコミット時に差分ファイルをアップロードする GitHub Actions- 各ページの末尾に表示されている「Last-Modified」の値が未来日なファイルを除外
- ブログに関してはファイルパスから日付情報を取得し、未来日の記事や画像ファイルなどを除外 (何かのミスで Last-Modified が未来日でなくても除外できるようにする)
- → 予約更新分が先にアップロードされてしまうことを防ぐ
- 毎朝8時に差分ファイルをアップロードする GitHub Actions (新規作成)
- 各ページの末尾に表示されている「Last-Modified」の値が当日日付なファイルを対象にする
- ブログに関してはファイルパスから日付情報を取得し、当日日付の記事や画像ファイルを対象にする
- → 予約投稿を自動的に反映できるようになる
…こんな感じで予約投稿の仕組みを作り上げた。だから気にせず master
ブランチにコミットしまくっていけば良い。
今のところ対応できていないのは、毎朝8時にアップロードするスクリプトが、ブログでない静的ページで使用している画像ファイルなどを特定できずアップロードできないこと。画像ファイルなどは「Created」や「Last-Modified」といった Front Matter メタデータを持たないので、それをその日にアップロードする必要があるのか、特定できない。ブログ記事で使用する画像に関しては、ファイルパスに年月日が含まれるのでそこから特定できるのだが、通常のページで使用する画像などはそれができない。コレは仕方ないかなー。大抵、静的ページは手元から直接アップしちゃうから気にしない。
Index ページや「更新履歴」、Atom フィードなんかはビルド時点で未来日のページが含まれないように制御されているが、ページのビルド自体はできるので、ローカル開発環境では URL 直指定でビルド結果を確認したりできる。ファイルを指定してアップロードするスクリプトも手元にあるので、強引に当該ファイルを公開してしまうこともできる。
時々は FFFTP や FileZilla を使って全量目視チェックするつもりなので、こんなもんでいいかな。
サイトの予約投稿システムは一旦このくらいにして、今後はブログ記事をガンガン書いていこう。