実現したいこと
VSCodeでShellScriptを実行する拡張機能を自作しており、デバッグと実際に動作させたい。
なお、VSCodeのターミナルよりShellScriptを直接指定(省略:~/pm$ src\script\script.sh)すると実行可能。
発生している問題・分からないこと
画面下部ステータスバー左側の実行とデバッグアイコンのRun Extention(プロジェクト名)を押下し、コマンドパレットにRun Extentionと入力し、新たなVS Codeウィンドウを起動する。
新たなVS Codeウィンドウでコマンドパレットより「コマンドの表示と実行 >」を選択し、「> Run Shell Script」と入力すると「command 'extension.runShellScript' not found」 エラーとなる。
エラーメッセージ
error
1コマンド 'Run Shell Script’ でエラーが発生しました 2 3command 'extension.runShellScript' not found
該当のソースコード
構成 VSCodeエクスプローラー上の表示 pm ├── .vscode │ ├── extension.json │ ├── launch.json │ ├── setting.json │ └── tasks.json ├── node_modules(配下は省略) ├── out │ ├── test │ │ ├── extension.test.js │ │ └── extension.test.js.map │ ├── extension.js │ └── extension.js.map ├── src │ ├── script │ │ └── script.sh ( ← 今回このShellScriptを実行させたい) │ ├── test │ │ └── extension.test.js │ └── extension.js ├── .vscode-test.mjs ├── .vscodeignore ├── CHANGELOG.md ├── eslint.config.mjs ├── package-lock.json ├── package.json ├── pm-0.0.1.vsix ( ← 開発中に作成し、他の方にインストールしてもらったが何も動かなかった。) ├── tsconfig.json └── vsc-extention-quickstart.md
Json
1pm\.vscode\launch.json 2 3{ 4 "version": "0.2.0", 5 "configurations": [ 6 { 7 "name": "Run Extension", 8 "type": "extensionHost", 9 "request": "launch", 10 "runtimeExecutable": "${execPath}", 11 "args": [ 12 "--extensionDevelopmentPath=${workspaceFolder}" 13 ], 14 "outFiles": [ 15 "${workspaceFolder}/out/**/*.js" 16 ], 17 "preLaunchTask": "npm: watch", 18 "sourceMaps": true 19 } 20 ] 21} 22 23 24pm\package.json 25 26{ 27 "name": "pm", 28 "displayName": "pm", 29 "description": "", 30 "version": "0.0.1", 31 "engines": { 32 "vscode": "^1.103.0" 33 }, 34 "categories": [ 35 "Other" 36 ], 37 "main": "./src/extension.js", 38 "contributes": { 39 "commands": [ 40 { 41 "Language": "typescript", 42 "command": "extension.runShellScript", 43 "title": "Run Shell Script" 44 } 45 ] 46 }, 47 "scripts": { 48 "vscode:prepublish": "npm run compile", 49 "compile": "tsc -p ./", 50 "watch": "tsc -watch -p ./", 51 "pretest": "npm run compile && npm run lint", 52 "lint": "eslint src", 53 "test": "vscode-test" 54 }, 55 "devDependencies": { 56 "@types/mocha": "^10.0.10", 57 "@types/node": "^22.20.2", 58 "@types/vscode": "^1.103.0", 59 "@vscode/test-cli": "^0.0.12", 60 "@vscode/test-electron": "^2.5.2", 61 "eslint": "^9.39.3", 62 "typescript": "^5.9.3", 63 "typescript-eslint": "^8.56.1" 64 } 65} 66 67
Javascript
1pm\out\test\extension.test.js 2 3"use strict" 4Object.defineProperty(exports, "__esModule", { value: true });
Typescript
1pm\src\test\extension.js 2 3import * as assert from 'assert'; 4import * as vscode from 'vscode'; 5 6 7pm\src\extension.ts 8 9import * as vscode from 'vscode'; 10import { execFile} from 'child_process'; 11import * as path from 'path'; 12import * as fs from 'fs'; 13 14export function activate(context: vscode.ExtensionContext) { 15 let disposable = vscode.commands.registerCommand('extension.runShellScript', () => { 16 const scriptPath = path.join(context.extensionPath, 'src', 'script', 'script.sh'); 17 console.log(`実行予定スクリプト: ${scriptPath}`); 18 if (!fs.existsSync(scriptPath)) { 19 vscode.window.showErrorMessage(`シェルスクリプトが見つかりません: ${scriptPath}`); 20 return; 21 } 22 try { 23 fs.chmodSync(scriptPath, 0o755); 24 } catch (err) { 25 vscode.window.showErrorMessage(`chmod に失敗しました: ${(err as Error).message}`); 26 return; 27 } 28 29 execfile(scriptPath, [], { shell: '/bin/bash' }, (error, stdout, stderr) => { 30 if (error) { 31 vscode.window.showErrorMessage(`実行エラー: ${error.message}`); 32 return; 33 } 34 if (stderr) { 35 vscode.window.showErrorMessage(`スクリプト警告: ${stderr}`); 36 } 37 vscode.window.showErrorMessage(`スクリプト出力:\n${stdout}`); 38 }); 39 }); 40 context.subscriptions.push(disposable); 41} 42 43export function deactivate() {} 44 45module.exports = { 46 activate, 47 deactivate 48}; 49
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Microsort Edgeで「vscode 拡張機能 コマンドパレットに入力したコマンドが見つかりません」と検索し、ターミナルから「npm run compile」を実行しても変化が無かった。
補足
ソースコードは主要と判断したもののみを掲載しています。
必要でしたら別途追加いたします。
あなたの回答
tips
プレビュー