はじめに
キャンペーンは先週で終わったのに、告知ページがまだ残っていた。ECサイトを運用していると、一度は出くわす場面ではないでしょうか。終了済みの割引価格や在庫切れの特典がそのまま表示されていると、ユーザーは「まだやっている」と受け取ってしまいます。
この記事では、一時ページやイベントギャラリーに有効期限を持たせ、期限が来たら人手を介さず自動で非公開になる仕組みを、全体像から解説します。どんな部品でできているのか、どういう考え方で組み立てたのか、そして運用がどう変わるのか。細かい作り方は関連記事に分けてあるので、まずはここで大枠をつかんでください。
消し忘れがユーザーの誤認につながる理由
終了したキャンペーンが残ると、価格の食い違いが起きる
キャンペーンLPやセール告知は、公開すること自体は簡単です。手間がかかるのは、終わったあとに消す作業のほう。忙しくなると後片付けは後回しになりがちで、その結果、終了済みの割引価格や特典が表示され続けます。
特に困るのが価格の食い違いで、「サイトに書いてあった金額と違う」という問い合わせは、対応の時間もかかりますし、そのユーザーからの信用も損ないます。消し忘れは単なる作業漏れではなく、売上と信頼に直接効いてくる運用リスクとして扱うべきものです。
チェックリストで補う運用は、担当者が変わると続かない
終わったら消せばいい、と考えていても、複数のキャンペーンが並行して走ると、どれをいつ消すのかを管理すること自体が負担になります。担当者が休みだった、引き継ぎから漏れていた、そもそも公開したことを覚えていなかった。こうした人的な要因は、気をつけるだけでは防ぎきれません。
社内のチェックリストやリマインダーで補う方法もありますが、運用が属人化しやすく、担当者が入れ替わったところで機能しなくなります。人の注意力に依存しない形にしておくのが、結局いちばん確実で手間もかかりません。
公開するときに「いつ消えるか」も一緒に決めてしまう
たどり着いた考え方は、コンテンツを作るその瞬間に、いつ消えるかも一緒に決めてしまうというものです。ページを公開するときに「このページは3月末まで」と有効期限を入力してもらい、あとはシステムが期限を見張って、時が来たら自動で失効させる。
後片付けを未来の作業として先送りするのではなく、作成時のワンステップに織り込んでしまう。この順番を変えるだけで、消し忘れによる表示のずれはほぼ起きなくなります。運用ルールで縛るのではなく、入力項目として最初から組み込んでしまうのがポイントです。
公開は簡単だが、終了後の非公開作業が属人化する。忘れると古い情報が残り続ける
公開時に有効期限を設定。あとはシステムが自動で失効させ、後片付けの作業自体がなくなる
図にすると、後片付けを「あとでやる作業」から「作るときに決める設定値」へ移し替えた、という違いになります。
仕組みは3つの部品でできている
保存する場所、見張る仕組み、表示を判定する場所
この仕組みは、大きく3つの部品でできています。ひとつめがコンテンツと有効期限を保存するストレージ、ふたつめが期限をチェックして失効させる定期実行(Cron。決めた時刻に処理を自動で走らせる仕組み)、みっつめが公開ページ側での表示可否の判定です。
それぞれが独立した役割を持っているので、あとから機能を足したり、片方だけ差し替えたりしやすい構成になっています。まずはこの3点セットを頭に入れておくと、個別の記事も読み進めやすくなるはずです。
使い捨てコードで保護 本文・画像・期限を設定
コンテンツ本体と 有効期限を保存
期限切れを見つけて 自動で非公開にする
失効後は案内表示 または404
図を一言でまとめると、管理画面で期限付きのページを作り、その期限を定期実行が毎日見張って、公開ページ側は表示のたびに期限を確かめる、という流れです。
データベースを立てず、KVだけで組む
この規模の機能に、本格的なデータベースは必要ありませんでした。一時ページやイベントギャラリーは件数もそれほど多くなく、複雑なデータの関係も要りません。そこで選んだのが、Vercel KV(キーバリューストア。名前をひとつ指定すると、その中身が返ってくるシンプルな保存場所)だけで完結する構成です。
テーブルの設計や、データ構造を変更するときの移行作業、接続の管理といった手間が丸ごと不要になり、立ち上げも運用も軽くなります。小さく作って、必要になったら育てる。補助的な機能では、この判断が効いてきます。
管理画面はワンタイムパスワードで守る
一時ページを作れる管理画面は、当然ながら誰でも触れる状態にはできません。ただ、社内向けの小さなツールに本格的な権限管理を組み込むのも過剰です。そこでワンタイムパスワード(OTP。メールで届く使い捨ての確認コード)による認証で、必要十分なガードをかけました。
届いたコードを入力すればログインできる仕組みなので、パスワードの使い回しや漏洩のリスクを抑えつつ、運用の手軽さも保てます。守りの強さは、そのツールの性格と扱う情報に合わせて選ぶのが現実的です。
「消す」と「非公開にする」を使い分ける
データごと消す方式と、失効フラグを立てる方式
期限が来たら消す、というやり方には2つのアプローチがあります。ひとつはKVのTTL(Time To Live。保存するときに寿命を指定しておくと、その時間が過ぎたら自動でデータが消える機能)を使う方法。もうひとつは定期実行で期限を見張り、失効の目印を立てて非公開にする方法です。
どちらも期限が来たら見えなくなる点は同じですが、そのあとの振る舞いが変わります。データごと消えるのか、データは残したまま非公開になるのか。この違いを押さえておくと、要件に合った選択ができます。
表の要点は、失効したあとに何かを表示したいかどうかで、選ぶ方式が決まるということです。
失効したページにアクセスが来たとき、何を見せるか
期限切れのページにユーザーがアクセスしたとき、何を返すかは意外と大事です。404(ページが存在しない、という応答)を返すのもひとつの手ですが、SNSで拡散されたURLが後からクリックされるようなケースでは、「このページは公開を終了しました」という案内を出すほうが親切ですよね。
定期実行で失効の目印を立てる方式なら、データ自体は残せるので、案内表示への切り替えが柔軟にできます。失効イコール即消滅と決めつけず、終わり方まで含めて決めておくと、運用の選択肢が広がります。
期限が日単位なら、チェックは1日1回で足りる
失効チェックの定期実行は、日次で回しています。もっと頻繁にチェックしなくていいのか、と思われるかもしれませんが、キャンペーンやイベントの有効期限は「◯月◯日まで」という日単位がほとんどで、分単位の精度は求められません。
実行の頻度を上げれば、そのぶん実行回数も監視の手間も増えます。要件に対して過剰にならない頻度を選ぶのも、仕組みを軽く保つための判断のうち。厳密な即時失効が要るコンテンツだけ、TTLを併用すれば足ります。
設計のポイント
「作成時に寿命を決める」考え方と、「TTLと定期実行の使い分け」。この2つを押さえるだけで、消し忘れによる表示のずれはほぼなくせます。後片付けを仕組みの側に肩代わりさせる状態を目指しましょう。
まとめ
期限付きコンテンツの自動失効は、派手な機能ではありません。ただ、古い情報を残さないという信頼性を、人の注意力ではなく仕組みの側で担保してくれます。キャンペーンを何本も回している運用ほど、消す作業から解放される効果は大きくなります。
要点は2つです。公開するときに寿命も一緒に決めてしまうこと、そして消すのか非公開にするのかを用途で使い分けること。管理画面と定期実行を組み合わせるこの種の機能は、やりたいことを言葉で整理できていれば、AIエージェントと一緒に形にしやすい部類でもあります。
もっと詳しく知りたい方は、以下の記事へ進んでみてください。