Sparkへの貢献コトハジメ
2015年はSparkだ、と勝手に思っています。で、社内で自分の関わるサービスの裏側で利用する箇所をどんどん増やしていくのももちろんですが、これまでまともにOSSに貢献していなかったので、これを気にOSSへの貢献にもチャレンジしてみようかと思ったりしたので、色々調べてみた備忘録です。
基本情報
何かできないかな、ということで Contributing to Spark を読んで適当に要約してみます。
Reporting Issues
バグとか質問する時はJIRAでissueをopenするかMLにて。
Contributing Code
githubのPull Requestで受け付けている。JIRAでissueをopenにした上でgithubのsparkリポジトリでのPRでレビューを行う。
- タスクは小さく分解し、出来るなら目的は1つに
- パッチの取り込み、拒絶の指針を確認して
- JIRAでpatch用のissueを作成
- 大きな変更を提案しようとしているなら、設計のドキュメントをJIRAに添付して、dev用のMLで議論をして
- githubのPRでpatchを提出。forkのチュートリアルとPRのチュートリアル
- Sparkのコード規約を守って(ScalaとPythonのチェッカーが付属しているのでかける)
- 自動テストに通って
- 追加のコード用のテストを加え、ScalaTestでテストを行って
- もし必要ならドキュメントを更新する
という感じでしょうか。
Criteria for Inclusion or Rejection of Patches
Sparkの正しさ(バグフィックスとか?)に関するパッチであり、小さく、多くのユーザーにとって有益であるものは即座にレビューされ、マージされる。そうでないもの(以下のもの)は時間がかかったり、場合によっては拒絶される。
- 変更が多いコードや正しさの確認が難しいもの
- Sparkそのものよりもサードパーティに手を入れているようなケース
- 複雑過ぎるもの
- 明示的にせよ、暗黙的にせよユーザーに依存するような振る舞いをするもの(退化と表現されている)
- 新しいAPIを追加しようとするもの
- 依存関係を追加するもの
小さなパッチはほぼリジェクトされない。
Contributing New Algorithms to MLLib
MLLibの重要なゴールはアルゴリズムをたくさん揃えていることである一方で、プロジェクトのメンテナンス性や一貫性、品質が第一の要求のため、実装されるアルゴリズムは
であるべき。
Automated Testing
全てのパッチには自動テストが行われる。
Starter Tasks
Sparkコントリビュータになりたいならまずはここからなチケット集
Documentation
2つの方法がある
Development Discussions
開発社MLにての議論
IDE Setup
IntelliJ
SBTやMavenコマンドをよく使うので一番よく使わえれているIDEはIntelliJなので早速コミュニティエディションをゲットする。
Eclipse
Eclipseも使われているよ〜という話だけどもういいや。。。
という感じです。さらに調べたり勉強したりしないといけないものが色々増えました。