4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure】Claude Sonnet 4.6 召喚の儀式(クォータ申請)が面倒すぎるので、Sonnet 4.6 自身に全自動でやらせてみた

4
Last updated at Posted at 2026-02-18

みなさん、こんにちは!Dirbato - Backbeat の田島です。
ついに…ついに来ましたね、 Claude Sonnet 4.6!! :tada:

界隈の盛り上がりは最高潮、TL(タイムライン)はお祭り騒ぎ。
Azure AI Foundry を使っている私も、発売日に新作ゲームを買いに行く小学生のようなウキウキ気分で Model Catalog を開き、「デプロイ」ボタンを連打しようとしました。

しかし、私の目に飛び込んできたのは、無慈悲な現実でした。

スクリーンショット 2026-02-18 18.00.22.png

選択したオプションのクォータが不足しています

「嘘だと言ってよバーニィ!!!!」

現実(リアル)
4.6-Opus の時もそうでしたが、今回の 4.6-Sonnet もそう簡単にはデプロイさせてくれません。SSR(スーパースペシャルレア)確定ガチャだと思って引いたら、まさかの排出率 0%。

4.5-Sonnet/Opus の頃の「運営」は優しかったですよね…。申請なしで 450k TPM も配ってくれるなんて、まさに神運営の詫び石配布祭りでした。

しかし、嘆いていても始まりません。我々にはまだ「クォータ増加申請」という名の周回クエストが残されています。

クォータ申請、ダルすぎ問題

でも、正直に言いましょう。
あれ、めちゃくちゃ面倒くさくないですか?

  • :office: 複数環境(Dev/Stg/Prod...)がある
  • :robot: 複数モデルを申請しなきゃいけない
  • :pencil: 申請理由(作文)を書かなきゃいけない

これを手作業でやるなんて、経験値1のスライムを叩き続けてレベル99を目指すようなものです。指が死にます。

というわけで今回は、「毒を以て毒を制す」 ならぬ 「AI を以て AI を申請す」 作戦を決行します。
最近出た Claude Sonnet 4.6 の力を借りて、Claude Cowork で Azure AI Foundry のクォータ増加申請を全自動化(オート周回) していきましょう!

実装:自動申請プロンプトの錬成

使い方は、ポーションを飲むより簡単です。

1. メタプロンプトの準備

まずは、以下のメタプロンプトを用意します。これが今回の「召喚魔法陣」の基礎となります。

クリックしてメタプロンプトを確認
meta_prompt.md
設定内容に基づいて、Azure AI Foundryのクォータ増加申請を自動化するためのプロンプトを生成してください。

# Azure AI Foundry クォータ増加申請 自動化プロンプト(汎用版メタテンプレート)

## 📋 使い方

このテンプレートを使って、あなたのチーム用の申請プロンプトを作成できます!
以下の **【設定セクション】** を埋めるだけで、自動的に完全な申請プロンプトが生成されるよ✨

---

## 🎯 【設定セクション】ここを埋めてね!

### 👤 申請者情報

```yaml
申請者情報:
  First Name: "【あなたの名前】"
  Last Name: "【あなたの苗字】"
  Company Email: "【あなたのメールアドレス】"
  Company Name: "【会社名】"
  Company Address: "【会社住所】"
  Company City: "【市区町村】"
  Company Postal Code: "【郵便番号】"
  Company Country: "【国名(例: Japan)】"
```end

### 📝 申請理由(Justification)

```yaml
申請理由: |
  【ここにあなたのユースケースを記載】
  例: We will use this model to provide AI-powered customer support
      and automated content generation for our SaaS platform.
```end

### 🌍 デプロイ設定

```yaml
デプロイ設定:
  Model Deployment Type: "Model Deployment (PTU/RPM/TPM)"  # 通常はこのまま
  Quota Request Type: "Global Standard"                     # 通常はこのまま
  Region: "【リージョン名(例: East US 2, Japan East)】"
```end

### 🎯 申請するモデルとクォータ

```yaml
申請リスト:
  - 環境: "【環境名(例: dev, prd, staging)】"
    Subscription ID: "【サブスクリプションID】"
    モデル名: "【モデル名(例: gpt-5-pro, claude-sonnet-4-6)】"
    Model Type: "【Azure OpenAI または Anthropic】"
    クォータ: 【数値(例: 50, 1000)】
    
  - 環境: "【環境名】"
    Subscription ID: "【サブスクリプションID】"
    モデル名: "【モデル名】"
    Model Type: "【Azure OpenAI または Anthropic】"
    クォータ: 【数値】
    
  # 必要なだけ追加してね!
```end

### 📚 モデル名マッピング(重要!)

フォームのドロップダウンに表示される名前と、あなたが使いたいモデル名が違う場合があるよ!
以下を参考に設定してね:

```yaml
モデル名マッピング:
  # あなたが呼びたい名前: フォームでの実際の表示名
  gpt-5-pro: "gpt-5-pro"
  gpt-4o: "gpt-4o"
  claude-sonnet-4-6: "claude-sonnet-4-6"
  claude-opus-4-6: "claude-opus-4-6"
  # 他のモデルを追加する場合はここに記載
```end

---

## 🤖 生成されるプロンプト構造

上記の設定を埋めると、以下の構造で完全なプロンプトが生成されます:

1. 概要とフォームURL
2. 申請一覧テーブル(あなたの設定から自動生成)
3. 共通入力値(あなたの申請者情報)
4. モデル名マッピング
5. 技術的注意事項(変更不要)
6. ヘルパー関数(変更不要)
7. 実行手順
   - Anthropicモデル用
   - Azure OpenAIモデル用
   - ADMリセット手順
8. 完全なコード例
9. 成功確認方法

---

## 💡 設定例(参考用)

### 例1: シンプルな1モデル申請

```yaml
申請者情報:
  First Name: "Taro"
  Last Name: "Yamada"
  Company Email: "taro.yamada@example.com"
  Company Name: "Example Corp"
  Company Address: "1-1-1 Shibuya, Shibuya-ku"
  Company City: "Tokyo"
  Company Postal Code: "150-0001"
  Company Country: "Japan"

申請理由: |
  We need GPT-5-pro for our AI chatbot service to handle customer inquiries
  with improved accuracy and response time.

デプロイ設定:
  Model Deployment Type: "Model Deployment (PTU/RPM/TPM)"
  Quota Request Type: "Global Standard"
  Region: "Japan East"

申請リスト:
  - 環境: "production"
    Subscription ID: "12345678-1234-1234-1234-123456789abc"
    モデル名: "gpt-5-pro"
    Model Type: "Azure OpenAI"
    クォータ: 100

モデル名マッピング:
  gpt-5-pro: "gpt-5-pro"
```end

### 例2: 複数環境・複数モデル申請

```yaml
申請者情報:
  First Name: "Hanako"
  Last Name: "Sato"
  Company Email: "hanako.sato@example.com"
  Company Name: "Tech Innovations Inc"
  Company Address: "2-2-2 Roppongi, Minato-ku"
  Company City: "Tokyo"
  Company Postal Code: "106-0032"
  Company Country: "Japan"

申請理由: |
  We are building a multi-modal AI platform that requires both GPT and Claude
  models for different use cases: content generation, code review, and
  customer support automation.

デプロイ設定:
  Model Deployment Type: "Model Deployment (PTU/RPM/TPM)"
  Quota Request Type: "Global Standard"
  Region: "East US 2"

申請リスト:
  - 環境: "dev"
    Subscription ID: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
    モデル名: "gpt-5-pro"
    Model Type: "Azure OpenAI"
    クォータ: 50
    
  - 環境: "dev"
    Subscription ID: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
    モデル名: "claude-sonnet-4-6"
    Model Type: "Anthropic"
    クォータ: 200
    
  - 環境: "production"
    Subscription ID: "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj"
    モデル名: "gpt-5-pro"
    Model Type: "Azure OpenAI"
    クォータ: 500
    
  - 環境: "production"
    Subscription ID: "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj"
    モデル名: "claude-opus-4-6"
    Model Type: "Anthropic"
    クォータ: 300

モデル名マッピング:
  gpt-5-pro: "gpt-5-pro"
  claude-sonnet-4-6: "claude-sonnet-4-6"
  claude-opus-4-6: "claude-opus-4-6"
```end

---

## 🔧 プロンプト生成器

以下のテンプレートに、あなたの **【設定セクション】** の内容を代入してください:

````markdown
# Azure AI Foundry クォータ増加申請 自動化プロンプト

## 概要

以下のMicrosoft FormsでAzure AI Foundryのクォータ増加申請を自動で送信してください。

**フォームURL:**

https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR4xPXO648sJKt4GoXAed-0pUQURHRUtCM1JTOUtOSjI3Qk4wSVNSSUNNNyQlQCN0PWcu


---

## 申請一覧({{申請リストの件数}}件)

| # | 環境 | Subscription ID | モデル | Model Type | クォータ |
|---|---|---|---|---|---|
{{申請リストから自動生成}}
| 1 | {{環境}} | {{Subscription ID}} | {{モデル名}} | {{Model Type}} | {{クォータ}} |
| 2 | {{環境}} | {{Subscription ID}} | {{モデル名}} | {{Model Type}} | {{クォータ}} |
...

---

## 共通入力値

| フィールド | 値 |
|---|---|
| First Name | {{First Name}} |
| Last Name | {{Last Name}} |
| Company Email | {{Company Email}} |
| Company Name | {{Company Name}} |
| Company Address | {{Company Address}} |
| Company City | {{Company City}} |
| Company Postal Code | {{Company Postal Code}} |
| Company Country | {{Company Country}} |
| Justification | {{申請理由}} |
| Model Deployment | {{Model Deployment Type}} |
| Quota Request Type | {{Quota Request Type}} |
| Region | {{Region}} |

---

## ドロップダウンのモデル名マッピング

フォームのドロップダウンに表示されるモデル名は以下の通り:

| 申請一覧のモデル名 | フォームのドロップダウン値 |
|---|---|
{{モデル名マッピングから自動生成}}
| {{あなたのモデル名}} | `{{フォームでの表示名}}` |
...

---

## 重要な技術的注意事項(過去の失敗から得た知見)

### ⚠️ 注意1: ラジオボタンのUUIDはページロードごとに変わる
ページをリロードするたびにラジオボタングループのUUIDが変わります。
**絶対にUUIDをハードコードしないでください。** 必ずセクションタイトルから動的に取得してください。

### ⚠️ 注意2: ReactのStateにより単純な `inp.value = value` は無効
Microsoft FormsはReactで構築されているため、`inp.value = value` で値をセットしてもReactが次の再レンダリング時に上書きします。
必ず後述のネイティブセッター方式(`sri()`関数)を使用してください。

### ⚠️ 注意3: ヘルパー関数はJSの各実行コンテキストで再定義が必要
JavaScriptツールを呼び出すたびに関数定義が失われます。
**全てのJavaScript実行の先頭で必ずヘルパー関数を再定義してください。**

### ⚠️ 注意4: Azure Direct Model (ADM) の隠しセクションが汚染する問題
Azure OpenAIを選択した際、非表示の「(Azure Direct Model) Quota Request Type」セクションに
「Global Standard」が既に選択されていると、ADMのモデル/クォータセクションが表示されてしまいます。
**Azure OpenAI申請では、Azure OpenAI Quota Request Type の選択後、ADMセクションが表示されていないか必ず確認してください。**
表示されている場合はADMリセット手順を実行してください(後述)。

---

## ヘルパー関数(全JS実行の先頭に必ず記載)

```javascript
// React対応の入力セッター(ネイティブセッター方式)
function sri(el, val) {
  let s = el.tagName === 'INPUT'
    ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set
    : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val);
  el.dispatchEvent(new Event('input', {bubbles:true}));
  el.dispatchEvent(new Event('change', {bubbles:true}));
  return true;
}

// テキストフィールドをセクションタイトルで検索して入力
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea');
  return inp ? sri(inp, val) : false;
}

// 表示中のテキストフィールドのみを対象
function fbtv(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.offsetParent !== null &&
      s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea');
  return inp ? sri(inp, val) : false;
}

// セクションタイトルからラジオグループ名を動的取得
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]');
  return r?.length > 0 ? r[0].name : null;
}

// グループ名と値でラジオボタンをクリック
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) {
      ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true})));
      r.checked = true;
      ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true})));
      return true;
    }
  }
  return false;
}
```end

---

## 各申請の実行手順

### Anthropic申請の場合

Step 1: フォームURLにナビゲート → 4秒待機

Step 2: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - fbt() で全テキストフィールドを入力
  - crbgn(grgs('Model Type'), 'Anthropic')
  - crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)')

Step 3: 2秒待機(Anthropicセクションが表示されるまで)

Step 4: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - crbgn(grgs('(Anthropic) Quota Request Type'), '{{Quota Request Type}}')
  - crbgn(grgs('Global Standard Region'), '{{Region}}')
  - fbtv('(Anthropic) Global Standard Quota', '{{クォータ}}')
  - (Anthropic) Global Standard Model のlistboxをクリックして開く

Step 5: 1秒待機

Step 6: 以下をまとめて実行
  - [role="option"] から '{{フォームでのモデル表示名}}' をクリック
  - setTimeout 500ms後に送信ボタン('送信')をクリック

Step 7: 3秒待機 → "You've completed the request" を確認

### Azure OpenAI申請の場合

Step 1: フォームURLにナビゲート → 4秒待機

Step 2: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - fbt() で全テキストフィールドを入力
  - crbgn(grgs('Model Type'), 'Azure OpenAI')
  - crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)')

Step 3: 2秒待機(Azure OpenAIセクションが表示されるまで)

Step 4: 表示中のセクションを確認(ADM汚染チェック)
  - 表示セクションに '(Azure Direct Model) Global Standard Model' が含まれていたら
    → ADMリセット手順を実行(下記参照)
  - 含まれていなければStep 5へ進む

Step 5: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - crbgn(grgs('(Azure OpenAI) Quota Request Type'), '{{Quota Request Type}}')
  - crbgn(grgs('Global Standard Region'), '{{Region}}')
  - fbtv('(Azure OpenAI) Global Standard Quota', '{{クォータ}}')
  - (Azure OpenAI) Global Standard Model のlistboxをクリックして開く

Step 6: 1秒待機

Step 7: 以下をまとめて実行
  - [role="option"] から '{{フォームでのモデル表示名}}' をクリック
  - setTimeout 500ms後に送信ボタン('送信')をクリック

Step 8: 3秒待機 → "You've completed the request" を確認

#### ADMリセット手順(Azure OpenAI申請でADMセクションが表示された場合のみ)

```javascript
// 1. 一時的にADMに切り替え
crbgn(grgs('Model Type'), 'Azure Direct Model (ADM)');
// 2秒待機
// 2. ADMのクォータタイプをGlobal Standard以外に変更
crbgn(grgs('(Azure Direct Model) Quota Request Type'), 'Data Zone Standard');
// 3. Azure OpenAIに戻す
crbgn(grgs('Model Type'), 'Azure OpenAI');
// 2秒待機してから通常のStep 5へ
```end

---

## 完全なコード例

### Anthropic申請用

```javascript
// ===== Step 2 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const t = {
  fn: fbt('First Name','{{First Name}}'), ln: fbt('Last Name','{{Last Name}}'),
  em: fbt('Company Email','{{Company Email}}'),
  co: fbt('Company Name','{{Company Name}}'),
  ad: fbt('Company Address','{{Company Address}}'),
  ci: fbt('Company City','{{Company City}}'), po: fbt('Company Postal Code','{{Company Postal Code}}'),
  cn: fbt('Company Country','{{Company Country}}'),
  su: fbt('Subscription Id','{{Subscription ID}}'),
  ju: fbt('Justification','{{申請理由}}')
};
const mt = crbgn(grgs('Model Type'), 'Anthropic');
const md = crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)');
({t, mt, md})

// ===== 2秒待機 =====

// ===== Step 4 =====
function sri(el, val) { /* 再定義 */ }
function fbtv(title, val) { /* 再定義 */ }
function grgs(title) { /* 再定義 */ }
function crbgn(gn, val) { /* 再定義 */ }

const aq = crbgn(grgs('(Anthropic) Quota Request Type'), '{{Quota Request Type}}');
const rg = crbgn(grgs('Global Standard Region'), '{{Region}}');
const qt = fbtv('(Anthropic) Global Standard Quota', '{{クォータ}}');
const ms = Array.from(document.querySelectorAll('.__question__'))
  .find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Anthropic) Global Standard Model');
const lb = ms?.querySelector('[role="listbox"]'); if (lb) lb.click();
({aq, rg, qt, lbFound: !!lb})

// ===== 1秒待機 =====

// ===== Step 6 =====
let selected = false;
for (const o of document.querySelectorAll('[role="option"]')) {
  if (o.textContent.trim() === '{{フォームでのモデル表示名}}') { o.click(); selected = true; break; }
}
if (selected) {
  setTimeout(() => {
    const b = Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() === '送信');
    if (b) b.click();
  }, 500);
}
({selected})
```end

### Azure OpenAI申請用

```javascript
// ===== Step 2 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const t = {
  fn: fbt('First Name','{{First Name}}'), ln: fbt('Last Name','{{Last Name}}'),
  em: fbt('Company Email','{{Company Email}}'),
  co: fbt('Company Name','{{Company Name}}'),
  ad: fbt('Company Address','{{Company Address}}'),
  ci: fbt('Company City','{{Company City}}'), po: fbt('Company Postal Code','{{Company Postal Code}}'),
  cn: fbt('Company Country','{{Company Country}}'),
  su: fbt('Subscription Id','{{Subscription ID}}'),
  ju: fbt('Justification','{{申請理由}}')
};
const mt = crbgn(grgs('Model Type'), 'Azure OpenAI');
const md = crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)');
({t, mt, md})

// ===== 2秒待機 =====

// ===== Step 4: ADM汚染チェック =====
const admVisible = Array.from(document.querySelectorAll('.__question__'))
  .some(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure Direct Model) Global Standard Model');
({admVisible})

// もし admVisible が true なら ADMリセット手順を実行してから Step 5 へ

// ===== Step 5 =====
function sri(el, val) { /* 再定義 */ }
function fbtv(title, val) { /* 再定義 */ }
function grgs(title) { /* 再定義 */ }
function crbgn(gn, val) { /* 再定義 */ }

const aq = crbgn(grgs('(Azure OpenAI) Quota Request Type'), '{{Quota Request Type}}');
const rg = crbgn(grgs('Global Standard Region'), '{{Region}}');
const qt = fbtv('(Azure OpenAI) Global Standard Quota', '{{クォータ}}');
const ms = Array.from(document.querySelectorAll('.__question__'))
  .find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure OpenAI) Global Standard Model');
const lb = ms?.querySelector('[role="listbox"]'); if (lb) lb.click();
({aq, rg, qt, lbFound: !!lb})

// ===== 1秒待機 =====

// ===== Step 7 =====
let selected = false;
for (const o of document.querySelectorAll('[role="option"]')) {
  if (o.textContent.trim() === '{{フォームでのモデル表示名}}') { o.click(); selected = true; break; }
}
if (selected) {
  setTimeout(() => {
    const b = Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() === '送信');
    if (b) b.click();
  }, 500);
}
({selected})
```end

---

## 成功確認

各申請送信後、以下のJavaScriptで成功を確認してください:

```javascript
document.body.innerText.includes("You've completed the request")
// → true であれば成功
```end

---

## 📌 チェックリスト

申請前に以下を確認してね!

- [ ] 申請者情報がすべて正しく入力されている
- [ ] Subscription IDが正しい(ハイフン含む36文字のUUID形式)
- [ ] 申請理由が具体的で説得力がある(最低2-3文)
- [ ] リージョン名がAzureの正式名称と一致している
- [ ] モデル名マッピングがフォームの実際の表示名と一致している
- [ ] クォータ数値が妥当(小さすぎず大きすぎず)
- [ ] Model Typeが正しい(Azure OpenAI / Anthropic)

---

## 🆘 トラブルシューティング

### Q: モデルがドロップダウンに表示されない
A: モデル名マッピングを確認してください。フォームでの表示名と完全一致する必要があります。

### Q: ADMセクションが消えない
A: ADMリセット手順を実行後、必ず2秒待機してからAzure OpenAIの設定に進んでください。

### Q: 送信ボタンが押せない
A: すべての必須フィールドが入力されているか確認してください。特にモデル選択が完了しているか確認。

### Q: 申請が重複してしまった
A: 各申請後に必ず "You've completed the request" を確認してから次の申請に進んでください。

---

2. 設定の書き換え(あなたのパラメータ)

次に、上記の設定部分をあなたの環境に合わせて書き換えます。
ここはいわゆる「装備変更」画面です。ステータスを間違えるとエラーで弾かれるので注意してください。

## 🎯 【設定セクション】ここを埋めてね!

### 👤 申請者情報

```yaml
申請者情報(英語で入力):
First Name: "Isamu"
Last Name: "Tajima"
Company Email: "isamu.tajima@xxx.com"
Company Name: "XXX K.K."
Company Address: "35F midtown Tower, 9-7-1 Akasaka, Minato-ku"
Company City: "Tokyo"
Company Postal Code: "107-0052"
Company Country: "Japan"
```end

### 📝 申請理由(Justification)

```yaml
申請理由: |
We will use this model to provide AI-powered customer support
and automated content generation for our SaaS platform.
```end

### 🌍 デプロイ設定

```yaml
デプロイ設定:
Model Deployment Type: "Model Deployment (PTU/RPM/TPM)" # 通常はこのまま
Quota Request Type: "Global Standard" # 通常はこのまま
Region: "East US 2" # 使用予定のリージョンを指定
```end

### 🎯 申請するモデルとクォータ

```yaml
申請リスト:
- 環境: "de"
Subscription ID: "xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
モデル名: "gpt-5-pro"
Model Type: "Azure OpenAI"
クォータ: 50

- 環境: "production"
Subscription ID: "yyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
モデル名: "gpt-5-pro"
Model Type: "Azure OpenAI"
クォータ: 100

# 必要なだけ追加してね!
```end

### 📚 モデル名マッピング(重要!)

フォームのドロップダウンに表示される名前と、あなたが使いたいモデル名が違う場合があるよ!
以下を参考に設定してね:

```yaml
モデル名マッピング:
# あなたが呼びたい名前: フォームでの実際の表示名
gpt-5-pro: "gpt-5-pro"
gpt-4o: "gpt-4o"
claude-sonnet-4-6: "claude-sonnet-4-6"
claude-opus-4-6: "claude-opus-4-6"
# 他のモデルを追加する場合はここに記載
```end

3. プロンプト生成(詠唱開始)

これを手持ちの LLM(Claude でも GPT でも何でも OK)に突っ込んでください。
すると、Azure AI Foundry のクォータ増加申請専用のプロンプトが錬成されます。

生成されるプロンプトのサンプル:

クリックして生成結果を確認
generated_prompt.md
# Azure AI Foundry クォータ増加申請 自動化プロンプト

## 概要

以下のMicrosoft FormsでAzure AI Foundryのクォータ増加申請を自動で送信してください。

**フォームURL:**

https://customervoice.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR4xPXO648sJKt4GoXAed-0pUQURHRUtCM1JTOUtOSjI3Qk4wSVNSSUNNNyQlQCN0PWcu

---

## 申請一覧(2件)

| # | 環境 | Subscription ID | モデル | Model Type | クォータ |
|---|---|---|---|---|---|
| 1 | de | xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | gpt-5-pro | Azure OpenAI | 50 |
| 2 | production | yyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy | gpt-5-pro | Azure OpenAI | 100 |

---

## 共通入力値

| フィールド | 値 |
|---|---|
| First Name | Isamu |
| Last Name | Tajima |
| Company Email | isamu.tajima@xxx.com |
| Company Name | XXX K.K. |
| Company Address | 35F midtown Tower, 9-7-1 Akasaka, Minato-ku |
| Company City | Tokyo |
| Company Postal Code | 107-0052 |
| Company Country | Japan |
| Justification | We will use this model to provide AI-powered customer support and automated content generation for our SaaS platform. |
| Model Deployment | Model Deployment (PTU/RPM/TPM) |
| Quota Request Type | Global Standard |
| Region | East US 2 |

---

## ドロップダウンのモデル名マッピング

フォームのドロップダウンに表示されるモデル名は以下の通り:

| 申請一覧のモデル名 | フォームのドロップダウン値 |
|---|---|
| gpt-5-pro | `gpt-5-pro` |
| gpt-4o | `gpt-4o` |
| claude-sonnet-4-6 | `claude-sonnet-4-6` |
| claude-opus-4-6 | `claude-opus-4-6` |

---

## 重要な技術的注意事項(過去の失敗から得た知見)

### ⚠️ 注意1: ラジオボタンのUUIDはページロードごとに変わる
ページをリロードするたびにラジオボタングループのUUIDが変わります。
**絶対にUUIDをハードコードしないでください。** 必ずセクションタイトルから動的に取得してください。

### ⚠️ 注意2: ReactのStateにより単純な `inp.value = value` は無効
Microsoft FormsはReactで構築されているため、`inp.value = value` で値をセットしてもReactが次の再レンダリング時に上書きします。
必ず後述のネイティブセッター方式(`sri()`関数)を使用してください。

### ⚠️ 注意3: ヘルパー関数はJSの各実行コンテキストで再定義が必要
JavaScriptツールを呼び出すたびに関数定義が失われます。
**全てのJavaScript実行の先頭で必ずヘルパー関数を再定義してください。**

### ⚠️ 注意4: Azure Direct Model (ADM) の隠しセクションが汚染する問題
Azure OpenAIを選択した際、非表示の「(Azure Direct Model) Quota Request Type」セクションに
「Global Standard」が既に選択されていると、ADMのモデル/クォータセクションが表示されてしまいます。
**Azure OpenAI申請では、Azure OpenAI Quota Request Type の選択後、ADMセクションが表示されていないか必ず確認してください。**
表示されている場合はADMリセット手順を実行してください(後述)。

---

## ヘルパー関数(全JS実行の先頭に必ず記載)

```javascript
// React対応の入力セッター(ネイティブセッター方式)
function sri(el, val) {
  let s = el.tagName === 'INPUT'
    ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set
    : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val);
  el.dispatchEvent(new Event('input', {bubbles:true}));
  el.dispatchEvent(new Event('change', {bubbles:true}));
  return true;
}

// テキストフィールドをセクションタイトルで検索して入力
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea');
  return inp ? sri(inp, val) : false;
}

// 表示中のテキストフィールドのみを対象
function fbtv(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.offsetParent !== null &&
      s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea');
  return inp ? sri(inp, val) : false;
}

// セクションタイトルからラジオグループ名を動的取得
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__'))
    .find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]');
  return r?.length > 0 ? r[0].name : null;
}

// グループ名と値でラジオボタンをクリック
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) {
      ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true})));
      r.checked = true;
      ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true})));
      return true;
    }
  }
  return false;
}
```end

---

## 各申請の実行手順

### 申請 #1: de環境 - gpt-5-pro (Azure OpenAI) - 50 TPM

Step 1: フォームURLにナビゲート → 4秒待機

Step 2: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - fbt() で全テキストフィールドを入力
  - Subscription Id: xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  - crbgn(grgs('Model Type'), 'Azure OpenAI')
  - crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)')

Step 3: 2秒待機(Azure OpenAIセクションが表示されるまで)

Step 4: 表示中のセクションを確認(ADM汚染チェック)
  - 表示セクションに '(Azure Direct Model) Global Standard Model' が含まれていたら
    → ADMリセット手順を実行(下記参照)
  - 含まれていなければStep 5へ進む

Step 5: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - crbgn(grgs('(Azure OpenAI) Quota Request Type'), 'Global Standard')
  - crbgn(grgs('Global Standard Region'), 'East US 2')
  - fbtv('(Azure OpenAI) Global Standard Quota', '50')
  - (Azure OpenAI) Global Standard Model のlistboxをクリックして開く

Step 6: 1秒待機

Step 7: 以下をまとめて実行
  - [role="option"] から 'gpt-5-pro' をクリック
  - setTimeout 500ms後に送信ボタン('送信')をクリック

Step 8: 3秒待機 → "You've completed the request" を確認

#### ADMリセット手順(Azure OpenAI申請でADMセクションが表示された場合のみ)

```javascript
// 1. 一時的にADMに切り替え
crbgn(grgs('Model Type'), 'Azure Direct Model (ADM)');
// 2秒待機
// 2. ADMのクォータタイプをGlobal Standard以外に変更
crbgn(grgs('(Azure Direct Model) Quota Request Type'), 'Data Zone Standard');
// 3. Azure OpenAIに戻す
crbgn(grgs('Model Type'), 'Azure OpenAI');
// 2秒待機してから通常のStep 5へ
```end

---

### 申請 #2: production環境 - gpt-5-pro (Azure OpenAI) - 100 TPM

Step 1: フォームURLにナビゲート → 4秒待機

Step 2: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - fbt() で全テキストフィールドを入力
  - Subscription Id: yyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  - crbgn(grgs('Model Type'), 'Azure OpenAI')
  - crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)')

Step 3: 2秒待機(Azure OpenAIセクションが表示されるまで)

Step 4: 表示中のセクションを確認(ADM汚染チェック)
  - 表示セクションに '(Azure Direct Model) Global Standard Model' が含まれていたら
    → ADMリセット手順を実行(下記参照)
  - 含まれていなければStep 5へ進む

Step 5: 以下をまとめて実行(ヘルパー関数再定義も含む)
  - crbgn(grgs('(Azure OpenAI) Quota Request Type'), 'Global Standard')
  - crbgn(grgs('Global Standard Region'), 'East US 2')
  - fbtv('(Azure OpenAI) Global Standard Quota', '100')
  - (Azure OpenAI) Global Standard Model のlistboxをクリックして開く

Step 6: 1秒待機

Step 7: 以下をまとめて実行
  - [role="option"] から 'gpt-5-pro' をクリック
  - setTimeout 500ms後に送信ボタン('送信')をクリック

Step 8: 3秒待機 → "You've completed the request" を確認

---

## 完全なコード例

### 申請 #1用(de環境 - gpt-5-pro - 50 TPM)

```javascript
// ===== Step 2 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const t = {
  fn: fbt('First Name','Isamu'), ln: fbt('Last Name','Tajima'),
  em: fbt('Company Email','isamu.tajima@xxx.com'),
  co: fbt('Company Name','XXX K.K.'),
  ad: fbt('Company Address','35F midtown Tower, 9-7-1 Akasaka, Minato-ku'),
  ci: fbt('Company City','Tokyo'), po: fbt('Company Postal Code','107-0052'),
  cn: fbt('Company Country','Japan'),
  su: fbt('Subscription Id','xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),
  ju: fbt('Justification','We will use this model to provide AI-powered customer support and automated content generation for our SaaS platform.')
};
const mt = crbgn(grgs('Model Type'), 'Azure OpenAI');
const md = crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)');
({t, mt, md})

// ===== 2秒待機 =====

// ===== Step 4: ADM汚染チェック =====
const admVisible = Array.from(document.querySelectorAll('.__question__'))
  .some(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure Direct Model) Global Standard Model');
({admVisible})

// もし admVisible が true なら ADMリセット手順を実行してから Step 5 へ

// ===== Step 5 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbtv(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const aq = crbgn(grgs('(Azure OpenAI) Quota Request Type'), 'Global Standard');
const rg = crbgn(grgs('Global Standard Region'), 'East US 2');
const qt = fbtv('(Azure OpenAI) Global Standard Quota', '50');
const ms = Array.from(document.querySelectorAll('.__question__'))
  .find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure OpenAI) Global Standard Model');
const lb = ms?.querySelector('[role="listbox"]'); if (lb) lb.click();
({aq, rg, qt, lbFound: !!lb})

// ===== 1秒待機 =====

// ===== Step 7 =====
let selected = false;
for (const o of document.querySelectorAll('[role="option"]')) {
  if (o.textContent.trim() === 'gpt-5-pro') { o.click(); selected = true; break; }
}
if (selected) {
  setTimeout(() => {
    const b = Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() === '送信');
    if (b) b.click();
  }, 500);
}
({selected})
```end

### 申請 #2用(production環境 - gpt-5-pro - 100 TPM)

```javascript
// ===== Step 2 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbt(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const t = {
  fn: fbt('First Name','Isamu'), ln: fbt('Last Name','Tajima'),
  em: fbt('Company Email','isamu.tajima@xxx.com'),
  co: fbt('Company Name','XXX K.K.'),
  ad: fbt('Company Address','35F midtown Tower, 9-7-1 Akasaka, Minato-ku'),
  ci: fbt('Company City','Tokyo'), po: fbt('Company Postal Code','107-0052'),
  cn: fbt('Company Country','Japan'),
  su: fbt('Subscription Id','yyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy'),
  ju: fbt('Justification','We will use this model to provide AI-powered customer support and automated content generation for our SaaS platform.')
};
const mt = crbgn(grgs('Model Type'), 'Azure OpenAI');
const md = crbgn(grgs('Model Deployment Quota or Fine Tuning Quota'), 'Model Deployment (PTU/RPM/TPM)');
({t, mt, md})

// ===== 2秒待機 =====

// ===== Step 4: ADM汚染チェック =====
const admVisible = Array.from(document.querySelectorAll('.__question__'))
  .some(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure Direct Model) Global Standard Model');
({admVisible})

// もし admVisible が true なら ADMリセット手順を実行してから Step 5 へ

// ===== Step 5 =====
function sri(el, val) {
  let s = el.tagName === 'INPUT' ? Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value').set : Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set;
  s.call(el, val); el.dispatchEvent(new Event('input', {bubbles:true})); el.dispatchEvent(new Event('change', {bubbles:true})); return true;
}
function fbtv(title, val) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const inp = s?.querySelector('input, textarea'); return inp ? sri(inp, val) : false;
}
function grgs(title) {
  const s = Array.from(document.querySelectorAll('.__question__')).find(s => s.querySelector('.text-format-content')?.textContent?.trim() === title);
  const r = s?.querySelectorAll('input[type="radio"]'); return r?.length > 0 ? r[0].name : null;
}
function crbgn(gn, val) {
  if (!gn) return false;
  for (const r of document.querySelectorAll(`input[type="radio"][name="${gn}"]`)) {
    if (r.value === val) { ['mousedown','mouseup','click'].forEach(e => r.dispatchEvent(new MouseEvent(e, {bubbles:true}))); r.checked = true; ['change','input'].forEach(e => r.dispatchEvent(new Event(e, {bubbles:true}))); return true; }
  }
  return false;
}

const aq = crbgn(grgs('(Azure OpenAI) Quota Request Type'), 'Global Standard');
const rg = crbgn(grgs('Global Standard Region'), 'East US 2');
const qt = fbtv('(Azure OpenAI) Global Standard Quota', '100');
const ms = Array.from(document.querySelectorAll('.__question__'))
  .find(s => s.offsetParent !== null && s.querySelector('.text-format-content')?.textContent?.trim() === '(Azure OpenAI) Global Standard Model');
const lb = ms?.querySelector('[role="listbox"]'); if (lb) lb.click();
({aq, rg, qt, lbFound: !!lb})

// ===== 1秒待機 =====

// ===== Step 7 =====
let selected = false;
for (const o of document.querySelectorAll('[role="option"]')) {
  if (o.textContent.trim() === 'gpt-5-pro') { o.click(); selected = true; break; }
}
if (selected) {
  setTimeout(() => {
    const b = Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() === '送信');
    if (b) b.click();
  }, 500);
}
({selected})
```end

---

## 成功確認

各申請送信後、以下のJavaScriptで成功を確認してください:

```javascript
document.body.innerText.includes("You've completed the request")
// → true であれば成功
```end

---

## 📌 チェックリスト

申請前に以下を確認してね!

- [x] 申請者情報がすべて正しく入力されている
- [x] Subscription IDが正しい(ハイフン含む36文字のUUID形式)
- [x] 申請理由が具体的で説得力がある(最低2-3文)
- [x] リージョン名がAzureの正式名称と一致している(East US 2)
- [x] モデル名マッピングがフォームの実際の表示名と一致している
- [x] クォータ数値が妥当(50 TPM, 100 TPM)
- [x] Model Typeが正しい(Azure OpenAI)

---

## 🆘 トラブルシューティング

### Q: モデルがドロップダウンに表示されない
A: モデル名マッピングを確認してください。フォームでの表示名と完全一致する必要があります。今回は `gpt-5-pro` で統一されています。

### Q: ADMセクションが消えない
A: ADMリセット手順を実行後、必ず2秒待機してからAzure OpenAIの設定に進んでください。

### Q: 送信ボタンが押せない
A: すべての必須フィールドが入力されているか確認してください。特にモデル選択が完了しているか確認。

### Q: 申請が重複してしまった
A: 各申請後に必ず "You've completed the request" を確認してから次の申請に進んでください。

### Q: Subscription IDが正しく入力されない
A: 今回の設定では `xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` と `yyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` がプレースホルダーになっています。実際のSubscription IDに置き換えてください。

---

## 🎉 完了!

このプロンプトを使って、2件のクォータ増加申請を自動化できるよ!
何か問題があったら、トラブルシューティングセクションを確認してね✨

実行:Claude Cowork でオート周回

あとは、錬成されたプロンプトを Claude Cowork に放り込んで実行するだけ!
これであなたは、画面の前でコーヒーを飲みながら、勝手に申請が進んでいく様を眺めるだけでOKです。

お手柔らかに
あまりやりすぎると Azure 側に負荷をかけてしまい、「アカウントBAN」ならぬ「申請ブロック」を食らう可能性があります。
DDoS攻撃にならないよう、優しく申請してあげてくださいね。

実行結果

以下が実行時のキャプチャです。
起動シーケンス(コールドスタート)は少し長いですが、一度動き出せば トランザムシステム が起動したかのように、1申請あたり1〜2分で爆速完了します。

test3.gif

まとめ

これで面倒な申請作業から解放され、本来やるべき「Claude Sonnet 4.6 を使い倒す」というメインクエストに集中できますね。

それではみなさん、よい Azure AI Foundry ライフを!
(申請が通ることを祈っています…!)

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?