# 大規模なコストの管理と追跡

会社の財務構造をコスト センターにマッピングし、大規模な予算を設定することで、コストを制御し、企業に詳細なレポートを提供します。

コスト センターは、 GitHub コストを会社の財務構造にマッピングすることで追跡および制御するのに役立ちます。

このチュートリアルでは、ユーザー インターフェイスと REST API の両方を使用してコスト センターを計画、作成、管理する方法について説明します。これにより、組織のニーズに最も適したアプローチを決定できます。

## 1. コスト センター戦略を計画する

コスト センターを使用すると、 GitHub リソース (ユーザー、組織、リポジトリ) をグループ化して、個別のコスト追跡とレポートを作成できます。 各コスト センターは、個別のエンティティとしてコストを報告または管理する会社のセグメントを表す必要があります。

Azure請求を使用する場合は、各コスト センターに異なる請求 ID を割り当てることができます。

### 必要なコスト センターを特定する

最適な戦略は、財務報告構造と GitHub のセットアップの両方の複雑さに依存します。 最も簡単なアプローチから始めます。後でいつでもコスト センターを追加できます。

コスト センターを計画するには、次の手順に従います。

1. ```
          **財務エンティティへのマップ**: 内部的に追跡する財務エンティティ (部門、部署、プロジェクト チームなど) ごとに 1 つのコスト センターを作成します。
   ```

2. ```
          **ユーザーの識別**: 各財務エンティティに属するユーザーを一覧表示します。 コスト センターにユーザーを直接割り当てると、ライセンスと製品の使用状況が正しく割り当てられます。
   ```

3. ```
          **組織を特定**する: 各財務エンティティに属する組織を一覧表示します。 組織をコスト センターに割り当てると、アクション、 Codespaces、パッケージ、およびその他の製品の使用状況が正しく割り当てられます。
   ```

4. ```
          **複数の所有権を特定**する: 組織に異なる財務エンティティが所有するリポジトリが含まれている場合は、関連するコスト センターに個々のリポジトリを割り当て、組織の割り当てを解除する計画を立てます。
   ```

> \[!TIP]
> ユーザーがコスト センター A に直接割り当てられ、組織メンバーシップによってコスト センター B の間接的な部分に割り当てられている場合、ライセンス製品のすべてのコストがコスト センター A に割り当てられます。詳細と例については、 [コスト センターでのさまざまな製品の割り当て](/ja/billing/reference/cost-center-allocation) を参照してください。

## 2. UI でコスト センターを作成する

次に、ユーザー インターフェイス (UI) を使用して最初のコスト センターを作成し、コスト センターのしくみを理解します。 例として特定したコスト センターのいずれかを選択します。小規模な金融エンティティから始めるのが最善です。

1. 企業ページに移動してください。 たとえば、GitHub.com の [\[Enterprise\]](https://github.com/settings/enterprises?ref_product=ghec\&ref_type=engagement\&ref_style=text) ページから。
2. ページの上部にある **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-credit-card" aria-label="credit-card" role="img"><path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path></svg> \[Billing and licensing]** をクリックします。
3. ```
          **[コスト センター]** をクリックします。
   ```
4. 右上隅にある **\[New cost center]** (新しいコスト センター) をクリックします。
5. \[名前] の下のテキスト ボックスに、コストを追跡する財務エンティティの名前を入力します。
6. 必要に応じて、この財務エンティティに別のAzure サブスクリプションがある場合は、Azure サブスクリプションをコスト センターに追加して、使用量を直接課金できます。 資格情報は、Azureに対して検証され、アカウントに関連付けられているAzure ID が使用可能であることを確認します。
7. \[ **リソース**] で、このコスト センターの一部として追跡するユーザー、組織、リポジトリを選択します。
8. ```
          **[Create cost center]** (コスト センターの作成) をクリックします。
   ```

新しいコスト センターがアクティブになり、使用量がすぐにコスト センターに属性付けされ始めます。 今後の請求レポートには、このコスト センターが含まれます。このコスト センターには、割り当てられた使用量の `cost_center_name` 列にエントリが含まれます。 また、このコスト センターで使用状況グラフをフィルター処理することもできます。

## 3. 予算を設定してコストを管理する

コスト センターを作成すると、さまざまな財務エンティティのコストを個別に追跡できます。 コストを実際に制御するには、コスト センターに予算を適用する必要があります。

### 予算について

予算を使用すると、支出を制御できます。 各予算:

* 1 つの組織、リポジトリ、コスト センター、または企業全体に適用されます
* 1 つの有料製品、SKU、または SKU のグループの毎月の使用量を制御します
* 使用量を停止するか、予算の上限に達したときにのみアラートを生成するように構成できます
* 予算制限に近づくと、アカウント所有者、課金マネージャー、および指名されたユーザーにアラートを送信できます

### コスト センターの予算を計算する

内部財務計画で、このコスト センターの GitHub に 1 か月の予算を割り当てる場合は、このチームが使用する製品全体に配分する必要があります。

1. ```
          **固定ライセンス コストを計算する**: チームが既に GitHub Enterprise、 GitHub Copilot、 GitHub Secret Protection and GitHub Code Securityに使用しているライセンスのコストを加算します。
   ```
2. ```
          **変動予算の計算**: 内部予算からライセンス コストを減算します。 残りの金額は、プランに含まれるものを超えて使用量ベースの製品に割り当てることができる金額です。
   ```

### コスト センターの予算を作成する

各製品、SKU、またはSKUのグループごとにコスト管理のための予算を作成してください。

1. \[課金とライセンス] タブで、 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-bell" aria-label="bell" role="img"><path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path></svg>**Budgets とアラート** をクリックして、既存の予算を表示します。

2. \[ **新しい予算** ] をクリックして、\[新しい毎月の予算] ページを開きます。

3. \[予算の種類] で、 **製品レベルの予算**、 **SKU レベルの予算**、または **バンドルされた Premium 要求の予算を**選択します。

   * 製品レベルでの支出を制限するには、\[製品レベルの予算] で、ドロップダウンから製品を選択します (たとえば、 Codespaces)。
   * SKU レベルでの支出を制限するには、\[SKU レベルの予算] で、製品と SKU (たとえば、 Copilot と Premium 要求 Copilot ) を選択します。
   * すべての Premium 要求の使用を制限するには、"バンドルされた Premium 要求の予算" を使用します。

4. \[ **次へ]: \[予算** スコープ] を表示するように予算を構成し、この予算の支出範囲を先ほど作成したコスト センターに設定します。

5. \[予算] で、予算金額を設定します。 予算の上限に達したら、使用量と追加の支出を停止するには、\[予算の上限に **達したときに使用量を停止**する] を選択します。 これは、ライセンスベースの製品では使用できません。

6. 使用量が予算目標の 75%、90%、100% に達したときにアラートを受信するには、\[アラート] の下にある \[ **予算しきい値アラートの受信** ] を選択します。  アカウント所有者、課金マネージャー、および指定された追加の受信者は、電子メールで通知されます。 オプトアウトはいつでも可能です。

   \[アラート受信者] で、アラートを受信する追加の受信者を選択します。

7. ```
          **[予算の作成]** をクリックします。
   ```

### 競合の既存の予算を確認する

コスト センター予算を作成したら、既存のエンタープライズ全体の予算を確認して、新しいコスト センター予算と競合したり上書きしたりしないようにします。

\[予算とアラート] ページに移動します。 予算の 2 つの一覧が表示されます。

* **エンタープライズ予算: エンタープライズ** アカウント全体に適用される制限
* **その他の予算**: 特定のリポジトリ、組織、またはコスト センターの制限

#### エンタープライズ予算を確認する

エンタープライズ予算が、新しいコスト センター予算と同じ製品または SKU に適用されるかどうかを確認します。 エンタープライズ予算が非常に低い場合は、コスト センターの独自の予算に達する前に、コスト センターの使用がブロックされる可能性があります。 競合するエンタープライズ予算を削除または調整することを検討してください。

#### コスト センターの予算を表示する

その他の予算リストをフィルター処理して、 **コスト センター**のスコープを表示します。 あなたの新しいコストセンターには、作成した各予算に対応する行が表示されるはずです。 最初は使用量は 0 に近くなりますが、数日以内に、ユーザーとリポジトリがプランの許容量を超えて製品を消費するため、コストが蓄積されます。

## 4. REST API を使用してコスト センターを作成する

ユーザー インターフェイスでコスト センターを作成する方法を理解したら、REST API を調べて、コスト センターをプログラムで作成する方法を確認できます。 API を理解することは、自動化が組織に利益をもたらすかどうかを評価するのに役立ちます。

このセクションでは、 GitHub CLIを使用したコスト センター管理の主要な REST API エンドポイントについて説明します。
GitHub CLIのインストールとこれらのエンドポイントへのアクセスの認証の詳細については、[GitHub REST API のクイック スタート](/ja/rest/quickstart?apiVersion=2022-11-28\&tool=cli) を参照してください。

> \[!NOTE]
> 次の例では GitHub CLIを使用していますが、rest API 呼び出しをサポートする `curl` または任意の HTTP クライアントを使用するようにこれらのコマンドを調整できます。

### 既存のコスト センターをすべて一覧表示する

まず、企業内のすべてのコスト センターを取得して、既に存在するものを確認します。 この単純な要求を使用すると、企業の課金を管理するために正しく認証されていることを確認できます。

ターミナルで次のコマンドを実行し、`ENTERPRISE`を企業のスラッグ（識別子）に置き換えます。

```shell copy
gh api \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /enterprises/ENTERPRISE/settings/billing/cost-centers
```

応答には、このチュートリアルで先ほど作成したコスト センターを含め、企業で作成されたすべてのコスト センターが含まれます。 この例では、企業には 1 つのコスト センター "Octocenter" があり、組織と 2 人のユーザーが割り当てられます。

```json
{
  "costCenters": [
    {
      "id": "33635e2c-edc0-40b8-abea-261839ff73c1",
      "name": "Octocenter",
      "state": "active",
      "resources": [
        {
          "type": "User",
          "name": "monalisa"
        },
        {
          "type": "Org",
          "name": "doctocat-org"
        },
        {
          "type": "User",
          "name": "doctocat"
        }
      ]
    }
  ]
}
```

### 新しいコスト センターを作成する

名前を指定して、新しいコスト センターを作成します。 このコスト センターの管理に使用する一意の識別子を受け取ります。

ターミナルで次のコマンドを実行し、 `ENTERPRISE` と `NAME` を適切な値に置き換えます。

```shell copy
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /enterprises/ENTERPRISE/settings/billing/cost-centers \
   -f 'name=NAME'
```

応答には、新しいコスト センターの識別子が含まれます。 このコスト センターで将来のすべての操作にこの `id` を使用する必要があります。

```json
{
  "id": "3312fdf2-5950-4f64-913d-e734124059c9",
  "name": "NAME",
  "state": "active",
  "resources": []
}
```

### コスト センターにリソースを追加する

コスト センターにユーザー、組織、リポジトリを割り当てます。 この例では、複数のユーザーと組織を追加する方法を示します。

ターミナルで次のコマンドを実行し、 `COST_CENTER_ID` を前の手順の識別子に置き換え、 `ENTERPRISE`、 `NAME`、 `ORG` を適切な値に置き換えます。

```shell copy
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /enterprises/ENTERPRISE/settings/billing/cost-centers/COST_CENTER_ID/resource \
  --input - <<< '{
  "users": [
    "NAME-1",
    "NAME-2"
  ],
  "organizations": [
    "ORG-1"
  ]
}'
```

応答は、リソースの正常な追加を確認します。 リソースが以前に別のコスト センターに割り当てられている場合は、 `reassigned_resources` 配列に一覧表示されます。

```json
{
  "message": "Resources successfully added to the cost center.",
  "reassigned_resources": [
    {
      "resource_type": "User",
      "name": "monalisa",
      "previous_cost_center": "Octocenter"
    }
  ]
}
```

エンドポイントが `Problems parsing JSON`で応答する場合は、JSON 検証コントロールを使用して、 `--input` オプションで指定されたデータが有効であることを確認します。

## 5. REST API を使用して予算を設定する

予算をプログラムで作成して、作成したコスト センターに支出管理を適用できます。 これは、Premium 要求などの使用量ベースのコストを大規模に管理する場合に特に便利です。

### Premium 要求の予算を作成する

この例では、 Copilot Premium 要求の SKU レベルの予算を作成し、それを新しいコスト センターに適用する方法を示します。 これにより、このコスト センターのリソースによる Premium 要求の使用に対する使用制限を設定できます。

ターミナルで次のコマンドを実行し、 `ENTERPRISE`、 `COST_CENTER_ID`、 `USERNAME`、 `1000.0` を適切な値に置き換えます。

```shell copy
gh api \
  --method POST \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2022-11-28" \
  /enterprises/ENTERPRISE/settings/billing/budgets \
  -f budget_type='SkuPricing' \
  -f budget_product_sku='copilot_premium_request' \
  -f budget_scope='cost_center' \
  -f budget_entity_name='COST_CENTER_ID' \
  -F budget_amount=1000.0 \
  -F prevent_further_usage=true \
  -f budget_alerting='{"will_alert":true,"alert_recipients":["USERNAME"]}'
```

応答は、予算が作成されたことを確認し、その構成を返します。 この予算では、 `prevent_further_usage` と `will_alert` の両方が `true`に設定されていることに注意してください。
`octocat@github.com`メール アドレスは、予算制限に近づくとアラートを受け取り、1,000 USD に達するとコスト センター リソースの使用量がブロックされます。

```json
{
  "id": "budget-uuid-here",
  "budget_type": "SkuPricing",
  "budget_product_sku": "copilot_premium_request",
  "budget_scope": "cost_center",
  "budget_entity_name": "3312fdf2-5950-4f64-913d-e734124059c9",
  "budget_amount": 1000.0,
  "prevent_further_usage": true,
  "budget_alerting": {
    "will_alert": true,
    "alert_recipients": [
      "octocat"
    ]
  }
}
```

> \[!TIP]
> 同じコスト センターに対して複数の予算を作成して、異なる製品または SKU を個別に制御できます。 たとえば、 Copilot Premium 要求、 GitHub Actions コンピューティング、および Codespaces 使用量に対して個別の予算を設定できます。 「[GitHub製品名とSKU番号](/ja/billing/reference/product-and-sku-names)」を参照してください。

## 6. 自動化するかどうかを決定する

このチュートリアルでは、コスト センターを作成するための 2 つの方法を示しました。ハンズオン管理にはユーザー インターフェイスを使用し、プログラムによる管理には REST API を使用します。 両方の方法を理解することは、組織に適した方法を決定するのに役立ちます。

```
          **ユーザー インターフェイス**は、次の場合に最適です。
```

* 最初のいくつかのコスト センターを設定する

* 既存のコスト センターを随時更新する

* 変更の視覚的な確認を優先する

* 管理するコストセンターは少ない

  ```
          **REST API** は、次の場合に価値があります。
  ```

* 複数のコスト センターを定期的に作成または更新する必要がある

* コスト センター管理を既存の財務システムと統合するか、外部データ ソースから構成を生成する必要がある

* 組織構造 (チーム メンバーシップや部署構造など) を反映するためにコスト センターが必要

* ユーザーがロールを変更したり、チーム間を移動したりすると、コスト センターの割り当てを自動的に維持する必要がある

### 自動化のオプション

自動化が組織にとって有益であると判断した場合、このチュートリアルの REST API の例では、カスタム スクリプトを構築するための基礎を提供します。 その他のエンドポイントの詳細については、 [請求の REST API エンドポイント](/ja/rest/enterprise-admin/billing?apiVersion=2022-11-28) を参照してください。

チーム メンバーシップに基づいてコスト センターを自動化する場合、または Premium 要求のコストを制御するための 2 層モデルを作成する場合、 [GitHub Cost Center Automation](https://github.com/github/cost-center-automation?ref_product=copilot\&ref_type=engagement\&ref_style=text) では、ニーズに合わせて調整できるアクション ワークフローを使用した完全な実装が提供されます。

## 次のステップ

使用状況とコストのレポートを自動化するために使用できるエンドポイントについては、 [REST API を使用した使用状況レポート作成の自動化](/ja/billing/tutorials/automate-usage-reporting) を参照してください。

すべてのアクセスをブロックする有料製品がある場合は、エンタープライズ ポリシーを使用して機能を無効にすることができます。 「[エンタープライズ ポリシー](/ja/enterprise-cloud@latest/admin/enforcing-policies/enforcing-policies-for-your-enterprise/about-enterprise-policies)」を参照してください。