STM32のファームウェアをVisual Studio Code(VS Code)で書く公式の手段が、STマイクロエレクトロニクスの拡張「STM32CubeIDE for Visual Studio Code」です。旧称「STM32 VS Code Extension」と同じ拡張で、2026年10月時点の最新は3.11.0(2026年9月28日公開)、無料で使えます。拡張を入れると、GCC・CMake・Ninja・ST-LINK GDBサーバーといったツールをBundle Managerが取ってきて、CMakeでのビルドとST-Link/J-Linkでのデバッグまでがつながります。この記事では、拡張パックの中身、Lチカのビルド、デバッグ設定、VS Codeの外からビルドするcube CLIまでを、検証環境で実際にコマンドを動かした結果とあわせて説明します。
まとめ:STM32CubeIDE for VS Codeの要点
- 拡張の識別子は
stmicroelectronics.stm32-vscode-extension。名前は「STM32 VS Code Extension」から「STM32CubeIDE for Visual Studio Code」へ変わったが、同じ拡張です。必要なVS Codeは1.94.2以上。 - 3.x系は15本の拡張をまとめた拡張パック。STM32CubeCLTを別に入れる必要はなく、GCC(gnu-tools-for-stm32 14.3.1)やCMake 4.4.0はBundle Managerが入れる。
- 3.10.0で画面が日本語化され、CLIから空のプロジェクトを作れるようになった。デバッグ時のLive Watchも既定で有効。
- デバッグの標準はST純正の
stlinkgdbtarget/jlinkgdbtarget。launch.jsonが残らないのは、設定の保存が既定で無効だから。 - 2026年10月1日にcube CLI(STM32CubeCLI)が単体で配布され、VS Codeを使わずにCIやターミナルで同じ版のツールを使ってビルドできる。
- デュアルコア・TrustZone構成のEclipseプロジェクトは変換して取り込めないので、Eclipse版に残す。
STM32CubeIDE for VS Codeとは:3.11時点の構成とEclipse版との違い
「stm32cube vscode」「cubeide vscode」「stm32 vs code extension」など呼び方は分かれますが、指しているのは同じ拡張です。
改称の経緯と版の履歴
2023年3月に「STM32 VS Code Extension」1.0.0として公開され、その後「STM32Cube for Visual Studio Code」を経て、いまの名前になりました。2025年5月の3.4.11はプレリリース版として出て、ツール群をBundle Managerで取る形に作り直されています。VS Code MarketplaceのAPIで取得した公開日は次のとおりです。
| 版 | 公開日 | 主な変更 |
|---|---|---|
| 2.0.0 | 2024-04-03 | CMakeプロジェクトの生成をCubeMXに移す |
| 3.4.11 | 2025-05-07 | 拡張パック化・Bundle Manager(プレリリース) |
| 3.6.4 | 2025-10-13 | 3.x系を正式版にする |
| 3.8.0 | 2026-03-09 | STM32C5対応の時期のリリース |
| 3.10.0 | 2026-07-20 | 多言語化・CLIで空プロジェクト作成 |
| 3.11.0 | 2026-09-28 | 最新版 |
3.10.0の内容はST Communityのリリース告知に載っています。たとえば、マルチコアのデバイスで空のプロジェクトを作るときにコアを選べるようになり、J-LinkのJTAGチェーンにあった9デバイスまでという制限もなくなりました。3.11.0の告知(2026年9月29日)は3.x全体の機能一覧を載せているだけで、3.10.0との違いは書かれていません。
拡張パックに入る15本の拡張
本体をインストールすると、依存する拡張がまとめて入ります。3.11.0のマニフェストに書かれている構成は、ST製12本と他社製3本です。
- ビルド:STM32Cube Core、Bundles Manager、Build CMake、Build Analyzer、Project Manager、MicrosoftのCMake Tools
- デバッグ:Debug Core、Generic GDB Server、ST-Link GDB Server、J-Link GDB Server、RTOS、Registers
- 編集・周辺:clangd(コード補完)、Eclipse CDTのMemory InspectorとSerial Monitor
C/C++の補完はclangdが担当します。Microsoft製のC/C++拡張は拡張パックに入っていません。Build Analyzerはリンク後のelfを解析してメモリ使用量を表示する機能で、3.10.0でZephyrのビルド成果物も読めるようになりました。ZephyrそのものはZephyrOS(Zephyr RTOS)とは?特徴・FreeRTOSとの比較とLTSの選び方・westでの始め方で扱っています。
Eclipse版STM32CubeIDE 2.xとの使い分け
EclipseベースのSTM32CubeIDEも開発は続いていて、2026年6月30日に2.2.0が出ています。2.0.0(2025年11月)からはCubeMXがIDEに入っていないので、どちらを選んでもペリフェラルの設定は単体のSTM32CubeMXで行うことになります(STM32CubeIDE 2.0.0の告知)。
| 観点 | Eclipse版 2.2.0 | VS Code版 3.11.0 |
|---|---|---|
| ビルド | 独自のmake管理/CMake | CMake+Ninja |
| ツールの入手 | IDEに同梱 | Bundle Managerで取得 |
| ツールの版の固定 | IDEの版に従う | プロジェクトごとにロック |
| 補完 | Eclipse CDT | clangd |
| AIコーディング拡張 | 限られる | VS Codeのものがそのまま動く |
VS Code版を選ばないほうがよいのは、次の3つの場合です。
- デュアルコアやTrustZoneを使う既存のEclipseプロジェクトがある場合。変換インポートはマルチコンテキストの構成とpre/post-buildに対応していません(2026年3月の告知)。新しく作るデュアルコアのプロジェクトについては、ST社員が「VS Code拡張でデバッグできる」と回答しています。
- インターネットにつながらないPCで開発する場合。オフライン用のオールインワン配布は、STの回答(2026年4月27日)時点で「No decision taken」でした。
- チーム全員がEclipseのやり方でそろっている場合。
どれにも当てはまらず、Gitの使い勝手やAIコーディングを重視するなら、VS Code版から始めるのがおすすめです。
インストール手順:拡張・ツール・CubeMXの準備
STM32CubeCLTとSTM32CubeIDEを別にインストールする必要はありません。VS Code本体、拡張パック、CubeMXの3つを入れれば、残りのツールはBundle Managerが入れます。
拡張機能パックのインストールと日本語表示
拡張ビュー(Ctrl+Shift+X)で「STM32CubeIDE for Visual Studio Code」を検索し、発行元がSTMicroelectronicsであることを確かめてからインストールします。コマンドで入れる場合は次のとおりです。
code --install-extension stmicroelectronics.stm32-vscode-extension
3.10.0からは画面の文言が多言語化されています。各サブ拡張のパッケージに日本語の翻訳ファイルが入っていて、VS Codeの表示言語が日本語なら、コマンドパレットにも「空のプロジェクトを作成」「Eclipse STM32CubeIDEプロジェクトを変換」などと日本語で表示されます。
Bundle Managerで入るGCC・CMake・Ninjaの版
ビルドに使うツールは、拡張の中のBundle Managerがhttps://developer.st.com/bundlesから取ってきます。2026年10月17日にcube CLIのcube bundle list-onlineで、macOS(Intel)向けに配信されている最新版を確認した結果が次の表です。
| バンドル名 | 中身 | 最新版 |
|---|---|---|
| gnu-tools-for-stm32 | arm-none-eabi-gcc | 14.3.1+st.2 |
| st-arm-clang | ST版LLVM(Clang) | 21.1.1+st.7 |
| cmake | CMake | 4.4.0+st.1 |
| ninja | Ninja | 1.13.2+st.1 |
| stlink-gdbserver | ST-LINK GDBサーバー | 7.14.0+st.2 |
| programmer | STM32CubeProgrammer | 2.23.0 |
| jlink-gdbserver | SEGGER J-Link GDBサーバー | 9.42.0+st.1 |
GCCには13.3.1系も残っていて、古い版でビルドしたいプロジェクトは13.3.1に固定できます。ツールはプロジェクトごとに版を固定でき、その情報は.settingsフォルダのファイルに書かれます。このフォルダをGitに入れれば、チームの全員が同じGCCでビルドできます。STM32CubeCLTの最新は1.22.0(2026年6月30日)で、配布はまだ続いています。STは「Bundle Managerを単体ツールとして公開するまで、CubeCLTを非推奨にしない」と説明していました(ST社員の回答・2026年4月3日)。
CubeMX(6系)とCubeMX2の選び方
ペリフェラルとクロックの設定にはSTM32CubeMXを使います。STの製品ページは「STM32C5以降の新しいシリーズはSTM32CubeMX2専用」としていて、CubeMX2はHAL2を使うマイコン向けのツールです。F4やG4など、従来からあるシリーズでは今もCubeMX 6系を使います。
CubeMX 6系でVS Code用のプロジェクトを作るときは、Project ManagerでToolchain/IDEをCMakeにして生成します。自分で書くコードはUSER CODE BEGINからUSER CODE ENDまでの間に置きます。この範囲の外は、コードを再生成したときに上書きされます。CubeMX2では生成コードが別のファイルに分かれる仕組みに変わっているので、同じルールは当てはまりません。
STM32プロジェクトの作成とLチカのビルド
CubeMXで生成したCMakeプロジェクトの取り込み
生成されたフォルダをVS Codeで開くと、右下に「検出したCMakeプロジェクトをSTM32Cubeプロジェクトとして構成しますか?」(英語表示では「Configure discovered CMake project(s) as STM32Cube project(s)?」)という通知が出ます。ここで構成を選ぶと、拡張がCMakeとNinjaのバンドルを入れ、プロジェクトが使うGCCを決めて、デバイス用のDFP(CMSIS-Pack)を取得し、CMakeのconfigureを実行します。ここまで自動で進みます。最後にclangdの設定まで行われます。ビルドを始めるとDebugかReleaseかを聞かれます。
空のプロジェクトでのLチカの実装とビルド
CubeMXを使わずに試したい場合は、空のプロジェクトから始めます。VS Codeのコマンドパレットで「STM32Cube: 空のプロジェクトを作成」を実行するか、次のようにCLIで作ります。CLIで作るときは、後述のcube CLIのインストールと、デバイス用パック(DFP)の導入を先に済ませておきます。デバイス名にはSTM32F401RET6のような型番をすべて書きます。STM32F401REと書いたら「Device STM32F401RE not found.」と表示されて作れませんでした。
cube ide-project-create --destination ./blinky --name blinky --target-device STM32F401RET6
生成されたのは、CMakeLists.txt、CMakePresets.json(Debug/Releaseの2種類・ジェネレータはNinja)、cmake/フォルダの5ファイル、スタートアップとリンカスクリプト、.settings/フォルダです。このうちcmake/files.cmakeには先頭に「DO NOT EDIT THIS FILE」と書かれています。自分のソースはCMakeLists.txtのtarget_sourcesの「User defined sources」の行に足します。
NUCLEO-F401REのLD2(PA5)を点滅させるコードの例です。レジスタのアドレスは、パックに入っているSVDファイル(STM32F401.svd)の値と照らし合わせて確認しました。
/* App/led.c */
#include <stdint.h>
#include "led.h"
#define RCC_AHB1ENR (*(volatile uint32_t *)0x40023830u)
#define GPIOA_MODER (*(volatile uint32_t *)0x40020000u)
#define GPIOA_ODR (*(volatile uint32_t *)0x40020014u)
void led_init(void)
{
RCC_AHB1ENR |= (1u << 0); /* GPIOAにクロックを供給 */
GPIOA_MODER &= ~(3u << (5 * 2));
GPIOA_MODER |= (1u << (5 * 2)); /* PA5を出力にする */
}
void led_toggle(void)
{
GPIOA_ODR ^= (1u << 5);
}
# CMakeLists.txt(該当部分)
target_sources(${PROJECT_NAME} PRIVATE
# User defined sources
${CMAKE_CURRENT_SOURCE_DIR}/App/led.c
)
target_include_directories(${PROJECT_NAME} PRIVATE
# User defined include directories
${CMAKE_CURRENT_SOURCE_DIR}/App
)
ヘッダーApp/led.hで2つの関数を宣言し、Src/main.cから呼び出します。待ち時間のループは、カウンターをvolatileにしないと最適化で消されることがあります。点滅の周期はクロック設定と最適化レベルで変わるので、正確な間隔が必要ならタイマーを使います。
/* App/led.h */
#ifndef LED_H
#define LED_H
void led_init(void);
void led_toggle(void);
#endif
/* Src/main.c */
#include <stdint.h>
#include "led.h"
int main(void)
{
led_init();
for (;;) {
led_toggle();
for (volatile uint32_t i = 0; i < 400000u; i++) { } /* 簡易ウェイト */
}
}
GCC 14.3.1でビルドすると7ステップで終わり、最後にメモリ使用量が表示されました。実機への書き込みは試していません。
[6/7] Linking C executable blinky.elf
Memory region Used Size Region Size %age Used
RAM: 1976 B 96 KB 2.01%
FLASH: 1012 B 512 KB 0.19%
Qiitaなどでは、日本語を含むフォルダではビルドに失敗したという報告があります。この検証(macOS)では、「日本語フォルダ」というフォルダにコピーしても、configureとビルドがどちらも通りました。Windowsでは試していないので、迷ったら半角英数字だけのパスにしておくのが確実です。外部のライブラリをCMakeで取り込む方法はCMakeのFetchContentとは|Declare・MakeAvailableの書き方とオプション早見表で説明しています。
既存Eclipse版プロジェクトのCMake変換
Eclipse版で作ったプロジェクトは、コマンド「Eclipse STM32CubeIDEプロジェクトを変換」でCMakeプロジェクトに変換できます。変換先のデバイスが見つからずに止まる場合は、設定stm32cube-ide-project-manager.conversion.ignoreMissingDeviceを有効にします。デバイスを未設定のまま変換を終え、あとで指定できます。マルチコア・TrustZoneの構成とpre/post-buildのステップは変換できないので、それらを使うプロジェクトはEclipse版に残します。
ST-Link・J-Linkのデバッグ設定
デバッグでは、拡張がST-LINK GDBサーバー(またはJ-Link GDBサーバー)を起動し、VS Codeのデバッガから接続します。OpenOCDの.cfgファイルを自分で選ぶ必要はありません。
launch.jsonの既定の構成と保存されない理由
「実行とデバッグ」でlaunch.jsonを作るときに「STM32Cube: STM32 Launch STLink GDB Server」を選ぶと、次の構成が入ります。ST-Link GDB Server拡張(1.5.0)のpackage.jsonに定義されている内容そのものです。
{
"type": "stlinkgdbtarget",
"request": "launch",
"name": "STM32Cube: Launch ST-Link GDB Server",
"origin": "snippet",
"cwd": "${workspaceFolder}",
"preBuild": "${command:st-stm32-ide-debug-launch.build}",
"runEntry": "main",
"imagesAndSymbols": [
{ "imageFileName": "${command:st-stm32-ide-debug-launch.get-projects-binary-from-context1}" }
]
}
ここに書いていない項目には既定値が使われます。接続方式serverInterfaceはSWD、GDBのポートserverPortは61234、RTOSの認識serverRtosはenabled・port・driverを持つオブジェクトで、driverの既定値はfreertosです。J-Linkを使う場合はtypeをjlinkgdbtargetにします。
launch.jsonを作らなくてもF5でデバッグは始まります。ただしこのとき自動で作られる構成は、ファイルに保存されません。設定stm32cube-ide-debug-core.debugConfiguration.enableSaveConfigurationの既定値がfalseだからです。チームで構成を共有したいときはこれをtrueにするか、上の構成を.vscode/launch.jsonのconfigurations配列に入れてコミットします。ファイル全体は次の形です。
{
"version": "0.2.0",
"configurations": [
{ "type": "stlinkgdbtarget", "request": "launch", "name": "STM32Cube: Launch ST-Link GDB Server" }
]
}
configurationsの中の構成には、上に示した残りの項目(cwd・preBuild・imagesAndSymbolsなど)もそのまま入れます。
Live Watch・RTOSビュー・フォールト解析
3.10.0からは、ST-Link GDBサーバーでデバッグするとLive Watchが既定で有効になります。プログラムを止めずに、グローバル変数の値を1秒に4回(liveWatch.samplesPerSecondの既定値)更新して表示します。RTOSのビューはFreeRTOSとThreadXに対応していて、すべてのスレッドの呼び出し履歴を見られます。RTOSのしくみと製品ごとの違いはRTOSとは?リアルタイムOSの仕組み・主要製品の比較と採用判断を実装者目線で解説、ThreadXの入手先はAzure RTOSとは?Eclipse ThreadX移管後の入手先・ライセンス・Azure IoT連携の現状を実装者向けに解説にまとめています。HardFaultで止まったときは、コマンド「フォールト状態レジスタを更新」でフォールトの原因を表すレジスタを読めます。ST-Linkのファームウェアの更新も、コマンドパレットの「ST-Link ファームウェアをアップグレード」から行えます。このとき接続するボードは1台だけにします。
cortex-debug+OpenOCDを使う場面
OpenOCDのスクリプトを細かく制御したい場合や、ST以外のマイコンと同じデバッグ手順にそろえたい場合は、Marus25のcortex-debug拡張を別に入れて使います。拡張パックには入っていません。typeはcortex-debug、servertypeはopenocdにして、configFilesにinterface/stlink.cfgと、シリーズに合ったターゲット(F4ならtarget/stm32f4x.cfg)を指定します。STM32だけを扱うなら、ST純正の構成のほうが設定は少なくて済みます。
cube CLIによるターミナル・CIでのビルド
拡張がツールを入れるのに使っている仕組みは、2026年10月1日に「STM32CubeCLI」として単体で配布が始まりました(ST Communityの告知)。CIのランナーやターミナルで、VS Codeと同じ版のGCCを使ってビルドできます。macOS/Linuxでは、1行目でインストールしたあと、source ~/.zprofile(bashならsource ~/.bashrc)でPATHを読み直すか、ターミナルを開き直します。2行目以降は、版を固定済みのプロジェクトのルート(CMakePresets.jsonがある場所)で実行します。
curl -fsSL https://developer.st.com/bundles/install/install.sh | bash -
cube bundle install --project # プロジェクトで固定した版のツールを入れる
cube cmake --preset Debug # configure
cube cmake --build --preset Debug # ビルド
インストールスクリプトの中身を確認すると、~/.local/stm32cubeにcubeコマンドを置き、~/.bashrcと~/.zprofileにPATHを追加する処理が書かれていました。手元のシェル設定を変えたくない場合は、HOMEを検証用のフォルダに替えて実行します。cube wrapper 0.10.4で実行した結果、次の3点がわかりました。
- CLIで作った空のプロジェクトでは、ツールの版が固定されていない。
.settings/bundles.store.jsonは中身が{}のままで、cube cmakeではコンパイラが見つからずconfigureが失敗した。cube bundle install --yes --project gnu-tools-for-stm32 cmake ninjaを実行すると、^14.3.1+st.2のように版の範囲がファイルに書き込まれ、ビルドできるようになった。 - ロックファイルには、OSとCPUの組み合わせごとに1行ずつ記録される。
bundles-lock.store.jsonには、GCCについてaarch64-darwin・x86_64-darwin・x86_64-linux・x86_64-windowsの4行が書かれた。Macで固定した内容を、そのままLinuxのCIで使える。 - CLIだけで空のプロジェクトを作るには、先にデバイスのパックが要る。パックが無い状態では「Unable to collect the devices list」と表示されて作れなかった。
cube pack syncでパックの一覧(ST公式の66件)を取得し、cube pack install STMicroelectronics.stm32f4xx_dfp.1.2.0でF4用のDFPを入れると作れるようになった。VS Codeの拡張は、この手順を自動で行う。
ファイルを書き込むときはcube programmer、デバッグ用のサーバーはcube stlink-gdbserverで、どちらもバンドルとして用意されています。社内のCIにSTM32のビルドを組み込む場合も、このロックファイルをリポジトリに入れておくのが基本になります。
Claude Code・CopilotとSTM32 Sidekickの使い分け
開発をVS Codeで行えば、Claude CodeやGitHub CopilotのようなAIコーディングの拡張もSTM32のソースに使えます。CMakeLists.txtへのソースの追加、ビルドエラーの読み解き、HALを呼ぶコードの下書きが主な使いどころです。導入手順はClaude Code for VS Codeの使い方:公式docsの読み方・インストール・タブ補完非対応の回避策【2026年10月版】とVS CodeでGitHub Copilotを使うには?導入・SSO設定・使い方・料金を解説【2026年10月版】で説明しています。
3.10.0からは、拡張の中にSTのAIアシスタント「STM32 Sidekick」への入口(「STM32Cube: Sidekick の AI ベース STM32 エージェント」)もあります。Sidekick自体は、STの製品ページやSTM32 Communityで使える技術アシスタントとして提供されています(STM32 Sidekickの紹介ページ)。STの資料について質問するときはSidekick、ソースを書いたり直したりするときはClaude CodeやCopilot、と分けて使います。
AIに任せてよいのは、USER CODEの範囲内のアプリケーションロジック、CMakeの設定、ビルドエラーの読み解きです。CubeMXが生成する初期化コードをAIに書き換えさせると、次に生成し直したときに消えてしまいます。AIが書いたレジスタの設定は、上の例のようにSVDファイルやリファレンスマニュアルの値と突き合わせてから使います。センサーをつないでクラウドにデータを送るところまで開発を外部に頼みたい場合は、AI/IoTソリューションも相談先の一つになります。
よくある質問
STM32CubeIDE for VS Codeは無料ですか?
無料です。VS Code Marketplaceから入れる拡張パックで、GCCやCMakeなどのツールも、Bundle Managerから追加料金なしで取得できます。
STM32CubeCLTは別にインストールする必要がありますか?
3.x系では必要ありません。Bundle ManagerがGCC 14.3.1・CMake 4.4.0・Ninja 1.13.2などを取ってきます。CubeCLT 1.22.0の配布は続いていますが、VS Code版で使うなら入れなくてかまいません。
Eclipse版のSTM32CubeIDEで作ったプロジェクトは開けますか?
開けます。「Eclipse STM32CubeIDEプロジェクトを変換」でCMakeプロジェクトに変換してから開きます。デュアルコア・TrustZoneの構成と、pre/post-buildを使うプロジェクトは変換できません。
STM32のGCCはどの版が使われますか?
2026年10月17日時点の最新はgnu-tools-for-stm32 14.3.1+st.2で、13.3.1系も選べます。プロジェクトで固定した版が、そのプロジェクトのビルドに使われます。
ST-Linkでボードに接続できないときは?
まずコマンドパレットの「ST-Link ファームウェアをアップグレード」でファームウェアを更新します。このとき接続するボードは1台だけにしてください。それでもつながらない場合は、USBケーブルが充電専用でないか、serverInterfaceがボードの配線(SWD/JTAG)と合っているかを確認します。