Skip to content

Latest commit

 

History

History
239 lines (174 loc) · 15.9 KB

CONTRIBUTING.md

File metadata and controls

239 lines (174 loc) · 15.9 KB

開発体制

開発を始めるために必要なもの

準備

Java Development Kit

最初に、Java Development Kit (JDK) 8をインストールする必要があります。 AdoptOpenJDK 1.8 のインストールを推奨します。

統合開発環境

次に、Intellij IDEAなどの統合開発環境を導入します。

Intellij
  • インストールする時、Gitプラグインを有効にします。
  • Scala用のプラグインを導入してください。

sbt

それが終わった後、sbtの公式ページ に従ってsbtのインストールをします。 sbtがコマンドラインで使える状態でsbt assemblyを実行すると、target/buildフォルダにjarが出力されます。

Scala

Scalaはsbtによって自動的にダウンロード及びインストールされます。

Docker

SpigotサーバーのDockerコンテナを立ち上げるために、Dockerのインストールが必要です。

Spigot

SpigotサーバーはDockerコンテナによって提供されます。

GitHubのアカウント

GitHubにアカウントを登録します。 詳細な手順は有志の方の記事をご覧ください。

上級者向け:ローカルにJavaとかsbtを入れたくない場合

(注: 自分が何をしているかわかっていないのであれば、この部分を飛ばしてください)

  • VSCode + WSLで開発している
  • ビルドして立ち上げたいだけ
  • ランタイムの導入のコストが高いと考えている

場合は、以下のシェルスクリプトを使うと便利です。

$ rm -rf target/build # 再ビルドしたいなら既存のターゲットは削除
$ docker run --rm -it -v `pwd`:/app ghcr.io/giganticminecraft/seichiassist-builder:1a64049 sh -c "cd /app && sbt assembly"
$ sudo chown -R `whoami` target/build # docker上でsbtを実行するとrootになってしまうため権限を変える
$ cp -n docker/spigot/eula.txt docker/spigot/serverfiles/eula.txt || true
$ docker compose up --build -d

Git

最後に、Gitのインストールも必要です。公式のガイドをご覧ください。

SeichiAssistを自分のGitHubアカウントにコピーする

(注意: この手順は、gm-gh-repoにpushできる人であれば飛ばすことができます。よくわからない場合は、この注意書きを無視して進んでください。)

注意:この手順は、最初に一回だけやる必要があります。二回以上行う必要はありません。

変更を加える前に、SeichiAssistを自分の手元に「コピー」する必要があります。 最初に、GiganticMinecraftのページを開いて、画面右上にある「fork」と書かれた枝分かれしているアイコンがあるボタンを押します。

すると「Create a new fork」と書かれた画面に移動します。

img.png

いくつか入力欄がありますが、何も触らずにCreate forkを押します。

また画面が切り替わります。画面左上に書かれた文字が「GiganticMinecraft/SeichiAssist」ではなく、「(あなたのID)/SeichiAssist」になっていることを確認できたら次へ進みます。

SeichiAssistを自分の手元にコピーする

SeichiAssistは、Gitというバージョンを管理するシステムを使っています。そのため、どうにかして自分のパソコンにSeichiAssistを自分の手元にコピーしてくる必要があります。

IntelliJの場合

JetBrainsのヘルプ (英語) をご覧ください。

protocol以下のファイルを入手

(注意: この手順は統合開発環境を使わない場合の手順です。)

(注意: この手順は最初に一度だけ行う必要があります。)

protocol以下のファイルはgit cloneでは入手することができません。以下のどちらかのコマンドを実行してください:

  • git clone --recursive
  • git submodule update --init --recursive

issueを見る

一旦GiganticMinecraftのページへ戻って、画面上部のIssuesと書かれたタブをクリックしてみましょう。

すると画面が切り替わり、たくさんのやりたいこと (主にRedmineで承認されたもの) や、バグ報告が出てきます。

はじめはこの中からできそうなものを探すと良いと思います。初めての場合は、"good first issue"というラベルがつけられた中から探すのがおすすめです。 ここから飛べます。

IntelliJ特有の手順

IntelliJ IDEAの設定でフォーマットに scalafmt を使う

  • Editor > Code Style > Scala
    • FormatterScalafmt に変更
    • Reformat on file save にチェックを付ける

変更を加える

  1. developというブランチ (セーブデータのスロットのようなもの) を元に、新しいブランチを作ります。
  2. 必要な変更を加えてファイルを保存します
  3. コミット (Gitに対するセーブ) します。コミットする時、メッセージを書くように求められます。コンベンショナルコミットという、メッセージの書き方を推奨しています。わからなければ、今は飛ばしても大丈夫です。
    • メッセージの1行目には変更した点の大まかな内容を書くように心がけてみてください。
      • 1行目は45文字以内で書くことを推奨します。
      • コンベンショナルコミット:1行目は「変更の区分」、半角コロン、半角スペースで始める方法を推奨しています。
        • 新しい機能を実装したときはfeat: [大まかな内容]とします。
        • バグを修正したときはfix: [大まかな内容]とします。
        • ドキュメントを触ったときはdocs: [大まかな内容]とします。
        • GitHub Actionsを触ったときはci: [大まかな内容]とします。
        • リファクタリングしたときはrefactor: [大まかな内容]とします。
        • テストを書いたときはtest: [大まかな内容]とします。
        • scalafmtやscalafixを反映したときはstyle: [大まかな内容]とします。
        • パフォーマンスを改善したときはperf: [大まかな内容]とします。
        • その他のコード品質に関わらない変更をしたときは、chore: [大まかな内容]とします。
      • 発展的な内容:コンベンショナルコミットにおいて複数の種別に該当する場合、引き返して複数のコミットに分割することが推奨されています。
    • メッセージの2行目以降は、より詳しい内容を書くことができます。
    • メッセージは日本語か英語で書くことを推奨します。
  4. 良くなるまで繰り返します

手元でデバッグ

SeichiAssistは手元でデバッグできる環境を整えています。環境を立ち上げるためには、Dockerが必要です。

Dockerを立ち上げる

Linux環境では、./prepare-docker.sh、Windowsではprepare-docker.batを実行することで デバッグ用のBungeecordとSpigotの環境を構築することができます。

サーバーやDB等を停止する場合、 docker compose down を実行してください。

なお、SeichiAssistがJava 8以外でコンパイルされた場合は、実行時にエラーとなります。必ずJDKのバージョンを揃えるようにしてください。

データベースの初期化

(注: この手順は初めてDockerを立ち上げた場合のみ必要です)

初回起動後、データベースが作成されますが、ガチャ景品のデータがありません。そのため、次のSQLのダンプをインポートします。

SQLのダンプをインポートする手順は以下の通りです。

  1. 一旦サーバーを起動させる
  2. phpMyAdminを開く
  3. トップ画面の上部メニューから「データベース」を開く
  4. seichiassistflyway_managed_schemaにチェックを入れて、「削除」、「OK」
  5. 「データベースを作成する」の下にあるテキストボックスにseichiassistと入力し、「作成」
  6. seichiassistのデータベースを開き、上部メニューから「インポート」
  7. 「File to import」の「ファイルを選択」から、ダウンロードしたgachadata.sqlを選択
  8. 画面下部の「実行」
  9. サーバーを再起動させる
デバッグ用環境への接続

DockerマシンのIPアドレス(Linux等ならlocalhost)をDOCKER_IPとします。

dockerにより各サービスが起動したら、マルチプレイヤーのメニューでDOCKER_IPへと接続することができます。 また、DOCKER_IP:8080へとWebブラウザでアクセスすることで、phpMyAdminを介してデータベースを操作することができます。

コンソールにアクセスする

自分のアカウントに管理者権限(OP)を与える時など、Spigotのコンソールにアクセスする場合は、 spigota または spigotb のコンテナにアタッチする必要があります。

アタッチするには docker attach [CONTAINER_NAME] を実行します。 コンテナを指定する際に使用するIDはコマンドプロンプトで docker ps を実行すると seichiassist_spigotb_1 のような形式で表示されます。

コンソールからは CtrlキーとCキーを同時押しすることで出ることができます。サーバーは停止されません。

整地ワールドの作成

初めてデバッグ環境のSpigotに接続した際にスポーンするワールドは整地ワールドではないため、そのままブロックを破壊しても整地レベルは上昇しません。

整地ワールドを作成する場合、OP権限を付与したプレイヤーかアタッチしたコンソールからコマンドで mvcreate world_SW normal を実行します。

整地ワールドへ行くには、コマンドで mvtp world_SW を実行します。

反映する

さあ、いよいよ反映の時間がやってきました。 まずは手元でsbt scalafixAllをします。次にsbt scalafmtAllをします。 その後、自分の手元から自分のGitHubアカウントへ内容を反映します。

Pull Requestの作成

次に、自分のGitHubアカウントにあるSeichiAssistを開いて、変更を依頼する手続き (Pull Request) の準備画面へ移動します。 画面が切り替わります。右上のCreate pull requestと書かれたボタンを押してください。 そうすると、高さが狭い場所と広い場所が表示されます。 狭い場所には、変更の概要を50文字以内で簡単に書いてください。 (TODO: コンベンショナルコミット) 広い場所には、書くべきだと思ったことを書いてください。詳しすぎるということはありません。 一通り書き終わったら、長い場所の右下にある「Create pull request」と書かれたボタンを押してください。

コードレビューを待つ

Pull Requestが作成されたら、GitHubのサーバーでコンパイルやファイルのチェックが自動的に始まります。 また、確認できる人 (主に@kory33、@rito528、@KisaragiEffective、@Lucky3028)が方向性が正しいかどうかレビューを行います。それまでは優雅に紅茶を飲んだり踊ったりして待つことができます。

SeichiAssistでPull Requestが受け入れられる (マージされる) には、下の条件をすべてクリアする必要があります。

  • コンパイルやファイルのチェックがすべてエラーなく終わる
    • コンパイル
    • scalafix - エラーになった場合はsbt scalafixAllをしてください
    • scalafmt - エラーになった場合はsbt scalafmtAllをしてください
  • 誰かから変更を承認してもらう

承認とサーバーへの反映

条件がすべてクリアされると、Pull Requestがマージ (変更依頼手続きが完了) されます。

デバッグサーバーへの反映

マージされた後、自動的にデバッグサーバーへの反映手続きが始まります。Discordで進捗を確認することができます。 通常、デバッグサーバーへの反映は数分程度で終わります。 デバッグ環境へは、以下の手順で接続できます。

  1. Minecraft Java Editionでplay-debug.seichi.clickに接続
  2. Tキーでチャットを開く
  3. /server deb112と入力してEnterを押す

本番サーバーへの反映

(注: この部分はGiganticMinecraftのメンバーへ向けた内容です)

本番サーバーへの反映は通常GitHub ActionsでPull Requestを作成し、それをマージすることで行います。

  1. GitHub Actionsのタブへ移動します。
  2. 画面右の「Run workflow」を押します。
  3. しばらくするとmaster <- developのPull Requestが作成されます。
  4. 本番サーバーへ反映したいタイミングでマージします。
  5. マージした後、朝4時の再起動で変更が反映されます。

緊急を要する場合は、hotfix-*ブランチを作成し、そのブランチからmasterブランチへ向けてPull Requestを作成してください。 developブランチへの直プッシュは、CIによるチェックが事後となってしまうため避けてください。

自動リリースの範囲

自動リリースはSeichiAssistのプログラムの部分のみ行われます。より正確に言うのであれば、jar以外の自動リリースは未対応です(config.ymlなど)。運営チームへ更新を依頼する必要があります。 この問題点があるため、各サーバーや環境で共通で構わないパラメータはconfig.ymlを読まず、コードへの直接実装を推奨します。