Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Next.jsミドルウェアにEdge Flagsを実装して位置情報ベースのコンテンツ制御を行う方法

Edge Flagsは、サーバーレスアプリケーション向けのフィーチャーフラグを簡単に管理できるツールです。Upstash Redisを基盤としており、強力な地理位置情報ルールを備えています。
この記事では、Next.jsのミドルウェアでEdge Flagsを使用し、ユーザーの位置情報に基づいてリクエストを書き換える、シンプルな実装例をご紹介します。

1. フラグを作成する

今回のサンプルアプリでは、EU圏内のユーザーにのみコンテンツを公開したいと考えます。まず、新しいRedisデータベースを作成し、edge-flagsページへ移動しましょう。そこで、作成したデータベースとproduction環境を選択します。

次に、eu-countriesという名前の新しいフラグを作成し、EU加盟国をすべて追加します。

Next.jsミドルウェアにEdge Flagsを実装して位置情報ベースのコンテンツ制御を行う方法

2. セットアップとパッケージのインストール

まだNext.jsアプリをお持ちでない場合は、npx create-next-appコマンドで新規作成できます。その後、以下のコマンドで@upstash/edge-flags@upstash/redisパッケージをインストールしてください。

$ npm install @upstash/edge-flags @upstash/redis

続いて、プロジェクトのルートにmiddleware.tsというファイルを新規作成し、以下のコードを記述します。

/middleware.ts

import { NextRequest, NextResponse } from "next/server";
 
import { Client as EdgeFlags } from "@upstash/edge-flags";
import { Redis } from "@upstash/redis";
 
const edgeFlags = new EdgeFlags({ redis: Redis.fromEnv() });
export default async function middleware(
 req: NextRequest,
): Promise<NextResponse> {
 const enabled = await edgeFlags
 .getFlag("eu-countries", req.geo ?? {})
 .catch((err) => {
 console.error(err);
 return false;
 });
 
 if (!enabled) {
 const url = new URL(req.url);
 url.pathname = "/blocked";
 return NextResponse.rewrite(url);
 }
 
 return NextResponse.next();
}
 
export const config = {
 matcher: "/",
};

最後に、アクセス拒否時に表示するための/blockedページをシンプルに作成します。

app/blocked/page.tsx

export default function Page() {
 return <div> You are not in the EU</div>;
}

あとは、プロジェクトをVercelにデプロイするだけです。

$ npx vercel

環境変数をVercelに設定する際は、Upstashコンソールから値をコピーするか、UpstashのVercel連携機能を利用すると便利です。

Next.jsミドルウェアにEdge Flagsを実装して位置情報ベースのコンテンツ制御を行う方法

3. 動作確認

開発環境における地理位置情報の注意点

ローカル環境での開発中は、地理位置情報データを取得できません。実際の動作を確認するには、アプリをVercelにデプロイする必要があります。

デプロイ後は、アプリのトップページにアクセスして動作をチェックできます。EU圏内からアクセスした場合は通常どおりコンテンツが表示され、それ以外の地域からの場合はリクエストが/blockedページへリライトされます。

関連リンク

  • Edge Flags(公式ドキュメント)
  • サンプルコード
  • サンプルアプリ
  1. Redisでセットの和集合を求める方法 – SUNION・SUNIONSTOREコマンド徹底解説

    このチュートリアルでは、Redisデータストアに保存された2つ以上のセット(Set)値に対して和集合演算を実行する方法を、SUNIONコマンドとSUNIONSTOREコマンドを使って解説します。 セットの和集合とは 集合論において、2つ以上の集合の和集合とは、それぞれの集合に含まれるすべての要素(重複は除く)をまとめて持つ集合のことです。具体例を見てみましょう。 A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8, 9} A と B の和集合: A U B = {1, 2, 3, 4, 5, 6, 7, 8, 9} SUNIONコマンドとは SUNIONコマンドは

  2. 賞金総額10万ドル!「Build on Redis」ハッカソンに参加すべき4つの理由と優勝をつかむ5つのコツ

    Redisコミュニティは常にイノベーションを続けています。毎年開催されるハッカソンは、クリエイティブな才能を持つ人々を集め、Redisを使った新しいアイデアを形にするためのプラットフォームを開発者に提供しています。昨年は320名以上のハッカーに挑戦状を突きつけ、キャッシュ用途にとどまらないRedisアプリケーションの構築を促しました。今年はいよいよ「Build on Redis」ハッカソンが開催されます。52の賞品・賞金総額10万ドル(約1,100万円)を獲得するチャンスです!開発開始は4月15日(木)。RedisConfの5日前にスタートし、丸1ヶ月間、5月15日(土)まで続きます。Redi