auカブコム証券が提供する高機能トレーディングツール「kabuステーション(株ステーション)」。PythonやExcel、自作プログラム等から株価のリアルタイム取得や自動発注ができる強力な「kabuステーション API」機能が用意されています。

しかし、API機能を使おうと株ステーションを起動した際、「ポートが既に使用されています」 とエラーが出てしまい、右上の </> アイコンが赤色(通信不可)のままAPIサーバーが立ち上がらないトラブルに悩まされたことはないでしょうか?

ネット上でもよく知られている回避策として、

「Windowsのサービス一覧から『IP Helper』を一旦手動で停止 ➔ 株ステを起動してAPIを有効化 ➔ 再びIP Helperを開始する」

という手順が知られています。確かにこれなら動くのですが、株ステーションを起動するたびに毎回サービスを手作業で止めたり動かしたりするのは、あまりにも面倒ですよね。

そこで今回は、このポート競合問題を Windowsの標準機能「予約ポート(ReservedPorts)」 を使って元から断ち、PC起動後いつでもスムーズに株ステーションAPIを一発起動できるようにする恒久対策をご紹介します!

⚠️ WARNING

【ここが最大の落とし穴!】18080番だけを予約してもダメ!

実はkabuステーションAPIは、通常のREST API通信用の 18080番 だけでなく、リアルタイムPUSH受信用(WebSocket)として 18081番 も使っています。

当初18080番だけを予約して検証したところ、18081番が奪われてアイコンが赤のまま動かないという罠にハマりました……。「18080番と18081番の両方」を予約するのが必須 です!

最新の PowerShell 7 でもエラーにならずコピペで確実に動く登録スクリプトを用意しましたので、ぜひ試してみてください。

💡 生成AI活用のメモ 本記事で紹介しているポート競合(18080/18081)のメカニズム調査、およびPowerShell 7向けの予約設定スクリプトの作成・検証は Gemini とのペアプログラミングで実施し、記事の構成・執筆もGeminiでまとめています。

なぜ競合するのか?犯人はWindowsの「IP Helper」サービス

まず、なぜこのエラーが起きるのか、原因と仕組みをサクッと確認しておきましょう。

Windowsのサービス管理画面(IP Helper iphlpsvc のプロパティ) ▲ Windowsのサービス管理画面に常駐している「IP Helper(iphlpsvc)」

Windowsのサービス管理画面を開くと、「IP Helper(サービス名: iphlpsvc)」 という標準サービスが常駐して動いています。

このサービスは、IPv6移行技術(Teredo、6to4、ISATAPなど)をサポートするための機能です。ネットワークの初期化やトンネリング通信を行う際、OSに対して「通信用のポートを空いているところから適当に1つ割り当ててくれ」と要求します。

株ステAPIが使う2つのポート:「18080」と「18081」

ここが一番のポイントです。kabuステーションAPIは、実は 2つのポート を組み合わせて動作しています。

  1. ポート 18080(REST API)
    * 認証(トークン発行)、注文発注・取消、残高照会、株価ボード取得などのリクエスト・レスポンス通信。
  2. ポート 18081(PUSH配信 / WebSocket)
    * リアルタイムの板情報(Tickデータ)や約定通知が証券会社からプッシュで飛んでくるストリーミング通信。

どちらのポートも、株ステーション側は「この番号を使います!」と**ピンポイントで指定(指名買い)** して開こうとします。

「指名買い」vs「おまかせ(動的ポート)」の衝突

一方、IP HelperなどのWindowsバックグラウンド通信は、
* 「ポート番号は何番でもいいから、空いているやつを適当にくれ(動的バインド / エフェメラルポート)」

とOSにおまかせで依頼します。

問題は、IP Helperがおまかせで頼んだときに、Windowsが**たまたま「18080番」や「18081番」を渡してしまうことがある**という点です。

先にIP Helperに18080番や18081番を取られてしまうと、後から起動した株ステーションが「使いたいポートがもう塞がっている!」となり、ポート競合エラーでAPIが起動できなくなってしまいます。


なぜ「サービスの遅延開始」ではダメなのか?

この問題への対策として、「IP Helperサービスのスタートアップを『自動(遅延開始)』にする」という方法を見かけることがあります。

PC起動直後にすぐ株ステーションを起動するのであれば、確かに一時しのぎにはなります。しかし:

  • 「PCを立ち上げてから数時間後や夜間に、取引やバックテストで株ステを立ち上げたい」
  • 「常時起動しているPCで、必要なタイミングだけ株ステを起動する」

といった運用の場合、遅延開始したIP Helperがとうの昔に動き出してしまっているため、**結局ポートを奪われて同じエラーが発生してしまいます**。

そのため、起動の先後関係やタイミングに頼らない、根本的な対策が必要になります。


根本的な解決策:Windowsの予約ポート(ReservedPorts)

そこで登場するのが、WindowsのTCP/IP設定にある ReservedPorts(予約ポート) というレジストリ機能です。

予約ポートの本当の仕組み

「ポートを予約する」と聞くと、「株ステーション専用のポートとしてプログラム名を登録するのかな?」と想像しがちですが、実は違います。

ReservedPorts の本当の役割は:

「OSが『何番でもいいからポートをくれ』とおまかせで頼まれたときに配る“くじ引きの箱”から、18080番と18081番を取り除く」

という設定です。

  • プロセスの事前登録は不要:どのプログラムが使うかといった名前の登録は一切不要。
  • 株ステーション自身は弾かれない:株ステーションは「18080番」「18081番」を指名買いで要求するため、ポートが空いていればOSは何の制限もなく正常に割り当ててくれます。
  • IP Helperには絶対に渡らない:動的ポート(おまかせ枠)の候補から除外されるため、IP Helperには別の空きポート(例: 49xxx番など)が渡されます。
  • 範囲指定が可能18080-18081 と書くことで、18080番と18081番の両方をまとめて一発で除外 できます!

つまり、「IP Helperが18080や18081を誤ってくじ引きで引いてしまう事故」を完全に防ぐことができる のです!


【実践】PowerShell 7 で一発設定する手順

それでは、実際にWindowsに予約ポートを設定しましょう。

最新の PowerShell 7 環境ではレジストリ書き込み時の型チェックが厳しくなっており、普通に書くと RegistryKey.SetValue does not support arrays of type 'Object[]' というエラーが発生してしまいます。

ここでは、PowerShell 7でも従来のPowerShell 5.1(Windows標準)でも、どちらでも確実に動作する安全なスクリプトを用意しました。

✨ TIP

もし過去に 18080-18080(単一ポート)で登録してしまっていた場合でも、このスクリプトを実行すれば古い設定を自動で除外・クリーンアップし、18080-18081 へ安全にアップデートしてくれます!

ステップ1:管理者としてPowerShellを起動

  1. スタートボタンを右クリック(または Win + X キー)。
  2. メニューから 「ターミナル(管理者)」 または 「PowerShell(管理者)」 を開きます。
  3. ユーザーアカウント制御(UAC)が表示されたら「はい」をクリック。

ステップ2:設定スクリプトを実行

以下のコードブロックをコピーしてPowerShell画面に貼り付け、Enterキー を押します。

$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"\n\n# 既存の設定を取得し、古い \"18080-18080\" を除外\n[string[]]$current = (Get-ItemProperty -Path $regPath -Name "ReservedPorts" -ErrorAction SilentlyContinue).ReservedPorts | Where-Object { $_ -and $_ -ne \"18080-18080\" -and $_ -ne \"18080-18081\" }\n\n# 18080-18081(両方のポート)を追加\n[string[]]$updated = $current + \"18080-18081\"\n\nSet-ItemProperty -Path $regPath -Name \"ReservedPorts\" -Value $updated -Type MultiString\nWrite-Host \"設定完了: 18080-18081 を予約しました。PC再起動で反映されます。\" -ForegroundColor Green\n

ステップ3:登録されたか確認する

設定が反映されたか、次のコマンドを実行して確認してみましょう。

(Get-ItemProperty -Path \"HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\").ReservedPorts\n
PowerShell 7での18080-18081予約ポート設定および確認実行画面 ▲ PowerShell 7でスクリプトを実行し、ReservedPortsに「18080-18081」が正しく登録された様子

画面のように、緑色の完了メッセージが表示され、確認コマンドで 18080-18081 と出力されればレジストリへの書き込みはバッチリ成功です!

ステップ4:PCを再起動する

予約ポートの設定は、WindowsのTCP/IPスタックが起動するときに読み込まれます。

一度PCを再起動 してください。


動作確認:PC再起動後、いつでも一発起動!(緑色アイコン点灯)

PC再起動後、さっそくkabuステーションを起動してAPI機能を有効化してみましょう。

ポート競合が解決すると、画面右上のステータスアイコンが正常な状態になります!

kabuステーションAPIが正常起動し、緑色のアイコンが点灯した様子 ▲ IP Helperが実行中でも、右上の「</>」アイコンが鮮やかな緑色に点灯し、正常通信状態に!

ご覧の通り、バックグラウンドでIP Helperサービスが元気に稼働している状態でも、右上の </> アイコンが鮮やかな緑色に点灯 し、API通信がすべて正常に確立されました!

【参考】ポートが奪われていると「赤色アイコン」になる

ちなみに、18080番や18081番がIP Helperに奪われて通信が成立していないときは、次のように 赤色 で表示されます。

ポート競合によりAPI通信ができていない状態(赤色アイコン) ▲ ポートが奪われてAPI通信ができていない状態(赤色の</>アイコン)

「18080番だけ予約したのに、なぜかまだ赤アイコンのまま……」という場合は、18081番(PUSH受信用)が奪われている可能性大 です。

必ず 18080-18081 の範囲で予約されているかチェックしてみてください。


よくある質問(Q&A)

Q1: 設定を元に戻したい(解除したい)ときは?

もし設定を解除したい場合は、レジストリエディターから簡単に削除できます。

  1. Win + R キーを押し、regedit と入力してEnter。
  2. 上部のアドレスバーに次のキーを貼り付けて開きます:
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters
  3. 右側一覧にある ReservedPorts をダブルクリック。
  4. 値の一覧から 18080-18081 の行を削除して「OK」をクリック。
  5. PCを再起動すれば元に戻ります。

Q2: netshコマンドの excludedportrange とは何が違うの?

コマンドプロンプト等で動的ポートを除外する方法として netsh int ipv4 add excludedportrange ... を見かけることがあります。

しかし、netsh で除外範囲に設定すると、「そのポートを使用するには管理者権限が必要」 というWindowsのセキュリティ制限がかかる場合があります。

kabuステーションを一般ユーザー権限で起動している場合、「アクセス拒否(WSAEACCES / Socket Error 10013)」でポートが開けなくなるリスクがあるため、レジストリの ReservedPorts を使うのが最も安全で確実です。


まとめ

  • 原因:IP Helperサービスが「おまかせ(動的ポート)」で、株ステーションAPIのポート(18080や18081)をたまたま先に掴んでしまっていた。
  • 要注意ポイント:REST API用の 18080番 だけでなく、PUSH配信(WebSocket)用の 18081番 も使われているため、両方の予約が必須!
  • 状態の見分け方:右上の </> アイコンが 赤色なら通信不可(エラー)緑色なら正常接続中
  • 対策:レジストリの ReservedPorts18080-18081 を登録し、動的割り当ての候補から一括除外。
  • 効果:手動でのサービス停止・再開が不要になり、PC起動後いつでも一発で緑色アイコン(正常接続)が点灯!

株ステーションAPIを使った株価監視や自動売買プログラムを運用している方で、起動時のポート競合や赤アイコンに悩まされていた方は、ぜひこの 18080-18081 予約ポート設定を試してみてください!
毎日の起動ストレスがゼロになりますよ!