
Perforce 公式 VS Code 拡張機能の接続設定と排他ロック時の挙動を確認した
はじめに
Perforce チームで働きながら、日々のちょっとした編集作業は使い慣れた VS Code で済ませたいと思ったことはないでしょうか。長らく Perforce には公式の VS Code 拡張機能が無く、有志によるコミュニティ製の拡張機能を使うほかありませんでした。2026 年、Perforce はついに公式の VS Code 拡張機能 P4VSCode (拡張機能 ID: PerforceSoftware.p4vscode) を投入しました。
本記事では、この公式拡張機能のバージョン 2026.1.0 を実際に接続し、挙動を確認します。
Perforce とは
Perforce (Helix Core) は、大容量のバイナリを多人数で扱う開発現場で広く使われる、中央集権型のバージョン管理システムです。ゲーム開発での採用が多く、マージできないバイナリを守るための排他ロックの仕組みを備えます。サーバープロセスは p4d、クライアントは p4 と呼びます。
検証環境
- macOS
- Helix Core p4d 2026.1
- P4VSCode (
PerforceSoftware.p4vscode) v2026.1.0
対象読者
- Perforce チームに所属し、日々の作業を VS Code でも行いたいエンジニア
- 公式 P4VSCode 拡張機能の導入を検討している方
参照
- P4 for Visual Studio Code (公式ドキュメント)
- P4VSCode (VS Code Marketplace)
- P4 for Visual Studio Code Release Notes (公式)
背景
公式ドキュメントでは、p4 コマンドラインクライアントを別途インストールしなくても動作し、VS Code 内で Source Control の操作を完結できると紹介されています。非公式版のユーザーが挙げてきた環境構築の手間に応えようとしているように見えます。
一方で、これらの機能が実際にどこまで期待通り動くのかは、使ってみないと分かりません。今回は、接続設定の挙動と、他ユーザーが排他ロックを保持しているファイルを編集しようとしたときの挙動について、確認してみたいと思います。
検証方法
p4d を手元に起動し、2 人のユーザー vscode_a と vscode_b、それぞれのワークスペースを用意します。検証対象として、テキストファイルとバイナリファイルを 1 つずつ登録し、バイナリファイルは vscode_b が排他ロックを保持した状態にしておきます。
p4d の起動
Perforce の p4d と p4 は公式のダウンロードページ、または公式 FTP ミラーから取得できます。
mkdir -p p4root
echo "master1" > p4root/server.id
p4d -r "$PWD/p4root" -p 1666 -L "$PWD/p4d.log" -J "$PWD/p4root/journal" -d
export P4PORT=localhost:1666
# 検証用に認証を無効化する。本番では設定しない
p4 configure set security=0
ユーザーとファイルの準備
vscode_a と vscode_b のワークスペースを作り、テキストファイルとバイナリファイルを登録します。バイナリファイルは binary+l のタイプで登録し、vscode_b が編集のために開いた状態にしておきます。
ユーザーとファイルの準備スクリプト
# vscode_a のワークスペースを作り、サンプルファイルを登録する
export P4USER=vscode_a P4CLIENT=vscode_a
p4 client -i <<EOF
Client: vscode_a
Owner: vscode_a
Root: $PWD/ws_a
View:
//depot/... //vscode_a/...
EOF
mkdir -p ws_a && cd ws_a
echo "VS Code 拡張機能の検証用サンプルファイルです。" > notes.txt
head -c 65536 /dev/urandom > character.uasset
p4 add notes.txt
p4 add -t binary character.uasset
p4 submit -d "初期サンプルファイルを追加"
cd ..
# vscode_b のワークスペースを作り、同期する
p4 -u vscode_b -c vscode_b client -i <<EOF
Client: vscode_b
Owner: vscode_b
Root: $PWD/ws_b
View:
//depot/... //vscode_b/...
EOF
p4 -u vscode_b -c vscode_b sync
# vscode_b が character.uasset を排他ロック付きで編集のために開く
p4 -u vscode_b -c vscode_b edit -t binary+l //depot/character.uasset
VS Code 拡張機能のインストールと接続
VS Code の拡張機能ビューから P4VSCode を検索し、インストールします。

インストール後、vscode_a のワークスペースフォルダ (ws_a) を VS Code で開き、接続を試みます。
検証結果
接続方法は排他的に選ぶ必要がある
ws_a 直下に、次の内容の .p4config ファイルを配置した状態でフォルダを開きました。
P4PORT=localhost:1666
P4USER=vscode_a
P4CLIENT=vscode_a
出力パネル > P4 VS Code Log で拡張機能の出力を確認できます。

P4CONFIG ファイルを探索した旨のログが出ましたが、接続には失敗しました。
Scanning for P4CONFIG files because p4.enableP4ConfigScanOnStartup is set to true
p4 'info'
p4 info failed: Failed to Connect, aborting:
Connect to server failed; check $P4PORT.
TCP connect to perforce:1666 failed.
nodename nor servname provided, or not known
接続を試みた先は、.p4config に指定した localhost:1666 ではなく perforce:1666 でした。この値の出所を、シェル環境変数、~/.p4enviro、launchctl の環境変数、VS Code のユーザー設定とワークスペース設定、.vscode/settings.json、上位ディレクトリの .p4config ファイルについて確認しましたが、いずれにも見当たりませんでした。
次に、VS Code の設定 UI から直接 p4.port、p4.user、p4.client を指定する方式を試しました。

出力ログには設定した値が認識されている旨が表示されていました。
Note: the following overrides apply in this workspace:
p4.port: localhost:1666
p4.user: vscode_a
p4.client: vscode_a
...
Scanning for P4CONFIG files because p4.enableP4ConfigScanOnStartup is set to true
p4 'info'
p4 info failed: Failed to Connect, aborting: ... perforce:1666 failed.
しかし、それでも perforce:1666 への接続を試みて失敗しました。P4: Enable P4 Config Scan On Startup を無効化したところ、次のように接続に成功しました。
Scanning setting for configuration because p4.enableP4ConfigScanOnStartup is set to false
p4 '-p' 'localhost:1666' '-c' 'vscode_a' '-u' 'vscode_a' 'info'
p4 info completed successfully
Found workspace using root directory
Client Root: .../ws_a
Creating SCM provider for vscode_a @ ...
Initialisation done for this workspace. Created 1 provider(s), ignored 0 duplicate(s)
排他ロック中のファイルへの編集操作
接続後、vscode_a の Explorer で notes.txt (ロックなし) と character.uasset (vscode_b が排他ロック保持中) を見比べましたが、アイコンや色による違いは確認できませんでした。

character.uasset を開こうとすると、VS Code 本体が次のメッセージを表示し、テキストエディタでの表示を拒否しました。
The file is not displayed in the text editor because it is either binary or uses an unsupported text encoding.
このとき、出力パネルには character.uasset に対する p4 コマンドは記録されませんでした。バイナリファイルを開く操作は VS Code 本体の側でブロックされ、拡張機能の処理には到達しないことが分かります。
次に、character.uasset を右クリックし、コンテキストメニューの P4 > Edit file(s) を実行しました。

出力パネルの記録は次の通りです。
p4 '-p' 'localhost:1666' '-c' 'vscode_a' '-u' 'vscode_a' 'edit' '.../character.uasset'
p4 edit completed successfully
E_WARN: //depot/character.uasset - can't edit exclusive file already opened
< [
{
"raw": "//depot/character.uasset - also opened by vscode_b@vscode_b"
}
]
Operation complete
p4 edit completed successfully という表示の直後に、実際の拒否内容が E_WARN として続きます。サーバー側の実際の状態を確認したところ、vscode_a は実際にはオープンできていませんでした。
$ p4 -u vscode_a -c vscode_a opened
File(s) not opened on this client.
character.uasset のファイル権限も、編集操作の前後で読み取り専用 (-r--r--r--) のまま変化していませんでした。つまり、排他ロックによる拒否そのものは正しく機能しています。
考察
接続方法について、P4CONFIG ファイル方式が機能しない場合は、P4 Config Scan を無効化したうえで VS Code の設定 UI から p4.port などを直接指定する方式が、現時点での回避策になると思われます。この 2 つの接続方式は排他的であり、Config Scan が有効なままでは、設定 UI に値を入力しても認識はされるものの接続には反映されません。この関係を知らずに設定 UI だけを触ると、値を入れたのに直らないという状況に陥るでしょう。
排他ロック中のファイルへの編集拒否が画面に表示されない点は、コマンドラインで確認していた「p4 edit は排他ロックで拒否されても終了コードが 0 になる」という挙動と地続きだと考えられます。GUI 層でも、成功と失敗が明確に分離されないまま処理が終わっているように見えました。運用上は、Perforce の操作を VS Code の出力パネル (P4) を開いた状態で行うなどの方法でカバーする必要がありそうです。
まとめ
Perforce 公式の VS Code 拡張機能 P4VSCode v2026.1.0 を実際に接続し、接続設定と排他ロック時の挙動を確認しました。接続には P4CONFIG 方式と VS Code 設定 UI 方式があり、両者は排他的に動作します。排他ロック中のファイルへの編集は正しく拒否される一方、その結果は出力パネルを見ない限り画面上では分かりませんでした。本記事が、Perforce の VS Code 拡張機能を運用する際の参考になれば幸いです。





