よくわからんツールよりなにしてるか分かる自分でvibeしたスクリプトの方が良い屋ってことに落ち着いた例。
⏺ bedrock_server_upgrade.py の解説
Minecraft Bedrock Dedicated Server (BDS) を安全にアップグレードするためのPythonスクリプトです。
概要
このスクリプトは以下の手順でサーバーをアップグレードします:
1. 事前チェック - サーバー停止確認、ディスク容量確認
2. ZIPファイル検証 - 新しいサーバーZIPの整合性確認
3. バックアップ作成 - 現在のサーバーをZIP化
4. 展開 - 新サーバーを一時ディレクトリに展開
5. データ移行 - ワールドデータ・設定ファイルをコピー
6. スワップ - 旧サーバー→バックアップ、新サーバー→元の場所に移動
主要な安全機能
| 機能 | 説明 |
|------------|---------------------|
| 非破壊バックアップ | スワップ前にZIPバックアップを作成 |
| 一時ディレクトリ方式 | 失敗時も元のサーバーは無傷 |
| 自動ロールバック | スワップ失敗時に元に戻す試行 |
| バージョンチェック | ダウングレード・同バージョン更新を防止 |
| dry-runモード | 実際の変更なしでシミュレーション |
使い方
# ドライラン(確認用)
uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip --dry-run
# 実行(確認プロンプトあり)
uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip
# 自動実行(確認なし)
uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip -y
デフォルトでコピーされるファイル
DEFAULT_COPY_ITEMS = [
"worlds", # ワールドデータ
"server.properties", # サーバー設定
"permissions.json", # 権限設定
"allowlist.json", # 許可リスト
"whitelist.json", # 旧ホワイトリスト
"config", # カスタム設定
"packetlimitconfig.json",
]
追加でコピーしたいファイルは bedrock_server_upgrade_config.yaml の copy リストに追加可能です。
クラス構造
BedrockServerUpgrader
| メソッド | 役割 |
|---------------------------|-----------------------|
| check_disk_space() | 必要容量(サーバーサイズ×2.5倍)を確認 |
| check_server_is_stopped() | psutilでプロセス確認 |
| validate_server_zip() | ZIPファイルの整合性チェック |
| create_backup_zip() | 現サーバーのZIPバックアップ作成 |
| extract_to_temp() | 新サーバーを一時ディレクトリに展開 |
| copy_files_to_temp() | ワールド・設定を一時ディレクトリにコピー |
| swap_servers() | アトミックなサーバー入れ替え |
| run() | 全体のオーケストレーション |
設計のポイント
- アトミック性: 最後のswap_servers()まで元のサーバーは変更されない
- 復旧性: スワップ失敗時は自動でリストア試行、失敗してもバックアップZIPから手動復旧可能
- uv対応: PEP 723形式で依存関係を記述(psutil, pyyaml, packaging)
https://gist.github.com/takeru/b225d72185415edb3c3e876e9dad6ecd