この記事では、最近自分が行ったGitHub運用の改善(ブランチ運用の自動化やGitHub Actionsの導入)について、自分用のメモも兼ねてまとめます。
軽く自己紹介
普段、KotlinでMinecraftのBukkitプラグインを趣味で開発しているりんご飴196です。
これまでに作ったプラグインの例👇
#プラグイン勉強日記
— りんご飴196🍎@マイクラプラグイン作ってる人 (@ringoame196) June 9, 2025
RandomOreFlatプラグイン
鉱石を取ることができるフラットワールドを追加するPlugin
プラグインで ワールドを追加する練習のために作ったやつ
GitHub:https://t.co/gtCHIfds2t#マイクラ #Plugin#マインクラフト pic.twitter.com/oIV5LUXxBw
#プラグイン勉強日記
— りんご飴196🍎@マイクラプラグイン作ってる人 (@ringoame196) March 8, 2025
ImagePuzzleプラグイン
地図を使った 画像パズルをすることができるPlugin
うん、画像が大きくなると 合わせるのも一苦労
GitHub:https://t.co/vV7Zx91atZ#プラグイン#マイクラ #Minecraft pic.twitter.com/OFud2Jrhf4
#プラグイン勉強日記
— りんご飴196🍎@マイクラプラグイン作ってる人 (@ringoame196) December 15, 2024
CPSGameプラグイン
クリック数を計測lugin
ちなみに 自分のベストスコアは10秒間で105回だった
データ自体はSQLLiteで保存 スコアボードは完全お飾り要素ww#マイクラ #プラグイン#Minecraft pic.twitter.com/oJGwLiYYP6
背景
これまで個人開発が中心だったため、mainブランチに直接pushする運用をしていました。
一人で開発する分には特に問題はありませんでしたが、今後チーム開発をする可能性が出てきたため、このままではチーム開発で困ると感じ、運用を見直すことにしました。
あらかじめチーム開発を想定したブランチ運用に慣れておくため、一人開発の段階から同じ開発フローで進めることにしました。
やったこと
とりあえずブランチを切ってみた(失敗)
タイトル通り、とりあえず git checkout -b develop を実行してブランチを切ってみました。
これでうまく運用できると思っていたのですが、そう簡単にはいきませんでした。
まず、めんどくさがりな自分は、次の日には普通にmainブランチへpushしてしまいました。
その結果、developブランチとmainブランチの内容が混ざり、履歴がぐちゃぐちゃになりました。
さらに一人開発ということもあり、「わざわざPRを作るのが面倒」という気持ちもあり、ブランチ運用自体が続きませんでした。
結果として、ブランチ構成が崩壊してしまい、この方法は失敗に終わりました。
ブランチ作成を自動化(自動化の第一歩)
このような経緯もあり、一度はブランチ運用を諦めていました。
しかし、「毎回ブランチを切るのが面倒なのが問題なのでは?」と考え、ブランチ作成を自動化することにしました。
普段使っているテンプレートの setup タスクに、以下の処理を追加しました。
private fun setupBranch(git: Git) {
try {
git.checkout()
.setName("developer")
.setCreateBranch(true)
.call()
logger.lifecycle("🌱 developer ブランチを作成&切替")
} catch (e: RefAlreadyExistsException) {
git.checkout().setName("developer").call()
logger.lifecycle("🔁 developer ブランチへ切替")
}
}
この処理では、developer ブランチが存在しない場合は新規作成し、すでに存在する場合はそのまま切り替えるようにしています。
これにより、セットアップ時に自動で開発用ブランチへ移動できるようになり、手動でブランチを切る手間がなくなりました。
ただ、ブランチ作成を自動化しただけでは、「わざわざPRを作るのが面倒」という問題は解決されませんでした。
PRのチェックをしてもらう(自動化の第二歩)
PRが面倒なら、「PRを通さないと困る状態にすればいい」と考えました。
そこで、テンプレートに含まれていた shadow プラグインの存在を思い出しました。
このプラグインでは、ビルド時にコードが整っていないと失敗するようになっています。
これを利用して、PR時にビルドチェックを行い、問題があればmainにマージできないようにする仕組みを作ることにしました。
GitHub Actionsに以下の設定を追加しました。
name: Kotlin Lint & Build Check
on:
pull_request:
branches:
- main
- master
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '22'
distribution: 'temurin'
- uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle
- name: Lint & Build
run: |
./gradlew lintKotlin
./gradlew build
この設定により、PR作成時に自動でLintとビルドが実行され、問題がなければそのままマージされるようになります。
結果として、「PRを出さないとmainに反映されない」状態になり、自然とPRベースの運用ができるようになりました。
正直これでも十分でしたが、一つだけ小さな不満がありました。
それは、Lintとビルドが通った後に手動でマージをしなければならない点です。
ここまで自動化したなら、すべて自動化したい。
そう考え、最後にマージの自動化も行いました。
マージの自動化(最後の自動化)
PRのGitHub Actionsに以下の処理を追加しました。
- name: Auto Merge
if: success() && github.event.pull_request.head.repo.full_name == github.repository
run: |
curl -L \
-X PUT \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/merge \
-d '{"merge_method": "merge"}'
これにより、PR作成 → Lint・ビルドチェック → 問題なければ自動マージ、という一連の流れがすべて自動化されました。
結果として、「pushするだけでmainブランチが常にきれいに保たれる」状態を作ることができました。
まとめ
- ブランチ運用が面倒で続かなかった
- → ブランチ作成を自動化
- → PRに意味を持たせるためにチェックを導入
- → 最終的にマージまで自動化
めんどくささを減らすことで、ブランチ運用を無理なく続けられるようになりました。
やっていること自体は、よくある運用だと思います。
ただ、自分の中では「めんどくさい」をちゃんと潰して仕組みにできたのは大きな変化でした。
結果として、無理なくブランチ運用を続けられるようになり、開発の流れもかなり楽になりました。
同じように「ブランチ運用が続かない」と感じている人の参考になれば嬉しいです。