> ## Documentation Index
> Fetch the complete documentation index at: https://docs-staging-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# アイデンティティ用語集

> Get started using Auth0. Implement authentication for any kind of application in minutes.

export const GlossaryJA = () => {
  const GLOSSARY = [{
    term: "Adaptive Multifactor Authentication",
    description: "ログイン試行が信頼性の低いログインであると判断された場合にのみ、ユーザーに対してトリガーされる多要素認証（MFA）。Auth0はAdaptive MFAを使用して、正当なユーザーのログインエクスペリエンスを変えずに維持しながら、不正者に対してセキュリティを強化する必要がある場合にのみMFAをトリガーします。"
  }, {
    term: "Auth0 Dashboard",
    description: "Auth0のプライマリ管理者インターフェイスで、アプリケーションまたはAPIを登録し、ユーザーストアまたは別のIDプロバイダーに接続して、Auth0サービスを構成できます。"
  }, {
    term: "Fine-grained Authorization (FGA)",
    description: "個々のユーザーがアプリケーション内の特定のオブジェクトまたはリソースにアクセスできるようにするAuth0のSaaS製品。"
  }, {
    term: "IDトークン",
    description: "リソースにアクセスするためのものではなく、クライアント自体を対象とした資格情報。クライアントが解析および検証できる固定形式です。"
  }, {
    term: "IDプロバイダー (IdP)",
    description: "デジタルIDを保存および管理するサービス。Auth0は、信頼できるソーシャルIDプロバイダー、エンタープライズIDプロバイダー、および法的IDプロバイダーをサポートしています。Auth0は、アプリケーションのIDプロバイダーとしても機能します。"
  }, {
    term: "JSON Web Token (JWT)",
    description: "二者間のクレームを安全に表現するための、オープンかつ業界標準のRFC 7519方法。Auth0では、IDトークンは常にJWT形式で返され、アクセストークンも多くの場合、JWT形式で返されます。JWT.ioで整形式のJWTをデコードして、クレームを表示できます。"
  }, {
    term: "Lock",
    description: "ユーザーを認証するためのAuth0のUIウィジェット。これはそのまま使用でき、クラシックユニバーサルログインエクスペリエンスのデフォルトの顔です。Lockを使用すると、細かい動作や外観のオプションをカスタマイズできますが、その主な目的は使いやすさです。"
  }, {
    term: "Management API",
    description: "Auth0サービスを管理し、プログラムに従って管理タスクを実行するためのAuth0のAPI。"
  }, {
    term: "Nonce",
    description: "認証プロトコルで発行される任意の数値（多くの場合、乱数または擬似乱数）で、旧式の通信を使用したリプレイ攻撃の検出と軽減に使用できます。nonceは1回しか発行されないため、攻撃者が別のnonceを使用してトランザクションを再実行しようとすると、その誤ったトランザクションをより簡単に検出できます。"
  }, {
    term: "OAuth 2.0",
    description: "認可プロトコルとワークフローを定義する認可フレームワーク。OAuth 2.0は、ロール、認可付与（またはワークフロー）、認可要求と応答、およびトークン処理を定義します。ユーザーIDを検証するOpenID Connect（OIDC）プロトコルによって、OAuth 2.0を拡張できます。"
  }, {
    term: "OpenID",
    description: "アプリケーションがユーザーのログイン情報を収集および保存することなく（したがって、ユーザーのログイン情報について責任を負わずに）、ユーザーが本人であることを確認できる認証用のオープン標準。"
  }, {
    term: "Organization",
    description: "B2B顧客がエンドユーザーを分類し、特定のロール、ログインエクスペリエンス、およびリソースへのアクセスを定義できるようにするAuth0製品。"
  }, {
    term: "Security Assertion Markup Language (SAML)",
    description: "パスワードを使用せずに二者間で認証情報を交換できるXMLベースの標準化プロトコル。"
  }, {
    term: "Tokenset",
    description: "For each user's authorized connection, like Google or Microsoft, Token Vault creates a secure container called a tokenset. A tokenset contains the access and refresh tokens needed to call that external provider's APIs on the user's behalf. A tokenset securely stores access and refresh tokens on the Auth0 Authorization Server."
  }, {
    term: "Webサービスフェデレーション (WS-Fed)",
    description: "WS-Trustを使用して信頼が確立されているシステム、ドメイン、およびIDプロバイダーの間でユーザーIDを管理するためのプロトコル。このプロトコルは主にMicrosoft製品に使用され、フェデレーションメタデータの共有方法に関するポリシーを定義します。"
  }, {
    term: "アカウントリンク",
    description: "資格情報を1回提供するだけで、ユーザーが複数のリソースやアプリケーションにアクセスできるように、複数のプラットフォーム間でユーザーアカウントを接続すること。"
  }, {
    term: "アクション",
    description: "Auth0実行中の特定の時点で実行される、Node.jsで記述された安全な関数。これはテナント固有であり、バージョン管理されています。アクションは、カスタムロジックでAuth0の機能をカスタマイズおよび拡張するために使用されます。"
  }, {
    term: "アクセストークン",
    description: "アプリケーションがAPIにアクセスするために使用できる資格情報。これは、トークンのベアラーがAPIにアクセスし、付与されたスコープで指定された特定のアクションを実行する許可を得ていることをAPIに通知します。アクセストークンは任意の形式にできますが、一般的な2つのオプションとして、不透明な文字列とJSON Webトークン（JWT）があります。これらは、HTTP認可ヘッダー内のBearer資格情報としてAPIに送信される必要があります。"
  }, {
    term: "アプリケーション",
    description: "認証とID管理を行うためにAuth0に依存するソフトウェア。Auth0は、シングルページ、通常のWeb、ネイティブ、およびマシンツーマシンのアプリケーションをサポートしています。"
  }, {
    term: "オーディエンス",
    description: "発行されたトークンに対するオーディエンスを表す一意の識別子で、JSON Webトークン内でaudクレームとして特定されたもの。オーディエンス値は、IDトークンの場合はアプリケーション（Client ID）、アクセストークンの場合は呼び出されるAPI（API Identifier）のいずれかです。Auth0では、アクセストークンの要求で送信されるオーディエンス値によって、トークンが不透明形式で返されるかJWT形式で返されるかが決まります。"
  }, {
    term: "カスタムドメイン",
    description: "特殊な名前、またはバニティ名を持つサードパーティのドメイン。CNAMEとも呼ばれます。"
  }, {
    term: "クライアントID",
    description: "登録後にアプリケーションに割り当てられる識別値。この値は他のサードパーティーサービスと組み合わせて使用され、Auth0 Dashboard > Application Settingsで確認できます。"
  }, {
    term: "クライアントシークレット",
    description: "クライアント（アプリケーション）が認可サーバーで認証するために使用するシークレット。これはクライアントと認可サーバーだけが知っているものであり、推測できないように十分にランダムである必要があります。"
  }, {
    term: "クレーム",
    description: "セキュリティトークンにパッケージ化される属性で、トークンのプロバイダーがエンティティに関して行っているクレームを表します。"
  }, {
    term: "グループ",
    description: "1人以上のユーザーのセット。Auth0認可拡張機能では、グループを使用して、一度に多くのユーザーにアクセスを許可します。"
  }, {
    term: "コールバック",
    description: "認証後にAuth0が応答を送信する先のURL。多くの場合、認証後にユーザーがリダイレクトされるURLと同じです。"
  }, {
    term: "サブスクリプション",
    description: "各テナントで使用できる機能や割り当てを定義する契約。Auth0には、さまざまな開発者や組織のニーズを満たすために複数のサブスクリプションレベルがあります。"
  }, {
    term: "サポート終了",
    description: "対象の機能または動作がプラットフォームから削除されることを示す製品リリース段階。その機能または動作を続けて使用すると、おそらくエラーが発生します。新しい動作は、移行期間中にオプトインしなかったテナントに対して自動的に有効になります。"
  }, {
    term: "サポート終了日",
    description: "機能または動作へのアクセスがプラットフォームから削除される日付。サポート終了日は、プランのタイプによって異なる場合があります。"
  }, {
    term: "シャドーアカウント",
    description: "リモートアプリケーションにアクセスする必要があるユーザーを個別に、ローカルディレクトリからリモートディレクトリに手動でプロビジョニングする（実質的に元のアカウントのコピー、すなわちシャドーを作成する）、継続するのが困難な方法。"
  }, {
    term: "シングルサインオン（SSO）",
    description: "ユーザーが1つのアプリケーションにログインした後、そのユーザーが使用しているプラットフォーム、テクノロジー、ドメインに関係なく、そのユーザーを他のアプリケーションに自動的にログインさせるサービス。ユーザーは1回だけサインインします（これがこの機能の名前の由来です）。同様に、シングルログアウト（SLO）は、ユーザーが1つのアプリケーションからログアウトした後、ログインしていた各アプリケーションまたはサービスからログアウトされるときに発生します。SSOとSLOはセッションを使用することで可能になります。"
  }, {
    term: "スコープ",
    description: "アプリケーションが実行できる特定のアクション、またはユーザーに代わってアプリケーションが要求できる情報を定義するメカニズム。多くの場合、アプリケーションは、オンラインリソースですでに作成されている情報を利用しようとします。そのためには、アプリケーションはユーザーに代わってこの情報にアクセスするための認可を求める必要があります。アプリが認可サーバー経由でリソースへのアクセス許可を要求する場合、そのアプリはスコープパラメーターを使用して必要なアクセスを指定し、認可サーバーはスコープパラメーターを使用して実際に付与されたアクセスで応答します。"
  }, {
    term: "セキュリティトークン",
    description: "ユーザーが正常に認証されたことを証明するために使用される、デジタル署名されたアーティファクト。"
  }, {
    term: "セッションクッキー",
    description: "受信しているトークンが署名され、有効であり、信頼できるソース（IDプロバイダー）からのものであることをミドルウェアが確認した後に、ミドルウェアによって発行されるエンティティ。このエンティティは、IDプロバイダーによる認証が成功したという事実を表します。クッキーが存在する限りユーザーが認証されているとみなされるため、トークンを使用したこのプロセスを継続的に繰り返す必要がなくなります。"
  }, {
    term: "ディレクトリ",
    description: "ユーザーの中央リポジトリ（最もよく知られているのはActive Directory）。資格情報と属性を一元管理できるため、各アプリケーションがそれぞれ独自のローカルID設定やユーザーのプールを持つ必要がなくなります。同じユーザーディレクトリを使用するすべてのアプリケーションに対し、シングルサインオンできます。"
  }, {
    term: "デジタルID",
    description: "特定のアプリケーションによって提供される機能のコンテキストで特定のユーザーを定義する属性のセット。"
  }, {
    term: "デジタル署名",
    description: "トークン内の情報を改ざんから保護する暗号化された文字列。これらの情報が変更または改ざんされると、署名は検証できなくなり、拒否されます。"
  }, {
    term: "テナント",
    description: "Auth0では、単一のソフトウェアインスタンスに対して特定の権限があるアクセスを共有する、論理的に分離されたユーザーのグループのこと。複数のテナントが同じマシン上で実行している場合でも、その中の1つのテナントが別のテナントのデータにアクセスすることはできません。一般に、テナントは、ソフトウェアマルチテナントアーキテクチャから借用された用語です。"
  }, {
    term: "トークンエンドポイント",
    description: "プログラムに従ってトークンを要求するために使用される認可サーバー上のエンドポイント。"
  }, {
    term: "トリガー",
    description: "ユーザーのログインなどの特定の操作が実行時に発生したときに、アクションを自動的に呼び出すイベント。複数のトリガーが同時に実行され、関与するフローをブロックするものもありますが、同時には実行されないものもあります。"
  }, {
    term: "パスワードレス",
    description: "最初の要素がパスワードではない認証の形式。代わりに、メールやSMS、プッシュ通知、または生体認証センサーで受信したワンタイムパスワードを使用できます。パスワードレスではワンタイムパスワードが使用されるため、ユーザーは従来のユーザー名/パスワードによるログインに比べて、一般的なパスワードベースの攻撃（辞書や資格情報のスタッフィングなど）の影響を受けにくくなります。"
  }, {
    term: "パスワード漏洩検知",
    description: "サードパーティのWebサイトまたはアプリでのデータ漏洩で侵害されたユーザー名とパスワードの組み合わせをユーザーが使用した場合に、Auth0がユーザーに通知する攻撃防御の形式。"
  }, {
    term: "パブリッククライアント",
    description: "OAuth 2.0プロトコルによると、クライアント（アプリケーション）は、資格情報（クライアントIDやシークレットなど）を安全に保持できるかどうかに応じて、機密またはパブリックに分類できます。パブリッククライアントは資格情報を安全に保持できないため、クライアントシークレットの使用を必要としない付与タイプのみを使用する必要があります。パブリッククライアントに発行されたIDトークンは、秘密鍵（RS256）を使用して非対称に署名され、トークンの署名に使用された秘密鍵に対応する公開鍵を使用して検証される必要があります。"
  }, {
    term: "フロー",
    description: "アクションを使用して拡張できるプロセス。各フローはそれぞれ1つ以上のトリガーで構成され、Auth0手順の単一ポイント中に情報が移動する論理パイプラインを表します。"
  }, {
    term: "ベータ版",
    description: "一般提供（GA）版に先立って、対象の機能または動作がサブスクライバーに提供され、最終的なフィードバックを提供しながら新製品の機能を吟味して導入する時間を与える、製品リリース段階。機能面では、完全なコードが使われ、安定しており、さまざまなシナリオで役立ちます。また、GA版における品質の期待に応えている、またはほぼ応えていると考えられます。ベータ版は、選ばれた一握りのサブスクライバーに制限することも（プライベート）、すべてのサブスクライバーに提供することもできます（パブリック）。"
  }, {
    term: "ボット検知",
    description: "Auth0がログインプロセス中にCAPTCHAを有効にすることで、疑わしいボットトラフィックをブロックする攻撃防御の形式。"
  }, {
    term: "メタデータ",
    description: "環境設定やプロファイル設定など、ユーザーが更新できる情報。メタデータはIDトークンに追加され、ユーザープロファイルに保存できます。"
  }, {
    term: "ユーザーのブロック/ブロック解除",
    description: "要求元のリソースへのアクセスを削除または復元すること。Auth0の攻撃防御スイートの機能（侵害されたパスワードの検出、ブルートフォース保護、不審なIPのスロットリング）を指します。各サービスはログイン/サインアップの傾向を評価し、疑わしいアクティビティに関連付けられたIPアドレスをブロックします。"
  }, {
    term: "ユニバーサルログイン",
    description: "Auth0による認証フローの実装で、これは認可サーバーの主要な機能です。ユーザーの本人証明が必要になるたびに、アプリケーションはユニバーサルログインにリダイレクトされ、Auth0がユーザーのアイデンティティを保証するために必要な処理を行います。"
  }, {
    term: "リソースサーバー",
    description: "保護されたリソースをホストするサーバー。リソースサーバーは保護されたリソースの要求を受け入れ、応答します。"
  }, {
    term: "リソース所有者",
    description: "保護されたリソースへのアクセスを許可できるエンティティ（ユーザーやアプリケーションなど）。"
  }, {
    term: "リフレッシュトークン",
    description: "更新されたアクセストークンを取得するために使用できる特殊なトークン。これは、ユーザーに再度ログインを強いることなく、期限切れになるアクセストークンを更新する場合に便利です。リフレッシュトークンを使用すると、リフレッシュトークンがブロックリストに登録されるまで、いつでも新しいアクセストークンを要求できます。"
  }, {
    term: "リフレッシュトークンのローテーション",
    description: "脆弱性を最小限に抑えるためにリフレッシュトークンを頻繁に置き換える戦略。リフレッシュトークンのローテーションを使用すると、アプリケーションがリフレッシュトークンを交換して新しいアクセストークンを取得するたびに、Auth0も新しいリフレッシュトークンを返します。"
  }, {
    term: "ローカリゼーション",
    description: "新しいユニバーサルログインエクスペリエンスをサポートされている言語でレンダリングできる機能。"
  }, {
    term: "ロール",
    description: "ユーザーがシステムに対して必要とするアクセスのレベルを示す、ユーザーに割り当てられるユーザーアイデンティティのアスペクト。ロールは基本的に権限の集合です。"
  }, {
    term: "一般提供",
    description: "対象の機能または動作が完全に機能し、（価格レベルによって制限される）すべてのサブスクライバーが本番環境で使用できる製品リリース段階。新しいリリースが既存の機能を置き換える場合、Auth0は弊社の廃止ポリシーに従って下位互換性の期間を提供し、新しいリリースの導入時間を確保できるよう、お客様に通知します。"
  }, {
    term: "不審なIPのスロットリング",
    description: "非常に多くのアカウントをターゲットにした、単一IPアドレスからの不審なログインからテナントを保護する攻撃防御の形式。"
  }, {
    term: "不正者",
    description: "脅威アクターとも呼ばれます。害を及ぼす意図をもってビジネスまたは環境に脅威を与えるエンティティ（個人またはグループ）。データセンターへの侵入から、盗まれた資格情報によるシステムへのハッキングまで、被害には物理的およびサイバー上の損害が含まれる可能性があります。"
  }, {
    term: "信頼",
    description: "IDプロバイダーや認証局がユーザーについて言及することをリソースが前向きに信じる場合、そのリソースはそのIDプロバイダーまたは認証局を信頼しています。"
  }, {
    term: "境界",
    description: "ディレクトリ、そのすべてのユーザー、およびそのディレクトリを使用するすべてのアプリケーションを囲む一連の境界。一部の実装では、この境界は物理的な場所を指します。また、VPNを介して接続された一連のネットワークまたはデバイスを指す場合もあります。"
  }, {
    term: "多要素認証（MFA）",
    description: "複数の要素を考慮した認証プロセス。通常、Auth0では、最初の要素は標準のユーザー名/パスワード交換であり、2番目の要素はメールまたはSMS経由のコードまたはリンク、AuthyやGoogle Authenticatorなどのアプリ経由ワンタイムパスワード、あるいはGuardianやDuoなどの電話アプリ経由のプッシュ通知です。複数の要素を使用することで、パスワードが他人の手に渡ったり、携帯電話が盗まれたりするなど、いずれかの要素が誰かに取得された場合でも、アカウントの安全性を保つことができます。"
  }, {
    term: "廃止",
    description: "対象の機能または動作が新規サブスクライバーによる使用をサポートしていないことに加え、積極的な強化が行われおらず、かつ最小限のメンテナンスしか行われていないことを示す製品リリース段階。廃止の時点でその機能または動作を使用していたテナントは、引き続きアクセスできます。"
  }, {
    term: "接続",
    description: "Auth0と、アプリケーションのユーザーのソースとの関係。例として、IDプロバイダー（GoogleやActive Directoryなど）、パスワードレス認証方法、ユーザーデータベースなどがあります。"
  }, {
    term: "攻撃防御",
    description: "ブルートフォース保護、不審なIPのスロットリング、侵害されたパスワードの検出、ボット検知、Adaptive Multi-factor Authenticationなど、攻撃を検出して軽減するためにAuth0が提供する機能。"
  }, {
    term: "早期アクセス",
    description: "対象の機能や動作が限られた数のサブスクライバーまたは顧客開発パートナー（CDP）に提供され、それらのサブスクライバーまたはCDPがテストを行い、今後の機能に関するフィードバックを返すことができる製品リリース段階。この段階では、機能がまだ完成していない可能性がありますが、検証はできます。"
  }, {
    term: "未加工の資格情報",
    description: "リソースがユーザーのアイデンティティを確認できるようにする、ユーザーとリソースの間で合意された共有シークレットまたは一連の情報。"
  }, {
    term: "機密クライアント",
    description: "OAuth 2.0プロトコルによると、クライアント（アプリケーション）は、資格情報（クライアントIDやシークレットなど）を安全に保持できるかどうかに応じて、機密またはパブリックに分類できます。機密クライアントは、資格情報を無許可の当事者に公開することなく安全な方法で保持でき、そのためには信頼できるバックエンドサーバーが必要です。これらのクライアントは、トークンエンドポイントを呼び出すときにクライアントIDとシークレットを指定して認証しなければならない付与タイプを使用でき、対称または非対称に署名されたトークンを発行させることができます。"
  }, {
    term: "消費デバイス",
    description: "クライアントが開始するバックチャネル認証フローで、ユーザーがサービスを利用するのに役立つデバイス。"
  }, {
    term: "混乱した代理人",
    description: "攻撃者がクライアントまたはサービスを騙してアクションを実行させる状況。"
  }, {
    term: "破壊的変更",
    description: "Auth0が知る範囲で、Auth0プラットフォームと顧客アプリケーションの相互運用に障害をきたす、Auth0プラットフォームへの変更。"
  }, {
    term: "移行",
    description: "顧客が特定の機能や動作から離れるプロセス。移行は、製品リリースの廃止段階で行う必要があります。"
  }, {
    term: "総当たり攻撃防御",
    description: "単一のIPアドレスから発生し、単一のユーザーアカウントをターゲットとする総当たり攻撃から保護する攻撃防御の形式。"
  }, {
    term: "署名アルゴリズム",
    description: "トークンが不正者によって改ざんされないように、トークンにデジタル署名するためのハッシュアルゴリズム。"
  }, {
    term: "製品のリリース段階",
    description: "Auth0が製品機能をどのように計画、リリース、廃止するかを説明するフェーズ。製品機能はすべてのリリース段階を経て進行するとは限らず、各段階の期間は機能のスコープや影響力によって異なります。"
  }, {
    term: "証明書利用者",
    description: "ユーザーを認証するためにサードパーティーのIDプロバイダーに依存するエンティティ（サービスやアプリケーションなど）。"
  }, {
    term: "認可コード",
    description: "認可サーバーによって生成され、認可応答の一部としてアプリケーションに返されるランダムな文字列。認可コードの有効期間は比較的短く、認可コードフローの使用時に（Proof Key for Code Exchange（PKCE）の有無にかかわらず）トークンエンドポイントでアクセストークンと交換されます。"
  }, {
    term: "認可サーバー",
    description: "ユーザーによるアクセスの限界を定義するために使用される集中管理型サーバー。たとえば、認可サーバーは、ユーザーが利用できるデータ、タスク、機能を制御できます。認可サーバーによってユーザーが認証されることはありません。ユーザーの身元を確認するのは認証サーバーの役割です。"
  }, {
    term: "認可フロー",
    description: "OAuth 2.0で概説されている認可付与の別名。認可フローは、リソース（アプリケーションまたはAPI）が要求元にアクセスを許可するために使用するワークフローです。テクノロジーのタイプ（たとえば、アプリケーションがクライアントシークレットを保存できる場合）と要求元のタイプに基づいて、リソース所有者は認可コードフロー、Proof of Key Code Exchange（PKCE）、Resource Owner Password Credential（ROPG）、暗黙フロー、またはクライアントの資格情報を使用できます。"
  }, {
    term: "認証サーバー",
    description: "ユーザーのアイデンティティを確認または拒否するサーバー。認証サーバーによって、ユーザーが利用できるアクションやリソースが制限されることはありません（ただし、この目的でコンテキストを提供することは可能）。"
  }, {
    term: "認証デバイス",
    description: "クライアントが開始するバックチャネル認証フロー内。"
  }];
  const ENGLISH_LETTERS = Array.from({
    length: 26
  }, (_, i) => String.fromCharCode(65 + i));
  const uniqueJapaneseChars = [...new Set(GLOSSARY.map(item => item.term[0] || "").filter(char => !(/[A-Z]/i).test(char)).map(char => char.toUpperCase()))].sort((a, b) => a.localeCompare(b, "ja"));
  const A_TO_Z = [...ENGLISH_LETTERS, ...uniqueJapaneseChars];
  const norm = s => s.normalize("NFKD").toLowerCase().trim();
  const useQueryParamState = (key, initial = "") => {
    const [value, setValue] = useState(() => {
      if (typeof window === "undefined") return initial;
      const url = new URL(window.location.href);
      return url.searchParams.get(key) ?? initial;
    });
    useEffect(() => {
      if (typeof window === "undefined") return;
      const url = new URL(window.location.href);
      if (value) url.searchParams.set(key, value); else url.searchParams.delete(key);
      window.history.replaceState({}, "", url.toString());
    }, [key, value]);
    return [value, setValue];
  };
  const highlight = (text, query) => {
    if (!query) return text;
    const i = norm(text).indexOf(norm(query));
    if (i < 0) return text;
    const end = i + query.length;
    return <>
        {text.slice(0, i)}
        <mark>{text.slice(i, end)}</mark>
        {text.slice(end)}
      </>;
  };
  const [term, setTerm] = useQueryParamState("term", "");
  const groups = useMemo(() => {
    const filtered = term ? GLOSSARY.filter(g => norm(g.term).includes(norm(term))) : GLOSSARY;
    const map = new Map();
    for (const item of filtered.sort((a, b) => a.term.localeCompare(b.term))) {
      const key = (item.term[0] || "").toUpperCase();
      map.set(key, [...map.get(key) || [], item]);
    }
    return map;
  }, [term]);
  const letterRefs = useRef({});
  const handleJump = letter => {
    const el = letterRefs.current[letter];
    if (el) el.scrollIntoView({
      behavior: "smooth",
      block: "start"
    });
  };
  return <div className="mx-auto max-w-5xl py-10 text-gray-900 dark:text-gray-100">
      {}
      <div className="mb-6">
        <div className="relative">
          <span className="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400">
            <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor">
              <circle cx="11" cy="11" r="8"></circle>
              <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
            </svg>
          </span>
          <input id="search-input-control" type="text" placeholder="Search by name" value={term} onChange={e => setTerm(e.target.value)} className="w-full rounded-lg border border-gray-300 dark:border-gray-700 bg-white dark:bg-black pl-10 pr-4 py-3 outline-none focus:border-indigo-500 dark:focus:border-indigo-400 text-gray-900 dark:text-gray-100" />
        </div>
      </div>

      {}
      <nav className="mb-8 flex flex-wrap gap-3">
        {A_TO_Z.map(letter => {
    const enabled = groups.has(letter);
    return <button key={letter} onClick={() => enabled && handleJump(letter)} disabled={!enabled} className={`text-lg ${enabled ? "text-indigo-600 dark:text-indigo-300 hover:text-black dark:hover:text-white" : "text-gray-400 dark:text-gray-600 cursor-not-allowed"}`} aria-label={`Jump to ${letter}`}>
              {letter}
            </button>;
  })}
      </nav>

      {}
      <section>
        {A_TO_Z.filter(L => groups.has(L)).map(letter => {
    const items = groups.get(letter);
    return <section key={letter} className="mb-10">
              <div className="flex items-end gap-1">
                <h2 id={letter} ref={el => letterRefs.current[letter] = el} className="text-3xl font-semibold glossary_h2">
                  {letter}
                </h2>
                <div className="flex-1 border-b-2 border-[#3F59E4]" />
              </div>

              <ul className="mt-6 space-y-6 glossary_list">
                {items.map(it => <li key={it.term} className="scroll-mt-24">
                    <h3 id={norm(it.term)} className="text-xl font-medium text-gray-900 dark:text-gray-100 glossary_h3">
                      {it.term}
                    </h3>
                    <p className="mt-1 text-gray-700 dark:text-gray-300">{highlight(it.description, term)}</p>
                  </li>)}
              </ul>
            </section>;
  })}

        {groups.size === 0 && <p className="text-gray-500 dark:text-gray-400">No results for “{term}”. Try a different term.</p>}
      </section>
    </div>;
};

初心者も熟練した開発者も参照できる、アイデンティティ用語をまとめました。アイデンティティ用語にまつわる混乱の解消にお役立てください。

<GlossaryJA />
