ワークスペース API
ワークスペース APIは、現在のワークスペースとの相互作用、ファイルとフォルダーの管理、ワークスペースレベルの操作を処理するメソッドを提供します。
概要
ワークスペース APIでは以下のことができます:
- ワークスペースファイルへのアクセスと変更
- ファイルシステムの変更の監視
- ワークスペース設定の管理
- 複数のワークスペースフォルダーの処理
- ワークスペース全体の操作の実行
基本的な使用方法
ワークスペース情報の取得
typescript
import { TraeAPI } from '@trae/api';
// ワークスペースフォルダーを取得
const workspaceFolders = TraeAPI.workspace.workspaceFolders;
if (workspaceFolders) {
console.log('ワークスペースフォルダー:', workspaceFolders.map(f => f.uri.fsPath));
}
// ワークスペース名を取得
const workspaceName = TraeAPI.workspace.name;
console.log('ワークスペース名:', workspaceName);ファイル操作
typescript
// ファイルコンテンツを読み取り
const fileUri = TraeAPI.Uri.file('/path/to/file.txt');
const content = await TraeAPI.workspace.fs.readFile(fileUri);
const text = Buffer.from(content).toString('utf8');
// ファイルコンテンツを書き込み
const newContent = Buffer.from('Hello, World!', 'utf8');
await TraeAPI.workspace.fs.writeFile(fileUri, newContent);
// ファイルが存在するかチェック
const exists = await TraeAPI.workspace.fs.stat(fileUri)
.then(() => true)
.catch(() => false);ワークスペースイベント
typescript
// ファイル変更を監視
TraeAPI.workspace.onDidChangeTextDocument((event) => {
console.log('ドキュメントが変更されました:', event.document.fileName);
console.log('変更内容:', event.contentChanges);
});
// ファイル作成/削除を監視
TraeAPI.workspace.onDidCreateFiles((event) => {
console.log('ファイルが作成されました:', event.files.map(f => f.fsPath));
});
TraeAPI.workspace.onDidDeleteFiles((event) => {
console.log('ファイルが削除されました:', event.files.map(f => f.fsPath));
});APIリファレンス
プロパティ
workspaceFolders
ワークスペースフォルダーの配列を返します。
typescript
readonly workspaceFolders: readonly WorkspaceFolder[] | undefined;name
ワークスペースの名前。
typescript
readonly name: string | undefined;メソッド
openTextDocument()
テキストドキュメントを開きます。
typescript
openTextDocument(uri: Uri): Thenable<TextDocument>;
openTextDocument(fileName: string): Thenable<TextDocument>;saveAll()
すべての未保存ファイルを保存します。
typescript
saveAll(includeUntitled?: boolean): Thenable<boolean>;findFiles()
ワークスペース内のファイルを検索します。
typescript
findFiles(
include: GlobPattern,
exclude?: GlobPattern,
maxResults?: number
): Thenable<Uri[]>;ファイルシステム API
fs.readFile()
ファイルの全内容を読み取ります。
typescript
readFile(uri: Uri): Thenable<Uint8Array>;fs.writeFile()
ファイルにデータを書き込みます。
typescript
writeFile(uri: Uri, content: Uint8Array): Thenable<void>;fs.createDirectory()
新しいディレクトリを作成します。
typescript
createDirectory(uri: Uri): Thenable<void>;使用例
プロジェクトファイルスキャナー
typescript
async function scanProjectFiles() {
const files = await TraeAPI.workspace.findFiles('**/*.{js,ts,jsx,tsx}');
for (const file of files) {
const document = await TraeAPI.workspace.openTextDocument(file);
console.log(`ファイル: ${file.fsPath}, 行数: ${document.lineCount}`);
}
}ワークスペース設定
typescript
// ワークスペース設定を取得
const config = TraeAPI.workspace.getConfiguration('myExtension');
const setting = config.get<string>('mySetting', 'defaultValue');
// 設定を更新
await config.update('mySetting', 'newValue', TraeAPI.ConfigurationTarget.Workspace);ファイルウォッチャー
typescript
const watcher = TraeAPI.workspace.createFileSystemWatcher('**/*.json');
watcher.onDidCreate((uri) => {
console.log('JSONファイルが作成されました:', uri.fsPath);
});
watcher.onDidChange((uri) => {
console.log('JSONファイルが変更されました:', uri.fsPath);
});
watcher.onDidDelete((uri) => {
console.log('JSONファイルが削除されました:', uri.fsPath);
});ベストプラクティス
- 操作を実行する前に常にワークスペースの存在を確認する
- ファイルシステム操作には適切なエラーハンドリングを使用する
- 不要になったウォッチャーは適切に破棄する
- 可能な限り相対パスを使用してポータビリティを確保する
- ユーザー設定とワークスペース設定を尊重する