batchのブログ

知見の備忘録

Android始めて半年くらいの俺がContributeしかけたはなし

タイトルにある通り,Androidアプリ開発を去年の夏頃から初めて現在約半年くらいです.

そして今,2月に開催されるDroidKaigiに向けて全国のAndroidアプリエンジニアが集まってDroidKaigiのセッションリストなどをまとめたAndroidアプリをOSSで開発中です.
github.com

このリポジトリではIssueにwelcome contributeとタグが付けられているものは誰でも手を挙げて取り掛かることができます.
その中でも,easyとタグが付けられたIssueは僕のような初心者には取り掛かりやすいIssueとなっていて自分もなにかできないかなと思っていました.


そこで発見したこのIssue.
github.com


まだcloneしてソースコードも一度も見たことありませんでしたが,雰囲気自分でもできる感じがして手を挙げました.

OSSのコミットなんてしたことなかったので,すべてがわかりませんでした.

最後に,プルリク送るからどこかでbranch生やすんだよな…?
でもこれどっから生やすんだ…?
みんなどこでbranch切ってるんだ…?









調べました.







どうやらまず,forkする必要があるようです.
forkすることで自分のリモートに,コミットしようとしてる(今回で言うDroidKaigiのカンファレンスapp)リポジトリのコピーを作成します.cloneはローカルにコピーを作るのでそこが違う点かなと解釈しています.

forkすることにより,本家のリポジトリを汚さずにコミットすることができるようです.
本家のmasterから直接いろいろなcontributorがbranchを切ると,ごちゃごちゃになるのを防ぐイメージかなと解釈しています.

なので,まずは本家リポジトリをforkさせて自分のリモートリポジトリにコピーを用意し,それをcloneして開発します.
開発するときは,cloneしてきたリポジトリのmasterから任意の名前をつけてbranchを切って,開発が終わったら,そのbranchでプルリクを出すという流れです.


最初,ソースコードを見たとき,あまりこのような大きなプロジェクトファイルを読む機会がなかったので,自分が取りかかなければいけないソースファイルがどこにあるか探すのに少し苦労しました.


試行錯誤の末,想像よりも早くIssueを終わらせることができ,プルリクを出したのですが…
github.com



どうやら,僕よりも先に僕のIssueでなおす箇所を含む変更がコミットされていたみたいです.
残念ながら,僕のコミットが取り込まれることはなく,contributorになりかけたということです.




少し悲しいですが,僕が変更した部分も数行でこれでほんとにcontributorと名乗っていいのか疑問だったので,初めてOSSのIssueに取り掛かって,英語で会話してプルリクまで出せたという流れを体験できただけでもとてもいい経験だったかなと思っています.


プルリクもテンプレが用意されているのですが,スクリーンショットにgifを埋め込むなどやったことがないこともできて自分の中で知見が増えたのでそれも良かったです.

また,OSSにコミットする際のgitの扱いとして,本家リポジトリをforkするのですが,そのあと,コピーしたリポジトリでは本家の最新の状態をそのままでは追従できません.

そこで,gitのupstreamという機能を使う必要があるようで,それをすることによりコピーしたリポジトリでも本家のリポジトリの最新のmasterの状態を追従することができます.

僕も全然そこら辺詳しくないのですが,これを自分がプルリクを出す前にすることでコンフリクトを事前に回避できてトラブルが減るのではないかなと思っています.



ということで,ここまで語れるくらいには知見が溜まったので初心者の方でも恐れずにcontibuteしてみるといいと思います.思った以上の経験値が取得できます.


また機会があればなにかIssueやってみようかなと思っています.


人はこうして成長していくのである.


参考にした記事
GitHubでフォーク元の差分を取り込む - Qiita
開発用ブランチにMasterブランチの最新コードを取り込む - Beeeat’s log