TestCrew
Play Console・公開

Google PlayのversionCodeとは?重複エラーの原因と正しい上げ方

Google PlayのversionCodeとversionNameの違い、重複エラーの原因、Android Studio・Flutter・Expoでの変更方法を解説。複数テストトラックやCIの注意点も紹介します。

公開
2026年8月2日
更新
2026年8月2日
公式情報確認
2026年8月3日
versionCodeとversionNameの違い
この記事の目次

Google PlayへAABをアップロードするとき、次のエラーが表示されることがあります。

Version code has already been used.

これは、AAB内のversionCodeが、同じアプリで過去に使用した値と重複している場合に発生します。

versionCodeとversionNameの違い

versionCodeとは

versionCodeは、AndroidとGoogle Playがアプリの更新順序を判断するための整数です。

android {
    defaultConfig {
        versionCode = 43
        versionName = "1.4.0"
    }
}

新しいリリースでは、原則として以前より大きい値を設定します。

初回:1
更新:2
次回:3

versionNameとの違い

項目versionCodeversionName
目的内部の更新判定ユーザー向け表示
形式整数文字列
431.4.0
更新時大きくする任意の命名規則

versionNameを変更しても、versionCodeが同じなら新しい更新として扱われません。

重複エラーが出る原因

過去に同じ値をアップロードした

公開を取り消したリリースや下書きで使用した値でも、再利用できない場合があります。安全策として新しい大きな値を使います。

別トラックで使用済み

内部テスト、クローズドテスト、オープンテスト、製品版は同じアプリのversionCode空間を共有します。

内部テストでversionCode 50を使用済み
→ クローズドテストへ50は再アップロードできない

古いAABを選択した

ビルド後に複数の成果物があると、以前のファイルをアップロードすることがあります。

ファイル名へversionCodeを含める、生成日時を確認するなどの対策を行います。

CIとローカルで採番が競合

ローカルで43、CIでも43を生成すると、先にアップロードした方だけが成功します。

Android Studioで変更する

Kotlin DSL:

android {
    defaultConfig {
        versionCode = 44
        versionName = "1.4.1"
    }
}

Groovy:

android {
    defaultConfig {
        versionCode 44
        versionName "1.4.1"
    }
}

変更後にrelease AABを作り直します。

./gradlew bundleRelease

Flutterで変更する

pubspec.yamlのバージョンは次の形式です。

version: 1.4.1+44
  • 1.4.1:versionName
  • 44:versionCode

ビルド:

flutter build appbundle

コマンドで指定する場合:

flutter build appbundle \
  --build-name=1.4.1 \
  --build-number=44

Expo・EASで変更する

Expoではapp configやEASのバージョン管理設定を確認します。

{
  "expo": {
    "version": "1.4.1",
    "android": {
      "versionCode": 44
    }
  }
}

クラウド側で自動増加を使用している場合、ローカル設定とどちらを正とするか統一します。

採番ルールの例

単純な連番

1, 2, 3, 4...

小規模な個人開発では最も分かりやすい方法です。

日付を使う

2026080301

同日に複数ビルドする場合の連番が必要です。Androidの上限にも注意します。

CIのビルド番号

1000 + CI_RUN_NUMBER

複数ブランチで同時にビルドする場合は、重複しない仕組みを設計します。

複数トラックのおすすめ運用

versionCodeをトラックごとに固定範囲へ分ける方法もありますが、昇格や更新が複雑になります。

基本は、すべてのトラックで一つの増加列を使う方が分かりやすくなります。

42 内部テスト
43 クローズドテスト
44 修正版クローズドテスト
45 製品版候補

同じAABを別トラックへ昇格できる場合は、新しくビルドせず、Play Consoleのトラック昇格機能を検討します。

versionCodeを下げられる?

すでに高いversionCodeを端末が受け取っている場合、低い版への通常更新はできません。

テスト用に大きすぎる値を使うと、後の本番リリースでそれより大きい値が必要になります。

アップロード前チェック

# Gradle設定を確認
./gradlew :app:properties

または生成されたAABの情報をAndroid Studioやbundletool、Play ConsoleのApp Bundle Explorerで確認します。

チェック項目:

  • versionCode
  • versionName
  • applicationId
  • 署名
  • build variant
  • 生成日時

まとめ

versionCodeエラーを防ぐ基本は次のとおりです。

  1. アップロードごとに未使用の大きな整数を使う
  2. versionNameと混同しない
  3. 全テストトラックで重複を避ける
  4. ビルド後の古いAABを選ばない
  5. CIとローカルの採番ルールを統一する
  6. アップロード前にAABの情報を確認する

次に署名エラーが出る場合はPlay App Signingとアップロード鍵を確認してください。

一次情報

公式参考資料

Google PlayやFirebaseの画面・要件は変更される場合があります。公開作業の前に、リンク先の最新情報も確認してください。

Analytics設定

TestCrewは、Webサイトの改善のためGoogle LLCが提供するGoogle Analyticsを使用します。利用の可否を変更でき、変更後はこのページの以後の計測と次回以降の訪問に反映されます。 プライバシーポリシーを見る