> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-docs-event-stream-action-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Actionsのコーディングガイドライン

> コーディングガイドラインに沿って簡潔明瞭かつ安全なActionsコードを記述します。

以下のガイドラインに従って、効率の良い、安全かつ明確なActionsコードを記述し、合理化された運用環境を実現します。

## Actionsの基本事項

* できるだけ最小限のHTTP要求ト数を使用し、妥当なタイムアウト（10秒未満）を設定してログイン中に要求が蓄積されないようにします。
* [アプリケーションメタデータ](/docs/ja-jp/get-started/applications/configure-application-metadata)を使用して、アクションを実行するべきかどうかを判断するために、特定のアプリケーションに対してフィルター処理を行います。
* 検証の実施や<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=multifactor-authentication" tip="多要素認証（MFA）: ユーザー名とパスワードに加えて、SMS経由のコードなどの要素を使用するユーザー認証プロセス。" cta="用語集の表示">MFA</Tooltip>のトリガーを行うアクションが、意図せずまたは悪意のある方法でバイパスされることがないようにします。
* アクションで意図的にエラーを発生させてはなりません。エラーまたは条件が原因でプロセスが停止した場合は、適切な`api`メソッド（`api.access.deny()`など）を使用します。
* Authentication API呼び出し用のドメインには、`event.request.hostname`を使用します。デフォルトのAuth0テナントドメイン、または[カスタムドメイン](/docs/ja-jp/customize/custom-domains)を指定できます。

## コーディングの基本事項

* 受信データまたは保存データを使って、厳密等価演算子`===`のチェックを行います。
* アクションのプロセスが停止する必要がある場合は、`return`ステートメントを使用します。
* [ESLint](https://eslint.org)などのコードリンターや[Semgrep](https://semgrep.dev/docs/getting-started/)などの解析ツールを実行してコード品質を高め、問題を自動検出します。

## セキュリティの基本事項

* シークレットや機微コードアーティファクトをアクションコードの一部としてテキスト形式で記述しないでください。代わりに、[シークレットマネージャー](https://auth0.com/docs/customize/actions/write-your-first-action#add-a-secret)を使用するか、独自のマネージャーをアクションコード内で統合して利用します。
* 暗号化されていない個人識別情報（PII）をURLやエラーメッセージなどで丸見えの状態で転送しないでください。
* リダイレクトとAPI呼び出しには、必ずHTTPS URLを使用します。
* 可能な場合、IPアドレスを許可リストに追加します。
* （URLパラメーター、ユーザーエージェントなどの）受信データが改ざんされていないか注意します。

## 防御的コーディング

* [エラーをキャッチ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#exception_handling_statements)して、必要に応じて対処します。
* ガード節を使用し、アクション処理を続行するべきでない場合は、早期リターンします。

## ロギング

* 機微データやシークレット、PIIをログに記録してはなりません。
* アクションごとにログされる文字数は最大256文字です。

## 依存関係

* 管理された信頼できるパッケージを使用します。
* [`npm`の監査機能](https://docs.npmjs.com/cli/v6/commands/npm-audit)またはリポジトリに接続された依存関係チェッカーを使用して、未解決CVEがないか調べます。
* 可能な場合、最新バージョンのパッケージを使用します。

## ユーザーデータ

* メールが機密性または高い安全性が要求される状況下で使用されている場合、`event.user.email_verified`で検証されているかどうかを確認します。
* 接続ごとに提供されるユーザープロファイルデータもさまざまです。唯一保証されている[ユーザープロファイルフィールド](/docs/ja-jp/manage-users/user-accounts/user-profiles/user-profile-structure)は`user_id`です。

## ログインフローのリダイレクトアクション

* `api.redirect.encodeToken`によって返されるトークンは署名されますが、暗号化されません。そのため、機微データやPIIはペイロードに含めないでください。
* ログインに成功した後、以下を含むログインフローが実行されます。

  * SSO（ログインフォームは表示されない）
  * サイレント認証（認可URL内の`prompt=none`を使ってセッションをチェックする）
  * リフレッシュトークン交換（ユーザーインタラクションなし）
  * ROパスワード付与（資格情報はアプリケーションから収集され、トークンエンドポイントと交換される）
* リダイレクトするアクションは上記を考慮に入れ、インタラクションが必要な場合にアクセスを拒否するか、バイパスを意図的に許可する必要がありますが、これによってログインを要求するアプリケーションに負担がかかってきます。
