アプリのApp Storeレーティングは、ダウンロード数に直結します。同じカテゴリの競合アプリと並んだとき、星4.5と星3.8では選ばれ方がまったく違う。
Rorkで作ったアプリのレーティングを上げるために一番効果が高いのは、「ちょうどいいタイミング」でレビューをお願いすることです。Appleが提供するSKStoreReviewManagerを使えば、App内から直接レビューダイアログを表示できます。ただしAppleには年3回という表示上限があり、タイミングを間違えると上限を無駄遣いしてしまう。
SKStoreReviewManagerの基本的な制約
まず知っておくべき制約を整理しておく。
- 年間3回まで: 同一デバイス・同一アプリで年間3回しかダイアログが表示されない(それ以上呼び出しても無視される)
- Appleが最終判断:
requestReview()を呼んでも、Appleのアルゴリズムが「タイミングが悪い」と判断すると表示されない - TestFlightでは動作しない: テスト中は表示されないため、実機リリース後にしか効果を確認できない
- 強制はできない: ダイアログの内容や評価を操作することは規約違反
RorkでIn-App Reviewを実装する
RorkのAIに以下のような指示を出すと、SwiftUIでの実装コードを生成してくれます。
アプリにApp Storeのレビューリクエストを実装してください。
- ユーザーが3回目のセッションを完了したタイミングで表示
- 一度表示したら30日間は再表示しない
- UserDefaultsで状態を管理する
生成されたコードを確認しながら、実際の実装を見てみよう。
import SwiftUI
import StoreKit
// レビューリクエストの状態管理
class ReviewManager: ObservableObject {
private let sessionCountKey = "review_session_count"
private let lastReviewDateKey = "review_last_requested"
private let minimumSessionCount = 3
private let minimumDaysBetweenRequests = 30
var shouldRequestReview: Bool {
let sessionCount = UserDefaults.standard.integer(forKey: sessionCountKey)
// 必要なセッション数に達していない
guard sessionCount >= minimumSessionCount else { return false }
// 前回のリクエストから十分な日数が経過しているか確認
if let lastDate = UserDefaults.standard.object(forKey: lastReviewDateKey) as? Date {
let daysSinceLastRequest = Calendar.current.dateComponents(
[.day], from: lastDate, to: Date()
).day ?? 0
guard daysSinceLastRequest >= minimumDaysBetweenRequests else { return false }
}
return true
}
func incrementSessionCount() {
let current = UserDefaults.standard.integer(forKey: sessionCountKey)
UserDefaults.standard.set(current + 1, forKey: sessionCountKey)
}
func requestReviewIfAppropriate(in scene: UIWindowScene?) {
guard shouldRequestReview, let scene = scene else { return }
SKStoreReviewManager.requestReview(in: scene)
// リクエスト日時を記録
UserDefaults.standard.set(Date(), forKey: lastReviewDateKey)
// カウンターをリセット(次のサイクルのため)
UserDefaults.standard.set(0, forKey: sessionCountKey)
}
}
// SwiftUIビューでの使用例
struct ContentView: View {
@StateObject private var reviewManager = ReviewManager()
@Environment(\.scenePhase) private var scenePhase
var body: some View {
NavigationStack {
// メインコンテンツ
MainContentView()
}
.onChange(of: scenePhase) { _, newPhase in
if newPhase == .active {
reviewManager.incrementSessionCount()
// ビューが完全に表示されてからダイアログを出すために少し遅延
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
let scene = UIApplication.shared.connectedScenes
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
reviewManager.requestReviewIfAppropriate(in: scene)
}
}
}
}
}レビュー獲得率を最大化するタイミング戦略
年3回の上限を最大限に活かすには、「ユーザーが満足しているときに呼ぶ」というシンプルな原則を徹底します。
効果的なタイミング:
- タスクや目標の達成直後(ゲームのステージクリア、目標達成など)
- アプリを複数回使用した後(3〜5回目のセッション)
- 機能を実際に活用して価値を実感したとき
避けるべきタイミング:
- アプリを開いた直後(まだ価値を実感していない)
- エラーや問題が発生した直後
- 複雑な操作の途中
実際に効果が高い実装例:ゲームアプリなら「ステージクリア時」、習慣アプリなら「7日連続達成時」、生産性アプリなら「タスク完了5回目時」がそれぞれ高いレビュー率につながります。
// 特定のアクション達成時にレビューリクエストを呼ぶ例
struct TaskCompletionView: View {
@StateObject private var reviewManager = ReviewManager()
@State private var completedTaskCount = 0
var body: some View {
VStack {
Text("タスク完了: \(completedTaskCount)件")
Button("タスクを完了する") {
completedTaskCount += 1
// 5件達成時にレビューリクエスト
if completedTaskCount == 5 {
let scene = UIApplication.shared.connectedScenes
.first as? UIWindowScene
reviewManager.requestReviewIfAppropriate(in: scene)
}
}
}
}
}レビューを増やすためのもう一つのアプローチ
SKStoreReviewManager以外にも、レビューを増やす有効な方法があります。
「フィードバック」ボタンの設置: ネガティブなフィードバックをApp Storeに書かれる前に受け取るため、設定画面に「フィードバックを送る」ボタンを置く。メールやサポートフォームに誘導することで、不満を持ったユーザーがApp Storeに低評価を書く前にキャッチできます。
// 設定画面のフィードバックボタン
Button("フィードバックを送る") {
let subject = "アプリへのフィードバック"
let body = "アプリバージョン: \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "不明")\n\n"
let urlString = "mailto:support@example.com?subject=\(subject.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")&body=\(body.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "")"
if let url = URL(string: urlString) {
UIApplication.shared.open(url)
}
}App Storeのレビューページへの直接リンク: 満足しているユーザー向けに、App Storeのレビューページに直接飛ぶリンクを設置します。
// App Storeレビューページへの直接リンク
func openAppStoreReview(appID: String) {
let urlString = "https://apps.apple.com/app/id\(appID)?action=write-review"
if let url = URL(string: urlString) {
UIApplication.shared.open(url)
}
}レビュー戦略で一番大切なのは、良いアプリを作ることです。どれだけ巧みにリクエストタイミングを工夫しても、アプリ自体の品質が低ければ低評価が集まる。Rorkで質の高いアプリを作りながら、その価値を実感した瞬間に丁寧にお願いする——これが長期的に最も効果的なアプローチです。
12年の個人開発で見えてきたこと
リリース直後にチェックしているもの
- クラッシュレポートの上位エラーを24時間ごとに確認しているか
- AdMob/StoreKit の収益ダッシュボードに異常検知が出ていないか
- ユーザーレビューに技術的な指摘が含まれていないか