Windows で AI 開発環境を作る

最終更新:2026-11-12。Mac 版は別のページに、全部の AI に共通のルールの作り方は共通 AGENTS.md の作り方にまとめています。

はじめに

Windows に5つの AI のコマンド(CLI)と作業アプリ Orca を入れ、共通ルールと MCP をそろえる手順です。最後に、Windows で Flutter のアプリを書き、iPhone 向けのビルドを Mac の Xcode で行う手順も入れています。

  • 対象:Windows 11。管理者の権限のあるユーザーで行う(管理者の権限が要る場面では「ユーザー アカウント制御」の確認画面が出る)
  • 用語:CLI = ターミナルで動かすコマンド版のアプリ。MCP = AI から外のサービス(Gmail・Obsidian など)を使うためのつなぎ口。PATH = コマンドを探す場所の一覧
  • 入力例は PowerShell(Windows Terminal など)で打つ。PS> は入力待ちの記号なので、その後ろだけを入力する
  • <…> の部分は、下の表に従って自分の値に置き換える
  • Mac 版は別のページ(Mac で AI 開発環境を作る)

自分の値に置き換える項目

このマニュアルの表記意味例
you@example.comGoogle アカウントのメールアドレス—
$VAULTObsidian の Vault(共用のノート置き場)の場所G:\マイドライブ\AIVault
%USERPROFILE%\.keys\keys.txtキー・パスワードの置き場所(その PC の中だけ。同期しない)C:\Users\<ユーザー名>\.keys\keys.txt
mac1iPhone 向けのビルドに使う Mac の SSH の接続名—
<ポート>Obsidian の Local REST API のポート番号プラグインの設定画面に出る番号
ABCLinear のチームのキー—

最初に PowerShell で次を実行しておくと、この後の入力例をそのまま使えます。

PS> $VAULT = 'G:\マイドライブ\AIVault'
PS> New-Item -ItemType Directory -Force "$HOME\.keys" | Out-Null
PS> if (-not (Test-Path "$HOME\.keys\keys.txt")) { New-Item -ItemType File "$HOME\.keys\keys.txt" | Out-Null }
  • .keys は Google ドライブや Vault の中に作らない。キーが同期されてしまうため

動作を確かめた版(2026-11 時点)

種類名前版入れ方
下準備Node.js26.12.1winget install OpenJS.NodeJS
下準備Git2.56.0winget install Git.Git
下準備GitHub CLI(gh)2.103.3winget install GitHub.cli
下準備uv0.13.7winget install astral-sh.uv
AI の CLIClaude Code2.1.322公式のスクリプト
AI の CLICodex0.167.1公式のスクリプト
AI の CLIAntigravity CLI(agy)1.5.6公式のスクリプト
AI の CLIGrok1.0.77公式のスクリプト
AI の CLIcursor-agent2026.11.11公式のスクリプト
アプリOrca1.4.256公式サイト
アプリObsidian1.14.5公式サイト
FlutterFlutter SDK3.50.0git で取得
  • これより新しい版でも、手順は基本的に同じです。画面やコマンドが変わっていたら、公式の説明を優先してください
  • 各アプリの公式サイトは、末尾の「公式サイト一覧」にまとめています

作業の順番

  1. 下準備(winget で Node・Git・gh・uv、PATH、実行ポリシー)
  2. AI の CLI を入れてログイン
  3. アプリを入れる
  4. 共通ルール(AGENTS.md)を各 AI につなぐ
  5. MCP を各 AI に登録
  6. 動作確認
  7. Flutter と Xcode(Windows で書き、Mac でビルド)

全体の構成

Windows の AI 開発環境の全体像

5つの AI は、共通ルールを Vault の AGENTS.md から読み、外のサービスには MCP でつながります。キーは %USERPROFILE%\.keys にだけ置きます。

手順の流れ

構築の手順

手順1 下準備(約30分)

AI の CLI を入れる土台として、winget(Windows 標準のアプリの入れ物管理ツール)で Node.js・Git・gh・uv を入れます。

1-1 winget で土台のツールを入れる

PS> winget install --id OpenJS.NodeJS -e
PS> winget install --id Git.Git -e
PS> winget install --id GitHub.cli -e
PS> winget install --id astral-sh.uv -e
  • node = MCP(npx で動くもの)に必要。uv = Python 製の MCP(Google Workspace MCP など)を動かすのに必要
  • Node.js・Git・gh は、途中で「ユーザー アカウント制御」の確認画面が出る。画面の前で「はい」を押す。押さないと、何も表示されないまま止まる。確認画面がほかのウィンドウの後ろに隠れることがある(タスクバーの盾のアイコン)
  • winget が 8A15002B で終わるのは「もう入っている」の意味で、失敗ではない
  • 入れたら PowerShell を開き直す(PATH が新しくなる)

1-2 PATH に .local\bin を足す

Claude Code と cursor-agent は %USERPROFILE%\.local\bin に入ります。ユーザーの PATH に入っていないと、新しい端末で claude が見つかりません。

PS> $u = [Environment]::GetEnvironmentVariable('Path', 'User')
PS> [Environment]::SetEnvironmentVariable('Path', $u.TrimEnd(';') + ";$HOME\.local\bin", 'User')
  • 変える前の値($u)は、メモ帳などに控えておく

1-3 PowerShell の実行ポリシー

cursor-agent や、この手順で作る MCP の起動用スクリプトは PowerShell のスクリプト(.ps1)です。Windows の初期設定ではスクリプトの実行が止められているので、自分のユーザーだけ RemoteSigned(この PC で作ったものは動かし、ネットから落としたものは署名があるときだけ動かす)にします。

PS> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
PS> Get-ExecutionPolicy -List

1-4 SSH の鍵(Mac でビルドする場合)

手順7 で Mac にコードを送るための鍵です。Windows に標準で入っている OpenSSH を使います。

PS> ssh-keygen -t ed25519 -f "$HOME\.ssh\id_ed25519_mac1"
PS> type "$HOME\.ssh\id_ed25519_mac1.pub"     # これを Mac の ~/.ssh/authorized_keys に足す
PS> ssh mac1

%USERPROFILE%\.ssh\config の例:

Host mac1
  HostName <Mac のアドレス>
  User <Mac のユーザー名>
  IdentityFile ~/.ssh/id_ed25519_mac1
  • 秘密鍵(.pub が付かない方)は画面に表示しない。相手に渡すのは .pub だけ
  • WSL(Windows の中の Linux)の Ubuntu を使う場合は、鍵と設定を Ubuntu の中にも作る。Windows 側と Ubuntu 側は別々

手順2 AI の CLI を入れる(約30分)

5つの AI の CLI と GitHub CLI を入れ、それぞれに一度ログインします。ログインはブラウザーが開くので、その PC の画面の前で行います。使わない AI は飛ばして構いません。

CLI入れるコマンド(PowerShell)ログイン使うアカウント
Claude Codeirm https://claude.ai/install.ps1 | iexclaude を起動 → /loginclaude.ai
Codexpowershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"codex loginChatGPT
Antigravity CLIirm https://antigravity.google/cli/install.ps1 | iexagy を起動Google
Grokirm https://x.ai/cli/install.ps1 | iexgrok loginX(xAI)
cursor-agentirm 'https://cursor.com/install?win32=true' | iexcursor-agent loginCursor
GitHub CLI手順1 で済みgh auth loginGitHub

2-1 入れる

  • 上の表のコマンドを、PowerShell で1つずつ実行する。入れたら PowerShell を開き直す
  • 置き場所:Claude Code は %USERPROFILE%\.local\bin、Codex は %LOCALAPPDATA%\Programs\OpenAI\Codex\bin(PATH に自動で追加)、agy は %LOCALAPPDATA%\agy\bin、Grok は %USERPROFILE%\.grok\bin、cursor-agent は %LOCALAPPDATA%\cursor-agent
  • Grok と cursor-agent の両方が agent というコマンドを作る。cursor-agent は cursor-agent の名前で起動する
  • 「Git for Windows が要る」と出たら、手順1 の Git を先に入れる
  • ネットのスクリプトを | iex で動かす前に、ブラウザーで URL を開いて中身と配布元を確かめると安心

2-2 ログイン

PS> claude              # 初回は配色などを聞かれる → /login → ブラウザーで許可
PS> codex login         # 「Sign in with ChatGPT」を選ぶ
PS> agy                 # 初回起動で Google のログイン画面が開く
PS> grok login
PS> cursor-agent login
PS> gh auth login       # GitHub.com → HTTPS → ブラウザー(表示されたコードを入れる)
PS> gh auth setup-git   # git の https に gh のログインを使う
  • gh のログイン情報は Windows の資格情報マネージャーに保存される
  • WSL の Ubuntu の画面で打つと「見つからない」になる。この手順で入れたものは Windows の PowerShell で使う

2-3 確認

PS> claude --version; codex --version; agy --version; grok --version; cursor-agent --version
PS> claude auth status
PS> codex login status       # Logged in using ChatGPT
PS> cursor-agent status
PS> gh auth status

手順3 アプリを入れる(約1時間)

画面で使うアプリを入れます。中心は Orca(AI の作業画面)と Obsidian(共用のノート)で、他は必要なものだけで構いません。

アプリ役割入れ方必要度
Orca複数の AI と複数のパソコンを1つの画面で扱う公式サイト推奨
Obsidian共用 Vault(記録と共通ルール)公式サイト推奨
VS Codeコードの編集公式サイト任意
Slack・Linear依頼・通知と、作業の管理winget install SlackTechnologies.Slack・公式サイト任意
Claudeチャット用アプリwinget install Anthropic.Claude参照
ChatGPTチャット用アプリ(Codex のアプリを含む)winget install OpenAI.ChatGPT参照
Geminiチャット用アプリwinget install Google.GeminiDesktop参照

3-1 Orca

  1. Orca の公式サイトから Windows 版を入れる
  2. アプリに付いてくる CLI(orca)が使えるか確かめる
PS> orca --version
PS> orca status          # appRunning: true、runtimeState: ready なら正常
PS> orca account list    # Claude・Codex・Antigravity のログイン
  • Codex の管理アカウントを使うと、Codex の設定のフォルダー(CODEX_HOME)が %USERPROFILE%\.codex ではなく次になる。手順4・5 で、こちらにも同じ設定を入れる
%APPDATA%\orca\codex-accounts\<アカウントID>\home\
  • SSH の接続先:Windows 側の %USERPROFILE%\.ssh\config の接続名がそのまま接続先になる(WSL の Ubuntu の中の設定は使われない)
  • Linear:Linear の個人 API キーを、設定 → 連携 →「Linear アクセスを追加」に貼る。orca linear team list でチームが出れば接続できている
  • 定期実行・iPhone からの依頼・orca linear のコマンドなどの使い方は Mac 版と同じ

3-2 Obsidian

  1. Google ドライブ(デスクトップ版)でサインインする。マイドライブはドライブ文字(例:G:\マイドライブ)で出る
  2. obsidian.md から入れ、「フォルダーを Vault として開く」→ $VAULT のフォルダーを選ぶ
  3. コミュニティプラグインの「Local REST API」を入れて有効にする(AI の MCP がノートを読み書きする窓口)
  4. Local REST API の設定で「暗号化なし(HTTP)のサーバー」を有効にし、ポート番号を控える。API キーを %USERPROFILE%\.keys\keys.txt に控える(手順5-2)
  5. ログイン時に起動するよう登録する。Obsidian が起動していないと、AI からノートを読み書きできない
PS> Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Run' -Name Obsidian -Value "`"$env:ProgramFiles\Obsidian\Obsidian.exe`""
PS> (Invoke-WebRequest http://127.0.0.1:<ポート>/ -UseBasicParsing).StatusCode   # 200 なら待ち受けている
  • Obsidian の場所は、入れ方によって %LOCALAPPDATA%\Programs\Obsidian のこともある。実際の場所に合わせる
  • Obsidian Sync と Google ドライブを併用しない。併用すると衝突のコピーが大量にできる
  • プラグインの設定ファイル(.obsidian\plugins\obsidian-local-rest-api\data.json)には API キーと証明書の鍵が入っている。中身を画面に表示しない、人に渡さない

3-3 VS Code

PS> code --install-extension anthropic.claude-code
PS> code --install-extension openai.chatgpt
PS> code --install-extension MS-CEINTL.vscode-language-pack-ja
PS> code --install-extension eamodio.gitlens
PS> code --install-extension yzhang.markdown-all-in-one
  • openai.chatgpt は Codex の拡張機能。右のセカンダリサイドバーに出る(Ctrl+Alt+B)
  • Cursor のアプリを使う場合は cursor.com から入れる。VS Code と同じ作りなので、初回起動で VS Code の設定と拡張機能を取り込める

3-4 GitHub

GitHub CLI(gh)と Web で使います。画面で操作したい場合は GitHub Desktop(winget install GitHub.GitHubDesktop)も使えます。

PS> gh auth login         # GitHub.com → HTTPS → ブラウザー(表示されたコードを入れる)
PS> gh auth setup-git     # git の push・clone に gh のログインを使う
PS> gh auth status
PS> gh repo clone <ユーザー名>/<リポジトリ名>
  • ログイン情報は Windows の資格情報マネージャーに保存される

3-5 AI のデスクトップアプリ(参照)

チャットでの相談や文章作りに使うアプリです。開発の作業は CLI(手順2)で行うので、入れてログインするだけで構いません。

アプリ入れ方アカウントCLI との関係
Claudewinget install Anthropic.Claudeclaude.aiClaude Code と同じアカウントで、利用枠も共通
ChatGPTwinget install OpenAI.ChatGPTChatGPTCodex と同じアカウント。Codex のアプリは Microsoft Store(winget install --id 9PLM9XGG6VKS -s msstore)
Geminiwinget install Google.GeminiDesktopGoogleAntigravity CLI(agy)とは別のアプリ
GrokWeb(grok.com)X(xAI)xAI の Windows 用の公式アプリは確認できなかった(2026-11 時点)。Web・X のアプリ・iPhone で使う。アプリのように使いたい場合は、WebCatalog などの第三者製の道具で grok.com を包む方法がある(中身は Web 版)
  • アプリや Web 版は AGENTS.md を読まない。共通ルールのうち大事なものを、各アプリの「個人設定」「カスタム指示」に貼る

手順4 共通ルール(AGENTS.md)を各 AI につなぐ(約20分)

Vault に共通ルール AGENTS.md を1つ置き、各 AI の「全体の指示ファイル」をそこへのシンボリックリンク(別の場所のファイルを指すショートカット)にします。ルールを1か所直せば、全端末・全 AI に反映されます。AGENTS.md の書き方は Mac 版の手順4-1 と同じです。

AI全体の指示ファイル
Claude Code%USERPROFILE%\.claude\CLAUDE.md
Codex%USERPROFILE%\.codex\AGENTS.md
Codex(Orca 経由)%APPDATA%\orca\codex-accounts\<ID>\home\AGENTS.md
Antigravity CLI%USERPROFILE%\.gemini\GEMINI.md
Grok%USERPROFILE%\.grok\AGENTS.md

4-1 リンクを作る(管理者の権限が要る)

Windows でシンボリックリンクを作るには、管理者の権限か開発者モードが要ります。スタートボタンを右クリック →「ターミナル(管理者)」で次を実行します。既にファイルがあるときは、先に控えを取る(Rename-Item ファイル ファイル.bak_日付)。

PS> $V = "$VAULT\AGENTS.md"
PS> New-Item -ItemType Directory -Force "$HOME\.claude","$HOME\.codex","$HOME\.gemini","$HOME\.grok" | Out-Null
PS> cmd /c mklink "$HOME\.claude\CLAUDE.md" "$V"
PS> cmd /c mklink "$HOME\.codex\AGENTS.md" "$V"
PS> cmd /c mklink "$HOME\.gemini\GEMINI.md" "$V"
PS> cmd /c mklink "$HOME\.grok\AGENTS.md" "$V"
PS> cmd /c mklink "$env:APPDATA\orca\codex-accounts\<ID>\home\AGENTS.md" "$V"
PS> Get-Item "$HOME\.claude\CLAUDE.md" | Select-Object LinkType, Target
  • 管理者のターミナルでは $VAULT が空なので、1行目の前に $VAULT = '…' をもう一度実行する
  • これらをスクリプト(.ps1)に書いて動かすときは、BOM 付きの UTF-8 で保存する。Windows PowerShell 5.1 は BOM なしの UTF-8 を読めず、「マイドライブ」などの日本語が化けて「パスが存在しない」で失敗する
  • New-Item -ItemType SymbolicLink はリンク先の存在を確かめるので、Google ドライブが見えないと失敗する。mklink は確かめない
  • Google ドライブがつながっていないときはリンク先が見えず、ルールは読まれない

4-2 読まれたか確かめる

ファイルを開かせずに、ルールにしか書いていないことを聞きます。Vault の外(例:%USERPROFILE%)で実行します。

PS> cd ~
PS> claude -p "秘密情報はどこに置くルール?ファイルは開かずに答えて"
PS> codex exec --skip-git-repo-check "秘密情報はどこに置くルール?ファイルは開かずに答えて"
PS> agy -p "秘密情報はどこに置くルール?ファイルは開かずに答えて"
PS> grok -p "秘密情報はどこに置くルール?ファイルは開かずに答えて"
  • .keys と答えれば読まれている
  • agy は、登録した MCP が全部つながるまで答えを返さない。キーが無い MCP があると止まり続けるので、MCP を入れた後は手順5 が済んでから確かめる

手順5 MCP を各 AI に登録(約1時間)

MCP ごとに「起動用のスクリプト」(PowerShell の .ps1)を %USERPROFILE%\bin に1つ作り、それを各 AI に同じ名前で登録します。キーはスクリプトが起動のたびに keys.txt から読むので、AI の設定ファイルにキーが平文で残りません。

5-1 登録する MCP

MCP登録名起動事前の準備
Obsidianobsidian%USERPROFILE%\bin\obsidian-mcp.ps1Local REST API のキー(手順3-2)
Google Workspacegoogle%USERPROFILE%\bin\google-mcp.ps1Google Cloud で OAuth のクライアントを作る
LINEline%USERPROFILE%\bin\line-mcp.ps1LINE 公式アカウントと Messaging API のトークン
Chromechrome-devtoolsnode で直接なし
  • 使わない MCP は飛ばして構いません。まず Obsidian だけ入れるのがおすすめ
  • Claude Code の Chrome は、Chrome 拡張機能「Claude in Chrome」を入れ、Claude Code で /chrome を実行してつなぐ(MCP の登録は不要)

5-2 キーのファイルと起動用のスクリプト

%USERPROFILE%\.keys\keys.txt に、1行1つで 名前=値 の形で書きます。

OBSIDIAN_API_KEY=<Local REST API のキー>
GOOGLE_OAUTH_CLIENT_ID=<Google のクライアント ID>
GOOGLE_OAUTH_CLIENT_SECRET=<Google のクライアント シークレット>
LINE_CHANNEL_ACCESS_TOKEN=<LINE のトークン>

共通の部品 %USERPROFILE%\bin\mcp-common.ps1:

$KeysFile = Join-Path $HOME '.keys\keys.txt'
function Get-Key([string]$Name) {
  $line = Get-Content -LiteralPath $KeysFile -Encoding UTF8 | Where-Object { $_ -like "$Name=*" } | Select-Object -First 1
  if ($line) { $line.Substring($Name.Length + 1).Trim() }
}

$env:Path = [Environment]::GetEnvironmentVariable('Path', 'Machine') + ';' + [Environment]::GetEnvironmentVariable('Path', 'User')

function Start-McpServer([string]$File, [string[]]$Arguments) {
  $psi = New-Object System.Diagnostics.ProcessStartInfo
  $psi.FileName = $File
  $psi.Arguments = ($Arguments | ForEach-Object { if ($_ -match '[\s"]') { '"' + ($_ -replace '"', '\"') + '"' } else { $_ } }) -join ' '
  $psi.UseShellExecute = $false
  $p = [System.Diagnostics.Process]::Start($psi)
  $p.WaitForExit()
  exit $p.ExitCode
}

$Node = Join-Path $env:ProgramFiles 'nodejs\node.exe'
$Npx = @((Join-Path $env:ProgramFiles 'nodejs\node_modules\npm\bin\npx-cli.js'), '-y')
$Uvx = (Get-Command uvx.exe).Source

%USERPROFILE%\bin\obsidian-mcp.ps1:

. (Join-Path $PSScriptRoot 'mcp-common.ps1')

$env:OBSIDIAN_API_KEY = Get-Key 'OBSIDIAN_API_KEY'
$env:OBSIDIAN_BASE_URL = 'http://127.0.0.1:<ポート>'

Start-McpServer $Node ($Npx + @('obsidian-mcp-server@3.7.2') + $args)

%USERPROFILE%\bin\google-mcp.ps1:

. (Join-Path $PSScriptRoot 'mcp-common.ps1')

$env:GOOGLE_OAUTH_CLIENT_ID = Get-Key 'GOOGLE_OAUTH_CLIENT_ID'
$env:GOOGLE_OAUTH_CLIENT_SECRET = Get-Key 'GOOGLE_OAUTH_CLIENT_SECRET'
$env:USER_GOOGLE_EMAIL = 'you@example.com'
$env:OAUTHLIB_INSECURE_TRANSPORT = '1'   # ログインの戻り先が自分の PC の中(localhost)だけなので http を許す
$env:WORKSPACE_MCP_TRANSPORT = 'stdio'

Start-McpServer $Uvx (@('workspace-mcp@2.3.0', '--single-user', '--tool-tier', 'core',
  '--tools', 'gmail', 'drive', 'calendar', 'docs', 'sheets', 'slides', 'tasks', 'contacts') + $args)
  • .ps1 は BOM 付きの UTF-8 で保存する(日本語を含む場合)。メモ帳なら「UTF-8 (BOM 付き)」を選ぶ
  • npx は npx.cmd ではなく node.exe から npx-cli.js を動かす。AI のアプリが .cmd をうまく起動できないことがあるため
  • LINE も同じ形(CHANNEL_ACCESS_TOKEN と DESTINATION_USER_ID を入れ、@line/line-bot-mcp-server を起動)。一斉送信など危ない道具は、AI ごとの許可の設定で止めておく
  • Python の MCP を自分で動かすときは PYTHONUTF8=1 を付ける。Windows の既定の文字コード(cp932)では日本語が化けることがある

5-3 各 AI に登録する

Obsidian を例にした入力。他の MCP は名前とスクリプトを差し替えます。

PS> $ps = 'powershell.exe','-NoProfile','-ExecutionPolicy','Bypass','-File'

PS> claude mcp add -s user obsidian -- @ps "$HOME\bin\obsidian-mcp.ps1"

PS> $env:CODEX_HOME = "$HOME\.codex"; codex mcp add obsidian -- @ps "$HOME\bin\obsidian-mcp.ps1"
PS> $env:CODEX_HOME = "$env:APPDATA\orca\codex-accounts\<ID>\home"; codex mcp add obsidian -- @ps "$HOME\bin\obsidian-mcp.ps1"
PS> Remove-Item Env:CODEX_HOME

PS> grok mcp add obsidian -- @ps "$HOME\bin\obsidian-mcp.ps1"
PS> agy mcp add obsidian -- @ps "$HOME\bin\obsidian-mcp.ps1"

Chrome(Codex・Grok・agy)はスクリプトを使わず、直接登録します。利用統計の送信は切ります。

PS> $chrome = "$env:ProgramFiles\nodejs\node.exe","$env:ProgramFiles\nodejs\node_modules\npm\bin\npx-cli.js",'-y','chrome-devtools-mcp@1.12.0','--usageStatistics=false','--performanceCrux=false'
PS> grok mcp add chrome-devtools -- @chrome

5-4 初回のログイン

  • Google:最初に道具を使ったときにブラウザーが開く。許可は1回で、全 AI が同じログインを使う。許可を待っている間に AI の処理を止めると戻れないので、止めずに待つ
  • Claude Code は、登録した後に起動し直すと有効になる

手順6 動作確認

PS> claude mcp list
PS> codex mcp list
PS> grok mcp doctor
PS> agy mcp list
  • □ 5つの CLI の --version が出る
  • □ 使う AI と gh がログイン済み
  • □ 指示ファイルが AGENTS.md へのリンクになっている
  • □ 各 AI がルールにしか書いていないことを答えられる
  • □ 各 AI から Obsidian のノート一覧が取れる
  • □ Orca から Claude と Codex のチャットを開ける
  • □ AI の設定ファイル(%USERPROFILE%\.claude.json・%USERPROFILE%\.codex\config.toml・Orca の専用フォルダー・%USERPROFILE%\.grok\config.toml・%USERPROFILE%\.gemini\config\mcp_config.json)にキーが平文で入っていない

手順7 Flutter と Xcode(Windows で書き、Mac でビルド)

iPhone のアプリは、最後のビルドに macOS と Xcode が要ります(Xcode に Windows 版は無い)。Windows で Flutter のコードを書いて Chrome で画面を確かめ、iPhone 向けのビルドとシミュレーターでの実行は Mac に任せます。

Flutter:Windows で書き、iPhone 向けは Mac でビルド
  • Flutter = Google の、1つのコードで iPhone・Android・Web などのアプリを作る仕組み
  • Mac が無い場合は、クラウドの Mac を借りる方法や、Flutter のクラウドビルドのサービスもある(料金は各社のサイトで確認)

7-1 Mac で Xcode を使えるようにする

App Store で Xcode を入れた後、Mac のターミナルで1行ずつ実行します(sudo は Mac の管理者のパスワード)。

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
$ sudo xcodebuild -license accept
$ sudo xcodebuild -runFirstLaunch
$ xcodebuild -downloadPlatform iOS        # iOS シミュレーター(約 8GB)
$ brew install --cask flutter
$ brew install cocoapods
$ flutter doctor                          # Xcode に ✓ が付けば OK
  • Xcode を入れても、使う Xcode が Command Line Tools のままのことがある。1行目で切り替える
  • Android の × は、Android 向けを作らないなら無視してよい
  • 必要な空き容量の目安:Xcode と iOS シミュレーター、Flutter・CocoaPods で 15〜20GB

7-2 Windows に Flutter を入れる

PS> git clone --depth 1 -b stable https://github.com/flutter/flutter.git "$HOME\dev\flutter"
PS> $u = [Environment]::GetEnvironmentVariable('Path', 'User')
PS> [Environment]::SetEnvironmentVariable('Path', $u.TrimEnd(';') + ";$HOME\dev\flutter\bin", 'User')
PS> flutter config --no-analytics
PS> flutter doctor          # Flutter・Chrome に ✓ が付けば OK
  • Windows アプリとして動かすには Visual Studio(「C++ によるデスクトップ開発」)、Android には Android Studio が要る
  • 開発のフォルダーは Google ドライブの外(例:%USERPROFILE%\dev\)に置く。同期の衝突を避けるため

7-3 アプリを作って Chrome で確かめる

PS> cd $HOME\dev
PS> flutter create --platforms ios,web --org com.example my_app
PS> cd my_app
PS> flutter run -d chrome     # 保存するとすぐ画面に反映される(r で再読み込み、q で終了)
  • --org はアプリの識別名の前半(例:自分のドメインを逆にしたもの)。com.example は試し用

7-4 Mac でビルドして iPhone のシミュレーターで動かす

送る・ビルドする・起動するを1回で行うスクリプト %USERPROFILE%\bin\flutter-ios.ps1 を作ります(BOM 付きの UTF-8 で保存)。Windows 標準の scp で送るので、手順1-4 の SSH の鍵が要ります。

param(
  [string]$Project = (Get-Location).Path,
  [string]$Device = 'iPhone 16',
  [string]$Mac = 'mac1'
)
$Project = (Resolve-Path $Project).Path
$name = Split-Path $Project -Leaf
$bundleId = (Select-String -Path (Join-Path $Project 'ios\Runner.xcodeproj\project.pbxproj') -Pattern 'PRODUCT_BUNDLE_IDENTIFIER = ([^;]+);' |
  ForEach-Object { $_.Matches[0].Groups[1].Value } | Where-Object { $_ -notmatch 'RunnerTests' } | Select-Object -First 1)

$skip = 'build', '.dart_tool', '.idea'
ssh $Mac "rm -rf ~/dev/$name && mkdir -p ~/dev/$name"
Get-ChildItem $Project -Force | Where-Object { $skip -notcontains $_.Name } | ForEach-Object { scp -r -q $_.FullName "${Mac}:dev/$name/" }

ssh $Mac @"
export PATH=/opt/homebrew/bin:`$PATH LANG=en_US.UTF-8
cd ~/dev/$name && rm -rf ios/Pods ios/.symlinks ios/Flutter/ephemeral ios/Flutter/Generated.xcconfig ios/Flutter/flutter_export_environment.sh
flutter pub get && flutter build ios --simulator --debug || exit 1
xcrun simctl boot '$Device' 2>/dev/null; open -a Simulator
xcrun simctl install booted build/ios/iphonesimulator/Runner.app
xcrun simctl launch booted $bundleId
"@
PS> cd $HOME\dev\my_app
PS> flutter-ios.ps1                          # iPhone 16 で起動
PS> flutter-ios.ps1 -Device "iPhone 16 Pro"  # 機種を変える
  • 毎回すべてを送り直す簡単な作り。大きなプロジェクトでは、WSL の rsync で差分だけ送る方が速い
  • ios/Flutter/Generated.xcconfig などには Windows のパスが入るので、Mac 側で消して作り直させる
  • シミュレーターの画面は、VNC(画面共有)で Mac の画面を開いて見る。Mac がスリープしているとビルドできない
  • 実機の iPhone で動かすには、Mac に iPhone をつなぐ。App Store に出すには Apple Developer Program(年 99 米ドル。日本円の額は登録の画面に出る)が要る

つまずきやすい点

起きること原因対処
winget のインストールが何も表示されずに止まる「ユーザー アカウント制御」の確認画面が出たまま画面で「はい」を押す(隠れていたらタスクバーの盾のアイコン)
新しい端末で claude が見つからないユーザーの PATH に .local\bin が無い手順1-2
cursor-agent が「スクリプトの実行が無効」で動かない実行ポリシーが初期設定のまま手順1-3。または cursor-agent.cmd で起動
コマンドが「見つからない」WSL の Ubuntu の画面で打っているWindows の PowerShell で打つ
スクリプトが「パスが存在しない」、日本語が化けるPowerShell 5.1 が BOM なしの UTF-8 を読めない.ps1 は BOM 付きの UTF-8 で保存
シンボリックリンクが作れない管理者の権限が無い「ターミナル(管理者)」で mklink。または開発者モードをオン
MCP が '"node"' is not recognizedAI のアプリが古い PATH を受け継いでいる起動用のスクリプトで PATH を読み直す(5-2)。AI のアプリを起動し直す
agy が答えを返さないキーの無い MCP がつながらず、agy が待ち続けるキーを置く。使わない MCP は登録しない
Codex に登録したはずの MCP やルールが無いOrca から起動すると CODEX_HOME が Orca の専用フォルダーを指すCODEX_HOME を指定して両方に登録する
agent コマンドが Grok になるGrok と cursor-agent の両方が agent を作るcursor-agent の名前で起動する

秘密情報の扱い

  • キー・パスワードは %USERPROFILE%\.keys だけに置き、Vault・Google ドライブ・AI の設定ファイルには書かない
  • claude mcp add -e KEY=… のようにキーを直接渡すと %USERPROFILE%\.claude.json に平文で残る。必ず起動用のスクリプトを通す
  • このマニュアルを人に渡すときや画面を共有するときは、keys.txt と Obsidian のプラグインの設定ファイルを開かない

公式サイト一覧

この手順書に出てくるアプリ・ツールの公式ページです(2026-11-12 時点)。

種類名前公式ページこの手順書での役割
下準備Node.jsnodejs.orgnpx で動く MCP
下準備Git for Windowsgit-scm.comgit
下準備uvdocs.astral.sh/uvPython 製の MCP
下準備GitHub CLIcli.github.comGitHub の操作
AI の CLIClaude Codecode.claude.com/docsAI(Anthropic)
AI の CLICodexGitHub(openai/codex)AI(OpenAI)
AI の CLIAntigravityantigravity.googleAI(Google)
AI の CLIGrok Builddocs.x.ai/build/overviewAI(xAI)
AI の CLICursor CLIcursor.com/cliAI(Cursor)
アプリOrcaonorca.dev(GitHub)AI の作業画面
アプリObsidianobsidian.md共用のノート
アプリVS Codecode.visualstudio.comコードの編集
アプリSlackslack.com/downloads依頼と通知
アプリLinearlinear.app/download作業の管理
アプリClaudeclaude.com/downloadチャット
アプリChatGPT・Codex アプリchatgpt.com/downloadチャット
アプリGeminigemini.googleチャット
拡張機能Claude in Chromeclaude.com/chromeClaude Code から Chrome を操作
Obsidian プラグインLocal REST APIGitHubMCP からノートを読み書き
MCPobsidian-mcp-serverGitHubObsidian
MCPGoogle Workspace MCPGitHubGmail・ドライブ・カレンダー
MCPLINE Bot MCP ServerGitHubLINE
MCPChrome DevTools MCPGitHubChrome
FlutterFlutterflutter.deviPhone などのアプリ
AppleXcodedeveloper.apple.com/xcodeiPhone 向けのビルド
AppleApple Developer Programdeveloper.apple.com/jp/programsApp Store への公開