2025-06-07 22:55:27 +09:00

178 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VSCode拡張機能開発TIPSImageMarkPengent
## Vscodeの起動イメージ
```mermaid
flowchart TD
A["拡張機能の起動"] --> B["コマンドやイベントリスナーを登録"]
B --> C["Disposableをcontext.subscriptionsにpush"]
C --> D["拡張機能の終了"]
D --> E["VSCodeが自動でdispose()を呼び出し、リソース解放"]
```
## よく使うAPI・ポイント
- `vscode.window.showInformationMessage('メッセージ')`
- 右下に情報メッセージを表示できる。デバッグやユーザー通知に便利。
- `console.log('メッセージ')`
- 拡張機能のデバッグ用ログ。VSCodeの「出力」→「拡張機能のログ」で確認できる。
- `vscode.commands.registerCommand('コマンドID', () => { ... })`
- コマンドIDはpackage.jsonのcontributes.commandsで定義したものと一致させる必要がある。
- コマンドの実装はこのコールバック内に記述。
- `context.subscriptions.push(オブジェクト)`
- 登録したコマンドやイベントリスナーは、context.subscriptionsにpushしておくと拡張機能の終了時に自動でクリーンアップされる。
- もう少しかみ砕くと拡張機能が無効化・アンロードされたときに、イベントリスナーやコマンドなどのリソースを自動で解放してくれるという意味です。
- pushしない場合、拡張機能が終了してもコマンドやリスナーが残り続け、メモリリークや予期しない動作の原因になります。
- `activate(context: vscode.ExtensionContext)`
- 拡張機能が有効化されたときに一度だけ呼ばれる初期化関数。
- `deactivate()`
- 拡張機能が無効化されたときに呼ばれるクリーンアップ関数。
---
## その他
- コマンドの追加や変更を行った場合は、VSCodeの再起動や拡張機能の再読み込みReloadを行うと反映されやすい。
---
## コマンド登録と右クリックメニュー対応
### コマンドの登録
1. `package.json`にコマンドを登録する
2. contributes.commands に新しいコマンド(例: imagemarkpengent.openImageEditorを追加
3. activationEvents にコマンドのonCommandイベントを追加
* VSCode拡張機能が「いつ有効化起動」されるかを決めるトリガーを定義するものです。
* VSCodeの拡張機能は、「VSCodeの起動時」や「特定のファイルを開いたとき」など、必要なタイミングで初めてメモリにロードされ、activate関数が呼ばれます。
| 設定値 | 説明 |
| ----------------------- | ------------------------------------------------------------ |
| "onCommand:コマンドID" | 指定したコマンドが実行されたときに拡張機能を有効化 |
| "onLanguage:言語ID" | 指定した言語のファイルが開かれたとき |
| "onFileSystem:スキーム" | 指定したファイルシステムスキームのリソースにアクセスしたとき |
| "*" | VSCode起動時に必ず有効化非推奨重くなるため |
```json
"activationEvents": [
"onCommand:imagemarkpengent.openImageEditor"
],
"contributes": {
"commands": [
{
"command": "imagemarkpengent.openImageEditor",
"title": "Open in ImageMarkPengent"
}
],
}
```
### 右クリックメニューに対応する
1. `package.json`にコマンドを登録する
2. contributes.menus に`explorer/context`を追加する
* explorer/context は エクスプローラー(ファイルツリー)で右クリックしたときのコンテキストメニュー
3. menuの内容を追加する
* groupはメニュー内でのコマンドの表示位置を指定するためのグループ名です
* "navigation": ファイルやフォルダをナビゲーション・開く
```json
"contributes": {
"menus": {
"explorer/context": [
{
"command": "imagemarkpengent.openImageEditor",
"when": "resourceExtname =~ /\\.(png|jpg|jpeg)$/",
"group": "navigation"
}
]
}
}
```
### 対象拡張子を `.png` / `.jpg` / `.jpeg` に限定
基本的には、explorer/context メニューの when 句で拡張子を限定すれば十分ですが
「コマンドの実行自体を拡張子で制御したい」場合は、コマンド実装側でも拡張子チェックを行うのが安全です。
#### コマンド側の実装例
```js
vscode.commands.registerCommand('imagemarkpengent.openImageEditor', (uri: vscode.Uri) => {
if (!uri || !uri.fsPath.match(/\.(png|jpg|jpeg)$/i)) {
vscode.window.showWarningMessage('対応画像ファイル(.png, .jpg, .jpegを選択してください。');
return;
}
// ここに画像編集処理
});
```
## デプロイ方法
VSCodeの拡張機能extensionを実装した後、公開して他の人に使ってもらうには、主に以下の方法があります
---
### ① **Visual Studio Code Marketplace に公開する(公式手順)**
👉 一般的・標準的な方法。VSCode本体からインストール可能になる。
#### 必要な準備
1. **Microsoftアカウント****Publisherアカウント登録**
* [Visual Studio Marketplace](https://marketplace.visualstudio.com/manage) で publisher を作成
1. **`vsce` CLIツール のインストール**
#### デプロイを実行する
```bash
npm install -g vsce
```
#### 公開手順
1. **パッケージ作成**
```bash
vsce package
```
`.vsix` ファイルが生成される(ローカル配布にも使える)
##### リンクエラーになった場合
```error
ERROR Couldn't detect the repository where this extension is published. The link './README.jp.md' will be broken in README.md.
```
vsceが`package.json`に epositoryURLがないため、
README内のリンク解決ができないというエラーです。
GitHubやGitLabにリポジトリがある場合はrepositoryフィールドを入れるとOK。
2. **公開**
```bash
vsce publish
```
初回はアクセストークンが必要Marketplace から取得)。
#### メリット
* 世界中のユーザーに簡単に配布
* 自動アップデート対応