> ## Documentation Index
> Fetch the complete documentation index at: https://hc.saas-manager.biz.nuro.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# 2-1.ブラウザ拡張機能 セットアップガイド（Windows）

> ブラウザ拡張機能をWindows環境（Google Chrome/Microsoft Edge）へ展開するための手順をご案内します。

## 第1章 概要

### 本資料の目的

本資料は、ブラウザ拡張機能を Windows 環境に展開するためのセットアップガイドです。Active Directory の GPO（グループポリシー）または MDM を利用した一括配布と、個別端末での手動インストールの両方をカバーします。

### 対象読者

IT 管理者（Active Directory / Entra ID 管理者）、情報システム部門の担当者を想定しています。

### 前提条件

Windows 10 以降の端末で、Google Chrome または Microsoft Edge がインストール済みであることが必要です。GPO 配布の場合は Active Directory ドメイン環境と GPO 管理権限、MDM 配布の場合は対象 MDM の管理権限が必要です。

拡張機能のダウンロードとデータ送信のため、以下の通信経路が確保されている必要があります。

| 通信先                           | ポート         | 用途                      |
| ----------------------------- | ----------- | ----------------------- |
| `clients2.google.com`         | 443 (HTTPS) | Chrome 拡張機能のダウンロード / 更新 |
| `edge.microsoft.com`          | 443 (HTTPS) | Edge 拡張機能のダウンロード / 更新   |
| `api.itmc.i.moneyforward.com` | 443 (HTTPS) | データ送信 / API アクセス        |
| `itmc.i.moneyforward.com`     | 443 (HTTPS) | Web アクセス                |

アウトバウンド通信に制限がかかっているネットワーク環境では、プロキシや Firewall の許可リストにこれらのドメインを追加してください。通信確認の具体的な方法は第5章を参照してください。

### 免責事項

GPO / MDM の設定は各社の環境により大きく異なります。本資料に記載する配布手順は参考情報としてご利用ください。拡張機能自体の動作は検証済みですが、配布設定が既存のポリシーや環境に影響を与えないことを保証するものではありません。実施前に検証環境でのテストを推奨します。

***

## 第2章 構成の全体像

セットアップは **レジストリ** と **ユーザー環境変数** の2つの層で構成されます。レジストリには「ブラウザ向けのポリシー」を書き、ユーザー環境変数には「ユーザーごとに違う値（メールアドレス）」を持たせます。ブラウザがポリシーを読むときに、レジストリ値に書かれた `%USEREMAIL%` がユーザー環境変数で展開されるため、1つのレジストリ値から各ユーザーに正しい値が届く仕組みです。

### 2.1 データフロー

```text theme={null}
┌─────────────────────────────────────────────────────────────┐
│  配布フェーズ（管理者権限: GPO / MDM / bat）                │
│                                                             │
│  レジストリに書く:                                          │
│    [HKLM] ExtensionSettings\<ID>                            │
│           installation_mode="force_installed"               │
│           update_url="https://..."                          │
│    [HKCU] 3rdparty\extensions\<ID>\policy                   │
│           ApiKey, CreatedDate, OrganizationID               │
│           UserEmail = "%USEREMAIL%"   ← リテラル参照         │
│           UserPC    = "%COMPUTERNAME%"                      │
│                                                             │
│  ユーザー環境変数に書く（ログオンスクリプト）:              │
│    USEREMAIL = user@example.com   ← 各ユーザーの実値         │
└─────────────────────────────────────────────────────────────┘
              │
              ▼
┌─────────────────────────────────────────────────────────────┐
│  実行フェーズ（ユーザーログオン時）                         │
│                                                             │
│  ブラウザ起動 → ポリシー読み込み → %USEREMAIL% を展開        │
│                                                             │
│  拡張機能が受け取る値:                                      │
│    ApiKey         = eyJhbG...                               │
│    UserEmail      = user@example.com   ← 展開後の実値        │
│    UserPC         = DESKTOP-ABC1234                         │
└─────────────────────────────────────────────────────────────┘

```

### 2.2 レジストリツリー

ExtensionSettings（強制インストール指示）は **HKLM**、3rdparty/policy（拡張機能に渡すパラメーター）は **HKCU** に配置するのが推奨構成です\[※1]。

#### Chrome

```text theme={null}
HKLM\Software\Policies\Google\Chrome\
  └─ ExtensionSettings\bdeanmdeckegmfjpbnngomallcedjold\
       installation_mode = "force_installed"
       update_url        = "https://clients2.google.com/service/update2/crx"

HKCU\Software\Policies\Google\Chrome\
  └─ 3rdparty\extensions\bdeanmdeckegmfjpbnngomallcedjold\policy\
       ApiKey         = <管理画面から取得>
       CreatedDate    = 2025-12-11T00:00:00Z
       OrganizationID = <管理画面から取得>
       UserEmail      = %USEREMAIL%
       UserPC         = %COMPUTERNAME%

```

#### Edge

```text theme={null}
HKLM\Software\Policies\Microsoft\Edge\
  └─ ExtensionSettings\flggmhlpipcopffjfkpgkoljghfkmfcg\
       installation_mode = "force_installed"
       update_url        = "https://edge.microsoft.com/extensionwebstorebase/v1/crx"

HKCU\Software\Policies\Microsoft\Edge\
  └─ 3rdparty\extensions\flggmhlpipcopffjfkpgkoljghfkmfcg\policy\
       ApiKey         = <管理画面から取得>
       CreatedDate    = 2025-12-11T00:00:00Z
       OrganizationID = <管理画面から取得>
       UserEmail      = %USEREMAIL%
       UserPC         = %COMPUTERNAME%

```

### 2.3 パラメーター一覧

| パラメーター           | 種別  | 用途          | 値のソース                   |
| ---------------- | --- | ----------- | ----------------------- |
| `ApiKey`         | 固定値 | 認証トークン      | 管理画面                    |
| `CreatedDate`    | 固定値 | ポリシー作成日時    | 管理画面                    |
| `OrganizationID` | 固定値 | 組織 ID       | 管理画面                    |
| `UserEmail`      | 動的  | 利用者のメールアドレス | ユーザー環境変数 `USEREMAIL`    |
| `UserPC`         | 動的  | 端末ホスト名      | システム環境変数 `COMPUTERNAME` |

値の取得方法の詳細は 3.1 を参照してください。

***

## 第3章 設定手順

### 3.1 管理画面からの値取得

ログインし、「設定 > 組織 > ブラウザ拡張機能 > 拡張機能のポリシー」を開きます。ポリシーを生成またはコピーし、クリップボードの内容をテキストエディタに貼り付けて `ApiKey`、`CreatedDate`、`OrganizationID` の3つの値を控えます。これら3つは全端末で共通の固定値です。

### 3.2 配布方式の選択

運用環境によって以下のいずれかを選びます。

* 3.3 GPO による配布: AD ドメイン環境。Registry Preferences で直接配信する方式を推奨します。
* 3.4 MDM による配布: Intune など。各 MDM 製品のスクリプトまたはレジストリ配布機能を使います。
* 3.5 スタンドアロン PC での手動実行: AD / MDM 管理下にない単独 PC。同梱 bat を管理者権限で実行します。

### 3.3 GPO による配布

GPO 配布では、2.2 のレジストリツリーを **Computer Configuration**（HKLM）と **User Configuration**（HKCU）の両方に分けて配信します。`USEREMAIL` 環境変数を設定するログオンスクリプトも合わせて配布します。

#### 3.3.1 HKLM 側（ExtensionSettings）の配信

GPMC で対象 GPO を編集し、`Computer Configuration → Preferences → Windows Settings → Registry` を開きます。全項目共通で **Hive = `HKEY_LOCAL_MACHINE`、Action = `Update`**\[※2] で以下4項目を新規作成します。

**Chrome ExtensionSettings**

Key Path: `Software\Policies\Google\Chrome\ExtensionSettings\bdeanmdeckegmfjpbnngomallcedjold`

| Value name          | Value type | Value data                                        |
| ------------------- | ---------- | ------------------------------------------------- |
| `installation_mode` | REG\_SZ    | `force_installed`                                 |
| `update_url`        | REG\_SZ    | `https://clients2.google.com/service/update2/crx` |

**Edge ExtensionSettings**

Key Path: `Software\Policies\Microsoft\Edge\ExtensionSettings\flggmhlpipcopffjfkpgkoljghfkmfcg`

| Value name          | Value type | Value data                                                |
| ------------------- | ---------- | --------------------------------------------------------- |
| `installation_mode` | REG\_SZ    | `force_installed`                                         |
| `update_url`        | REG\_SZ    | `https://edge.microsoft.com/extensionwebstorebase/v1/crx` |

> ExtensionSettings は HKLM と HKCU の両方に書くと競合して片方が無視されます\[※3]。必ず HKLM のみに配置してください。

#### 3.3.2 HKCU 側（3rdparty/policy）の配信

`User Configuration → Preferences → Windows Settings → Registry` を開きます。全項目共通で **Hive = `HKEY_CURRENT_USER`、Action = `Update`** で以下10項目を新規作成します。

**Chrome 3rdparty Policy**

Key Path: `Software\Policies\Google\Chrome\3rdparty\extensions\bdeanmdeckegmfjpbnngomallcedjold\policy`

| Value name       | Value type      | Value data                |
| ---------------- | --------------- | ------------------------- |
| `ApiKey`         | REG\_SZ         | （管理画面から取得した値）             |
| `CreatedDate`    | REG\_SZ         | `2025-12-11T00:00:00Z` など |
| `OrganizationID` | REG\_SZ         | （管理画面から取得した値）             |
| `UserEmail`      | REG\_EXPAND\_SZ | `%USEREMAIL%`             |
| `UserPC`         | REG\_EXPAND\_SZ | `%COMPUTERNAME%`          |

**Edge 3rdparty Policy**

Key Path: `Software\Policies\Microsoft\Edge\3rdparty\extensions\flggmhlpipcopffjfkpgkoljghfkmfcg\policy`

| Value name       | Value type      | Value data                |
| ---------------- | --------------- | ------------------------- |
| `ApiKey`         | REG\_SZ         | （管理画面から取得した値）             |
| `CreatedDate`    | REG\_SZ         | `2025-12-11T00:00:00Z` など |
| `OrganizationID` | REG\_SZ         | （管理画面から取得した値）             |
| `UserEmail`      | REG\_EXPAND\_SZ | `%USEREMAIL%`             |
| `UserPC`         | REG\_EXPAND\_SZ | `%COMPUTERNAME%`          |

> 3rdparty/policy を HKLM と HKCU の両方に書かないでください\[※4]。同じ値名が両方に存在すると HKLM が優先され、HKCU 側で展開した `UserEmail` の実値が負けます。

#### 3.3.3 `USEREMAIL` 環境変数の配信（ログオンスクリプト）

`UserEmail` を `%USEREMAIL%` 参照で配信するには、各ユーザーのログオン時に `USEREMAIL` 環境変数を設定してください\[※5]。同梱の `set_useremail_env.bat` を SYSVOL に配置し、GPO のログオンスクリプトとして登録します。

1. `set_useremail_env.bat` の冒頭 `DomainPart` 変数を環境のドメイン名（例: `example.com`）に編集
2. SYSVOL に配置: `\\<DOMAIN>\SYSVOL\<DOMAIN>\scripts\admina\set_useremail_env.bat`
3. GPMC で対象 GPO を編集し、`User Configuration → Policies → Windows Settings → Scripts (Logon/Logoff) → Logon` にスクリプトのパスを追加

スクリプトは `whoami /upn` で UPN 取得を試み、失敗時は `USERNAME@DomainPart` にフォールバックして、`setx USEREMAIL "<値>"` でユーザー環境変数に永続化します。

#### 3.3.4 代替: スタートアップスクリプト方式

GPO Preferences の代わりに bat スクリプトで配信する方法もあります。`edge_chrome_extension.bat` を SYSVOL に配置し、スタートアップスクリプトとして登録します。bat 内の定数部と `ExtSettingsRoot` / `PolicyRoot` 変数を編集してください（3.5 参照）。

#### 3.3.5 GPO の適用

GPO を対象 OU にリンクし、端末側で `gpupdate /force` を実行するか、再ログオンで反映します。

GPO 設定の詳細は以下の参考資料も参照してください: [WindowsにGPOで配布する手順](/it-management/shadow-it/qegqblx598-windows-gpo)

### 3.4 MDM による配布

MDM（Intune 等）を使用する場合は、各製品のスクリプト配布機能またはレジストリ配布機能で 2.2 のレジストリツリーを配布します。

* スクリプト配布: `edge_chrome_extension.bat` を配布・実行（bat の設定は 3.5 参照）
* レジストリ配布: MDM のレジストリ管理機能で 2.2 のキーと値を直接定義

MDM から配信する場合、スクリプトは通常 SYSTEM アカウントで実行されます。この場合 HKCU が想定と違うハイブを指す点に注意が必要です\[※6]。具体的な設定手順はご利用の MDM 製品のドキュメントに従ってください。

### 3.5 スタンドアロン PC での手動実行

AD / MDM 管理下にない単独の Windows PC で手動セットアップする場合、同梱の `edge_chrome_extension.bat` を使います。スタンドアロン構成でも、2.2 の推奨構成と同じく **ExtensionSettings は HKLM、3rdparty/policy は HKCU** に書き込みます。

スタンドアロンでは対象ユーザーが自分で bat を実行するため、`UserEmailMode=DIRECT`（スクリプト内で `whoami /upn` から自動解決）を使えます。GPO/MDM 配布のように `USEREMAIL` 環境変数を別途設定する必要はありません。

#### 3.5.1 スクリプトの編集

`edge_chrome_extension.bat` の冒頭定数部を編集します。

| 変数                | 設定内容                                    | スタンドアロン推奨値                |
| ----------------- | --------------------------------------- | ------------------------- |
| `DomainPart`      | メールアドレスの `@` 以降                         | `example.com`             |
| `UserEmailMode`   | `DIRECT`（スクリプトで解決）または `ENV_REF`（環境変数参照） | `DIRECT`                  |
| `ApiKey`          | 3.1 で取得した値                              | （管理画面から）                  |
| `CreatedDate`     | 3.1 で取得した値                              | `2025-12-11T00:00:00Z` など |
| `OrganizationID`  | 3.1 で取得した値                              | （管理画面から）                  |
| `ExtSettingsRoot` | ExtensionSettings の配信先                  | `HKLM`                    |
| `PolicyRoot`      | 3rdparty/policy の配信先                    | `HKCU`                    |

<Info>
  `PolicyRoot=HKLM` は bat スクリプトで拒否されます。3rdparty/policy はユーザー固有のパラメーター（`UserEmail` など）を保持する領域なので、ハイブは常に `HKCU` を指定してください。
</Info>

#### 3.5.2 実行方法

**対象ユーザー自身がローカル管理者権限を持つ場合**：bat ファイルを右クリック →「管理者として実行」します。`PolicyRoot=HKCU` 指定で、対象ユーザーの HKCU に書き込まれます。

**対象ユーザーが管理者権限を持たず、別アカウントの管理者の資格情報で昇格実行する場合**：「管理者として実行」で別アカウントの資格情報を使うと、プロセスが昇格用アカウントのコンテキストで動くため、HKCU は昇格に使った管理者アカウントのハイブを指してしまいます\[※6]。この場合は GPO 方式または `runas /user:<対象ユーザー> ...` 相当の方法で対象ユーザー自身のコンテキストで実行してください。

#### 3.5.3 GPO/MDM 配信との違い

スタンドアロンと GPO/MDM 配信でレジストリ配置先（ExtensionSettings=HKLM、3rdparty/policy=HKCU）は同じです。違いは主に `UserEmail` の解決方法で、スタンドアロンは `UserEmailMode=DIRECT`（実行時に解決）、GPO/MDM は `ENV_REF`（`%USEREMAIL%` を実行時に各ユーザーの環境変数で展開）を使います（※5）。

***

## 第4章 動作確認

### 4.1 インストールスクリプトの出力確認

`edge_chrome_extension.bat` を手動実行した場合、実行中に各ステップの結果が表示されます。推奨構成（ExtensionSettings=HKLM、3rdparty/policy=HKCU）での正常出力例:

```text theme={null}
==============================
 Edge + Chrome Extension Initializer
==============================
  ExtensionSettings root: HKLM (HKEY_LOCAL_MACHINE)
  3rdparty policy root  : HKCU (HKEY_CURRENT_USER)

[1] Generating UserEmail ...
  Got from whoami /upn
  UserEmail = user@example.com

[2] Reading hostname for UserPC ...
  Got from COMPUTERNAME
  UserPC = DESKTOP-ABC1234

[3] Writing Chrome ExtensionSettings (HKLM) and 3rdparty policy (HKCU)...
The operation completed successfully.
  Chrome extension and policy applied.

[4] Writing Edge ExtensionSettings (HKLM) and 3rdparty policy (HKCU)...
The operation completed successfully.
  Edge extension and policy applied.

[5] Registry values written:
  ...(レジストリ値一覧が表示されます)...

==============================
           FINISHED
==============================

```

`[1]` から `[5]` の各ステップでエラーが表示されていないこと、および `[5]` のレジストリ値一覧で各パラメーターが意図通りに書かれていることを確認します。

### 4.2 チェックスクリプトによる確認

同梱の `check_extension_registry.bat` はレジストリへの書き込みを行わず、HKCU と HKLM の両方をスキャンして結果を表示する読み取り専用ツールです。

推奨構成で配信した場合の正常な出力は、**HKLM 側に ExtensionSettings のみ `[OK]`、HKCU 側に 3rdparty/policy のみ `[OK]` が並び、反対側は `[--] NOT SET`** という形になります。`[--]` が出ている項目は「意図的にそちらに配置していない」ことを示しているだけで、エラーではありません。

```text theme={null}
================================================================
 Extension Registry Checker  (read-only)
================================================================
----------------------------------------
 HKCU  (HKEY_CURRENT_USER)
----------------------------------------
 [Chrome ExtensionSettings]
  [--] installation_mode  NOT SET
  [--] update_url         NOT SET
 [Chrome 3rdparty Policy]
  [OK] ApiKey = xxxx...xxxx
  [OK] CreatedDate = 2025-12-11T00:00:00Z
  [OK] OrganizationID = <YOUR_ORG_ID>
  [OK] UserEmail = user@example.com
  [OK] UserPC = DESKTOP-ABC1234
 [Edge ExtensionSettings]
  [--] installation_mode  NOT SET
  [--] update_url         NOT SET
 [Edge 3rdparty Policy]
  [OK] ApiKey = xxxx...xxxx
  ...

----------------------------------------
 HKLM  (HKEY_LOCAL_MACHINE)
----------------------------------------
 [Chrome ExtensionSettings]
  [OK] installation_mode = force_installed
  [OK] update_url        = https://clients2.google.com/service/update2/crx
 [Chrome 3rdparty Policy]
  [--] ApiKey  NOT SET
  [--] ...  NOT SET
 [Edge ExtensionSettings]
  [OK] installation_mode = force_installed
  [OK] update_url        = https://edge.microsoft.com/extensionwebstorebase/v1/crx
 [Edge 3rdparty Policy]
  [--] ApiKey  NOT SET
  [--] ...  NOT SET

```

スタンドアロン運用でも上記と同じ「HKLM=ExtensionSettings、HKCU=3rdparty/policy」のレイアウトが正しい状態です。スタンドアロン特有のレイアウト（全 HKLM 等）はありません。

### 4.3 拡張機能の表示確認

ブラウザがポリシーを再読み込みしたあと、拡張機能がインストールされていることを確認します。

* Chrome: `chrome://extensions`
* Edge: `edge://extensions`

Admina 拡張機能が一覧に表示され、有効になっていれば成功です。強制インストールされた拡張機能は「組織によってインストール済み」と表示されます。

### 4.4 パラメーター受け渡しの確認

Chrome は `chrome://policy` を開き、「ポリシーを再読み込み」をクリックすると Admina 拡張機能のポリシーとして `ApiKey`、`CreatedDate`、`OrganizationID`、`UserEmail`、`UserPC` が一覧表示されます。

Edge は `edge://policy` に拡張機能パラメーターが表示されない仕様となっており\[※7]、別の方法で確認します。詳細は Appendix A を参照してください。

すべての値が正しく確認できれば、セットアップは完了です。最小5分から最大30分程度でデータの送信が開始されます。

***

## 第5章 疎通確認・データ確認

### 5.1 疎通確認

パラメーターが正しく設定・反映されている場合、最大30分程度でデータがサーバーに届きます。「インテグレーション > イベントログ」で、ソースが「Chrome」「Edge」のエントリが登場することを確認してください。

### 5.2 不通の場合の調査

ブラウザで拡張機能のアイコンをクリックし、設定（⚙️）から設定ページを開きます。警告が表示されていなければデータは送信されているはずです。警告が出ている場合は、スクリーンショットと Diag データを添えてチャットからお問い合わせください。[Diag データの確認方法](/it-management/shadow-it/344geptwee-diag)

### 5.3 ネットワーク調査

以下の通信先への疎通を確認します。

* `api.itmc.i.moneyforward.com:443`（データ送信先 / API アクセス）
* `itmc.i.moneyforward.com:443`（Web アクセス）

PowerShell での確認例:

```text theme={null}
Test-NetConnection -ComputerName api.itmc.i.moneyforward.com -Port 443

```

成功時は1秒以内に応答があります。Waiting が長い場合は、経路上のどこかで詰まっている可能性があります。

***

## 第6章 技術解説（注釈の詳細）

本章では第2〜3章で示した注釈（※1〜※7）の背景を説明します。運用上の理由を理解したい場合、またはトラブルシューティングで原因を切り分ける際に参照してください。

### ※1 なぜ ExtensionSettings は HKLM、3rdparty/policy は HKCU なのか

レジストリに書ける場所は HKLM（マシン全体）と HKCU（ログインユーザー個別）の2種類があります。この2つは性質が違うため、ポリシーの種類によって使い分けます。

\*\*ExtensionSettings は「マシン単位で共通する設定」\*\*です。どのユーザーがログインしても「この拡張機能を強制インストールせよ」という指示は同じなので、HKLM に1回書けば十分です。全端末共通の値なので管理が単純になります。

\*\*3rdparty/policy は「ユーザーコンテキストで評価されるパラメーター」\*\*です。特に `UserEmail` はユーザーごとに違う値を渡す必要があります。HKCU へ書いてユーザー環境変数 `USEREMAIL` で展開する構成にすれば、レジストリには `%USEREMAIL%` という参照を1種類だけ書いておけば、ログインユーザーごとに正しい実値へ解決されます。

両方まとめて HKLM に書くことも技術的には可能ですが、その場合 `UserEmail` はマシン全体で固定値になります（共用 PC で問題）。両方 HKCU にすると、配信時のプロセスコンテキスト（※6）の影響を受けやすくなります。役割分担するのが運用上もっとも扱いやすい構成です。

### ※2 なぜ Action は Update なのか

GPO Preferences の Registry Item には以下の Action があります。

* Create: 値が存在しないときだけ作る。既存の値はスキップ。
* Update: 存在しなければ作成、存在すれば上書き。**ただし同じキー配下の他の値は保持される。**
* Replace: キーごと削除して再作成。**同じキー配下の他の値も巻き添えで消える。**
* Delete: 削除。

今回 Update を推奨する理由は3つあります。1つ目は、`ApiKey` など将来変更する可能性がある値を確実に最新化できる（Create だと初回のみ適用）。2つ目は、Replace のように「同じキー配下の他の値を消す」副作用がない。3つ目は、初回配信でも「存在しなければ作成」として機能するため、初回・再配信どちらも同じ Action で済みます。

### ※3 ExtensionSettings を HKLM と HKCU の両方に書くとなぜ競合するのか

ExtensionSettings は内部的に **辞書（dict）型のポリシー** として扱われます。ブラウザはレジストリ上のサブキーを読み込む際、拡張機能ID単位のサブキーをすべて集約して1つの大きな JSON 辞書にしてから検査します。

Chromium のポリシー優先順位は「Platform/Machine（HKLM）> Platform/User（HKCU）」と決まっていて、HKLM と HKCU の両方に ExtensionSettings が存在する場合、**HKLM 側の辞書が丸ごと採用され、HKCU 側の辞書は一切マージされません**。たとえば HKLM に拡張機能 A、HKCU に拡張機能 B を別々に書いても、B は無視されます。

`chrome://policy` や `edge://policy` の画面で ExtensionSettings に競合警告（黄色・赤のマーカー）が出る場合はこの状態です。対処は HKLM か HKCU のどちらか一方に統一することです。

なお 3rdparty/policy はこの dict 集約の対象ではなく、値単位で独立しています。そのため HKLM と HKCU で値名が衝突しなければマージされて拡張機能に届きます（※4 も参照）。

### ※4 3rdparty/policy で同じ値名が HKLM と HKCU 両方にあるとどうなるか

3rdparty/policy は ExtensionSettings と違って辞書ごと勝つルールではありませんが、**同じ値名が HKLM と HKCU に両方あると、HKLM が優先**されます。これは Chromium のポリシー優先順位ルール（Machine > User）がそのまま適用されるためです。

本資料の推奨構成では 3rdparty/policy は HKCU のみに配置しているため、この競合は発生しません。ただし過去に HKLM 側にも書いた残骸がある環境では、HKCU の `%USEREMAIL%` 展開値が負けてリテラル文字列のまま拡張機能に届くといった事故になります。配信前に HKLM 側の 3rdparty/policy サブキーが空であることを確認してください。

### ※5 なぜ UserEmail をレジストリに直接書かず、環境変数参照にするのか

GPO Preferences で Computer Configuration（HKLM 側）のレジストリ項目に `%USEREMAIL%` を書くと、展開されずリテラル文字列のまま書かれます。これは **GPO 適用時のプロセスコンテキストが SYSTEM アカウントになる**ためで、ユーザー環境変数である `USEREMAIL` が SYSTEM から見えません。これは Windows のアーキテクチャ上の制約で、回避不可能です。

一方 User Configuration（HKCU 側）の適用はログオンユーザーのコンテキストで行われるため、`%USEREMAIL%` が正しく展開されます。本資料が 3rdparty/policy を HKCU に配置する大きな理由の1つがこれです。

なお `UserPC` に使う `%COMPUTERNAME%` はシステム環境変数なので、HKLM/HKCU どちらに書いても展開されます。`UserEmail` だけが特殊なのは、それが**ユーザー環境変数**だからです。

### ※6 実行ユーザーと HKCU 配信先の不一致（Run as Administrator・MDM 実行の落とし穴）

HKCU に書くとき、「どのユーザーの HKCU に書かれるか」は **スクリプトを実行したプロセスのユーザーコンテキスト**で決まります。対象ユーザー本人が実行しない限り、対象ユーザーの HKCU には書かれません。

具体的に以下の2ケースで問題になります。

1. Run as Administrator で昇格実行した場合: 一般ユーザーが別アカウント（Administrator 等）の資格情報で「管理者として実行」すると、プロセスは Administrator のコンテキストで動きます。HKCU は Administrator のハイブを指し、対象ユーザーのブラウザは当然この値を読めません。
2. MDM や SCCM がシステムアカウントで実行した場合: MDM エージェント経由にてスクリプトが配布されると、多くの場合 `SYSTEM` または MDM 専用のサービスアカウントにより実行されます。HKCU はそのサービスアカウントのハイブを指し、実ユーザーには一切反映されません。

この問題を避けるため、推奨構成では HKCU 側の配信を GPO の User Configuration 経由（ログオンユーザーのコンテキストで適用）で行います。スタンドアロン実行でも、対象ユーザー自身が `runas` などで自分のコンテキスト下で bat を実行することが前提です。bat スクリプトは `PolicyRoot=HKLM` を invalid として拒否する設計のため、ユーザー固有値がマシン全体のハイブに書き込まれる事故は起きません。

### ※7 なぜ edge://policy に 3rdparty/policy が表示されないのか

Edge の `edge://policy` には、ブラウザ本体のポリシーと ExtensionSettings は表示されますが、**3rdparty/extensions//policy 配下のカスタムポリシーは表示されません**。これは Edge の既知の仕様で、Microsoft 公式にも「Edge は 3rdparty レジストリエントリを尊重するが、UI で表示するサポートがない」と明記されています。値自体は拡張機能に正しく届いており、画面で見えないだけです。

Edge で届いているかを確認する代替手段として、拡張機能の Service Worker コンソールから `chrome.storage.managed.get()` API を叩く方法があります。Appendix A.2 を参照してください。

### 補足1: `HKCU\Software\Policies` の権限

HKCU 配下は通常ユーザー自身で読み書き可能ですが、`Software\Policies` サブツリーだけはデフォルト ACL で管理者に制限されています。これは Windows の設計上、ポリシー領域はユーザーが勝手に書き換えられないようにするためです。

したがって本資料の配信手段は、GPO 経由（SYSTEM 権限で実行）、MDM 経由（SYSTEM 権限で実行）、管理者権限での手動実行のいずれかを前提としています。一般ユーザー権限のログオンスクリプトで `HKCU\Software\Policies` に直接書き込もうとしても Access Denied で失敗します。ユーザー側のログオンスクリプトで書けるのは `USEREMAIL` などの**ユーザー環境変数**までで、レジストリポリシー自体は書けません。

### 補足2: 64bit レジストリビュー（/reg:64）

Chrome と Edge は 64bit アプリケーションのため、ポリシーを **64bit レジストリビュー**から読み込みます。通常 cmd.exe から実行される bat は 64bit ビューにアクセスしますが、SCCM や一部の MDM エージェントから 32bit コンテキストで呼び出された場合、HKLM への書き込みが `HKLM\SOFTWARE\WOW6432Node\Policies\...` にリダイレクトされ、ブラウザから読めない場所に書かれます。

同梱のスクリプトは `reg add` と `reg query` すべてに `/reg:64` フラグを付けて、どのコンテキストから呼び出されても 64bit ビューに書き込み・読み取りを行うように実装されています。GPO Preferences からの配信は通常 64bit ビューに直接書かれるため、bat 経由と GPO 経由で書き込み先が一致します。トラブル時の切り分けとして、`HKLM\SOFTWARE\WOW6432Node\Policies\...` に値が入っていないか regedit で確認するのも有効です。

***

## Appendix A ブラウザ上でのポリシー確認方法

### A.1 Chrome: chrome://policy

アドレスバーに `chrome://policy` を入力し、「ポリシーを再読み込み」ボタンをクリックすると最新状態になります。

画面下部の **Extension policies** セクションに、拡張機能ごとに `ApiKey`、`UserEmail` などの値が Source（`Platform`）と Scope（`Machine` / `User`）付きで表示されます。Scope 列で HKLM 由来か HKCU 由来かを判別できます。

### A.2 Edge: 3rdparty/policy の確認方法

Edge の `edge://policy` では ExtensionSettings は表示されますが、3rdparty/policy は表示されません（※7 参照）。値が届いているかを確認するには以下の方法があります。

**方法1: レジストリ直接確認**

`check_extension_registry.bat` を実行するか、regedit で HKCU/HKLM 配下の該当キーを開いて値が入っていることを確認します。書き込まれていれば Edge は読み取っています。

**方法2: chrome.storage.managed API で確認**

拡張機能の Service Worker コンソールから、実際に届いている値を確認できます。

1. `edge://extensions` を開き、開発者モードを ON
2. 対象拡張機能の「詳細」→「Service Worker を検査」をクリック
3. DevTools の Console タブで以下を実行:

```text theme={null}
chrome.storage.managed.get(null, (data) => console.log(data))

```

出力例:

```text theme={null}
{
  ApiKey: "eyJhbGciOiJIUzI1NiIs...",
  CreatedDate: "2025-12-11T00:00:00Z",
  OrganizationID: "99581857",
  UserEmail: "user@example.com",
  UserPC: "MYPC-001"
}

```

値が表示されれば、ポリシーが拡張機能に届いている証拠です。Chrome でも同じ方法が使えます。

**方法3: Diag データで確認**

Diag データから拡張機能に届いているパラメーターを確認できます。[Diag データの確認方法](/it-management/shadow-it/344geptwee-diag)

***

## Appendix B Q\&A

### Q. レジストリ設定後にブラウザの再起動は必要か？

必須ではありません。Chrome / Edge はバックグラウンドで定期的にポリシー設定を再読み込みするため、一定時間の経過後に自動反映されます。即時反映したい場合は、`chrome://policy` または `edge://policy` を開いて「ポリシーを再読み込み」をクリックしてください。

### Q. 拡張機能をアンインストールするには？ GPO から外すだけで消える？

**GPO から項目を外すだけでは消えません**。GPO Preferences の Update / Create アクションで配布した項目は、適用先の端末に「タトゥー」のように残ります（これは Windows のグループポリシー・プレファレンスの仕様です）。削除するには以下のいずれかを実施します。

* GPO で明示的に Delete アクションを配信: 対象4キー（Chrome/Edge の ExtensionSettings と 3rdparty/extensions）について、Action = `Delete`、Value name 空欄で新規 Registry Item を作成。Value name を空にするとキー配下のサブツリーごと削除されます。
* 削除用 bat を配布: `reg delete "HKLM\Software\Policies\Google\Chrome\ExtensionSettings\<ID>" /f /reg:64` のようなコマンドを端末で実行。

ブラウザが次回ポリシーを再読み込みしたタイミングで拡張機能が削除されます。削除用 GPO は全端末への適用が完了するまで（オフライン端末含めて通常は数週間〜1ヶ月）残してから撤去するのが定石です。

### Q. すでに配布済みの端末に再配布した場合はどうなる？

GPO の Action が `Update` なら、レジストリ値が上書きされるだけで二重インストールは発生しません。`ApiKey` や `UserEmail` の更新時も、同じ GPO / スクリプトを再実行すれば安全に上書き反映されます。

### Q. ExtensionSettings に競合警告が出ている場合は？

`chrome://policy` / `edge://policy` で ExtensionSettings のエントリに警告（黄色・赤のマーカー）が出る場合、**HKLM と HKCU の両方に ExtensionSettings が存在**している状態です（※3 参照）。HKLM 側が辞書ごと勝利し、HKCU 側は無視されます。

対処は HKLM か HKCU のどちらか一方に統一することです。本資料の推奨構成に合わせるなら、HKCU 側の ExtensionSettings サブキーを削除してください。

### Q. SKYSEA、LANSCOPE、SS1 などの資産管理ソフトがすでに ExtensionSettings を使っている場合は？

これらの製品も自社の拡張機能を強制配布する仕組みを持ち、ExtensionSettings 配下に設定を書き込むことがあります。Admina 拡張機能は ID が他製品と異なる（Chrome: `bdeanmdeckegmfjpbnngomallcedjold`、Edge: `flggmhlpipcopffjfkpgkoljghfkmfcg`）ため、**サブキー単位では共存できます**。

ただし重要な注意点として、**ブラウザが ExtensionSettings を読み取るレジストリハイブは HKLM か HKCU のどちらか一方**です（※3 のルール）。資産管理ソフトが HKLM に書き込んでいる場合、Admina も HKLM に配信してください。HKCU に書いているなら Admina も HKCU に揃えます。**読み取り側は1箇所しか見ない**ため、配信先を揃えないと片方が無視されます。

現在どちらに書いているかは、regedit で `HKLM\Software\Policies\Google\Chrome\ExtensionSettings` と `HKCU\Software\Policies\Google\Chrome\ExtensionSettings` の両方を覗いて確認してください。

3rdparty/extensions 側は拡張機能 ID 単位で独立しているため、他製品と干渉しません。

### Q. whoami /upn が使えない環境では？

オンプレミス AD のみの環境など UPN が取得できない場合、スクリプトは `USERNAME@DomainPart` にフォールバックします。スクリプト冒頭の `DomainPart` 変数に正しいドメイン名を設定してください。

環境の都合で正しいメールアドレスを組み立てられない場合でも、ここで設定した Email をディレクトリ上でセカンダリアドレスとして登録すれば、ユーザーとのマッチングが可能です。

### Q. Chrome と Edge で拡張機能 ID が違うのはなぜ？

Chrome Web Store と Microsoft Edge Add-ons はそれぞれ独立したストアで、同じ拡張機能でも異なる ID が割り当てられます。配布スクリプトは両方に対応しています。

### Q. 管理者権限なしで `Software\Policies` を書き換えられるか？

書き換えられません。HKCU 配下は通常ユーザー自身で書き込み可能ですが、`Software\Policies` サブツリーだけは例外で、デフォルト ACL により管理者のみに書き込み権限が付与されています。本資料の配信シナリオはすべて、GPO 経由・MDM 経由・管理者権限での手動実行のいずれかを前提としています。

### batファイルのダウンロード

batファイルは、以下よりダウンロードいただけます。

※以下をクリックすると同じタブでファイルが開きます。ダウンロード後は、ブラウザの「戻る」ボタンで本ページにお戻りください。

| [edge\_chrome\_extension.bat.txt](https://files.helpdocs.io/tfhwl4lfdb/other/1778655230908/edge-chrome-extension-ba.txt) | [set\_useremail\_env.bat.txt](https://files.helpdocs.io/tfhwl4lfdb/other/1778655265706/set-useremail-env-ba.txt) | [check\_extension\_registry.bat.txt](https://files.helpdocs.io/tfhwl4lfdb/other/1778655294840/check-extension-registry-ba.txt) |
| ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
