Skip to content

開発規約

marmot1123 edited this page Dec 26, 2015 · 2 revisions

理工展サーバの開発規約をここに定めます。

基本はgit-flowGitHub Flowを組み合わせたものになります。

各ブランチの役割

masterブランチ

masterブランチはすべての元となるブランチです。

masterブランチは常にデプロイ可能です。 すなわち、開発環境を構築したいときはmasterブランチをプルし、 いくつかの変数を設定ファイルに書き込み、Vagrantでリモートマシンを立ち上げて Chefを実行すればすべて完了するという状況が常に保たれています。 または、本番環境からプルをして、(必要なら変数をセットして) Chefを動かせばほとんどサーバをダウンさせずにサーバの機能が更新されるという状況が常に保たれています。 テストされてないコード、不具合を起こすコードがmasterブランチに紛れ込んではいけません。

masterブランチは一方的にdevelopブランチをマージして取り込みます。 masterブランチがdevelopブランチをマージしたとき、タグが振られます。 タグは1.2.3のように3個の自然数からなり(自然数は0から始まります!)、 最初の数字がメジャーバージョン、2番目がマイナーバージョン、 最後の数字がバグフィックスのバージョンを表します。 タグを振るときにどのような機能が追加されたのか、どんなバグをなおしたのかを 軽いコメントにして残しておくというのは良い習慣です。

developブランチ

developブランチは開発の交差点の役割を果たすブランチです。

developブランチは各トピックブランチをマージします。 マージした後、developブランチでは統合テストが行われます。 テストは複数人で、できるだけ素早く行いましょう (客観的なテストを行うためと、複数の統合テストが衝突するのを防ぐためです)。 統合テストが終了した後、developブランチは速やかにmasterブランチにマージされます。

また、サーバにバグが見つかった場合、それが簡単に直るものであれば (目安としては1回のコミットで修正できるかどうかを判断基準にすればいいでしょう)、 developブランチでhotfixを行います。 そしてmasterブランチにマージされた後、デプロイされます。

メイントピックブランチ トピックカテゴリ

開発が進むにつれてトピックが増えていったら、 それらをまとめるためにdevelopブランチとトピックブランチの間に メイントピックブランチというまとめるブランチを挟むかもしれません。 導入することにしました。 諸事情により、ブランチではなくIssueとして残すようにしました。 この概念をトピックブランチの命名規則に組み込みます。 つまり、トピックブランチを分類するためのカテゴリとして導入します。 以降このカテゴリのことをトピックカテゴリと呼びます。

今のところメイントピックブランチには次のようなものを考えています。 トピックカテゴリには今のところ次のものがあります。

カテゴリ名 内容
core gitなどのコアの設定
web ApacheやPHPなどの設定
wiki Wikiの設定
mail メールやメーリングリストの設定

メイントピックブランチが導入されたとき、トピックブランチの名前は mail/023-install-dovecotのようになるでしょう。

トピックブランチ

トピックブランチは一つの機能を実装するための、 あるいは少々やっかいなバグを修正するためのブランチです。

トピックブランチは切られる前にIssueが発行されます。 Issueを発行する際にはそのトピックのトピックカテゴリを上の表から選びましょう。 Issueが発行される時に大まかな仕様が決まっているか、 Issue上で議論をしながら仕様が定まっていくのが良いでしょう。

Issueが発行されたら、トピックブランチはdevelopブランチから切られます。 ブランチの名前は<トピックカテゴリ>/<Issue番号>-<機能やバグを簡潔に表す言葉>というようにします。 ただし、Issue番号は3桁の数字でつけることにします。 たとえばmail/023-install-dovecotのようにです。 すべて英小文字か数字で単語間はハイフンでつなぐことにします。

ブランチが切れたら思う存分開発を行ってください。 開発方法やコミットの仕方については後述します。

引き継ぎブランチ

トピックブランチで開発を行っていたが、何らかの理由で開発が継続できないために 別の人に開発を引き継ぐときに作成するブランチです。 Qiitaのこの記事を参照してください。

開発途中の部分をそのままトピックブランチにコミット&プッシュするのではなく、 23/install-dovecot/seki-151119のようにトピックブランチの名前の後ろに 元の開発者の名前と引き継ぎ日を付け足した名前のブランチを新規に作成し、 そのブランチをプッシュしてください。 引き継いだ開発者は引き継ぎブランチをプルし、 ある程度整えてから元のトピックブランチにマージしてください。 不必要なロールバック(や打ち消しコミット)が減るはずです。