マイグレーションガイド
このガイドは、Traeの異なるバージョン間でのマイグレーションと、拡張機能、設定、プロジェクトのアップグレードを支援します。
概要
Traeは以下を支援するマイグレーションツールとガイドを提供します:
- 古いバージョンから新しいバージョンへのアップグレード
- 拡張機能とプラグインのマイグレーション
- 設定ファイルと設定の更新
- レガシープロジェクトとワークスペースの変換
- 破壊的変更と非推奨機能の処理
- カスタム設定とデータの保持
バージョンマイグレーション
Trae 2.x から 3.x
破壊的変更
- API変更: いくつかのAPIが新しいシグネチャで更新されました
- 設定フォーマット: 設定フォーマットがモダン化されました
- 拡張システム: 改善された機能を持つ新しい拡張アーキテクチャ
- プラグインインターフェース: パフォーマンス向上のためのプラグインインターフェースの更新
マイグレーション手順
データのバックアップ
bash# ワークスペースをバックアップ cp -r ~/.trae ~/.trae-backup # プロジェクト設定をバックアップ find . -name ".trae" -type d -exec cp -r {} {}.backup \;設定ファイルの更新
typescript// 古いフォーマット (v2.x) { "editor": { "fontSize": 14, "theme": "dark" } } // 新しいフォーマット (v3.x) { "editor.fontSize": 14, "workbench.colorTheme": "dark" }拡張機能の更新
bash# インストール済み拡張機能をリスト表示 trae --list-extensions # すべての拡張機能を更新 trae --update-extensions # 互換性のない拡張機能を再インストール trae --reinstall-extensionsカスタム設定のマイグレーション
typescriptimport { MigrationTool } from '@trae/migration'; const migrator = new MigrationTool(); // 設定をマイグレーション await migrator.migrateSettings({ from: '2.x', to: '3.x', settingsPath: '~/.trae/settings.json' }); // キーバインディングをマイグレーション await migrator.migrateKeybindings({ from: '2.x', to: '3.x', keybindingsPath: '~/.trae/keybindings.json' });
Trae 1.x から 2.x
主要な変更
- ワークスペースフォーマット: 新しいワークスペースファイル構造
- テーマシステム: 強化されたテーマ機能
- 言語サポート: 改善された言語サーバー統合
- デバッグ設定: 更新されたデバッグインターフェース
マイグレーションプロセス
ワークスペースファイルの変換
typescriptimport { WorkspaceMigrator } from '@trae/migration'; const migrator = new WorkspaceMigrator(); // ワークスペースを変換 await migrator.convertWorkspace({ source: './project.trae-workspace', target: './project.code-workspace', version: '2.x' });起動設定の更新
json// 古いフォーマット (v1.x) { "version": "0.1.0", "configurations": [ { "name": "Launch", "type": "node", "program": "${workspaceRoot}/app.js" } ] } // 新しいフォーマット (v2.x) { "version": "0.2.0", "configurations": [ { "name": "Launch", "type": "node", "program": "${workspaceFolder}/app.js", "console": "integratedTerminal" } ] }
拡張機能のマイグレーション
API更新
コマンド登録
typescript
// 古いAPI (v2.x)
context.subscriptions.push(
trae.commands.registerCommand('extension.myCommand', () => {
// コマンドロジック
})
);
// 新しいAPI (v3.x)
context.subscriptions.push(
trae.commands.registerCommand('extension.myCommand', {
handler: () => {
// コマンドロジック
},
enablement: 'editorHasSelection'
})
);設定アクセス
typescript
// 古いAPI (v2.x)
const config = trae.workspace.getConfiguration('myExtension');
const value = config.get('setting');
// 新しいAPI (v3.x)
const config = trae.workspace.getConfiguration();
const value = config.get('myExtension.setting');イベント処理
typescript
// 古いAPI (v2.x)
trae.workspace.onDidChangeTextDocument((event) => {
// 変更を処理
});
// 新しいAPI (v3.x)
trae.workspace.onDidChangeTextDocument((event) => {
// 改善されたイベントデータで変更を処理
}, null, context.subscriptions);拡張機能マニフェストの更新
json
// 古いマニフェスト (v2.x)
{
"name": "my-extension",
"version": "1.0.0",
"engines": {
"trae": "^2.0.0"
},
"activationEvents": [
"onLanguage:javascript"
]
}
// 新しいマニフェスト (v3.x)
{
"name": "my-extension",
"version": "2.0.0",
"engines": {
"trae": "^3.0.0"
},
"activationEvents": [
"onLanguage:javascript"
],
"capabilities": {
"virtualWorkspaces": true,
"untrustedWorkspaces": {
"supported": true
}
}
}設定のマイグレーション
設定のマイグレーション
typescript
import { SettingsMigrator } from '@trae/migration';
class SettingsMigrator {
async migrateSettings(options: MigrationOptions): Promise<void> {
const oldSettings = await this.loadSettings(options.from);
const newSettings = this.transformSettings(oldSettings, options.to);
await this.saveSettings(newSettings, options.to);
}
private transformSettings(oldSettings: any, targetVersion: string): any {
const newSettings: any = {};
// エディター設定を変換
if (oldSettings.editor) {
newSettings['editor.fontSize'] = oldSettings.editor.fontSize;
newSettings['editor.fontFamily'] = oldSettings.editor.fontFamily;
newSettings['editor.tabSize'] = oldSettings.editor.tabSize;
}
// ワークベンチ設定を変換
if (oldSettings.workbench) {
newSettings['workbench.colorTheme'] = oldSettings.workbench.theme;
newSettings['workbench.iconTheme'] = oldSettings.workbench.iconTheme;
}
// 拡張機能設定を変換
if (oldSettings.extensions) {
for (const [key, value] of Object.entries(oldSettings.extensions)) {
newSettings[`extensions.${key}`] = value;
}
}
return newSettings;
}
}キーバインディングのマイグレーション
typescript
import { KeybindingsMigrator } from '@trae/migration';
class KeybindingsMigrator {
async migrateKeybindings(options: MigrationOptions): Promise<void> {
const oldKeybindings = await this.loadKeybindings(options.from);
const newKeybindings = this.transformKeybindings(oldKeybindings);
await this.saveKeybindings(newKeybindings, options.to);
}
private transformKeybindings(oldKeybindings: any[]): any[] {
return oldKeybindings.map(binding => {
// コマンド名を更新
if (binding.command === 'workbench.action.files.openFile') {
binding.command = 'workbench.action.files.openFileFolder';
}
// キーの組み合わせを更新
if (binding.key === 'ctrl+shift+p') {
binding.key = 'cmd+shift+p';
}
return binding;
});
}
}データのマイグレーション
ワークスペースデータ
typescript
import { WorkspaceDataMigrator } from '@trae/migration';
class WorkspaceDataMigrator {
async migrateWorkspaceData(workspacePath: string): Promise<void> {
const workspaceData = await this.loadWorkspaceData(workspacePath);
// プロジェクト設定をマイグレーション
if (workspaceData.settings) {
workspaceData.settings = this.migrateProjectSettings(workspaceData.settings);
}
// 起動設定をマイグレーション
if (workspaceData.launch) {
workspaceData.launch = this.migrateLaunchConfigurations(workspaceData.launch);
}
// タスクをマイグレーション
if (workspaceData.tasks) {
workspaceData.tasks = this.migrateTasks(workspaceData.tasks);
}
await this.saveWorkspaceData(workspacePath, workspaceData);
}
private migrateProjectSettings(settings: any): any {
// プロジェクト固有の設定を変換
const migratedSettings = { ...settings };
// ファイル関連付けを更新
if (settings.files?.associations) {
migratedSettings['files.associations'] = settings.files.associations;
delete migratedSettings.files;
}
return migratedSettings;
}
private migrateLaunchConfigurations(launch: any): any {
return {
...launch,
version: '0.2.0',
configurations: launch.configurations.map((config: any) => ({
...config,
program: config.program?.replace('${workspaceRoot}', '${workspaceFolder}'),
console: config.console || 'integratedTerminal'
}))
};
}
}拡張機能データ
typescript
import { ExtensionDataMigrator } from '@trae/migration';
class ExtensionDataMigrator {
async migrateExtensionData(extensionId: string): Promise<void> {
const extensionData = await this.loadExtensionData(extensionId);
// 拡張機能の状態をマイグレーション
if (extensionData.state) {
extensionData.state = this.migrateExtensionState(extensionData.state);
}
// 拡張機能の設定をマイグレーション
if (extensionData.settings) {
extensionData.settings = this.migrateExtensionSettings(extensionData.settings);
}
await this.saveExtensionData(extensionId, extensionData);
}
private migrateExtensionState(state: any): any {
// 拡張機能の状態データを変換
const migratedState = { ...state };
// 状態構造を更新
if (state.version === '1.0') {
migratedState.version = '2.0';
migratedState.data = this.transformStateData(state.data);
}
return migratedState;
}
}マイグレーションツール
CLIマイグレーションツール
bash
# マイグレーションツールをインストール
npm install -g @trae/migration-cli
# マイグレーションを実行
trae-migrate --from 2.x --to 3.x --workspace ./my-project
# ドライラン(変更をプレビュー)
trae-migrate --from 2.x --to 3.x --workspace ./my-project --dry-run
# 特定のコンポーネントをマイグレーション
trae-migrate --from 2.x --to 3.x --settings-only
trae-migrate --from 2.x --to 3.x --extensions-only
trae-migrate --from 2.x --to 3.x --workspace-onlyプログラマティックマイグレーション
typescript
import { MigrationManager } from '@trae/migration';
const migrationManager = new MigrationManager();
// 完全なマイグレーションを実行
await migrationManager.migrate({
from: '2.x',
to: '3.x',
workspace: './my-project',
backup: true,
dryRun: false
});
// 選択的マイグレーションを実行
await migrationManager.migrateSelective({
from: '2.x',
to: '3.x',
components: ['settings', 'keybindings', 'extensions'],
workspace: './my-project'
});トラブルシューティング
よくある問題
拡張機能の互換性
- 新しいバージョンとの拡張機能の互換性を確認
- 互換性のない拡張機能を更新または置換
- 拡張機能の作者に問題を報告
設定の競合
- マイグレーションされた設定の競合を確認
- 問題のある設定をデフォルトにリセット
- 複雑な設定を手動で調整
データ損失の防止
- マイグレーション前に必ずバックアップ
- マイグレーション結果を検証
- マイグレーションが成功確認されるまでバックアップを保持
復旧手順
bash
# バックアップから復元
cp -r ~/.trae-backup ~/.trae
# デフォルトにリセット
trae --reset-settings
trae --reset-keybindings
# 拡張機能を再インストール
trae --uninstall-all-extensions
trae --install-extensions-from-backupベストプラクティス
マイグレーション前
- 完全なバックアップを作成
- カスタム設定を文書化
- 非本番環境でマイグレーションをテスト
- 破壊的変更のドキュメントを確認
マイグレーション中
- 最初にドライランを実行
- 段階的にマイグレーション
- 各ステップを検証
- 詳細なログを保持
マイグレーション後
- すべての機能をテスト
- ドキュメントを更新
- チームメンバーに変更を教育
- 問題を監視
関連リソース
- バージョン履歴 - 詳細なバージョン情報
- 拡張機能API - 拡張機能開発ガイド
- 設定API - 設定管理
- ワークスペースAPI - ワークスペース設定
- コマンドAPI - コマンドシステムの更新