---
title: "「購入を復元する」とはどういう意味ですか？"
description: "「購入の復元」の意味、iOSとAndroidでの仕組み、そしてサブスクリプションアプリにとってなぜ重要なのかを解説します。"
url: "https://adapty.io/ja/blog/what-does-restore-purchase-mean/"
language: "ja"
slug: "what-does-restore-purchase-mean"
category: "build-integrate"
date: "2025-12-05T08:57:09.000Z"
date_modified: "2026-03-09T19:28:40.000Z"
author: "Victoria Kharlan"
---

# 「購入を復元する」とはどういう意味ですか？

こんな場面を想像してください。ユーザーがサブスクリプションを購入し、デバイスを変更し、アプリを再インストールしたら、突然アクセスできなくなる。これは信頼を失う最も簡単な方法です。

まさにそのため「**購入を復元**」ボタンが存在します。オプションのボタンのように見えるかもしれませんが、特にサブスクリプションベースのアプリでは必須です。

このオプションにより、ユーザーは再購入せずに以前に購入したコンテンツへのアクセスを回復できます。  
信頼性、コンプライアンス、ユーザー維持において重要な役割を果たす小さなボタンです。

## なぜ重要なのか

- **ユーザーの信頼**: 一度支払ったユーザーは、どのデバイスからでもアクセスを継続できることを期待しています。
- **サポート負荷**: 混乱を招く、または欠落した復元ロジック = 怒ったユーザー + 増加するチケット数。
- **App Storeのコンプライアンス**: AppleとGoogleは、特定の製品タイプに対して復元オプションを含めることを求めています。

## 復元できる購入の種類

**復元可能な購入品には以下が含まれます**：

- **非消耗品**: 生涯アクセス権やプレミアム機能など、一度限りの購入品。
- **自動更新サブスクリプション**: デバイス間で同期される月間/年間プラン。
- **自動更新されないサブスクリプション**: 期間制アクセス（例: 3ヶ月パス）。

**復元不可**:

- **消耗品**（コイン、追加ライフ、1回限りのブーストなど）。これらは使い切ることを前提としています。

## 「購入の復元」ボタンの仕組み

1. **UI/UX。 「購入を復元」** ボタンを追加する — 通常は設定画面内、または課金画面に直接配置する。
2. **トリガー。** タップすると、以下の方法で復元をトリガーします：

- **SKPaymentQueue.restoreCompletedTransactions()** iOS用
- **BillingClient.queryPurchaseHistoryAsync()** for Android
- または、サーバーサイドで権限管理を行う場合のバックエンドロジック

3. **アクセスを更新します。** 復元が完了したら、ユーザーのサブスクリプション状態を更新し、コンテンツのロックを解除します。
4. **役立つ説明文を追加してください。** 混乱を減らすための簡単な一文：*「端末を切り替えた場合やアプリを再インストールした場合に使用してください。」* *
5. **冗長性を避ける。** ユーザーが既にアクセス権を持っている場合は、ボタンを無効化するか完全に非表示にする。
6. **アカウントロジック。** ログイン機能を持つアプリの場合：サブスクリプションをユーザーアカウントに紐付け、バックエンド経由で同期することで、複数デバイス間での復元を簡素化します。

## iOSでの購入の復元の仕組み

iOSでは、購入の復元によりアプリのレシートが更新され、ユーザーのApple IDに紐づけられた製品が再配信されます。このプロセスはバックグラウンドで静かに実行され、ユーザー体験はシンプルでわかりやすいものであるべきです。

ネイティブのStoreKit（StoreKit 2以前）を使用した実装方法は以下の通りです：

### 1. 復元プロセスを開始する

復元フローをトリガーするには、`restoreCompletedTransactions()` を呼び出します:

```swift
SKPaymentQueue.default().restoreCompletedTransactions()
```

これにより、StoreKitが現在のApple IDに紐づけられた過去の購入を検索します。

### 2. 復元されたトランザクションを処理する

支払いキューを監視し、`restored` トランザクション状態を確認します。その後、コンテンツのロックを解除し、トランザクションを完了としてマークします：

```swift
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        if transaction.transactionState == .restored {
            // Unlock access based on restored product
            unlockContent(transaction: transaction)
            SKPaymentQueue.default().finishTransaction(transaction)
        }
    }
}
```

`finishTransaction(_:)`を呼び出すことを忘れないでください。そうしないと、StoreKitが同じトランザクションを再試行し続ける可能性があります。

### 3. エラーを適切に処理する

復元は、無効なレシート、ネットワークの問題、またはApple IDに対象となる購入がない場合に失敗することがあります。ユーザーに明確なフィードバックを表示し、デバッグ用にエラーをログに記録してください。

**Adapty SDK** をご利用ですか？レシート検証や例外ケースを含む、これらすべてを単一メソッド呼び出しで処理します。

## Androidでの購入の復元の仕組み

Androidでは、購入の復元とはGoogle Play経由でユーザーの購入履歴を確認し、非消耗型プロダクトやアクティブなサブスクリプションを再有効化することを意味します。iOSのような組み込みの"復元"ボタンはありません。つまり、billing APIを使って手動で処理する必要があります。

Google Play Billing Libraryを使用した実装方法は以下の通りです：

### 1. 購入履歴の照会

ユーザーの過去の購入履歴を取得するには、`queryPurchaseHistoryAsync()` を使用します:

```swift
billingClient.queryPurchaseHistoryAsync(
    BillingClient.SkuType.SUBS
) { billingResult, purchaseHistoryList ->
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchaseHistoryList != null) {
        for (purchase in purchaseHistoryList) {
            // Restore subscription access
            restoreEntitlement(purchase)
        }
    }
}
```

アプリ内購入をクエリするには、`BillingClient.SkuType.INAPP`を渡すこともできます。

### 2. 検証してアクセスを解除する

購入履歴を取得した後、レシートを検証し（理想的にはサーバーサイドで）、それに応じてアクセスを付与します。なりすましを防ぐため、署名データの検証を必ず行ってください。

Adaptyは、購入の検証、ユーザーアクセスロジック、クロスプラットフォーム同期をすぐに使える状態で提供します。

### 3. UXに関する考慮事項

Androidユーザーは「購入の復元」ボタンを期待していないため、以下のような対応が可能です：

- ログイン時またはアプリ起動時に自動的に復元をトリガーする
- または、透明性を確保するために設定画面に控えめなオプションを用意する

いずれの場合も、復元ロジックがバックグラウンドで静かに実行され、アクセスが復元された際にUIが更新されるようにしてください。

## まとめ

「購入の復元」ボタンはシンプルに見えるかもしれませんが、サブスクリプションの体験において非常に重要な役割を果たしています。

- 信頼を築きます。
- 解約率を低減します。
- コンプライアンスを維持できます。

目立つように配置し、確実に動作させ、わかりやすくしましょう。

## FAQ

### サインインを使用している場合でも、「購入の復元」ボタンを表示する必要がありますか？

アプリが購入コンテンツへのアクセス手段としてサインインのみを利用している場合、技術的にはこのボタンは必須ではない可能性があります。ただしAppleは依然としてこのボタンの実装を推奨しており、サポート問い合わせの削減に役立ちます。

### 復元すると返金が発生しますか？

いいえ。有効な過去の購入のみを再有効化するもので、料金は発生しません。

### アプリの起動時に毎回「購入の復元」を自動的に呼び出すべきですか？

いいえ。通常はユーザーが手動でトリガーします。ただし、Adaptyや独自のバックエンドを使用する場合、アプリ起動時に購入情報をバックグラウンドで同期させ、アクセス権限を常に最新の状態に保つことが可能です。

### ログインなしでも購入の復元は機能しますか？

iOSでは、同じApple IDを使用している場合、可能です。Androidでは、購入履歴を永続的なユーザーアカウントに紐付けるため、ログインが推奨されます。

### Apple IDやGoogleアカウントを変更した場合、ユーザーは購入を復元できますか？

いいえ。「購入を復元」は、購入を行った元のアカウントでのみ機能します。

### 「購入の復元」はファミリー共有でどのように機能しますか？

iOSでは、製品がファミリー共有に対応しており、かつ有効になっている場合、家族全員が購入を復元できます。動作はApp Storeの設定と製品の種類によって異なります。

### 「購入の復元」で購入が見つからない場合はどうなりますか？

次のような親切なメッセージを表示します：「お客様のアカウントに過去の購入履歴は見つかりませんでした。」 これにより混乱を防ぎ、プロセスが想定通りに実行されたことを確認できます。
