Skip to content

3-2. 開発ワークフロー

This content is not available in your language yet.

issue が決まったら、実際にコードを書いて PR を出すまでの流れを解説します。

flowchart TD
  s1["1. リポジトリを fork"]
  s2["2. fork を clone"]
  s3["3. 作業ブランチを作成"]
  s4["4. コードを変更"]
  s5["5. テストを書く・実行"]
  s6["6. コミット(GPG 署名必須)"]
  s7["7. fork にプッシュ"]
  s8["8. Pull Request を作成"]
  s1 --> s2 --> s3 --> s4 --> s5 --> s6 --> s7 --> s8

GitHub 上で https://github.com/XRPLF/rippled を開き、右上の Fork ボタンを押します。これで自分のアカウント配下にコピーが作成されます。

Terminal window
git clone https://github.com/<your-username>/rippled.git xrpld-test
cd xrpld-test
# upstream(本家)を追加
git remote add upstream https://github.com/XRPLF/rippled.git
git remote -v
# origin https://github.com/<your-username>/rippled.git (fetch)
# upstream https://github.com/XRPLF/rippled.git (fetch)

必ず develop ブランチから作業ブランチを切ります(masterrelease ではありません)。

Terminal window
# upstream の最新を取得
git fetch upstream
git checkout -b <your-username>/fix-something upstream/develop

外部コントリビューターの場合、ブランチ名は以下の形式を使います:

<GitHub username>/<説明>

例:

nabesan/fix-payment-path-bug
nabesan/add-escrow-test
nabesan/docs-update-build-guide

作業ブランチで変更を加えます。変更は1つの論理的な目的に集中させましょう。

Terminal window
# 変更したファイルを確認
git status
git diff

すべての変更にはテストが必要です。

Terminal window
cd .build
# 関連するテストだけ実行(高速)
./xrpld --unittest Payment
# 全テストを実行
./xrpld --unittest --unittest-jobs 4

テストが通ることを確認してからコミットします。

xrpld への全コミットは GPG 署名が必須です。未設定の場合は先にセットアップしてください。

Terminal window
# GPG キーの確認
gpg --list-secret-keys --keyid-format=long
# Git に GPG キーを設定
git config --global user.signingkey <YOUR_KEY_ID>
git config --global commit.gpgsign true

xrpld は CONTRIBUTING.md の Good commit messages に沿ったコミットメッセージを推奨しています。一般的な書き方として How to Write a Git Commit Message も参考になります。

件名(50文字以内、命令形、末尾にピリオドなし)
本文(72文字で折り返し)
何をしたか・なぜしたかを説明する。
どうやったかではなく、何を・なぜを書く。
Closes #1234

良い例:

Fix Payment path calculation for IOU-to-IOU transfer
When both source and destination currencies are IOUs from different
issuers, the path finder incorrectly excluded direct paths through
the order book. This caused some valid payments to fail with
tecPATH_DRY.
Closes #5678

悪い例:

fix bug
updated payment.cpp
WIP

件名は「このコミットを適用すると、___する」と読めるように書きます。

悪い例良い例
Fixed the bugFix the bug
Adding testAdd test for Payment edge case
Changes to escrowUpdate EscrowFinish to handle expired condition
Terminal window
git add <変更ファイル>
git commit -S -m "Fix Payment path calculation for IOU-to-IOU transfer"
# -S で GPG 署名を付ける(commit.gpgsign=true なら省略可)
  • 関連する変更は1つのコミットにまとめる(開発途中の WIP コミットは後でsquash)
  • 複数の目的が混在する場合は分割する
Terminal window
git push origin <your-username>/fix-something

作業中に develop が進んだ場合は、rebase で同期します:

Terminal window
git fetch upstream
git rebase upstream/develop

xrpld では clang-formatclang-tidy のチェックを pre-commit フックとして設定できます。

Terminal window
pip3 install pre-commit
pre-commit install

コミット時に自動でフォーマットチェックが走るようになります。