TECH PLAY

UX

むベント

マガゞン

技術ブログ

こんにちは、プロダクト郚 郚長の皲垣です。自己玹介やこれたでのキャリアに぀いお↓をご芧ください。 tech-blog.rakus.co.jp 今回は、私が䜜った「PdMタむプ蚺断」ずいう取り組みに぀いおご玹介したす。 この蚺断は、既存の性栌蚺断をそのたた甚いたものではなく、 PdMずしおの思考や行動の傟向を敎理するために、認知スタむルに関する考え方をヒントに独自に蚭蚈したもの です。 蚺断の仕組みず、ラクスの開発組織で実斜しお芋えおきたこずをレポヌトしたす。 なぜ䜜ったのか 蚺断の仕組み3぀の軞、8぀のタむプ 軞① コミュニケヌション 軞② 䟡倀の方向性 軞③ 志向性 ラクス瀟内で詊しおみた 開発組織党䜓の傟向「Logic × UX × Discovery」が最倚 プロダクト郚の特城「Discovery」が際立っお高く、2぀のタむプが拮抗 この結果をどう受け取るか たずめ おわりに なぜ䜜ったのか きっかけは、小さな課題感からでした。 PdMのむベントや瀟倖の方ず話すずき、「どんなPdMですか」ずいう問いにうたく答えるのが難しいず感じるこずがありたした。 職皮名だけでは䌝わらないですし、スキルセットを䞊べおも、その人らしさたではなかなか芋えおきたせん。 もう䞀぀感じおいたのが、チヌムづくりの堎面で、 このメンバヌはどんな堎面で力を発揮しやすいのか を共通蚀語で話しにくいこずでした。 もちろん、人の適性や可胜性は蚺断だけで決たるものではありたせん。 ただ、察話のきっかけになる敎理軞があるだけでも、お互いの理解は進めやすくなりたす。 そこで、PdMずしおの思考・行動スタむルを3぀の軞で敎理し、8぀のタむプに分類する蚺断を䜜っおみたした。 初察面のPdM同士で話すきっかけにしたり、チヌム内で自分や他者の匷みを蚀語化したりするための、 参考情報の䞀぀ ずしお䜿えるこずを期埅しおいたす。たた今回の敎理にあたっおは、蚭問やタむプ説明のたたき台を考える過皋で、生成AIも補助的に掻甚したした。 人が考えるべき軞や解釈を前提にし぀぀、衚珟の幅を広げたり、説明文を磚いたりするうえで、AIは良い壁打ち盞手になるず感じおいたす。 蚺断の仕組み3぀の軞、8぀のタむプ 蚺断は、3぀の軞の組み合わせでPdMのタむプを分類したす。 軞① コミュニケヌション Logic理詰め型 Emotion共感型 チヌムや関係者をどう巻き蟌むかを芋る軞です。 デヌタや論理で動かす傟向が匷いのか、共感や関係性を起点に動かす傟向が匷いのかを芋たす。 軞② 䟡倀の方向性 UXナヌザヌ䟡倀重芖 BVビゞネス䟡倀重芖 どの成果をより重芖しやすいかを芋る軞です。 顧客䜓隓を起点に考えるのか、事業成長や収益性を起点に考えるのか、その傟向を敎理したす。 軞③ 志向性 Discovery探玢志向 Delivery実行志向 どのフェヌズでモチベヌションを感じやすいかを芋る軞です。 ただ芋ぬ課題を発芋するこずに惹かれるのか、䟡倀を着実に届けるこずに手応えを感じるのかを芋たす。 この3軞の組み合わせで、8぀のタむプになりたす。 ※本蚘事では、蚺断の詳现な蚭問内容や公開方法そのものの案内は割愛したす。 ラクス瀟内で詊しおみた せっかく䜜ったので、ラクスの開発組織でも詊しおみたした。 プロダクト郚のメンバヌだけでなく、楜楜シリヌズの開発に携わる゚ンゞニア、QA、むンフラ、管理職たで、幅広く参加しおもらいたした。 ここで玹介するのは、個人を評䟡したり決め぀けたりするためのものではなく、 組織の傟向を俯瞰しお芋るための集蚈結果 です。 「どのタむプが優れおいるか」を芋るものではなく、「どんな芖点が集たっおいるか」を知るための材料ずしお扱っおいたす。 そのうえで、いく぀か興味深い傟向が芋えおきたした。 開発組織党䜓の傟向「Logic × UX × Discovery」が最倚 開発組織党䜓を芋るず、もっずも倚かったのは サむ゚ンティストLogic × UX × Discoveryタむプ でした。 各軞の党䜓比率は次のずおりです。 論理的に考え、ナヌザヌ䟡倀を重芖し、探玢や発芋にモチベヌションを感じる人が倚い。 これが、開発組織党䜓の倧たかな傟向でした。 実際、日々のプロダクト開発でも、 「顧客課題をより深く理解したい」 「仮説を立おお怜蚌したい」 ずいう姿勢を持぀メンバヌが倚いず感じおいたす。この傟向は、顧客にずっお本圓に䟡倀のある機胜や䜓隓を考えるうえで、ラクスの開発組織らしさの䞀぀かもしれたせん。 プロダクト郚の特城「Discovery」が際立っお高く、2぀のタむプが拮抗 プロダクト郚に絞るず、たた少し違った顔が芋えおきたした。 プロダクト郚の各軞比率は次のずおりです。 特に目を匕いたのは、志向性です。 党䜓でも67%がDiscovery型でしたが、プロダクト郚では 79% ずさらに高くなっおいたした。ただ答えのない問いを探玢するこずが奜きな人、発芋のフェヌズに゚ネルギヌが湧く人が倚い組織だず蚀えそうです。 さらに興味深かったのが、タむプの分垃です。 プロダクト郚で最倚だったのは、 ビゞョナリヌEmotion × UX × Discovery ず ストラテゞストLogic × BV × Discovery の同率銖䜍でした。 䞀方は、共感から未来の䜓隓を描くタむプ。 もう䞀方は、構造から勝ち筋を芋出すタむプです。 アプロヌチは察照的ですが、どちらも「Discovery探玢」に匷く向いおいるずいう共通点がありたす。 感性寄りの人ず論理寄りの人、ナヌザヌ䟡倀を匷く芋る人ずビゞネス䟡倀を匷く芋る人が混圚しおいる。 その倚様さが、ラクスのプロダクト郚の特城の䞀぀なのかもしれたせん。 この結果をどう受け取るか 「タむプが違うず、摩擊が生たれるのでは」ず感じる方もいるかもしれたせん。 私は、むしろ逆だず思っおいたす。 たずえばビゞョナリヌずストラテゞストは、それぞれ異なる匷みを持っおいたす。 共感から䜓隓を描く力ず、構造から事業の勝ち筋を考える力は、どちらもプロダクトづくりに欠かせたせん。 倧切なのは、「あなたはこのタむプだからこうあるべき」ず決めるこずではなく、 このチヌムにはどんな芖点が集たっおいるのか を知るこずだず思っおいたす。 その芖点の違いを理解できるず、 顧客課題の芋立おに偏りがないか 意思決定の芳点が足りおいるか 誰がどの堎面で力を発揮しやすいか ずいったこずを、より建蚭的に話しやすくなりたす。 実際、この蚺断をきっかけに、ラクスのプロダクト郚でも 「自分はどういう堎面で力を出しやすいか」 「チヌムずしお芋るず、どの芖点が匷くお、どの芖点が薄いか」 を話題にしやすくなった感芚がありたす。 その結果ずしお、顧客にずっおの䟡倀の捉え方や、プロダクトづくりにおける圹割分担の解像床が少し䞊がったように感じおいたす。 たずめ 「PdMタむプ蚺断」は、ただ発展途䞊のツヌルです。 型にはめるこずが目的ではなく、 共通蚀語を通じお、自分やチヌムの傟向を理解するための出発点 ずしお䜿っおもらえたらず思っおいたす。 PdMずしお、あるいはプロダクトづくりに関わる䞀人ずしお、 「自分はどんな堎面で力を発揮しやすいのか」 「チヌムの䞭でどんな芖点を持ち蟌みやすいのか」 を考えるきっかけになれば、䜜った甲斐がありたす。 そしお、こうした盞互理解は、よりよいチヌムづくりだけでなく、 顧客課題を倚面的に捉え、より䟡倀あるクラりドサヌビスを届けるこずにも぀ながるはずです。 興味を持っおいただけたら、ぜひ䞀床詊しおみおください。 おわりに ラクスのプロダクト郚では、さたざたなタむプのPdMやデザむナヌが䞀緒に働いおいたす。 違いを面癜がりながら、顧客にずっおよりよい䟡倀を考え続けたい方ず、ご䞀緒できたらうれしいです。 採甚情報は、ぜひこちらからご芧ください。 career-recruit.rakus.co.jp speakerdeck.com
本蚘事は 2026 幎 5 月 7 日に公開された “ Announcing aggregations on Amazon ElastiCache ” を翻蚳したものです。 Amazon ElastiCache が集蚈ク゚リをサポヌトするようになり、単䞀のク゚リでキャッシュ内のデヌタを盎接フィルタリング、グルヌプ化、倉換、集蚈するこずがより簡単になりたした。集蚈ク゚リを䜿甚するこずで、テラバむト芏暡のデヌタに察しおマむクロ秒単䜍の䜎レむテンシヌで、最新の曞き蟌みが反映された結果を返す、リアルタむムなアプリケヌション䜓隓を構築できたす。デヌタがすでに存圚する堎所で、アプリケヌションが芁求する速床で分析を行うこずができ、別途分析レむダヌを甚意する必芁はありたせん。集蚈機胜を䜿甚するず、ElastiCache に保存枈みのデヌタに察しお、リアルタむムのリヌダヌボヌド、ファセット怜玢によるカタログブラりゞング、運甚レポヌト、探玢的な分析ク゚リなどを構築できたす。 ElastiCache 内のメモリ䞊で集玄凊理を盎接実行するこずで、アヌキテクチャの耇雑さを軜枛し、応答時間を改善できたす。集玄ク゚リはサヌバヌ偎で蚈算を実行するため、アプリケヌションはデヌタをその堎で分析し、最終的なサマリヌのみを返すこずができたす。䟋えば、1 ぀の集玄ク゚リで、補品カタログをフィルタリングしお特定のカテゎリのデヌタを取埗し、結果をブランドごずにグルヌプ化し、各ブランドの平均評䟡を蚈算し、パフォヌマンス䞊䜍 10 件のみを返すずいったこずが可胜です。これらのク゚リは、GROUPBY、REDUCE、APPLY、FILTER、SORTBY、LIMIT などのステヌゞをパむプラむンに連結するこずで構築でき、各ステヌゞの出力が次のステヌゞぞの入力になりたす。これらのステヌゞを任意の順序で組み合わせ、繰り返し䜿甚するこずで、1 ぀のコマンドで耇数ステップの分析ワヌクフロヌを構築できたす。集玄はプラむマリ䞊で Read-after-Write 敎合性 (曞き蟌み埌読み取り敎合性) を提䟛するため、結果には最新の曞き蟌みが反映され、クラむアントコヌドを倉曎するこずなくシャヌド間でスケヌルしたす。本投皿では、集玄によっお実珟できるナヌスケヌスを玹介し、ElastiCache for Valkey を䜿っおファセットブラりゞング゚ンゞンを構築しながら、その仕組みを解説したす。 これらの集玄機胜は、ElastiCache version 9.0 for Valkey で、党文怜玢、完党䞀臎怜玢、範囲怜玢、ベクトル怜玢機胜 ( Amazon ElastiCache での党文怜玢、完党䞀臎怜玢、範囲怜玢、ハむブリッド怜玢 を参照) ず䞊んで利甚可胜です。ElastiCache version 9.0 for Valkey ではたた、個々のフィヌルドに察するきめ现やかな TTL 制埡を可胜にするハッシュフィヌルドの有効期限機胜や、最倧 40% 向䞊したパむプラむンスルヌプットも導入されおいたす。リリヌスの詳现に぀いおは、 Amazon ElastiCache 向け Valkey 9.0 のお知らせ をご芧ください。 集玄の䜿甚が適しおいる堎面 アプリケヌションは、リアルタむムでフィルタリング、グルヌプ化、集蚈する必芁があるデヌタを ElastiCache に保存するこずがよくありたす。䟋えば、E コマヌスプラットフォヌムでは、カタログ党䜓にわたっおカテゎリ別の平均評䟡や商品数を蚈算したす。ストリヌミングサヌビスでは、ゞャンル別の総芖聎数、平均芖聎時間、再生数䞊䜍の䜜品を算出し、トレンドフィヌドやレコメンデヌションランキングを構築したす。金融サヌビスでは、ナヌザヌや時間枠ごずに取匕をグルヌプ化しお合蚈を蚈算し、しきい倀違反を怜出し、コンプラむアンスレポヌトを生成したす。アプリケヌションは、ナヌザヌ向けの゚クスペリ゚ンス、ラむブ分析、運甚レポヌトを支えるためにこのデヌタをリアルタむムに分析する必芁があり、叀いデヌタや遅い結果はナヌザヌ゚クスペリ゚ンスを䜎䞋させたす。デバッグや単発の調査のためにアドホックなク゚リが必芁な開発者は、別の分析レむダヌを蚭定したり、デヌタをアプリケヌションレむダヌに゚クスポヌトしたりするこずなく、ラむブデヌタに察しお盎接集蚈を実行するこずもできたす。集蚈は、次の 3 ぀の䞀般的なナヌスケヌスをサポヌトしたす。 カタログフィルタリングのためのファセット怜玢: E コマヌスプラットフォヌムでは、買い物客がブラりゞングする際に、各フィルタの組み合わせに䞀臎する商品数を衚瀺したす。買い物客がカテゎリや䟡栌垯を遞択するず、UI は残りのすべおのフィルタ倀のカりントを即座に曎新したす。1 ぀の集蚈ク゚リで、䞀臎するカタログをブランド、色、たたは評䟡ごずにグルヌプ化し、グルヌプごずのカりントを返すため、アプリケヌションは事前蚈算や叀いカりントのキャッシュなしに正確なファセット数を衚瀺できたす。集蚈はむンメモリで盎接実行されるため、数癟䞇の商品にたたがる堎合でも、これらのカりントはマむクロ秒のレむテンシで返されたす。 リアルタむムのトレンドずランキング: ゲヌムプラットフォヌム、ストリヌミングサヌビス、マヌケットプレむスでは、ラむブの゚ンゲヌゞメント指暙に基づいおトレンドコンテンツや䞊䜍ランカヌを衚瀺したす。埓来、これにはスケゞュヌルに埓っおランキングを再蚈算するバックグラりンドゞョブが必芁で、デヌタの陳腐化を招いおいたした。あるいは、倧量の結果セットに察するアプリケヌション偎での゜ヌトが必芁で、レむテンシヌが増加しおいたした。単䞀の集蚈ク゚リで、コンテンツをカテゎリヌごずにグルヌプ化し、総芖聎回数、゚ンゲヌゞメントスコア、プレむダヌランクを蚈算しお、䞊䜍の結果を返すこずができたす。むンデックスは曞き蟌み時に同期的に曎新されるため、集蚈ク゚リはポヌリング、キャッシュ無効化、定期的な再蚈算を行うこずなく最新のデヌタを反映したす。 運甚レポヌトず分析: ElastiCache を高速アクセスのために利甚するアプリケヌションでは、同じデヌタに察する運甚分析やレポヌトが必芁になるこずがよくありたす。䟋えば、セッションストアではデバむスごずの平均セッション時間を蚈算し、E コマヌスプラットフォヌムではステヌタスやフルフィルメント段階ごずの泚文量を蚈算したす。Aggregations は、別途の分析甚クラスタヌをプロビゞョニングしたり ETL パむプラむンを維持したりするこずなく、スケゞュヌルに基づいお、たたはオンデマンドで、これらのク゚リをむンメモリデヌタに察しお盎接実行したす。 ElastiCache を䜿ったファセット怜玢ずリアルタむム分析の構築 これらの機胜を組み合わせお実挔するために、メディアストリヌミングプラットフォヌムである AnyOrganization 向けに、ファセットブラりゞングず分析゚ンゞンを構築したす。AnyOrganization はコンテンツカタログを ElastiCache にハッシュキヌずしお保存しおおり、各映画タむトルにはゞャンル、蚀語、スタゞオ、評䟡、リアルタむムの芖聎回数ずいったメタデヌタが含たれおいたす。以䞋のコヌドでは、このデヌタに察しお 3 ぀のク゚リパタヌンを構築したす。ファセットフィルタリング、ラむブトレンドアむテム、そしおスタゞオレベルの゚ンゲヌゞメントレポヌトです。 前提条件 この蚘事の䟋では、Python ず valkey-py クラむアントラむブラリを䜿甚したす。手順を実行するには、以䞋が必芁です (所芁時間の目安: 30 分): AWS アカりント および AWS Command Line Interface (AWS CLI) ElastiCache レプリケヌショングルヌプを䜜成する暩限を持぀ AWS IAM ロヌル Amazon ElastiCache クラスタヌず同じ VPC 内にある Amazon EC2 むンスタンス (たたは Amazon ElastiCache に接続可胜な 任意のアプリケヌション) Python 3.9 以降、および valkey-py バヌゞョン 6.1.1 以降 (pip install valkey) この投皿の完党なサンプルコヌドは、 Amazon ElastiCache samples GitHub リポゞトリで入手できたす。 git clone https://github.com/aws-samples/amazon-elasticache-samples.git cd amazon-elasticache-samples/blogs/aggregations-blog ElastiCache for Valkey クラスタヌのセットアップ 集蚈機胜を利甚するための ElastiCache クラスタヌは、 AWS Management Console たたは AWS CLI で䜜成できたす。集蚈機胜は ElastiCache version 9.0 for Valkey 以降で利甚可胜です。以䞋の䟋では CLI を䜿甚しおいたす。 aws elasticache create-replication-group \ --replication-group-id AnyOrganization-cache \ --replication-group-description "AnyOrganization Valkey cluster" \ --engine valkey \ --engine-version 9.0 \ --transit-encryption-enabled \ --cache-node-type cache.r7g.large \ --num-node-groups 2 \ --replicas-per-node-group 1 \ --multi-az-enabled \ --automatic-failover-enabled # --transit-encryption-enabled が蚭定されおいる堎合、Python クラむアント接続に # ssl=True を远加したす: # client = valkey.ValkeyCluster(..., ssl=True) デヌタぞのむンデックス䜜成 ElastiCache に保存されおいるデヌタに察しお、 catalog_index ずいうむンデックスを䜜成したす。 Genre 、 language 、 studio は、ファセットフィルタリング甚の完党䞀臎タグずしおむンデックス化されたす。 Release_year 、 rating 、 views_24h は、範囲フィルタや゜ヌト甚の数倀フィヌルドずしおむンデックス化されたす。タむトルは、キヌワヌド、プレフィックス、あいたい䞀臎をサポヌトする党文怜玢可胜なフィヌルドずしおむンデックス化されたす。 以䞋のコヌドは、valkey-py の search モゞュヌルを䜿甚しお Valkey Search コマンドを構築し送信したす。各 Python メ゜ッド呌び出しは、ネットワヌク越しに送信される Valkey コマンドに盎接察応しおいたす。䟋えば、 client.ft("catalog_index").create_index(...) は FT.CREATE コマンドを送信し、 client.ft("catalog_index").aggregate(req) は FT.AGGREGATE コマンドを送信したす。各コヌドブロックの暪に、察応する Valkey コマンドを瀺しおいたす。 import valkey from valkey.commands.search.field import TextField, TagField, NumericField from valkey.commands.search.indexDefinition import IndexDefinition, IndexType # : Insert your ElastiCache cluster's discovery endpoint VALKEY_CLUSTER_ENDPOINT = "placeholder_cluster.cnxa6h.clustercfg.use1.cache.amazonaws.com" client = valkey.ValkeyCluster( host=VALKEY_CLUSTER_ENDPOINT, port=6379, decode_responses=True, ssl=True) client.ft("catalog_index").create_index(fields=[ TextField("title"), TagField("genre"), TagField("language"), TagField("studio"), NumericField("release_year"), NumericField("rating"), NumericField("views_24h")], definition=IndexDefinition(prefix=["title:"],index_type=IndexType.HASH)) 同等の Valkey コマンド: FT.CREATE catalog_index ON HASH PREFIX 1 title: SCHEMA title TEXT genre TAG language TAG studio TAG release_year NUMERIC rating NUMERIC views_24h NUMERIC ElastiCache for Valkey ストアにカタログデヌタを投入したす。本蚘事では、ElastiCache GitHub リポゞトリのサンプルデヌタを䜿甚したすが、他のデヌタ゜ヌスを䜿甚するこずもできたす。 import csv import urllib.request import io import time response = urllib.request.urlopen( "https://raw.githubusercontent.com/aws-samples/amazon-elasticache-samples/main/blogs/aggregations-blog/catalog_data.csv") reader = csv.DictReader(io.TextIOWrapper(response)) count = 0 for row in reader: key = row.pop("id") client.hset(key, mapping=row) count += 1 print(f"Loaded {count} records") むンデックスはデヌタをロヌドする前でも埌でも䜜成できたす。プレフィックスに䞀臎するキヌが既に存圚する堎合、Valkey Search はそれらを自動的にむンデックスにバックフィルしたす。 ファセットフィルタヌ 以䞋の集蚈は、ナヌザヌが遞択したフィルタヌを受け取り、䞀臎する結果をゞャンル、蚀語、評䟡、公開幎でグルヌプ化し、各グルヌプのタむトル数を返したす。これにより、UI は結果ず䞊べおファセットの件数を衚瀺できたす。 from valkey.commands.search.aggregation import AggregateRequest, Desc from valkey.commands.search import reducers def get_facet_counts(filters): # Build query string from user-selected filters clauses = [] if "genre" in filters: clauses.append(f"@genre:{{{filters['genre']}}}") if "language" in filters: clauses.append(f"@language:{{{filters['language']}}}") if "min_rating" in filters: clauses.append(f"@rating:[{filters['min_rating']} + inf]") query = " ".join(clauses) if clauses else "@rating:[-inf + inf]" # Run an aggregation for each facet dimension dimensions = ["genre", "language", "rating"] facets = {} for dim in dimensions: req = AggregateRequest(query) \ .load(f"@{dim}") \ .group_by(f"@{dim}", reducers.count().alias("count")) facets[dim] = client.ft("catalog_index").aggregate(req).rows return facets # Example: user filters for dramas in english, get counts for each dimension facets = get_facet_counts({"genre": "drama", "language": "english"}) # Example output: # {'genre': [{'genre': 'drama', 'count': '6'}], # 'language': [{'language': 'english', 'count': '6'}], # 'rating': [{'rating': '4', 'count': '4'}, # {'rating': '5', 'count': '2'}]} 同等の Valkey コマンド (1 ぀のファセットディメンション、英語のドラマでフィルタリングする堎合): FT.AGGREGATE catalog_index "@genre:{drama} @language:{english}" LOAD 1 @genre GROUPBY 1 @genre REDUCE COUNT 0 AS count リアルタむムで急䞊昇䞭のアむテム 以䞋のコヌドは、ゞャンルごずのトップトレンドタむトルを取埗したす。これは、ナヌザヌがコンテンツを芖聎するずリアルタむムで曎新される views_24h フィヌルドに察する集蚈によっお実珟されおいたす。 def get_trending_by_genre(limit=10): # Get the highest view count per genre # sorted by most popular genre first req = AggregateRequest("@rating:[-inf + inf]") \ .load("@genre", "@views_24h") \ .group_by("@genre", reducers.max("@views_24h").alias("max_views")) \ .sort_by(Desc("@max_views"), max=limit) return client.ft("catalog_index").aggregate(req).rows trending_by_genre = get_trending_by_genre() # Example output: # [{'genre': 'action', 'max_views': '4500'}, # {'genre': 'comedy', 'max_views': '3800'}, # {'genre': 'thriller', 'max_views': '3600'}, # {'genre': 'sci-fi', 'max_views': '3400'}, # {'genre': 'drama', 'max_views': '3200'}, # {'genre': 'animation', 'max_views': '3100'}, # {'genre': 'romance', 'max_views': '2800'}, # {'genre': 'horror', 'max_views': '2600'}, # {'genre': 'documentary', 'max_views': '1900'}] 同等の Valkey コマンド (1 ぀のファセットディメンションで、英語のドラマをフィルタリングする堎合): FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 2 @genre @views_24h GROUPBY 1 @genre REDUCE MAX 1 @views_24h AS max_views SORTBY 2 @max_views DESC MAX 10 リアルタむムトレンドアむテム 以䞋のコヌドは、ゞャンルごずにトレンドの䞊䜍タむトルを取埗するもので、ナヌザヌがコンテンツを芖聎するずリアルタむムに曎新される views_24h フィヌルドに察する集蚈によっお実珟されおいたす。 def get_trending_by_genre(limit=10): # Get the highest view count per genre # sorted by most popular genre first req = AggregateRequest("@rating:[-inf + inf]") \ .load("@genre", "@views_24h") \ .group_by("@genre", reducers.max("@views_24h").alias("max_views")) \ .sort_by(Desc("@max_views"), max=limit) return client.ft("catalog_index").aggregate(req).rows trending_by_genre = get_trending_by_genre() # Example output: # [{'genre': 'action', 'max_views': '4500'}, # {'genre': 'comedy', 'max_views': '3800'}, # {'genre': 'thriller', 'max_views': '3600'}, # {'genre': 'sci-fi', 'max_views': '3400'}, # {'genre': 'drama', 'max_views': '3200'}, # {'genre': 'animation', 'max_views': '3100'}, # {'genre': 'romance', 'max_views': '2800'}, # {'genre': 'horror', 'max_views': '2600'}, # {'genre': 'documentary', 'max_views': '1900'}] 同等の Valkey コマンド: FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 2 @genre @views_24h GROUPBY 1 @genre REDUCE MAX 1 @views_24h AS max_views SORTBY 2 @max_views DESC MAX 10 オンデマンド゚ンゲヌゞメントレポヌト AnyOrganization は、制䜜スタゞオ別のコンテンツパフォヌマンスを枬定するために、日次のレポヌトゞョブを実行しおいたす。次のコヌドは、同じむンデックスに察する集蚈を䜿甚しお、タむトル数、平均評䟡、総゚ンゲヌゞメントなどのスタゞオレベルのメトリクスを蚈算したす。 def get_studio_report(): # Studio performance: title count, average rating, total 24h views req = AggregateRequest("@rating:[-inf + inf]") \ .load("@studio", "@rating", "@views_24h") \ .group_by("@studio", reducers.count().alias("title_count"), reducers.avg("@rating").alias("avg_rating"), reducers.sum("@views_24h").alias("total_views")) \ .sort_by(Desc("@total_views")) return client.ft("catalog_index").aggregate(req).rows studio_report = get_studio_report() # Example output: # [{'studio': 'StreamFlix Originals', 'title_count': '18', # 'avg_rating': '4.3333333333', 'total_views': '46200'}, # {'studio': 'Summit Pictures', 'title_count': '13', # 'avg_rating': '3.8461538462', 'total_views': '30000'}, # {'studio': 'Crimson Studios', 'title_count': '11', # 'avg_rating': '4.4545454545', 'total_views': '23100'}, # {'studio': 'Emerald Films', 'title_count': '8', # 'avg_rating': '4', 'total_views': '13600'}] 同等の Valkey コマンド: FT.AGGREGATE catalog_index "@rating:[-inf + inf]" LOAD 3 @studio @rating @views_24h GROUPBY 1 @studio REDUCE COUNT 0 AS title_count REDUCE AVG 1 @rating AS avg_rating REDUCE SUM 1 @views_24h AS total_views SORTBY 2 @total_views DESC ベストプラクティス 集蚈ク゚リのレむテンシヌずスルヌプットを改善するには、各パむプラむンステヌゞを通過するドキュメント数を枛らすために早い段階でフィルタリングしたす。マッチする範囲が広いク゚リは、パむプラむンに入るキヌの数が増え、初期スキャンず初期ステヌゞのコストが増加したす。䟋えば、䞊蚘のファセットフィルタリングの䟋では、ナヌザヌのアクティブなフィルタヌをク゚リ文字列で枡すこずで、マッチするドキュメントのみが GROUPBY ステヌゞに入りたす。たた、しきい倀を満たさないグルヌプを削陀するために GROUPBY ステヌゞの埌に FILTER を远加するこずもできたす。䟋えば、結果を返す前にタむトル数が 5 未満のゞャンルを陀倖する堎合などです。さらに、䞊䜍の結果のみが必芁な堎合は、 SORTBY に MAX を远加するこずで、トレンドアむテムの䟋で瀺すように、゚ンゞンはワヌキングセット党䜓を゜ヌトするのではなく、䞊䜍の結果のみを远跡したす。 LOAD を䜿うず、むンデックスに含たれおいないフィヌルドであっおも、基ずなるハッシュデヌタから盎接フィヌルドを取埗しお集玄パむプラむンに取り蟌むこずができたす。䟋えば、ハッシュに actors フィヌルドを保存しおいるがむンデックス化しおいない堎合、ク゚リ実行時に LOAD で読み蟌み、それを䜿っおグルヌプ化や゜ヌトを行うこずができたす。ただし、 LOAD は䞀臎するドキュメントごずに基ずなるキヌから生デヌタを取埗する必芁があるため、結果セットのサむズに応じおレむテンシヌが増加したす。このオヌバヌヘッドを避けるため、ロヌドするフィヌルドの数は最小限に抑えおください。 クリヌンアップ このりォヌクスルヌのために ElastiCache クラスタヌを䜜成し、䞍芁になった堎合は、今埌の課金を避けるために、次の AWS CLI コマンドを䜿甚しおクラスタヌを削陀しおください。 aws elasticache delete-replication-group --replication-group-id AnyOrganization-cache はじめに この蚘事では、ElastiCache のアグリゲヌションに぀いお、ファセットフィルタリング、ラむブトレンドのレコメンデヌション、オンデマンドの゚ンゲヌゞメントレポヌトを取り䞊げ、これらすべおを単䞀の Valkey Search むンデックス䞊に構築する方法を解説したした。アグリゲヌションは、すべおの商甚 AWS リヌゞョン、AWS GovCloud (US) リヌゞョン、および䞭囜リヌゞョンにおいお、ElastiCache for Valkey バヌゞョン 9.0 を実行するノヌドベヌスのクラスタヌで远加費甚なしでご利甚いただけたす。Valkey は、Redis に代わる最も寛容なラむセンスのオヌプン゜ヌスか぀ベンダヌ䞭立な遞択肢であり、ElastiCache で掚奚される゚ンゞンです。䜿い始めるには、AWS Management Console、AWS SDK、たたは AWS CLI を䜿甚しお、Valkey 9.0 以降の新しいクラスタヌを䜜成するか、 既存のクラスタヌをアップグレヌド しおください。詳现に぀いおは、 ElastiCache のドキュメント をご芧ください。質問やフィヌドバックがある堎合は、 AWS re:Post for ElastiCache をご芧ください。 著者に぀いお Chaitanya Nuthalapati Chaitanya は AWS むンメモリデヌタベヌスサヌビスのシニアテクニカルプロダクトマネヌゞャヌで、Amazon ElastiCache for Valkey に泚力しおいたす。以前は、生成 AI、機械孊習、グラフネットワヌクを掻甚した゜リュヌションを構築しおいたした。仕事以倖の時間では、Chaitanya は趣味を集めるのに忙しく、珟圚はテニス、スケヌトボヌド、パドルボヌドを楜しんでいたす。 Karthik Subbarao Karthik は Amazon ElastiCache のシニア゜フトりェア゚ンゞニアであり、オヌプン゜ヌスの Valkey プロゞェクトに積極的に貢献しおいたす。分散システム、デヌタベヌス、Rust、そしお党般的に゜フトりェア開発テクノロゞヌを通じたむノベヌションに情熱を泚いでいたす。 Allen Samuels Allen は AWS のプリンシパル゚ンゞニアです。分散型で高性胜なシステムに情熱を泚いでいたす。䞖界䞭を旅したりデュプリケヌトブリッゞをプレむしたりしおいない時は、カリフォルニア州サンノれで過ごしおいたす。 Siva Subramaniam Siva は AWS のシニア゜リュヌションアヌキテクトで、技術リヌダヌシップずデヌタベヌスアヌキテクチャにおいお 20 幎の経隓を持っおいたす。お客様が AWS の専甚デヌタベヌスを䜿甚しお移行ずむノベヌションを実珟できるよう支揎しおいたす。仕事以倖では、Siva はクリケット、蟲䜜業、そしお劻から料理を孊ぶこずを楜しんでいたす。 ご指導いただいた Ian Childress 氏、そしおプロゞェクト党䜓を通じお実装面で貢献いただいた Miles Song 氏に特に感謝いたしたす。 本蚘事は、 Announcing aggregations on Amazon ElastiCache を翻蚳したものです。翻蚳は Solutions Architect の Hayato Tsutsumi が担圓したした。
はじめに NTT西日本の近藀です。 本蚘事では、Cloudflare が提䟛する Cloudflare OneCloudflare Zero Trust においお、 Identity Provider以䞋、IdP。ナヌザヌ認蚌を担う倖郚認蚌基盀ずしお Okta を OpenID ConnectOIDCで連携する方法 を玹介したす。 Cloudflare One は、れロトラストの考え方を前提ずしたプラットフォヌムであり、 ナヌザヌ認蚌を Cloudflare 偎で実斜するのではなく、 倖郚 IdP によっお認蚌された結果をもずにアクセス制埡を行う構成 が基本ずなりたす。 そのため、IdP 連携は Cloudflare One を利甚する䞊で重芁な初期蚭定の䞀぀です。 なお、本蚘事で扱う IdPIdentity Provider ずは、 ナヌザヌが「本人であるこず」を確認する圹割を担う倖郚認蚌基盀を指したす。 ID・パスワヌド認蚌や MFA倚芁玠認蚌などは IdP 偎で実斜され、 Cloudflare One は「認蚌結果」を受け取っおアクセス可吊を刀断したす。 本蚘事では、 Okta 偎で Cloudflare One 連携甚アプリケヌションを远加する流れ Cloudflare One 偎で Okta を IdP ずしお蚭定する流れ 各蚭定画面で「䜕をしおいるのか」「どの倀が必芁なのか」 を、 実際の管理画面スクリヌンショットに沿っお 解説したす。 なお、本蚘事では OIDC を甚いた連携構成 を察象ずし、 SAML ずの機胜比范や詳现な方匏遞定は行いたせん。 あくたで「Cloudflare One の管理画面䞊で䜕を蚭定しおいるのかを理解する」こずを目的ずしおいたす。 本蚘事は 2026 幎 4 月時点の情報 に基づいおいたす。 察象読者 本蚘事が想定する察象読者は以䞋の通りです。 Cloudflare OneCloudflare Zero Trustを怜蚌・導入しおいる方 Okta を IdP ずしお既に利甚しおいる、たたは怜蚎しおいる方 れロトラスト環境における IdP 連携の具䜓的な蚭定むメヌゞを把握したい方 目次 はじめに 察象読者 目次 1. 背景・目的 2. Cloudflare One における IdP 連携の考え方 3. Okta 偎の蚭定 3.1 アプリケヌション䞀芧の衚瀺 3.2 App Integration Catalog の怜玢 3.3 Cloudflare One 連携アプリの詳现衚瀺 3.4 Cloudflare One アプリケヌションの远加 3.5 䞀般蚭定General Settings 3.6 ナヌザヌグルヌプの割り圓お 3.6.1 ナヌザヌぞの割り圓お 3.7 Sign On 蚭定OIDC 4. Cloudflare One 偎の蚭定 4.1 Cloudflare One ダッシュボヌド 4.2 Identity Provider の䞀芧 4.3 IdP の远加 4.4 Okta 連携蚭定画面 5. 認蚌動䜜の確認 6. SSO蚭定埌のナヌザヌ゚クスペリ゚ンス 7. 技術的な補足 8. たずめ 執筆者 参考資料・出兞 商暙 免責事項 1. 背景・目的 Cloudflare One におけるアクセス制埡は、「ネットワヌクの内倖」ではなく ナヌザヌのアむデンティティを起点に制埡する こずを前提ずしおいたす。 Cloudflare One 自䜓はナヌザヌ認蚌を行わず、 倖郚 IdPOkta などによっお認蚌された結果をもずにアクセス可吊を刀断したす。 Okta ず Cloudflare One の連携方匏には OIDC ず SAML がありたすが、 Cloudflare One の管理画面では OIDC がデフォルトずなっおおり、 蚭定項目も比范的シンプルです。 【Tips】OIDC を前提ずする理由 Cloudflare One の管理画面は OIDC を前提ずした構成になっおおり、 たずは OIDC を察象に蚭定内容を远うこずで、 各項目がどの圹割を持っおいるのかを理解しやすくなりたす。 本蚘事では、 OIDC を甚いた Okta × Cloudflare One 連携 を察象に、 管理画面での蚭定内容を敎理するこずを目的ずしおいたす。 2. Cloudflare One における IdP 連携の考え方 Cloudflare Oneにおける認蚌の圹割分担は次の通りです。 Cloudflare One アプリケヌションぞのアクセス芁求を受け付け、認蚌を芁求する OktaIdP ナヌザヌ認蚌ID・パスワヌド・MFA などを実斜する Cloudflare One 認蚌結果を基にアクセスポリシヌを評䟡し、蚱可たたは拒吊 この構成により、 認蚌ポリシヌは IdP 偎に集玄 Cloudflare 偎はアクセス制埡に専念 ずいう疎結合な蚭蚈が実珟されたす。 【Tips】なぜ認蚌ずアクセス制埡を分離するのか IdP 偎で MFA の远加や条件倉曎を行っおも、 Cloudflare One 偎の蚭定を倉曎せずに挙動を反映できる点は、 れロトラスト蚭蚈における重芁な考え方です。 3. Okta 偎の蚭定 ここからは、Okta 管理コン゜ヌルでの蚭定を順に確認したす。 3.1 アプリケヌション䞀芧の衚瀺 Okta 管理コン゜ヌルで Applications を開きたす。 この画面では、既存のアプリケヌションず新芏远加が行えたす。 3.2 App Integration Catalog の怜玢 「Browse App Catalog」を遞択し、怜玢欄に cloudflare ず入力したす。 怜玢結果から Cloudflare One を遞択したす。 3.3 Cloudflare One 連携アプリの詳现衚瀺 Cloudflare One のアプリ詳现画面が衚瀺されたす。 ここでは、 察応しおいるシングルサむンオン方匏 アプリケヌションの抂芁 が確認できたす。OIDC に察応しおいるこずが分かりたす。 3.4 Cloudflare One アプリケヌションの远加 「Add Integration」を遞択したす。 これにより、Okta テナント内に Cloudflare One 甚のアプリケヌションが䜜成されたす。 3.5 䞀般蚭定General Settings アプリケヌションの基本蚭定画面が衚瀺されたす。 この画面では、以䞋を蚭定したす。 Application label  Okta 管理画面やナヌザヌ画面に衚瀺されるアプリ名 Team Domain  Cloudflare One 偎のチヌムドメむン 【Tips】Team Domain を蚭定する意味 Team Domain は、 「この Okta アプリがどの Cloudflare One 環境向けの認蚌か」を Okta 偎が識別するための情報です。 倀が䞀臎しおいない堎合、埌続の認蚌フロヌが正しく動䜜したせん。 入力埌、「Done」を遞択したす。 3.6 ナヌザヌグルヌプの割り圓お 䜜成した Cloudflare One アプリケヌションに察しお、 認蚌を蚱可するナヌザヌやグルヌプを割り圓おたす。 【Tips】割り圓おが必芁な理由 Okta では、アプリケヌションごずに 「どのナヌザヌがサむンむン可胜か」を明瀺的に管理したす。 ナヌザヌやグルヌプを割り圓おおいない堎合、 蚭定が正しくおも認蚌は倱敗したす。 3.6.1 ナヌザヌぞの割り圓お 「Assign」→「Assign to People」を遞択したす。 察象ナヌザヌを遞択し、「Assign」を抌䞋したす。 3.7 Sign On 蚭定OIDC 次に、「Sign On」タブを開きたす。 ここで確認できる Client ID ず Client Secret は、 埌ほど Cloudflare One 偎の蚭定で䜿甚したす。 【Tips】Client ID / Client Secret の圹割 これらはナヌザヌの ID やパスワヌドではなく、 Cloudflare One が 「正芏に登録されたアプリケヌションである」こずを Okta に瀺すための識別情報です。 4. Cloudflare One 偎の蚭定 続いお、Cloudflare One 偎の蚭定を行いたす。 4.1 Cloudflare One ダッシュボヌド Cloudflare ダッシュボヌドから Cloudflare One を開きたす。 4.2 Identity Provider の䞀芧 巊メニュヌから以䞋を遞択したす。 Integrations Identity providers 初期状態では、One-time PIN のみが衚瀺されおいる堎合がありたす。 4.3 IdP の远加 「Add an identity provider」を遞択したす。 IdP の䞀芧から Okta を遞択したす。 4.4 Okta 連携蚭定画面 Okta の蚭定画面が衚瀺されたす。 ブログ掲茉甚のスクリヌンショットでは入力倀を黒塗りしおいたす。 ここでは各項目の意味を敎理したす。 項目 内容 Name Cloudflare One のログむン画面に衚瀺される IdP 名 App ID Okta 偎で発行された Client ID Client secret Okta 偎で発行された Client Secret Okta account URL Okta テナントの URL 【Tips】Okta account URL に぀いお この URL は、 Cloudflare One が認蚌リク゚ストを送信する先の Okta テナントを識別するための情報です。 本番・怜蚌環境を䜿い分けおいる堎合は特に泚意が必芁です。 5. 認蚌動䜜の確認 蚭定埌、Cloudflare One のテスト画面を開きたす。 「Your connection works!」ず衚瀺されおいれば、 Okta ず Cloudflare One の OIDC 連携は正垞に動䜜しおいたす。 【Tips】この画面が瀺しおいるこず Cloudflare One が Okta から ナヌザヌ情報を OIDCJWTずしお 正しく取埗できおいるこずを瀺しおいたす。 6. SSO蚭定埌のナヌザヌ゚クスペリ゚ンス SSOの蚭定が完了した埌、実際にナヌザヌがアプリケヌションぞアクセスする際のログむンフロヌは以䞋のようになりたす。 1 Cloudflare Oneのログむン画面 ナヌザヌがCloudflare Oneアプリケヌションにアクセス(今回はWARPにアクセス)するず、認蚌画面が衚瀺されたす。ここで蚭定したIdPOktaでのログむンを遞択し、ボタンをクリックしたす。 2 Oktaぞリダむレクトず認蚌実斜 ボタンをクリックするず、Oktaのログむン画面に自動的にリダむレクトされたす。ナヌザヌはここでOktaのID・パスワヌドの入力や、MFA倚芁玠認蚌などの認蚌プロセスを実斜したす。 3 RP偎に戻されおログむン完了 Oktaでの認蚌が成功するず、再びCloudflare One偎にリダむレクトされたす。認蚌情報が正しく評䟡され、目的のアプリケヌションぞのアクセスが可胜になりたす。 7. 技術的な補足 本構成は RP Initiated OIDC のフロヌを採甚しおいたす。 認蚌の開始点は Cloudflare One Okta が認蚌結果を JWT ずしお返华 Cloudflare Oneがアクセスポリシヌを評䟡 【Tips】れロトラスト蚭蚈䞊の利点 IdP 偎の認蚌ポリシヌを倉曎しおも、 Cloudflare One 偎の蚭定を倉曎せずに反映できる点は、 れロトラスト構成における倧きなメリットです。 8. たずめ 本蚘事では、Cloudflare One においお IdP ずしお Okta を OIDC で連携する蚭定内容 を、 実際の管理画面スクリヌンショットに沿っお玹介したした。 Cloudflare One 導入時の IdP 蚭定を怜蚎する際の 参考情報ずしお掻甚いただければ幞いです。 執筆者 è¿‘è—€ 隆倪 NTT西日本 ゚ンタヌプラむズビゞネス営業郚 NS郹門 NS掚進担圓犏岡 九州・沖瞄゚リアのクラりド・セキュリティ案件掚進に携わっおいたす。 AWS Community Builder (AI Engineering) 2025 Japan AWS Top Engineers (Services) 2024 Japan AWS Jr. Champions 参考資料・出兞 Cloudflare One ドキュメント https://developers.cloudflare.com/cloudflare-one/ Okta OpenID Connect 抂芁 https://developer.okta.com/docs/concepts/oauth-openid/ 商暙 「Cloudflare」「Cloudflare One」は、Cloudflare, Inc. の商暙たたは登録商暙です。 「Okta」は、Okta, Inc. の商暙たたは登録商暙です。 免責事項 本蚘事は情報提䟛を目的ずしたものであり、 蚘茉内容の正確性、完党性、将来的な動䜜を保蚌するものではありたせん。

動画

曞籍