カテゴリー: サーバー

  • 【パルワールド】APIとDiscord Botを連携して管理サーバーを作ってみた開発記

    【パルワールド】APIとDiscord Botを連携して管理サーバーを作ってみた開発記

    はじめに

    パルワールド(Palworld)の専用サーバー(Dedicated Server)を身内で運用していると、こんな悩みに直面することがあります。

    • 「今、サーバーに誰かログインしているのかな?」
    • 「自分がいない間にみんながどれくらい遊んでいるか知りたい」
    • 「ゲームの外(Discordなど)からサーバー内にアナウンスを飛ばしたい」

    パルワールドには標準で「REST API」という外部からサーバーの情報を取得・操作できる強力な機能が備わっています。今回は、このAPIを活用して、Ubuntu上の自作サーバーとDiscordを連携させ、プレイヤーの入退室通知やステータス表示を全自動化する「パルワールド管理Discord Bot」を開発した全記録をお届けします。

    同じように「サーバー管理を快適にしたい」「Pythonでちょっとした自動化ツールを作ってみたい」という方の参考になれば幸いです。


    1. パルワールド専用サーバーで「外部連携」を行うメリット

    パルワールドの専用サーバーは、ただ立ち上げるだけでもある程度遊べますが、外部のAPI機能を使ってDiscordなどのGUI(画面やチャットインターフェース)と連携させることで、管理効率とコミュニティの快適性が劇的に向上します。

    ① ゲームを開かずに「島の状況」が一目でわかる

    通常、サーバーに誰がいるかを確認するには、ゲームを起動してサーバーにログインするか、黒い画面(CUIコンソール)を開いて複雑なコマンドを叩く必要があります。 しかし、Discord Botと連携させることで、スマホやPCのDiscord画面を見るだけで「現在のログイン人数」や「誰がオンラインか」がリアルタイムに把握できるようになります。

    BOTの名前のとこでも今何人ログインしているのかわかったりします。

    ② 管理者コマンドの「民主化」とハードルの低下

    サーバー内アナウンスの送信やプレイヤー確認などの管理者コマンドは、本来ゲーム内で特殊なコマンドを打ち込む必要があります。これをDiscordのチャット経由(例:!announce メッセージ)で行えるようにすることで、黒い画面に抵抗がある人でも安全かつ直感的にサーバーの管理操作ができるようになります。

    ③ サーバーの「生きてる感」が伝わり、コミュニティが活性化する

    誰かがログインした時にDiscordに「📥 ログイン: 〇〇がサーバーに参加しました。」と自動で通知が飛ぶようになると、それを見た他のメンバーが「あ、アイツが入ったなら自分もやろうかな」と、ゲームに集まるきっかけが生まれます。サーバーの稼働状況が可視化されること自体が、コミュニティを盛り上げる強力なガジェットになります。

    こんな感じで通知が飛んできます。

    2. 開発環境と全体のシステム構成

    今回のBot開発にあたり、以下のような構成でシステムを構築しました。

    • サーバーOS: Ubuntu Linux(セルフホスト環境)
    • 開発言語: Python 3
    • 主要ライブラリ: discord.py, requests
    • 自動起動システム: systemctl (systemd) による常時稼働・サービス化

    パルワールドのREST API(ポート 8212)に対して、Pythonコードから定期的にリクエスト(HTTP通信)を送り、返ってきたJSONデータを解析してDiscordにメッセージを送信する仕組みです。

    さらに、Linuxサーバー自体が再起動した際にも自動でBotが立ち上がるよう、バックグラウンドのサービスとして登録し、「メンテナンスフリーで完全に自走するシステム」を目指しました。


    3. 開発中に直面した「3つの大きな躓きポイント」と解決策

    一見シンプルなシステムですが、実際にコードを書いて動かしてみると、いくつかの予想外の罠(仕様)に悩まされました。ここでは、特に苦労したデバッグの記録を共有します。

    📌 躓き①:ログイン・ログアウト通知がまったく反応しない

    初期のコードでは、「15秒ごとにプレイヤーリストを取得し、前回との差分を計算して通知する」というロジックを組みました。しかし、いざテストしてみると、ログインしてもログアウトしてもDiscordに何も通知が飛ばないという現象が発生しました。

    • 原因: Botの「初回起動時の安全策」が裏目に出ていました。Botが起動した瞬間にプレイヤーがログインしていると、それを「初期状態」として記憶してしまい、その後の変化を検知できなくなっていたのです。また、DiscordのBot権限(Intents)である「Server Members Intent」の設定が不足していたことも原因でした。
    • 解決策: コード側の初期化処理(hasattr(self, 'is_initialized'))を厳密に見直し、起動時のリスト保持と、その後のループ処理を完全に分離しました。また、Discord Developer Portal側で適切な特権インテントをONにすることで、正確にイベントを拾えるようになりました。

    📌 躓き②:ログアウトは検知するのに「ログイン」だけ無視される

    初期不良を乗り越えた後、次に襲ってきたのが「ゲームから出た時は通知が来るのに、入った時は通知が来ない」という奇妙なバグでした。

    • 原因: パルワールドのAPIの仕様上、プレイヤーがログインした「瞬間」の数秒間は、APIが返すデータの中でプレイヤー名(name)がまだ確定しておらず、空文字("")の状態で返ってくるタイミングがあることが判明しました。名無しのプレイヤーとして処理されていたため、ログイン判定の条件(差分チェック)をすり抜けていたのです。
    • 解決策: APIから取得したデータのうち、名前がしっかりと取得できているデータのみを抽出するガード文(if p.get('name'))を条件に加えることで、名前が確定した段階で綺麗にログインを検知できるようになりました。

    📌 躓き③:Linuxエディタ(nano)でのコード差し替えの洗礼

    デバッグ中、コードの修正版をLinuxサーバー上のファイルを書き換えて反映させる作業を何度も行いました。その際、標準のテキストエディタである nano を使用したのですが、Windowsの感覚で全選択削除(Alt + A 経由など)を行おうとしたところ、環境(ターミナルソフト)の相性でショートカットキーが一切効かないという地味なストレスに直面しました。

    • 原因: SSH経由のターミナルでは、特定のキーバインド(Altキーなど)がエミュレータ側で上書きされたり、サーバーまで届かないことがあります。
    • 解決策: nano の中で無理に全消去しようとするのを諦め、Linuxのコマンドライン側でリダイレクト記号を使い、ファイルを一瞬で空にする力技を導入しました。Bash: > /path/to/pal_bot.py このコマンドを実行してから nano で開くことで、常に真っ白な状態から最新コードを右クリックで一発貼り付けできるようになり、開発の作業効率が爆発的にアップしました。
    ¥4,200 (2026/05/19 20:53時点 | Amazon調べ)

    4. 完成した「安定版Discord Bot」の強みと機能

    数々のデバッグを経て、現在は非常に安定した「パルワールド管理Bot」が稼働しています。このシステムの主な強みと機能は以下の通りです。

    ① 完全自動の入退室ログ(15秒精度の監視)

    15秒間隔でサーバーを監視し、プレイヤーの「ログイン」「ログアウト」をDiscordの指定チャンネルに絵文字付きでスマートに通知します。誰がいつ来て、いつ帰ったのかのログが綺麗に残るため、サーバーの動向が手に取るようにわかります。

    ② Discordのステータス欄(アクティビティ)への人数リアルタイム表示

    Bot自身のステータス(「〜をプレイ中」の部分)に、現在のリアルタイムな接続人数が「パル人数: 2/32」のように常時表示されます。チャンネルを開かなくても、メンバーリストのBotのアイコンを見るだけでサーバーの混雑状況がわかります。

    さっきも表示したコレですね

    ③ 安全なシャットダウン連動(systemd化)

    今回のBotは、Linuxのサービス(palworld-bot.service)として管理しています。そのため、サーバー自体のメンテナンスや再起動の際、サーバーの終了シグナル(SIGTERM)をBotが安全にキャッチし、Discordへ未送信のデータを残すことなく、綺麗に「ログアウト」してオフラインになる仕組みを実装しました。これにより、プロセスがゾンビ化したり、ログが破損したりするリスクがありません。


    まとめ:個人開発としての振り返り

    今回の開発を通じて、ただゲームを遊ぶだけでなく、「APIを使ってゲームサーバーと外部ツールを繋ぐ」という、一歩踏み込んだインフラ運用の楽しさを体験することができました。

    一見すると「APIを叩いてDiscordに流すだけ」という簡単な仕組みに見えますが、いざ本番環境で動かしてみると、APIのデータの挙動のクセや、プロセスの常時稼働(デーモン化)の難しさなど、実際に手を動かさないと見えてこない学びが非常に多かったです。

    自分で構築したUbuntuサーバーの上で、自分で書いたPythonコードが24時間休まずに動き、身内のDiscordを便利にしてくれているのを見るのは、個人開発者として何よりの達成感があります。

    そして今回は同時にlinuxで稼働しているサーバーをwindows側で監視するというGUIも作成しました。

    UIDを入力してBANやUNBANする機能
    今ログインしているプレイヤーとゲーム内チャットの表示。systemとしてチャットを送信することもできます。
    個人的にお気に入りなのがサーバー設定を見やすく表示する機能です。今どういう設定なのかわかりやすいですよね。

    もし需要があればGUI作成についても触れていこうかなとおもっています!

    今後は、さらにサーバーの負荷監視や自動バックアップの進捗通知など、より高度な機能も気が向いたら追加していければと思っています。パルワールドのサーバー管理をもっと自動化したいと考えている方は、ぜひREST APIの世界に飛び込んでみてください!


    記事が良かったらシェアをお願いします!

  • 【Craftopia】Linux(Ubuntu)で爆速構築!クラフトピア専用サーバー立て方ガイド

    【Craftopia】Linux(Ubuntu)で爆速構築!クラフトピア専用サーバー立て方ガイド

    Steamで大人気のオープンワールドサバイバルアクション『Craftopia(クラフトピア)』。友人と時間を気にせず、いつでも遊べる環境を作るなら「専用サーバー(Dedicated Server)」の構築が一番です。

    今回は、Linux(Ubuntu)環境でSteamCMDを使用し、安定したマルチプレイ環境を爆速で構築する手順を徹底解説します。後半では、運用に欠かせない「自動起動」や「バックアップ」についても触れています。


    1. サーバーの必要スペック

    クラフトピア(特にシームレス版)はメモリ消費が激しいため、余裕を持ったスペックを推奨します。

    • OS: Ubuntu 22.04 LTS 以降
    • CPU: 2コア以上(4コア推奨)
    • メモリ: 8GB以上(快適に遊ぶなら16GB推奨)
    • ストレージ: SSD 20GB以上の空き容量

    2. 事前準備とSteamCMDの導入

    まずはOSを最新の状態にし、実行に必要なライブラリをインストールします。

    依存パッケージのインストール

    sudo apt update && sudo apt upgrade -y
    sudo apt install lib32gcc-s1 software-properties-common screen python3 -y

    実行用ユーザーの作成

    セキュリティのため、専用のユーザーを作成して作業します。

    sudo useradd -m steam
    sudo passwd steam
    su - steam

    SteamCMDのセットアップ

    mkdir ~/steamcmd && cd ~/steamcmd
    wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
    tar -xvzf steamcmd_linux.tar.gz
    

    3. サーバー本体のインストール

    SteamCMDを使って、クラフトピアのサーバーファイルをダウンロードします。

    ./steamcmd.sh +login anonymous +app_update 1670320 validate +quit

    1670320 はクラフトピア専用サーバーのAppIDです。


    4. systemdによる自動起動(System登録)

    サーバーを24時間安定して稼働させるために、OS起動時に自動でサーバーが立ち上がるよう設定します。

    /etc/systemd/system/craftopia.service を作成(sudo権限が必要)し、以下の内容を記述します。

    パスやユーザー名は自身の環境に合わせて書き換えてください。

    [Unit]
    Description=Craftopia Dedicated Server
    After=network.target
    
    [Service]
    Type=simple
    User=steam
    WorkingDirectory=/home/steam/Steam/steamapps/common/Craftopia Dedicated Server/
    ExecStart=/home/steam/Steam/steamapps/common/Craftopia\ Dedicated\ Server/Craftopia.x86_64 -batchmode -nographics
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target

    有効化コマンド:

    sudo systemctl daemon-reload
    sudo systemctl enable craftopia.service
    sudo systemctl start craftopia.service

    5. ポート開放(重要)

    外部からの接続を許可するため、以下のポートを開放してください。

    • ポート番号: 8787(デフォルト)
    • プロトコル: UDP および TCP

    UbuntuのUFWを使用している場合:

    sudo ufw allow 8787/udp
    sudo ufw allow 8787/tcp

    6. バックアップのススメ(Pythonスクリプト)

    クラフトピアは開発が活発なため、アップデート時のデータ保護は必須です。Pythonで「世代管理機能付きバックアップ」を自動化しましょう。

    バックアップスクリプト (backup_manager.py)

    import shutil
    import os
    from datetime import datetime
    
    SOURCE = os.path.expanduser('~/.config/unity3d/Pocketpair/Craftopia/Save/')
    DEST = os.path.expanduser('~/backups/craftopia/')
    MAX_GEN = 7  # 7世代分残す
    
    def run_backup():
        if not os.path.exists(DEST): os.makedirs(DEST)
        
        timestamp = datetime.now().strftime('%Y%m%d_%H%M')
        archive_path = os.path.join(DEST, f'craftopia_backup_{timestamp}')
        
        # 圧縮実行
        shutil.make_archive(archive_path, 'zip', SOURCE)
        print(f"Backup created: {archive_path}.zip")
        
        # 世代管理(古いものを削除)
        files = sorted([os.path.join(DEST, f) for f in os.listdir(DEST)], key=os.path.getmtime)
        while len(files) > MAX_GEN:
            os.remove(files.pop(0))
    
    if __name__ == '__main__':
        run_backup()

    定期実行の設定 (Cron)

    毎日深夜3時に自動でバックアップを取る設定です。 crontab -e を開き、末尾に追記します。

    0 3 * * * /usr/bin/python3 /home/steam/backup_manager.py

    まとめ

    1. SteamCMDでサーバーをダウンロード
    2. systemdで「落ちないサーバー」を構築
    3. Pythonで大切なセーブデータを自動保護

    この3ステップで、快適なクラフトピア専用サーバーが完成します。Linux環境での構築は一見難しそうですが、一度設定してしまえばメンテナンス性は抜群です。

    大切なワールドをしっかり守りながら、仲間とのクラフトライフを楽しんでください!

  • 【Ubuntu】パルワールド専用サーバー構築ガイド|自動起動・自動アプデ・メモリ対策まで完全網羅

    【Ubuntu】パルワールド専用サーバー構築ガイド|自動起動・自動アプデ・メモリ対策まで完全網羅

    Ubuntuで行うパルワールド専用サーバー構築完全ガイド

    パルワールドの世界を友人と思い切り楽しむなら、24時間稼働の専用サーバー構築がおすすめです。今回はUbuntuを使用し、セキュリティ設定から自動再起動、アップデートの自動化まで、実用的なセットアップ手順を解説します。

    1. ユーザーの作成とSSHの活用

    セキュリティと管理のしやすさを考え、rootユーザーではなく専用の一般ユーザーを作成しましょう。

    # palworldユーザーを作成
    sudo adduser palworld
    # sudo権限を付与
    sudo usermod -aG sudo palworld
    # 作成したユーザーに切り替え
    su - palworld

    また、作業はSSH(Secure Shell)経由で行うのが一般的です。PCのターミナルからリモート操作ができるため、コマンドのコピー&ペーストが容易になり、作業効率が格段にアップします。


    2. ファイアウォール(UFW)の設定

    サーバーの安全を守るため、必要なポートだけを開放します。

    • SSH用: 22/tcp(作業用)
    • パルワールド用: 8211/udp(ゲーム接続用)
    sudo ufw allow 22/tcp
    sudo ufw allow 8211/udp
    sudo ufw enable

    3. SteamCMDのインストール

    パルワールドのサーバーファイルをダウンロードするために、Steam公式のコマンドラインツール「SteamCMD」を導入します。

    # 32bitライブラリの有効化とインストール
    sudo add-apt-repository multivers
    sudo apt update
    sudo apt install steamcmd

    4. サーバーファイルのダウンロード

    SteamCMDを使って、最新のサーバーデータを取得します。

    # SteamCMDを実行してインストール(パスは環境に合わせて調整)
    /usr/games/steamcmd +login anonymous +app_update 2394010 validate +quit

    [!TIP] 途中で .steam/sdk64/ 関連のエラーが出る場合は、以下のリンク作成を実行してください。 mkdir -p ~/.steam/sdk64/ cp ~/Steam/steamapps/common/PalServer/linux64/steamclient.so ~/.steam/sdk64/


    5. サーバーの起動確認

    まずは手動で起動し、ゲーム内から接続できるか確認しましょう。

    cd ~/Steam/steamapps/common/PalServer
    ./PalServer.sh

    ゲームを起動し、「マルチプレイに参加する(専用サーバー)」から [サーバーのIPアドレス]:8211 を入力してログインできれば成功です!


    6. サービス登録と自動起動の設定

    サーバーをバックグラウンドで動かし、OS再起動時にも自動で立ち上がるよう「Systemd」に登録します。

    sudo nano /etc/systemd/system/palserver.service を作成し、以下を記述します。

    [Unit]
    Description=Palworld Dedicated Server
    After=network.target
    
    [Service]
    User=palworld
    ExecStart=/home/palworld/Steam/steamapps/common/PalServer/PalServer.sh
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    保存後、以下のコマンドで有効化します。

    sudo systemctl enable palserver
    sudo systemctl start palserver
    

    7. メモリリーク対策と自動アップデート

    パルワールドのサーバーはメモリ消費が激しいため、定時再起動が推奨されます。また、ゲームの更新に合わせて自動アップデートも仕込んでおきましょう。

    シェルスクリプトの作成

    再起動と更新をセットで行うスクリプト update_pal.sh を作成します。

    #!/bin/bash
    sudo systemctl stop palserver
    /usr/games/steamcmd +login anonymous +app_update 2394010 validate +quit
    sudo systemctl start palserver

    cronによる自動化

    毎日午前5時に再起動とアップデートを行うよう設定します。

    # crontabの編集
    crontab -e
    
    # 以下を追記
    0 5 * * * /home/palworld/update_pal.sh

    まとめ

    これで、Ubuntu上でのパルワールド専用サーバー構築は完了です! SSHによる効率的な管理、UFWによるセキュリティ、そしてcronによる自動メンテナンスを組み合わせることで、安定したパルライフを送り続けることができます。

    快適なパルワールドの旅を!

  • 【完全保存版】Python×Ubuntuでマイクラサーバーを自動運用!バックアップ・再起動・復元をまるごと自動化

    【完全保存版】Python×Ubuntuでマイクラサーバーを自動運用!バックアップ・再起動・復元をまるごと自動化

    「マイクラサーバーを立てたけど、メンテナンスが面倒…」「ワールドが壊れたらどうしよう…」と不安になっていませんか? 今回は、初心者でも迷わないように、Pythonを使ってサーバーの「バックアップ」「復元」「自動再起動」をすべて自動化する方法を、ステップバイステップで解説します!


    1. なぜ「Python」で管理するのか?

    プログラミング言語はたくさんありますが、サーバー管理にはPythonが最適です。

    • 直感的で読みやすい: 初心者でも「何をしているコードか」が理解しやすい。
    • 自動化の道具が豊富: ファイルの圧縮や日付の取得など、便利な機能が標準で揃っています。
    • Ubuntuと相性抜群: Ubuntuには最初からPythonが入っているため、すぐに始められます。

    2. 実装:自動バックアップ&再起動スクリプト

    まずは、サーバーを安全に停止させ、データを保存してからPCをリフレッシュするスクリプトを作成します。

    準備:Pythonスクリプトの作成

    Ubuntuのターミナルで、新しいPythonファイルを作成しましょう。

    nano mc_maintenance.py

    スクリプトの中身

    以下のコードをコピーして貼り付けてください(パスは自分の環境に合わせて書き換えてくださいね)。

    Python

    import shutil
    import datetime
    import os
    import subprocess
    import time
    
    # --- 設定エリア ---
    SERVER_DIR = "/home/user/minecraft_server"  # マイクラのフォルダ
    BACKUP_DIR = "/home/user/backups"           # 保存先フォルダ
    SCREEN_NAME = "mc_server"                   # サーバーを動かしているscreen名
    
    def run_command(command):
        """マイクラのコンソールにコマンドを送る関数"""
        subprocess.run(['screen', '-S', SCREEN_NAME, '-X', 'stuff', f'{command}\n'])
    
    # 1. サーバー内に再起動の通知を出す
    run_command("say 10秒後にメンテナンスのため再起動します!")
    time.sleep(10)
    
    # 2. 安全に停止させる(重要!)
    run_command("stop")
    print("サーバー停止中...")
    time.sleep(30) # 完全に止まるまで待機
    
    # 3. バックアップ実行(zip圧縮)
    today = datetime.datetime.now().strftime('%Y%m%d_%H%M')
    backup_path = os.path.join(BACKUP_DIR, f"world_backup_{today}")
    shutil.make_archive(backup_path, 'zip', os.path.join(SERVER_DIR, 'world'))
    print(f"バックアップ完了: {backup_path}.zip")
    
    # 4. OSごと再起動してメモリをリフレッシュ!
    print("Ubuntuを再起動します。")
    subprocess.run(['sudo', 'reboot'])

    3. Ubuntuの「起動時」にマイクラを自動起動させる

    PCを再起動させても、マイクラが止まったままでは意味がありません。Ubuntuの systemd という機能を使って、「電源が入ったら自動でマイクラを立ち上げる」設定をします。

    設定手順

    1. 設定ファイルを作成:sudo nano /etc/systemd/system/minecraft.service
    2. 「起動時にこのコマンドを打ってね」という指示書を書く。
    3. 登録完了!これで、たとえ停電で落ちても、電気が復旧すれば勝手にサーバーが復活します。

    4. 「cron」でスケジュールを組む

    最後に、このPythonスクリプトを「毎日決まった時間」に動かします。

    crontab -e

    一番下に以下を追記します。

    # 毎日午前4時にメンテナンス実行
    00 04 * * * /usr/bin/python3 /home/user/scripts/mc_maintenance.py

    5. 万が一の「復元(リストア)」方法

    データが壊れた時は、バックアップフォルダにある最新のzipファイルを展開して、元の world フォルダと入れ替えるだけです。これもPythonで「どの日付に戻す?」と聞いてくれるツールを作っておくと、パニックにならずに済みます。

    万が一の時も安心!自動復元(リストア)スクリプト

    バックアップがあるだけでは不十分です。大切なのは、「いつでも、誰でも、正確に」元の状態に戻せることです。

    復元スクリプトの仕組み

    復元を行う際は、以下の手順を正確に守る必要があります。

    1. 現在動いているサーバーを止める(データ競合を防ぐため)
    2. 今の壊れた(または戻したい)ワールドを念のため別名で退避させる
    3. バックアップファイルを解凍して配置する
    4. サーバーを再起動する

    これを手動でやるとフォルダ名を間違えたりしがちですが、Pythonなら一瞬です。

    2. 復元スクリプトのコード例

    新しいファイル mc_restore.py を作成して、以下の内容を記述します。

    Python

    import shutil
    import os
    import zipfile
    
    # --- 設定エリア ---
    SERVER_DIR = "/home/user/minecraft_server"
    BACKUP_DIR = "/home/user/backups"
    WORLD_NAME = "world" # 復元したいフォルダ名
    
    def restore_backup():
        # 1. バックアップ一覧を表示
        backups = [f for f in os.listdir(BACKUP_DIR) if f.endswith('.zip')]
        if not backups:
            print("バックアップが見つかりません。")
            return
    
        print("--- 復元可能なバックアップ一覧 ---")
        for i, file in enumerate(backups):
            print(f"[{i}] {file}")
    
        # 2. ユーザーに番号を選ばせる
        choice = int(input("復元したい番号を入力してください: "))
        target_zip = os.path.join(BACKUP_DIR, backups[choice])
    
        # 3. 現在のワールドを退避(安全のため削除せずリネーム)
        current_world = os.path.join(SERVER_DIR, WORLD_NAME)
        if os.path.exists(current_world):
            old_world = current_world + "_old"
            if os.path.exists(old_world):
                shutil.rmtree(old_world)
            os.rename(current_world, old_world)
            print(f"現在のワールドを {WORLD_NAME}_old に退避しました。")
    
        # 4. ZIPを展開して復元
        with zipfile.ZipFile(target_zip, 'r') as zip_ref:
            zip_ref.extractall(SERVER_DIR)
        
        print(f"【成功】{backups[choice]} から復元が完了しました。")
        print("サーバーを起動して確認してください!")
    
    if __name__ == "__main__":
        restore_backup()
    #実行コマンド
    python3 mc_restore.py

    コマンドを実行すると復元するファイルを選択して復元が始まります。


    まとめ:自作サーバーの醍醐味は「自由」にある

    自作サーバーなら、こうしたカスタマイズは自由自在です。

    最初は「黒い画面(ターミナル)」が怖く感じるかもしれませんが、一つずつ設定をクリアしていく過程は、まるでマイクラで大きな回路を作るような楽しさがあります。 自分だけの「最強のメンテナンスフリーサーバー」を目指して、ぜひ挑戦してみてください!

  • 【初心者向け】UbuntuでマイクラJava版サーバーを24時間フル稼働させる完全ガイド

    【初心者向け】UbuntuでマイクラJava版サーバーを24時間フル稼働させる完全ガイド

    こんにちは、ginnamです。 今回は、Ubuntu環境を使って自分専用のマインクラフト(Java版)サーバーを構築する方法をまとめます。初心者がつまずきやすいポイントを丁寧に解説していきます!


    1. 運用に必要な推奨スペック

    マイクラサーバーは、同時に遊ぶ人数やModによって必要なスペックが変わります。

    • CPU: 2コア以上(シングルスレッド性能が重要です)
    • メモリ:
      • 2〜4人でバニラ: 4GB
      • 10人以上、またはMod導入: 8GB〜16GB以上
      • 私の環境: 24GB(これだけあればModを盛り込んでも余裕です!)
    • ネットワーク: 安定した有線接続

    2. Javaのインストール

    まずはマイクラを動かすための「Java」をインストールします。最新版(1.20.6以降など)を動かすならJava 21が推奨です。

    # パッケージリストを最新にする
    sudo apt update
    
    # Java 21をインストール
    sudo apt install -y openjdk-21-jre-headless
    
    # インストール確認
    java -version

    3. サーバーファイルの取得(wgetの使い方)

    次に、サーバー用のフォルダを作り、公式からプログラム(server.jar)をダウンロードします。ここで使うのが wget というダウンロード用コマンドです。

    # サーバー用フォルダを作成して移動
    mkdir ~/mc_server
    cd ~/mc_server
    
    # サーバー本体をダウンロード(URLは公式サイトの最新版に読み替えてください)
    wget https://piston-data.mojang.com/v1/objects/xxxxxxxx/server.jar

    wget のURLはバージョンごとに変わるので、公式サイトから最新のリンクをコピーしてください。

    4. 初回起動とEULAへの同意

    ダウンロードしただけでは動きません。一度起動を試みると「規約(EULA)に同意してね」とエラーが出て止まります。

    # 初回起動(一度失敗します)
    java -Xmx2G -Xms2G -jar server.jar nogui

    すると、フォルダ内に eula.txt というファイルが生成されます。これを編集して同意しましょう。

    # nanoエディタでファイルを開く
    nano eula.txt

    中身の eula=falseeula=true に書き換えて、Ctrl + OEnter(保存)、Ctrl + X(終了)で閉じます。これで準備完了です!

    これで再度起動コマンドjava -Xmx2G -Xms2G -jar server.jar noguiを打つと何やら文字がたくさん出てきたのちにサーバーが起動します。

    サーバーが起動できたか確認するために実際にゲームで接続してみましょう。

    サーバー追加からの

    こちらにサーバーが起動しているPCのアドレスを入力します。

    例として家庭内(同じネットワーク内)でしたらローカルIPを入力します(192.168.x.x等)

    別の離れた環境にサーバーを構築した場合はグローバルネットワークアドレスを入力します。

    これでゲームに接続できればサーバー構築が成功です!

    もし接続できない場合はポート開放ができていない可能性があります

    sudo ufw status

    これでマイクラのデフォルトのポート番号であるTCP 25565があるか確認します。

    もしないようでしたら

    sudo ufw allow 25565/tcp

    ファイアウォールを再読み込みします

    sudo ufw reload

    もしポート開放が原因の場合はこれで接続できるようになるはずです。

    5. systemdによる「自動起動」の設定

    サーバーを24時間運用するなら、PC再起動時に勝手に立ち上がる「自動起動設定」が必須です。

    /etc/systemd/system/minecraft.service という設定ファイルを作成します。

    [Unit]
    Description=Minecraft Server
    After=network.target
    
    [Service]
    WorkingDirectory=/home/ユーザー名/mc_server
    User=ユーザー名
    # メモリ割り当ては環境に合わせて調整(例:8GB)
    ExecStart=/usr/bin/java -Xmx8G -Xms8G -jar server.jar nogui
    Restart=always
    
    [Install]
    WantedBy=multi-user.target

    設定ファイルのパス等はご自身の環境にあわせて変更してください。

    自動起動のメリット:

    • 24時間放置OK: 停電などでサーバーが落ちても、復旧後に勝手に起動します。
    • 定刻再起動: メモリリーク対策として、毎日決まった時間に再起動させる設定も組めます。

    6. RCONの活用と定期再起動

    メモリを使い切ってしまう「メモリリーク」対策として、夜中に自動で再起動させるのがオススメです。RCON(リモートコントロール)を設定しておけば、安全に「セーブして終了」という命令を外部から送れるようになります。


    まとめ

    1. wgetで最新のserver.jarを取得!
    2. eula.txtをtrueに書き換えるのを忘れずに!
    3. systemd設定で24時間安定稼働!

    自動バックアップやさらに便利なスクリプトについては、また別記事で詳しく解説します。