ずんだもん「Azure『アプリの登録』と『エンタープライズアプリ』って何が違うの？コマンドもまとめてみたのだ！」


<table>
  <tr>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/c0f938e8-bc8c-40c7-8ba6-db76fe6fe150.png" alt="Image 1" width="150"></td>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/40ea5f5b-72da-453c-8c50-4fcc4309150e.png" alt="Image 2" width="160"></td>
  </tr>
</table>

**ずんだもん**  
ずん子ちゃん、Entraの「エンタープライズアプリケーション」と「アプリの登録」って、何が違うのだ？

**東北ずん子**  
いい質問だね、ずんだもん！  

## エンタープライズアプリ

**東北ずん子**  
簡単に言うと、「エンタープライズアプリケーション」は、会社で使うSaaSアプリとか外部サービスをEntraに追加して、みんなで使うための設定をする場所だよ。  
一方、「アプリの登録」は、自分たちで作ったアプリや、APIを使うアプリをEntraに登録する場所なの。

**ずんだもん**  
なるほどなのだ！  
じゃあ、例えばSalesforceとかSlackを会社の人が使うときは「エンタープライズアプリケーション」を使うのだ？

**東北ずん子**  
その通り！  
SalesforceやSlack、GitHubみたいなSaaSサービスは「エンタープライズアプリケーション」に追加して、誰が使えるかとか、シングルサインオン（SSO）の設定をするんだよ。

## アプリの登録

**ずんだもん**  
じゃあ「アプリの登録」はどんなときに使うのだ？

**東北ずん子**  
「アプリの登録」は、例えば自分たちで作ったWebアプリや、Microsoft Graph APIを使うアプリをEntraに登録したいときに使うよ。  
ここでリダイレクトURIとか、APIの権限とか、シークレットの設定ができるんだ。

**ずんだもん**  
ふむふむ。  
じゃあ「アプリの登録」をすると、「エンタープライズアプリケーション」も自動でできるの？

**東北ずん子**  
そうだよ！  
「アプリの登録」をすると、そのアプリの“サービスプリンシパル”っていう実体が「エンタープライズアプリケーション」に自動的に作られるの。  
「アプリの登録」はアプリの設計図、「エンタープライズアプリケーション」は実際に使うアプリのインスタンス、ってイメージだね！

**ずんだもん**  
わかりやすいのだ！  
まとめると、

::: note
- SaaSや外部サービスを使いたいときは「エンタープライズアプリケーション」
    
- 独自開発やAPI連携したいときは「アプリの登録」  
    って覚えればいいのだな？
:::   

**東北ずん子**  
その通り！  
用途で使い分けると、EntraIDの管理がもっと便利になるよ♪

## おさらい表

| 項目        | エンタープライズアプリケーション            | アプリの登録                  |
| --------- | --------------------------- | ----------------------- |
| 主な用途      | SaaS・外部サービスの統合・管理           | 独自開発アプリやAPI連携           |
| 設定できること   | SSO、ユーザー割り当て                | API権限、リダイレクトURIなど       |
| 代表的な利用シーン | Salesforce, Slack, GitHubなど | Webアプリ、Microsoft Graph等 |
| オブジェクトの関係 | サービスプリンシパル（実体）              | アプリケーションオブジェクト（設計図）     |

**ずんだもん**  
ずん子ちゃん、ありがとうなのだ！  

---

# 「エンタープライズアプリケーション」と「アプリの登録」の比較表

Azure Active Directory（Entra）での「エンタープライズアプリケーション」と「アプリの登録」は、用途や管理対象が異なります。以下の表でその違いをわかりやすく整理します。

|項目|エンタープライズアプリケーション|アプリの登録|
|---|---|---|
|主な用途|既存のSaaSアプリや外部アプリの統合（SSO、プロビジョニング等）|独自開発アプリやAPI連携のためのアプリの公開・利用|
|代表的な利用シーン|Salesforce, Slack, GitHubなどのSaaSを組織に追加し管理|Microsoft Graph API等にアクセスするアプリの開発・登録|
|管理対象|サービスプリンシパル（テナント内のアプリインスタンス）|アプリケーションオブジェクト（アプリの雛形）|
|ユーザー割り当て・管理|ユーザーやグループへのアクセス権割り当てが可能|直接は不可。登録後、エンタープライズアプリから設定|
|SSO（シングルサインオン）|主にこちらで設定（SAML, OIDC, SCIM等）|必要に応じて構成可能|
|APIアクセス権限設定|基本的に不可（割り当てのみ）|可能（Microsoft Graph等のAPI権限を設定）|
|登録方法|Azureポータル＞エンタープライズアプリケーション＞新規追加|Azureポータル＞アプリの登録＞新規登録|
|オブジェクトの関係|サービスプリンシパル（アプリの登録で自動生成されることも）|アプリケーションオブジェクト（1つ、雛形となる）|
|代表的な設定項目|アクセス割り当て、SSO構成、プロビジョニング|リダイレクトURI、証明書・シークレット、API権限等|
|どちらを使うべきか|組織ユーザーに外部/既存アプリを使わせたい場合|独自アプリやAPI連携を開発・公開したい場合|

## まとめると

- 「アプリの登録」を行うと、そのアプリのサービスプリンシパルが「エンタープライズアプリケーション」として自動的に作成されます。つまり、「アプリの登録」はアプリの雛形（アプリケーションオブジェクト）、「エンタープライズアプリケーション」は実際にテナントで動作するインスタンス（サービスプリンシパル）を管理します。
    
- どちらを使うかは「何をしたいか」で決めます。SaaSや外部サービスのSSOなら「エンタープライズアプリケーション」、独自開発やAPI利用なら「アプリの登録」です。    



# PowerAppsはどっちになる

<table>
  <tr>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/c0f938e8-bc8c-40c7-8ba6-db76fe6fe150.png" alt="Image 1" width="150"></td>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/40ea5f5b-72da-453c-8c50-4fcc4309150e.png" alt="Image 2" width="160"></td>
  </tr>
</table>

**ずんだもん**  
ずん子ちゃん、PowerAppsは「エンタープライズアプリケーション」と「アプリの登録」どっちになるのだ？

**東北ずん子**  
いい質問だね！  
PowerAppsは、Microsoftが提供するSaaS型の業務アプリ開発サービスだから、Entra上では「エンタープライズアプリケーション」として扱われるわよ。

**ずんだもん**  
じゃあ、ユーザーやグループへの割り当てやSSOの設定も「エンタープライズアプリケーション」からするのだ？

**東北ずん子**  
その通り！PowerApps自体は既成のSaaSアプリとしてEntraに登録されているから、アクセス権の割り当てや管理は「エンタープライズアプリケーション」から行うの。

**ずんだもん**  
でも、自分でPowerApps用のカスタムコネクタやAPI連携を作りたいときは？

**東北ずん子**  
その場合は「アプリの登録」を使うよ！  
自作のPowerAppsやカスタムコネクタがMicrosoft GraphなどのAPIにアクセスする場合、「アプリの登録」でアプリケーションオブジェクトを作って、必要な権限を設定するのよ。

|利用シーン|該当する管理項目|
|---|---|
|PowerApps本体の利用・管理|エンタープライズアプリケーション|
|カスタムAPIやコネクタの登録|アプリの登録|


**ずんだもん**  
つまり、PowerApps本体は「エンタープライズアプリケーション」、自作API連携は「アプリの登録」なのだ！

# PowerShellコマンドのちがい(Graph)

| 管理対象             | モジュール           | 代表的なコマンド例                                                                                                                                | 主な用途・説明                             |
| ---------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
| エンタープライズアプリケーション | Microsoft Graph | Get-MgServicePrincipal  <br>New-MgServicePrincipal  <br>Get-MgServicePrincipalAppRoleAssignment                                          | エンタープライズアプリの管理、役割割り当てなど |
| アプリの登録           | Microsoft Graph | New-MgApplication  <br>Get-MgApplication  <br>Set-MgApplication  <br>Remove-MgApplication                                                | アプリ登録、プロパティ・権限・シークレット管理 |

## 補足

- Microsoft Graph PowerShell SDKは今後推奨される新しい管理方法です。
    
- エンタープライズアプリケーションは「ServicePrincipal」系コマンド、アプリの登録は「Application」系コマンドを使います。
    
- どちらもGraph対応ですが、コマンド名と管理対象が異なるため、用途に応じて使い分けます。

## 出力イメージと用途（シンプル表）

|コマンド|主な出力項目例|利用用途（現場でよく使うケース）|
|---|---|---|
|**Get-MgServicePrincipal**|DisplayName  <br>SignInAudience  <br>PublisherName|テナント内で実際に使われているアプリ（SaaSや自社開発）の一覧取得  <br>ユーザーやグループの割り当て状況確認、SSO設定の確認|
|**Get-MgApplication**|DisplayName  <br>SignInAudience  <br>PublisherDomain|自分たちで登録・管理しているアプリの設計図一覧取得  <br>API権限やリダイレクトURI、シークレットなどの設定確認・管理|


## 出力イメージ（ダミーデータ）

```
Get-MgServicePrincipal
```

|DisplayName|SignInAudience|PublisherName|
|---|---|---|
|Microsoft Graph|AzureADMultipleOrgs|Microsoft|
|PowerApps|AzureADMultipleOrgs|Microsoft|
|Contoso HR System|AzureADMyOrg|Contoso IT Dept|

```
Get-MgApplication
```

|DisplayName|SignInAudience|PublisherDomain|
|---|---|---|
|Contoso Web App|AzureADandPersonalMicrosoftAccount|contoso.com|
|API Connector|AzureADMyOrg|api.contoso.net|
|Mobile Auth Service|AzureADMultipleOrgs|auth.contoso.jp|


## 利用シーンまとめ

::: note
- **Get-MgServicePrincipal**  
    →「このテナントで実際に動いている（ユーザー割り当てやSSO対象となる）アプリ一覧を知りたいとき」に使う
    
- **Get-MgApplication**  
    →「自分たちがEntraに登録したアプリの“設計図”やAPI連携設定を確認したいとき」に使う
:::   

**ずんだもん**  
「エンタープライズアプリケーション」と「アプリの登録」では、PowerShellコマンドが違うのだな！

**東北ずん子**  
その通り！

- アプリの登録は「Application」コマンド
    
- エンタープライズアプリケーションは「ServicePrincipal」コマンド  
    を使い分ければOKだよ！

# なぜMSは「アプリの登録」と「エンタープライズアプリケーション」を分けているのか？

<table>
  <tr>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/c0f938e8-bc8c-40c7-8ba6-db76fe6fe150.png" alt="Image 1" width="150"></td>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/40ea5f5b-72da-453c-8c50-4fcc4309150e.png" alt="Image 2" width="160"></td>
  </tr>
</table>


**ずんだもん**  
なんでMicrosoftは、こんなややこしく「アプリの登録」と「エンタープライズアプリケーション」を分けているのだ？  
一つでよくないのだ？

**東北ずん子**  
実は、これにはちゃんと理由があるんだよ！  
Entraでは、

- **アプリの登録（App registration）**：アプリの「設計図」や「雛形」を作る場所
    
- **エンタープライズアプリケーション（Enterprise applications）**：実際にテナント（組織）で使う「実体（インスタンス）」を管理する場所  
    という役割分担があるんだ。
    

**ずんだもん**  
設計図と実体…？

**東北ずん子**  
そう！  
例えば、同じアプリでも、A社とB社で使い方や設定が違うことがあるよね？  
「アプリの登録」は1つだけど、それを元に各社ごとに「エンタープライズアプリケーション（サービスプリンシパル）」が作られて、それぞれの会社で管理できるようになっているんだよ。

**ずんだもん**  
なるほど！  
つまり「アプリの登録」は“共通の仕様書”、  
「エンタープライズアプリケーション」は“各会社ごとの実際のアプリ”ってことなのだ！

**東北ずん子**  
その通り！  
これを分けておくことで、

::: note
- SaaSベンダーは「アプリの登録」で一度だけアプリを設計
    
- 各会社は「エンタープライズアプリケーション」で自分たちの設定やユーザー管理ができる 
:::
という利便性が生まれるんだよ。
    
## 和訳も一因

**ずんだもん**  
でも、英語の「App registration」と「Enterprise applications」って、日本語訳だと余計わかりにくくなってる気がするのだ…

**東北ずん子**  
確かに！

- 「App registration」は直訳すると「アプリの登録」だけど、実際は**アプリの設計図を登録する**って意味。
    
- 「Enterprise applications」は直訳すると「エンタープライズアプリケーション」だけど、実際は**組織で使うアプリの実体**って意味。
    

日本語だと「登録」と「アプリケーション」だけで違いが伝わりにくくて、混乱しやすいんだよね。

# その他について

<table>
  <tr>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/c0f938e8-bc8c-40c7-8ba6-db76fe6fe150.png" alt="Image 1" width="150"></td>
    <td><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/40ea5f5b-72da-453c-8c50-4fcc4309150e.png" alt="Image 2" width="160"></td>
  </tr>
</table>

## マルチテナント


**ずんだもん**
ずん子ちゃん、「アプリの登録」って1回作れば、他の会社でも使えるって本当なのだ？

**東北ずん子**
そうだよ！
「アプリの登録」をマルチテナント設定にしておけば、他のAzureテナントでもそのアプリを使えるようになるんだ。

**ずんだもん**
どうやって他のテナントで使えるようになるのだ？

**東北ずん子**
他のテナントでアプリに最初にサインインすると、その時にサービスプリンシパル（エンタープライズアプリケーション）が自動で作られるの。
つまり、「アプリの登録」は共通の設計図で、各テナントでのエンタープライズアプリが**実体（インスタンス）**になる感じね。

**ずんだもん**
なるほど！じゃあSaaSベンダーが一度アプリを登録すれば、いろんなお客さんに使ってもらえるのだ？

**東北ずん子**
その通り！
だからマルチテナントのアプリ登録は、SaaSの基本設計なのよ。

## アクセス制御

**ずんだもん**
ところで、「アプリの登録」って、ユーザーに使ってもらう設定もできるのだ？

**東北ずん子**
実はそれはできないの。
「アプリの登録」にはユーザーやグループの割り当て機能がないのよ。アクセス制御は「エンタープライズアプリケーション」でやるの。

**ずんだもん**
じゃあ、ユーザーがそのアプリを使えるようにするには？

**東北ずん子**
「エンタープライズアプリケーション」でユーザーやグループを割り当てたり、条件付きアクセスの設定をしたりするの。
これはテナントごとに違う設定ができるから、柔軟なんだよ。

## Graphのアプリ登録

**ずんだもん**
あと、Microsoft GraphってAPIを使うには、「アプリの登録」って必要なのだ？

**東北ずん子**
うん、必要だよ！
Microsoft Graphとか、SharePoint APIみたいなMicrosoftのAPIを呼び出すには、アプリをEntraで登録しておく必要があるの。

**ずんだもん**
なんでなのだ？

**東北ずん子**
APIを使うには、アプリにちゃんと権限を与えて、トークンを発行してもらう仕組みが必要だからなんだ。
その設定ができるのが、「アプリの登録」なの。

**ずんだもん**
つまり、「アプリの登録」って、APIを使うときの“入り口”なのだな！

**東北ずん子**
その通り！
Microsoft Graphや外部サービスと安全に連携するには、「アプリの登録」で認証と認可の設定をちゃんと行うことが大事なの♪

# まとめ

- 設計図（App registration）と実体（Enterprise applications）を分けることで、SaaSベンダーと利用企業の両方にとって便利な仕組みになっている


**ずんだもん**  
やっとスッキリしたのだ！  
ありがとう、ずん子ちゃん！

**東北ずん子**  
どういたしまして！  
「設計図」と「実体」って覚えると、もう迷わないよ♪


# 参考サイト

https://jpazureid.github.io/blog/azure-active-directory/enterprise-applications-app-registrations/

https://cloudsteady.jp/blog/2022/02/20/54518/

https://tech-lab.sios.jp/archives/37743

https://www.kentsu.website/ja/posts/2022/aad_app/

https://jpazureid.github.io/blog/azure-active-directory/oauth2-application-resource-and-api-permissions/

https://blog.vaibhavgujral.com/understanding-the-difference-between-application-registration-and-enterprise-application-in-azure-7b6fcc8aa441

# 参考文献・利用キャラクター

- ずんだもん：[VOICEVOX:ずんだもん](https://voicevox.hiroshiba.jp/)
本記事で使用しているキャラクター画像の著作権は、それぞれの権利者に帰属します。
非商用目的での利用に基づき掲載しています。