Pumpkin-Docs/docs/ja_jp/admin/migrating-from-bukkit.md
Alexander Medvedev 5c23b676ed feat: d binding
2026-09-17 09:23:24 +02:00

8.0 KiB

Bukkit / Spigot / Paper から Pumpkin への移行

このガイドでは、サーバーを Bukkit、Spigot、または Paper から Pumpkin に移行する際のアーキテクチャおよび設定の違いについて説明します。


1. アーキテクチャの違い

項目 Bukkit / Spigot / Paper Pumpkin
実行環境 Java 仮想マシン (Java 17/21+ が必要) ネイティブ実行ファイル (Rust コンパイル済み、Java 不要)
起動コマンド java [flags] -jar server.jar ./pumpkin
ティックループ 非同期タスクオフロードを伴うシングルスレッド CPU コア全体にわたるマルチスレッド実行
プラグイン形式 Bukkit API 向け Java バイトコード (.jar) WebAssembly (.wasm)、または PatchBukkit 経由の .jar
プラグイン言語 Java, Kotlin, Scala Rust, Python, Kotlin, C#, Go, C
設定ファイル server.properties, paper.yml, spigot.yml pumpkin.toml (TOML 形式)
メモリ管理 JVM ガベージコレクション (GC) OS ネイティブメモリ割り当て

2. プラグインと拡張機能

WebAssembly プラグイン

Pumpkin の主要なプラグイン形式は WebAssembly (.wasm) です:

  • 分離性: プラグインはサンドボックス化された WebAssembly ランタイム内で実行されます。
  • 言語サポート: Rust、Python、Go、C#、C、または Kotlin から WASM へコンパイルできます。
  • カスタムプラグイン: 独自の Bukkit プラグインを移植する場合は、開発者向け移行ガイドを参照してください。

Bukkit プラグインの互換性: PatchBukkit

既存の Bukkit/Spigot .jar プラグインを必要とするサーバー向けに、PatchBukkit プロジェクトが互換レイヤーを提供しています:

  • アーキテクチャ: PatchBukkit は Pumpkin 内に JVM を組み込み、Bukkit API の一部を再実装して、JNI および FFI 経由で Pumpkin に仲介します。
  • プラグインの配置: 互換性のある .jar プラグインは patchbukkit/patchbukkit-plugins/ に配置します。
  • 状況と制限: PatchBukkit は開発中です。標準的な Bukkit API 呼び出しはサポートされていますが、内部の NMS (net.minecraft.server) クラス、CraftBukkit リフレクション、またはバイトコード操作に依存するプラグインは正常に動作しない場合があります。
  • Java の必要性: PatchBukkit を実行するには、組み込み JVM を実行するためにホスト環境に Java ランタイム (JRE/JDK) が必要です。

3. 設定とプロパティ

Pumpkin では server.properties や YAML の代わりに TOML 設定ファイルを使用します:

Paper / Spigot (server.properties) Pumpkin (pumpkin.toml)
server-port=25565 server_address = "0.0.0.0:25565"
motd=... motd = "A Pumpkin Server"
max-players=20 max_players = 20
online-mode=true online_mode = true
view-distance=10 view_distance = 10
simulation-distance=8 simulation_distance = 8

4. ワールドとデータストレージ

  • 形式の互換性: Pumpkin は標準的な Anvil チャンク形式 (.mca ファイル) を読み込みます。
  • ディレクトリ配置: 既存の Paper/Spigot からワールドをコピーする際は、ディメンションディレクトリ (world, world_nether, world_the_end) が Pumpkin の想定する配置と一致していることを確認してください。
  • 最新のワールドおよびデータパック形式が必要: 少なくとも現時点では、Pumpkin は対象の Minecraft バージョンに対応する最新のワールド形式およびデータパック形式のみをサポートしています。古いワールド形式や以前のデータパックバージョンを起動時に自動変換する機能はありません。
    • クライアントでのワールド更新: 古いバージョンで生成されたワールドを移行する場合は、Pumpkin に読み込む前に更新してください。公式の Minecraft クライアントで直接ワールドをアップグレードできます。対応する最新バージョンのクライアントを起動し、シングルプレイから対象ワールドを選択して編集 -> ワールドを最適化を実行します。または、最新バージョンのバニラサーバーで一度ワールドを起動して保存することでも更新可能です。
    • データパック: world/datapacks 内のすべてのデータパックが、対象バージョンで要求されるパック形式に更新されていることを確認してください。

5. 起動と JVM フラグ

Java のインストールは不要

純粋な Pumpkin は単体の自己完結型ネイティブ実行ファイルです。サーバーを実行するために OS やコンテナ内に Java ランタイム (JRE/JDK) をインストールする必要はありません。

起動コマンドの比較

Paper や Spigot サーバーでは通常、ヒープ割り当てやガベージコレクション設定を含む JVM 起動スクリプト (Aikar's Flags など) を使用します:

:::code-group

# Aikar's Flags を用いた典型的な Paper 起動コマンド:
java -Xms10G -Xmx10G \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:+AlwaysPreTouch \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:G1HeapRegionSize=8M \
  -XX:G1ReservePercent=20 \
  -XX:G1HeapWastePercent=5 \
  -XX:G1MixedGCCountTarget=4 \
  -XX:InitiatingHeapOccupancyPercent=15 \
  -XX:G1MixedGCLiveThresholdPercent=90 \
  -XX:G1RSetUpdatingPauseTimePercent=5 \
  -XX:SurvivorRatio=32 \
  -XX:+PerfDisableSharedMem \
  -XX:MaxTenuringThreshold=1 \
  -Dusing.aikars.flags=https://mcflags.emc.gs \
  -Daikars.new.flags=true \
  -jar paper.jar --nogui
# Linux / macOS:
./pumpkin

# Windows:
./pumpkin.exe

# Docker:
docker run -p 25565:25565 -v ./data:/data pumpkinmc/pumpkin:latest

:::

メモリモデルの違い

  • ガベージコレクターなし: Pumpkin は Rust で記述されており、コンパイル時の決定論的なメモリ管理 (RAII) を使用します。ランタイムガベージコレクターはなく、GC 一時停止の調整もありません。
  • 固定ヒープ割り当てなし: ネイティブバイナリには -Xms や -Xmx などのフラグは存在しません。メモリはチャンクやエンティティのロードに応じて動的に確保され、アンロード時に解放されます。
  • JVM フラグは適用不可: ガベージコレクション戦略、世代サイズ、または JVM 内部パラメータを調整するフラグは不要であり、バイナリに渡すことはできません。

管理者チェックリスト

  1. 既存のサーバーデータとワールドファイルのバックアップを作成し、ワールドとデータパックが最新形式に更新されていることを確認する (クライアントの「ワールドを最適化」など)。
  2. server.properties の設定を pumpkin.toml に反映する。
  3. 必要なプラグインを確認し、WebAssembly (.wasm) の代替を探すか、PatchBukkit でテストする。
  4. プロキシネットワークを使用する場合は、pumpkin.toml でプロキシ設定 (Velocity / BungeeCord) を行う。
  5. 起動スクリプトを更新し、JVM 引数なしで ./pumpkin を直接実行するように変更する。
  6. サーバーを起動し、接続性とログを確認する。