Package Name — 定義、リバースドメイン記法と要件

著者: IT Sectr 公開日: 2026-04-17 読了時間: 8 分

Package Name は、リバースドメイン記法に基づいたAndroidアプリケーションの固有識別子です。システムはユーザーのデバイス上でアプリを区別するため、Google Playは製品を識別するため、Firebaseサービスはプロジェクトのすべての設定を連携するためにこれを使用します。Android Developer Documentationによると、パブリッシュ後、Package Nameはアプリケーションのライフサイクルを通して不変です。

ポイント

  • Package Name — リバースドメイン形式のグローバルなAndroidアプリ識別子
  • 形式 は企業のドメインを逆の順で使用: com.example.app
  • 一意性 はパブリッシュ時にGoogle Playが検証 — 重複は禁止
  • 変更 パブリッシュ後のPackage Nameの変更は新しいアプリ作成が必要
  • Application ID はbuild.gradleでPackage Nameに対応し、単独で設定される

AndroidにおけるPackage Nameとは

Package Name は、Androidがオペレーティングシステムレベルでアプリケーションを識別するために使用する固有の文字列です。これはAndroidManifest.xmlファイルのpackageフィールドおよびアプリケーションモジュールのbuild.gradleファイルのapplicationIdフィールドに対応します。固有のPackage Nameがなければ、ユーザーのデバイスにアプリをインストールすることはできません。

Package Nameの目的

デバイス上で、Package Nameはアプリ管理のキーとして機能します: システムは/data/data/[packageName]ディレクトリに各アプリのデータ、設定、キャッシュを保管します。同じ識別子を持つ2つのアプリは共存できません — 重複アプリをインストールしようとすると、システムは既存のアプリを削除するよう説催します。

Package NameとApplication ID

Android Gradle Pluginバージョン0.11+では、Package Name (マニフェスト内) とApplication ID (build.gradle内) の区別が導入されました。Application IDは、システムおよびGoogle Playに対する実際のアプリ識別子です。マニフェストのPackage Nameは、リソース解決とRクラス生成に使用されます。簡単のために、両者を同じにすることが推奨されます。

groovy
// build.gradle (Module: app)
android {
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 24
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

applicationIdSuffixフィールドにより、異なるビルド設定のためにApplication IDに接尾語を追加できます。デバッグバージョンは識別子com.example.app.debugを持て、プロダクションバージョンと並行インストールして並行テストができます。

Package Nameの命名ルール

Google Playは、パブリッシュ時に守るべきPackage Nameの厳しいルールを定めています。識別子はストア全体で固有であり、構文要件を満たし、商標ポリシーを侵犯してはなりません。

構文要件

Package Nameに使用できるのは、ラテン文字(A-Z, a-z)、数字(0-9)、ドット(.)、アンダースコア(_)のみです。最大長さは150文字です。ドットで区切られた各セグメントは文字で始まる必要があります。ハイフェン、スペース、特殊文字はGoogle Playのルールで禁止されています。

要件
使用可能な文字ラテン文字、数字、ドット、アンダースコアcom.example.my_app
最大長さ150文字com.example.verylongappname
セグメントの先頭文字のみcom — 3comは不可
禁止ハイフェン、スペース、キリル文字com.example-app — エラー
一意性Google Playでグローバル作成時に検証

一意性要件

Package Nameの一意性は、Google Play Storeの絶対的な要件です。もし他のアプリが既に選択した識別子を使用している場合、パブリッシュは拒否されます。Googleは削除されたアプリの識別子を解放しないため、最初のPackage Nameを選択することは、すべての開発者にとって重要な決定です。

リバースドメイン記法と規約

リバースドメイン記法は、企業のドメイン名を逆の順で書く命名基準です: example.comの代わりにcom.example。このシステムは、すべてのドメイン名が本質的に固有であるため、識別子のグローバルな一意性を保証します。

標準接頭辞

開発者は通常、ドメインのTLDに対応する接頭辞を使用します: comは商業組織向け、orgは非営利組織向け、ioはテクノロジープロジェクト向け、netはネットワークサービスとソリューション向け。個人プロジェクトには、com.github.usernameまたはcom.emailが可能です。

  • com.company.app — 商業アプリの標準形式
  • org.company.app — 非営利・オープンソースプロジェクト向け
  • io.company.app — スタートアップとSaaS製品の間で人気
  • com.github.username — GitHub上の個人プロジェクト向け

マルチプラットフォームプロジェクトの規約

iOSおよびAndroidでリリースされるアプリでは、両プラットフォームで同じ識別子を使用することが推奨されます。これにより、Firebase、AppsFlyer、Adjustなど、プロジェクト識別子に結びつく分析システムとの統合が簡単になります。例えば、com.mycompany.myappは、iOSではBundle ID、AndroidではPackage Nameになります。

AndroidプロジェクトでのPackage Name設定

AndroidプロジェクトでのPackage Name設定には、build.gradleのapplicationIdの変更および対応するJava/Kotlinソースコードのディレクトリ構造の変更が含まれます。Android StudioはPackage Nameのリファクタリングツールを提供していますが、複雑なプロジェクトの場合は、ステップごとのマイグレーションが推奨されます。

ディレクトリ構造とPackage Name

kotlin
// ファイルパスはPackage Nameに対応する
// com/example/myapp/MainActivity.kt

package com.example.myapp

import android.os.Bundle
import androidx.activity.ComponentActivity

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

KotlinやJavaでは、ソースファイル内のPackage Nameがディレクトリ構造と一致する必要があります。build.gradleでPackage Nameを変更する際は、ファイルを対応するディレクトリに移動し、すべてのpackageおよびimport宣言を更新する必要があります。Android StudioはRefactor -> Moveで自動的にこれを行うことができますが、数十ファイルの大きなプロジェクトの場合は、リファクタリング後に結果を確認することが推奨されます。

プロジェクトがData Binding、View BindingまたはHiltを使用している場合、Package Nameの変更は生成されたクラスにも影響します。バインディングクラスは、モジュールのPackage Nameとレイアウトディレクトリに基づいて作成されます。識別子を変更した後は、生成されたすべての参照を更新するために、プロジェクトを再ビルドする必要があります。キャッシュされた古い参照によるエラーを防ぐため、Package Name変更後はクリーンビルドを実行することが推奨されます。

Gradle 7.0+では、build.gradleにnamespaceのサポートが導入され、Rクラスおよびリソース生成の目的でAndroidManifest.xmlのpackageフィールドを置き換えました。一方、applicationIdはシステムおよびGoogle Playに対する実際のアプリ識別子のままです。これにより、namespaceが固定され、公開識別子がビルド中に変更できるライブラリモジュールに役立つ、異なるapplicationIdとnamespaceが可能になります。

モジュラーアーキテクチャのプロジェクトでは、あるモジュールのPackage Name変更が他のモジュールのimportに影響する可能性があります。dataモジュールがパッケージcom.example.dataを持ち、domainモジュールがそのクラスを使用している場合、識別子変更後は依存するすべてのモジュールのimportを更新してください。Android Gradle Pluginバージョン8.0+は、build.gradleからの自動namespace生成により、このプロセスを簡素化します。

コードでのPackage Name確認

現在のApplication IDを取得するには、BuildConfigクラスを使用します: BuildConfig.APPLICATION_ID。これは、コード内の条件論理、環境への結合、またはデバッグ画面に識別子を表示するのに便利です。BuildConfigはbuild.gradleに基づいて自動生成されます。

kotlin
// ランタイムでのApplication IDの取得
val packageName = BuildConfig.APPLICATION_ID
val packageManager = packageManager
val appInfo = packageManager.getPackageInfo(packageName, 0)

println("App version: ${appInfo.versionName} (${appInfo.versionCode})")
println("Package: $packageName")

パブリッシュ後のPackage Name変更

Google Playでアプリをパブリッシュした後のPackage Name変更は、全く新しい製品を作成することを意味します。システムは異なるPackage Nameで既存のアプリを更新することを許可しないため、識別子を変更する決定は、ストアでプロジェクトを再始することになります。

Package Name変更の影響

Package Nameを変更すると、以下が失われます: すべての評価とレビュー、インストール統計、Google Servicesの統合(移行しない場合)、Firebaseプロジェクトのリンク(新しいgoogle-services.jsonが必要)。ユーザーは自動更新を受け取りません — ストアで新しいアプリを見ることになります。

  • 評価とレビュー — 古いアプリに残り、移行できない
  • インストール統計 — 新しいPackage Nameでリセット
  • Firebaseプロジェクト — 新しいgoogle-services.json設定とすべてのサービスの再設定が必要
  • ユーザー — 自動更新を受け取らず、別途通知が必要

Package Name変更が正当化される場合

Package Name変更は、企業のリブランディング、アプリを他の開発者アカウントに移行する場合、または別の地域向けの独立バージョンを作成する場合に正当化されます。いずれの場合でも、変更前に古いアプリを通じてユーザーに通知し、データ移行を含むマイグレーション計画を立てることが推奨されます。マイグレーション計画がなければ、ユーザーは購入コンテンツ、サブスクリプション、アプリの保存データへのアクセスを失います。マイグレーションには、SharedPreferencesやRoomを通じたデータベースおよびファイルの移行が含まれます。

Package Nameを変更する前に、新しい識別子が固有で命名ルールを守っていることを確認してください。新しいPackage NameでGoogle Playに新しいアプリを作成し、独立した製品としてパブリッシュします。古いアプリの説明に、新しいアプリへのリンクを記載します。ユーザーをリダイレクトするためにGoogle Play Custom Store Listingを検討してください。

よくある質問

Package Nameにハイフェンやアンダースコアは使えますか?

Package Nameでは、アンダースコア(_)は許可されますが、ハイフェン(-)は許可されません。アンダースコアはめったに使われますが、com.example.my_appは可能です。ハイフェンはGoogle Playのルールで禁止されており、パブリッシュ時にエラーになります。セグメントの区切りとしては、ドットのみを使用することが推奨されます。

build.gradleでのPackage NameとApplication IDの違いは?

Package NameはAndroidManifest.xml内の識別子で、リソース解決とRクラス生成に使用されます。Application IDはbuild.gradleのフィールドで、システムおよびGoogle Playストアに対するアプリ識別子を決定します。両者を同じにすることが推奨されますが、applicationIdSuffixを使用する際は違いが許可されます。

新しいプロジェクトに正しいPackage Nameを選ぶには?

企業またはニックネームのリバースドメイン記法を使用します: com.domain.appname。識別子がGoogle Playで固有であることを確認してください。一般的な単語(todo, test, app)を避け、Google Playで検索して識別子が他の開発者によって既に使用されていないか確認してください。

Google Playへのパブリッシュ前にPackage Nameを変更できますか?

はい、Google Playへのパブリッシュ前であれば、Package Nameを影響なく変更できます。変更後は、google-services.jsonを再生成し、ディレクトリ構造を更新し、すべてのimportを確認する必要があります。Android Studioは、プロセスを自動化するRefactor -> Moveツールを提供しています。

Package Nameとアプリ署名の関係は?

Package Nameは署名証明書と一緒に、Google Playでアプリを識別する固有のバインディングを形成します。2つのアプリが異なるPackage Nameを持っていても、同じ鍵で署名できます。署名証明書の変更は、Key Rotationを通じてPlay Consoleで識別子を失うことなく可能です。

まとめ

  • Package Name — リバースドメイン記法形式の固有Androidアプリ識別子
  • 命名ルール — ラテン文字、数字、ドット、アンダースコア; 最大150文字
  • リバースドメインがグローバルな一意性を保証: com.company.appname
  • Application IDはbuild.gradleでPackage Nameに対応し、ビルド接尾辞を持てる
  • 変更 パブリッシュ後は不可能 — 新しいアプリは評価とレビューを失う
  • Android Studioがパブリッシュ前の安全な変更のためのリファクタリングツールを提供
  • 推奨 — パブリッシュ前に意味のある識別子を選び、一般的な名前や既に使用されている名前を避ける

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください