忙しいマーケターのみなさんやイベント運営者の方々の中にはSNSやWebサイトの投稿を予約機能を使って効率的に配信している方も多いと思います。
WordPressでは通常予約投稿機能を利用しますが、スタティックサイトに変換する場合は以下のような制約で予約投稿機能が利用できません。
- サーバーレスなShifterでは、セットした時間帯にWordPressが起動していない可能性が高いので予約投稿が実行できない
- 仮に上記が実現できても、サイトによっては記事の生成時間にタイムラグが発生するため狙った時間に投稿されない可能性が高い
- あらかじめWordPressの記事から静的なWebサイトを生成して、デプロイだけを予約した場合、記事のタイムスタンプが過去の時間で固定されてしまう
もしこれらの条件を克服して予約投稿のような機能を実現するなら、どんなアイデアが必要になるでしょうか。
- あらかじめ公開したい記事を含むサイトを未来のタイムスタンプで静的HTMLにしておく
事前生成された静的なサイトをShifter上ではArtifactと呼びます。 - ShifterAPIを使って指定した時間に生成しておいたArtifact公開する
Shifterでは事前生成された静的なサイトの公開をデプロイといいます。
しかしそもそもWordPressで「未来のタイムスタンプて記事を公開状態にしておく」ことが可能なのでしょうか。
なんと、世界中のコントリビューターの方々が公開しているプラグインの中には、こんなことを実現できるものもあるのです。
No Future Posts

Changes the status of all “future” posts to “publish”.
https://wordpress.org/plugins/no-future-posts/
So future posts will show in your blog like other posts.
I use it to show events. No calendar plugin is needed.
このプラグインを有効にして記事の予約投稿をセットすると、予約した時間のタイムスタンプで記事が即公開されます。
「No calendar plugin」= 「No Future」なのでしょうか。深く考えるのはやめて擬似的な予約投稿にトライしてみましょう。
擬似的な予約投稿
1「Auto Deploy Artifact」を無効に設定
Shifterで生成したサイト(Artifact)は自動で公開せず、のちほどコマンドラインを使ってAPI経由で公開しますので、ジェネレート後に自動デプロイされないように設定を変更しましょう。
「SITES」> 「SITE SETTINGS」タブと移動し、下の方にある「Auto Deploy Artifact」を無効にします。
この機能は、デプロイ後に生成された静的なページをArtifactのプレビュー機能を使って確認したい場合など、ステージング環境的な用途としても便利です。

2 No Future Postsをインストールし有効にする
WordPressを起動してダッシュボードからプラグインをインストールしましょう。

3 新しい投稿を未来日で投稿
いよいよ平成最後に書く記事の作成です(執筆日は3月29日)。投稿日は4月1日にしたいので、カレンダー機能で日時を設定します。

4 静的なサイトを生成(Generate)
画面上にあるShifterメニューからGenerateを選択して、WordPressから静的なウェブサイトを生成します。ここまででWordPressの作業はおしまいです。あとはShifterダッシュボードとターミナルで好きなタイミングでデプロイができるか試してみます。
先ほど自動デプロイを無効にしましたので、この時点では静的なウェブサイト(Artifact)が作られただけで公開はされていません。

5 希望の時間にShifter APIを使ってデプロイする
デプロイに必要なコマンドは以下の2つです。
- AccessTokenの取得
- デプロイコマンドの実行
AccessTokenの取得を実行しましょう
curl -X "POST" "https://api.getshifter.io/v1/login" \
-H 'Content-Type: application/json; charset=utf-8' \
-d $'{
"username": "<Shifterアカウントのメールアドレス>",
"password": "<Shifterアカウントのパスワード>"
}' | jq -r .AccessToken
Artifactのデプロイを実行しましょう
まずShifterダッシュボードでAPIの実行に必要な情報を確認しておきましょう。必要な情報は以下の2つです。
- 対象のサイトID
- 対象のArtifactID
シフターダッシュボードのSITESETTINGSタブでサイトIDを確認しましょう。
「SITES」> 「デプロイしたいサイト」に移動し、「SITESETTINGS」タブを開きます。

次にSITE OVERVIEWタブでArticle IDを確認します。
「SITES」> 「デプロイしたいサイト」に移動し、はじめに表示される「SITE OVERVIEW」タブの中から先ほどジェネレートしたArtifactを確認します。

それでは早速ターミナルでAPIにリクエストしてみましょう。
curl -X "POST" "https://api.getshifter.io/v1/projects/<サイトID>/artifacts/<Artifact ID>/deploy/shifter_cdn" \
-H 'Authorization: トークン文字列'
6 サイトが公開された
無事API経由でデプロイされました。
「SITES」> 「デプロイしたいサイト」に移動し、はじめに表示される「SITE OVERVIEW」タブの中から先ほどデプロイしたArtifactの様子を確認します。

サイトが公開されてDeployボタンからView Siteボタンに変わっていますので、こちらをクリックして公開されているサイトを確認してみましょう。
こちらが公開されたサイトです。
以上のような仕組みで擬似的な予約投稿が実現できました!

なにができる?
スタティックサイトジェネレーター の性質上、個別の記事投稿ではなくArtifact全体のデプロイになりますが、特定日に公開されるランディングページやイベントサイト、ファッションカタログなどシーズン性のある情報の公開がしやすくなるかもしれません。
WordPressとスタティックサイト ジェネレーターの可能性
このように、多くのコントリビューターによるプラグインや様々な貢献の恩恵が受けられるWordPressなら、膨大なコミュニティの資産を活用することでスタティックサイト ジェネレーターの可能性も広がりますし、より簡単にJAMStackライクなサイトの利用が可能になるかもしれません。
ShifterAPIの資料はこちらです。皆さんもぜひ活用してみてください。
Shifter API
https://support.getshifter.io/shifter-api/shifter-api
Shifter無料トライアル
https://www.getshifter.io/
それではまた!