---
title: "アクション"
description: "ビルダーでユーザーインタラクションによってトリガーされるアクションを定義します。"
---

**Interactions** パネルでは、フロー内の要素がタップ、要素の表示、フォームの送信などのイベントにどう応答するかを定義できます。各イベントに対して、画面間のナビゲート、要素の表示/非表示、URLを開く、変数の設定など、1つ以上のアクションを割り当てます。ユーザーデータに基づいてフローをカスタマイズするには、条件を使用します。

各インタラクションは3つのパーツで構成されます：

1. **Element**: インタラクションを開始する画面コンポーネント — ボタン、クイズの回答、入力フィールドなど。
2. **Trigger**: ロジックを起動するイベント — タップ、要素の表示、フォームの送信など。
3. **Action**: フローが応答として実行するタスク。1つのトリガーに対して複数のアクションを順番に実行できます。

## インタラクションの設定 \{#set-up-interactions\}

インタラクションを設定するには：

1. 画面上または **Layers** パネルで要素を選択します。
2. 右側の **Interactions** パネルに切り替えて、**Add trigger** をクリックします。

3. **Button triggers** セクションで、[トリガータイプ](#trigger-types) を選択します。

4. **Add action** をクリックし、アクション名をクリックして、**Edit action** ウィンドウのドロップダウンから [アクションタイプ](#action-types) を選択します。

5. 選択した [アクションタイプ](#action-types) に応じて、アクションのプロパティを設定します。
6. 必要に応じて **Add action** をクリックして、同じトリガーにさらにアクションを追加します。

## トリガータイプ \{#trigger-types\}

トリガーは、ユーザーの操作、要素の状態変化、または画面の読み込みに応じて発火します。**On screen appear** はすべての要素に対して有効で、その他の要素固有のものです。

| トリガー | 発火するタイミング | 対応要素 |
|---|---|---|
| **On screen appear** | 画面が読み込まれたとき | すべての要素 |
| **On tap** | ユーザーが要素をタップしたとき | [ボタン](paywall-buttons)、[クイズオプション](onboarding-quizzes)、[トグル](builder-toggles)、[カウントダウン](flow-timer)、[ビデオ](custom-media) |
| **On changed** | ユーザーが入力値を変更したとき（タイピング、日付や時刻の選択） | すべての [入力要素](builder-inputs-and-forms) |
| **On submit** | ユーザーがキーボードの Enter または Done を押してテキスト入力を送信したとき | [テキストベースの入力](builder-inputs-and-forms) |
| **On timer end** | [Countdown](flow-timer) 要素がゼロに達したとき | [Countdown](flow-timer) |
| **On playback finished** | [Video](custom-media) が末尾に達したとき | [Video](custom-media) |

[Loader](builder-loaders-and-progress-bars) など、組み込みのインタラクションを持たない要素に対しては、**On screen appear** が唯一利用可能なトリガーです。

## アクションタイプ \{#action-types\}

:::important
ユーザーを別の画面に移動させる **ナビゲーションアクション** は、常にリストの最後のアクションにしてください。その後に配置されたアクション（「Set Variable」など）は、アプリがすでに画面を切り替えているため実行されない場合があります。
:::

### 画面へナビゲート \{#navigate-to-screen\}

これはユーザーを画面間で移動させるための主要なアクションです。ユーザーを指定した目的の画面に移動させます。

このアクションでは、目的の画面を設定するだけです。動的ナビゲーションを有効にしたい場合は、[ナビゲーションと分岐](onboarding-navigation-branching) または [条件付きアクション](#conditional-actions) セクションを参照してください。

### 次へナビゲート \{#navigate-next\}

フローの画面順序において、ユーザーを次の画面に進めます。エディタでの画面の順序がユーザーに表示したい順序と一致している、線形のフローに使用します。

### 前へナビゲート \{#navigate-back\}

シーケンス内の前の画面ではなく、ナビゲーション履歴内の前の画面にユーザーを戻します。

### URLを開く \{#open-url\}

:::tip
テキストにリンクを挿入するには [インラインリンク](onboarding-text#inline-link) を使用してください。
:::

特定のウェブアドレスを開きます。アプリのネイティブ画面の外にあるウェブページ、記事、またはソーシャルメディアプロフィールにユーザーを送る際に使用します。

このアクションでは、2つの設定を構成できます：
- **URL address**: URLアドレスを設定します。さらに動的にすることもできます — 例えば、クイズの回答や送信されたデータに基づいて異なるページにユーザーをナビゲートするなど。これを行うには、Variable icon をクリックして使用したい変数を選択します。
- **Open in external browser**: 外部リンクをどこで開くかを定義します。デフォルトでは、ユーザーをアプリ内にとどめるためにアプリ内ブラウザで開きます。外部ブラウザでリンクを開きたい場合は、**Open in external browser** チェックボックスを選択します。

### フローを閉じる \{#close-flow\}

現在のフローを閉じます。

### 要素を表示/非表示 \{#showhide-elements\}

画面上の特定の要素を表示または非表示にします。

このアクションは、**Design** パネルの **Visibility** で設定された初期状態を上書きします。**Visibility** が **Hide** に設定されている場合、**Show** アクションで表示されます。

:::important
対象要素が設定されていない **Show** または **Hide** アクションは、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。対象を選択するかアクションを削除してください。
:::

### アラートを表示 \{#show-alert\}

ネイティブシステムのポップアップウィンドウを表示します。ユーザーは続行するために **Ok** をタップする必要があります。

アラートには **Title** と **Message** を設定する必要があります。どちらも変数を使用してコンテンツを動的にすることができます。これを行うには、Variable icon をクリックして使用したい変数を選択します。

:::important
空または不完全な設定の **Show alert** アクションは、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。両方のフィールドを入力するかアクションを削除してください。
:::

### 変数を設定 \{#set-variable\}

フロー内の変数の値を更新します。このアクションを追加する前に、左側の **Variables** パネルで変数を作成してください（[変数](onboarding-variables) を参照）。

**Add variable** をクリックして、必要な数の変数とその値を設定します。

:::important
割り当てのない **Set variable** アクションは、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。少なくとも1つの割り当てを設定するかアクションを削除してください。
:::

### 購入 \{#purchase\}

オンボーディング内のボタンやインタラクションから直接購入フローをトリガーします。フローを離れることなく、ユーザーがサブスクリプションを購読したりプロダクトを購入したりできるようにするために使用します。

このアクションでは、2つの動作を設定できます：
- **In-app store**: ネイティブ購入を開始します。**Product** を特定のプロダクトに設定するか、画面上でのユーザーの現在の選択に対して `products.selectedProduct` に設定します。
- **Web payment**: ネイティブ購入をトリガーする代わりに、ユーザーを [ウェブペイウォール](web-paywall) に送ります。ウェブベースのサブスクリプションオファーなど、アプリ外でトランザクションを処理したい場合に使用します。

:::important
対象の **Product** または **Web Paywall URL** が設定されていない **Purchase** アクションは、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。対象を割り当てるかアクションを削除してください。
:::

### 購入を復元 \{#restore-purchases\}

デバイスで購入の復元フローをトリガーします。ユーザーが別のデバイスで以前にサブスクリプションを購入した場合や、アプリを再インストールした後にエンタイトルメントへのアクセスを回復する必要がある場合にタップします。

このアクションには設定するものはありません — Adapty がネイティブストアフローを通じて復元を処理します。

**Restore purchases** アクションは、**Links** ボタンプリセットの **Restore** リンクにも事前設定されています（[購入の設定](paywall-product-block#restore-purchases) を参照）。

## カスタムアクション \{#custom-actions\}

カスタムアクションは、独自のアプリコードが処理する **Action ID** という名前を発火させます。組み込みのアクションタイプが必要なことをカバーしていない場合に使用します。

Adapty がトリガーを提供し、アプリが動作を実装します：

1. ビルダーで、要素のインタラクションに **Action ID** を割り当てます。
2. ユーザーがインタラクションをトリガーすると、フローがIDをアプリに渡します。
3. アプリがIDと照合して、コードを実行します。

### カスタムアクションの設定 \{#set-up-a-custom-action\}

1. **Edit action** ウィンドウで、アプリが認識する文字列の **Action ID** を割り当てます（例：`show_discount`）。
2. アプリのコードに、このAction IDのハンドラーを実装します。実装の詳細とコード例については、[ペイウォールアクションの処理](handle-paywall-actions) を参照してください。

:::important
**Action ID** が設定されていない **Custom** アクションは、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。Action IDを割り当てるかアクションを削除してください。
:::

### カスタムアクションでできること \{#what-you-can-do-with-custom-actions\}

カスタムアクション自体は何もしません。ビルダーで静的なAction IDを設定し、アプリのコードがそのIDを受け取ったときに何をするかを処理します。以下のすべてのユースケースは同じパターンに従います：フローでIDを割り当て、コードで処理する。

- **アプリ内イベントをトリガーする**: `viewed_special_offer` などのIDを発火させ、アプリが受け取ったときにアナリティクスにイベントを記録します。
- **システム権限をリクエストする**: `request_location` などのIDを発火させ、アプリからOSの権限プロンプトを呼び出します。Adaptyはプロンプトを表示しません — アプリが表示します。
- **ネイティブ認証を開始する**: `login_google` などのIDを発火させ、独自のログイン画面を表示します。フローはユーザーをサインインさせることはできません。
- **ビジネスロジックを適用する**: `apply_discount` などのIDを発火させ、コンテンツをアンロックするかアプリの状態を変更します。
- **クイズの回答をアプリに渡す**: 各オプションに異なるAction IDを割り当て（例：`goal_weight_loss` と `goal_muscle`）、コードでIDを読み取ります。IDを使用して後でセグメント化できる [カスタムユーザー属性](setting-user-attributes#custom-user-attributes) を設定します。アクションは固定IDのみを持つため、選択を報告する唯一の方法はこれです — フローは選択された値を送信できません。

:::important
カスタムアクションは、ユーザーがオプションを選択した瞬間に発火します。ユーザーが回答を変更すると、フローは新しいAction IDも発火させます。アプリはその後、両方を順番に受け取ります — 例えば、`goal_weight_loss`、次に `goal_muscle`。最新のシグナルが優先されるように、ハンドラーを冪等にしてください。
:::

### カスタムアクションにできないこと \{#what-custom-actions-cant-do\}

カスタムアクションは静的です。Action IDはフローをビルドするときに固定されます — [変数](onboarding-variables) や [ユーザー入力](builder-inputs-and-forms) を読み取ることはできません。アクションが発火すると、アプリはそのIDのみを受け取り、ユーザーが入力したメールアドレス、電話番号、その他の入力値は受け取れません。入力フィールドは、分岐とパーソナライズのための変数としてフロー内に留まります。これらの値をアプリで使用するには、独自のUIまたはAPIを通じて収集してください。

## 条件付きアクション \{#conditional-actions\}

条件付きアクションを使用して、ユーザーデータに基づいてフローを異なるパスに分岐させます。

一般的なユースケースには以下が含まれます：

- 画面にクイズがあり、回答に基づいてユーザーを異なる画面にナビゲートしたい場合。この場合、ボタンに条件付きアクションを追加します。
- 異なるユーザーグループに異なるプロダクトやオファーを提供したい場合。それらを異なる画面に配置し、ナビゲーションボタンに条件を設定します。
- 以前のアプリセッションですでにチュートリアルを完了したユーザーに対して、特定のステップをスキップしたい場合。

条件付きアクションは if / else-if / else チェーンのように機能します。アプリは上から下にルールを読み取り、最初の一致で停止します：
1. **IF**: フローが主条件を確認します。
    - True の場合？フローはすぐに THEN アクションを実行して停止します。
    - False の場合？フローは次のセクションにスキップします。
2. **ELSE IF**: ここに追加のチェックを追加できます（例：「Premiumでない場合、ユーザーはトライアル中ですか？」）。
3. **ELSE**（フォールバック）：上記のルールのいずれも一致しなかった場合、フローはこの最終セクションのアクションを実行します。

:::important
- ルールが追加されているがアクションが割り当てられていない場合、条件が一致しても何も実行されません。
- 不完全なルール（オペレーターまたは値がない）は、[プレビューと公開をブロックします](builder-save-publish#troubleshooting)。
:::

各ルールについて、評価する変数と実行するアクションを選択します。1つのルールに複数のアクションを設定できます。

:::important
フローは1つのルールのみを実行します — 最初に一致したものです。**IF** と **ELSE IF** の両方を同時に実行する必要がある場合は、両方のアクションを **IF** に追加してください。
:::

条件で使用するための要素を選択可能にし、グループに整理する方法については、[選択可能な要素とグループ](flow-selectable-elements) を参照してください。

## トラブルシューティング \{#troubleshooting\}

必須フィールドが欠けているアクションはプレビューと公開をブロックします。完全なリストについては、[フローの保存と公開](builder-save-publish#troubleshooting) を参照してください。