Railsへのコントリビューションに関する次のドキュメントを読んでみました。
この中で特に参考になった部分を中心に書いていきます。
😼 コントリビューションの基礎
- Ruby on Railsのバグを見付け足ら「Issues · rails/rails - GitHub」で既存のものがないか探して、な、ればPOST
- 最新版(edge)はバグがある可能性があるし、バグが有った場合に取り込まれやすいのでコントリビュートのチャンスが多い。コントリビュートのチャンスが多い
🎂 セキュリティの問題が見つかった場合
- GitHub ISSUEにあげてはダメ(悪用される可能性があるから)
- 「Ruby on Rails: Security policy」あたりにセキュリティのISSUEの立て方が書かれています。
😀 バグなどのISSUE
- ISSUEには再現可能なサンプルコードをつけよう
- 実行可能なテストケースをちゃんと作ろう。テストケースのテンプレートを活用しよう => 1.2 Create an Executable Test Case - Ruby on Rails Guide Contributing to Ruby on Railss
- テストケースは、gistなどに貼って使おう
- バグの調査に役立つ情報があれば、ISSUEに書き込もう
- failするテストはコントリビュートのチャンスだ
テストバッチ
- forkしてテストパッチを作ろう
- 変更が確実に動作しているかを確認しよう
- テストによってより良くなっているか? 変更点のテストがきちんと存在しているか?
- ドキュメントが適切にアップデートされているか?
- 変更点はコードとして適切で、高速に動作するか?
🐰 Gistのテンプレート
ActiveRecord
や ActionController
のgistテンプレートのです。バグをレポートするときに使います。
- Active Record template for gems
- Action Controller template for gems
- Active Record template for master
- Action Controller template for master
🐡 機能追加のリクエストについて
- 必ず動作するパッチを作ってGitHubにISSUEを作ろう(動作するパッチがない場合はinvalidになる)
- 機能追加はほかの機能に影響を与える可能性があるのでコアチームによって判断される
- アイデアを相談したいときは「rails-core mailing list」に投げてみよう
健全性のチェック
もしRails開発者の知り合いがいるなら、あらかじめ修正したコードをみせることで、
適切なコードか否かをちゃんとチェックしよう。
Feedbackを受けよう
Merge Requestを出したら、いくつかのフィードバックや意見が来るので対応しよう。
マイナーチェンジは悪いことじゃないのでポジティブに意見を受け入れよう。
あまりにもMerge Requestに反応がないようなら、メーリングリストにPostしてみよう。
🍄 コードを書くときの注意点
バグフィックスや機能追加でコードを書く際には次の点に注意しよう。
- 正しいコードを書こう - Railsのイデオム/Helperを適切に書こう - テストが通過しない場合は、テストが通過するように修正しよう - 変更点に関するドキュメントもアップデートをお忘れなく
🍣 Railsのcoding style
- 2スペースを使う。タブは使わない - 不要なスペースをつけないようにしよう - private/protectedの後はindentをつけよう - 1.9以降のhashシンタックス { a: b } を使おう - `&&` や `||` を使おう - `class << self` を使おう - `MyClass.my_method(my_arg)` が望ましい - `a = b` としよう - `assert_not` を使おう - `{ do_stuff }` としよう
🚕 パフォーマンスに影響する変更
- gem「benchmark-ips 等を利用してベンチマークを取ること。
require 'benchmark/ips' |
🏈 テストの実行
テストの実行方法は次のとおり。
# Rails 全体のテスト |
🐞 ドキュメント
Railsには次の2つのドキュメントがある;
Ruby on Rails Guides - help you learn about Ruby on Rails, APIドキュメント - serves as a reference.
また、それぞれにガイドラインがあるので読んでみよう。
- API Documentation Guidelines — Ruby on Rails Guides
- Ruby on Rails Guides Guidelines — Ruby on Rails Guides
それから、ドキュメントの変更だけの場合はCIを動かす必要はない。 [ci skip]
をつけよう。
🚌 CHANGELOGをちゃんと更新しよう
* Summary of a change that briefly describes what was changed. You can use multiple |
🗽 コミットメッセージ
コミットは1つにsquashしておこう。そして、コミットメッセージも簡単なサマリーをちゃんと書こう。
Short summary (ideally 50 characters or less) |
あと、ちゃんとリベースしておこう。
$ git checkout master |
🐹 Forkしよう
# 自分のリポジトリをForkして作ろう |
🤔 バックポーティング(BackPorting)
次のメジャーリリースまでにHEADの変更を取り込みたい場合は、patchを作って自分のブランチに適用しよう。
# master と HEAD(現在のブランチ)とのdiffを取る |
🐠 開発環境の構築
- VirtualBoxを使って簡単に構築したい場合 => rails/rails-dev-box: A virtual machine for Ruby on Rails core development - GitHub
- ローカルに構築したい場合 => Development Dependencies Install — Ruby on Rails Guides
🗻 テスト用のアプリケーションを作る
$ cd rails |
🐯 コントリビューターの一覧
🚜 あとがき
英語のドキュメントを読みながら書いたので間違っている部分も多々あると思います。もしお気付きの点等あれば @zyunnosuke まで
🎃 参考リンク
- 20歳になったRubyを支える人々 - [Ruby/Railsコミッタ 松田明氏]海外コミュニティとの橋渡しに
- Rubyist Magazine - Rubyist Hotlinks 【第 29 回】 松田明さん
- Thinking megane: git pull 時の rebase オプションのススメ