🪟

WindowsのClaude CodeでSerenaが使いたいんじゃ!!

に公開

はじめに

僕は Mac ユーザーですが、
Windows で開発する機会が最近あり、
ちょうど Claude Code が使えるようになったとのことなので
これでガンガン開発したろ!と思って導入。

Mac では Serena を使ってガシガシ活用してました。
https://github.com/oraios/serena?tab=readme-ov-file#claude-code

が、Windows で Serena を使うってときにちょっと一悶着あったので
備忘録としてメモしておきます。
あとからまた調べ直すの大変なんで…

環境

  • Claude Code
  • Windows 11
  • VScode

バージョンは 2025-08-14 時点で最新あたり。

結論

bat と ps1 を作って bat を mcp で add する

# run-serena.ps1
$proj = (Get-Location).Path
uvx --from git+https://github.com/oraios/serena `
  serena start-mcp-server `
  --context ide-assistant `
  --project "$proj"
@echo off
REM 常にこのフォルダをカレントにして実行
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -File ".\run-serena.ps1"

を作ったら

claude mcp remove serena  # 旧定義があれば
claude mcp add serena .\run-serena.cmd

インストールできない問題

この記事をたどりましたがつまづきました。

https://zenn.dev/acntechjp/articles/a3daf17083277f

まず、Windows だとこのインストールコマンドが聞きません。
uvx で使われている --from が Powershell の引数とごっちゃになって邪魔をするみたいです。

claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena-mcp-server --context ide-assistant --project (Get-Location)

claude mcp add ... は、-- 以降の引数を正しくパススルーできないことがあります。
特に -NoProfile や --from などのオプションが CLI 側で「不明なオプション」として解釈されてしまう不具合があります。

Ps1 ファイル経由で実行

ので、考える方法としては「どうやって --from 問題を回避するか?」
ですが、ChatGPT に聞いて解決しました。
Powershell が --from でぶっ壊れるのなら、
じゃあ Powershell をバッチにすればいいんじゃね?
という感じの考えです。

というわけでこれを作りました。

# run-serena.ps1
$proj = (Get-Location).Path
uvx --from git+https://github.com/oraios/serena `
  serena start-mcp-server `
  --context ide-assistant `
  --project "$proj"

理論上はこれを claude mcp add すれば OK なわけですが、
現実はそう甘くありませんでした。

image

  1. 実行ポリシー(ExecutionPolicy)の回避
    .ps1 を直接実行すると、PowerShell の ExecutionPolicy 設定や「インターネットから取得されたファイル」(MOTW) が原因でブロックされる場合があります。

じゃあどう回避すりゃいいのかというと

.ps1 を直接実行すると、PowerShell の ExecutionPolicy 設定や「インターネットから取得されたファイル」(MOTW) が原因でブロックされる場合があります。
.cmd 側から powershell -ExecutionPolicy Bypass を明示すれば、これを上書きして安全に実行できます。

とのことだったので、cmd ファイルも作ります。

# run-serena.cmd
@echo off
REM 常にこのフォルダをカレントにして実行
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy Bypass -File ".\run-serena.ps1"

この cmd の方を claude mcp add すると、
Serena のウィンドウが立ち上がり、使用可能になります。

GPT によるまとめ

なぜ .ps1.cmd でラップするのか

1. Claude CLI の引数パース問題を回避

claude mcp add ... は、-- 以降の引数を正しくパススルーできないことがあります。
特に -NoProfile--from などのオプションが CLI 側で「不明なオプション」として解釈されてしまう不具合があります。
.cmd にまとめてしまえば、Claude CLI は「単なる実行ファイル」として認識するため、引数の誤解釈が発生しません。

2. 実行ポリシー(ExecutionPolicy)の回避

.ps1 を直接実行すると、PowerShell の ExecutionPolicy 設定や「インターネットから取得されたファイル」(MOTW) が原因でブロックされる場合があります。
.cmd 側から powershell -ExecutionPolicy Bypass を明示すれば、これを上書きして安全に実行できます。

3. ネットワーク/同期ドライブでの権限問題対策

M:\... のようなネットワークドライブや同期フォルダ上の .ps1 は、セキュリティ制限で直接起動できないことがあります。
.cmd は通常の実行可能ファイルとして扱われるため、この制限を受けにくくなります。

4. 起動パスやカレントディレクトリの固定

Claude CLI から .ps1 を直接呼ぶ場合、カレントディレクトリが変わることがあり、Get-Location が意図したパスを返さないことがあります。
.cmdcd /d "%~dp0" とすれば、必ずスクリプトのある場所を起点に実行できます。

まとめると

  • 引数誤解釈を防ぐ
  • PowerShell 実行ポリシーを回避
  • ネットワーク/同期ドライブでの制限を回避
  • 実行ディレクトリを固定

という 4 つの効果があるので、記事では「Windows 環境での安定起動のためのラッパー手法」として紹介すると、背景が伝わりやすくなると思います。

Discussion