3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OSS】人生初コントリビュート🎉

Posted at

導入

「もっとJavaに慣れたい」「実務以外でも成長したい」
そんな思いから、今回は OSSコントリビュート に挑戦してみました。

普段の学習や小さなアプリ開発とは違い、実際のプロダクトに参加するのは初めてで、
ソースのビルドからGitHubの使い方まで、多くの学びがありました。

リポジトリ探し

コントリビュート(OSS貢献)する際、まず悩むのがリポジトリ選定だと思います。
GitHubでは、初めてのコントリビュートに適したIssue に対して、
よく good first issue というラベルが付けられています。

そこで今回は、このラベルを頼りに検索してみました。

🔎 今回の検索条件

  • 言語: Java
  • ラベル: good first issue
  • ステータス: Open(未対応のもの)
  • ソート: 更新時間(降順)

💻 実際の検索クエリ

検索クエリ
language:Java label:"good first issue" state:open sort:updated-desc

リポジトリによっては good first issue 以外に beginner friendly や help wanted といったラベルを使う場合もあるので、合わせて検索すると対象が広がります。
人気リポジトリに絞りたい場合は、stars:>=500 のようにスター数を条件に追加するのもおすすめです。

取り組むIssueが決まったら

今回取り組むIssue

今回はこちらのリポジトリ・Issueを選びました。

リポジトリ

Issue

Contributeガイドラインを確認する

まずはコントリビュートのガイドラインを確認します。
大体、リポジトリのrootディレクトリにCONTRIBUTING.mdのような名前で置かれています。

コメントしてアサインしてもらう

他のIssue対応をしている方を参考にしてコメントをした。
以下のようにアサインしてもらいました

image.png

今回のIssueについて

今回のIssueの内容をまとめます。
SonarCloudによる静的解析によって、以下の警告が出ていました。

Sonar Cloud原文

An interface that consists solely of constant definitions is a bad practice. The purpose of interfaces is to provide an API, not implementation details. That is, they should provide functions in the first place and constants only to assist these functions, for example, as possible arguments.

If an interface contains constants only, move them either to somewhere else, or replace the interface with an Enum or a final class with a private constructor.

プロジェクト内には、定数だけを定義したインターフェース が多数ありました。
これは Java ではアンチパターンとされていて、以下の理由があります。

  • インターフェースは「契約(API)」を示すものであり、実装の詳細を含める場所ではない
  • 定数は本来、メソッドの引数や設定値を補助する役割にとどまるべき

そのため、定数専用のインターフェースは廃止し、Enumfinal クラス(+プライベートコンストラクタ) に移すことが推奨されています。

作業内容

IssueにPRレビュー負荷分散のため、分割してPRするように書いてあったので指示に従いながら作業を進めていきました。

また、ビルドやテストなどはREADME.mdに書いてあったので、それに従いました。

作業の流れ(Git,Github)は以下の通りです。

  1. リポジトリをフォーク
  2. フォークしたリポジトリをローカルリポジトリにクローン
  3. 改修用ブランチを切る(PR単位)
  4. 改修
  5. コミット、自分のフォークにpush
  6. PR作成
  7. レビュー対応

Githubを用いた開発にあまり慣れていなかったこともあり、
操作に不安はありましたが、手順を踏むことで無事進めることができました。

無事マージされた

対応が終わり、無事マージされました。
以下3つが今回のPRです。

また、コントリビューションの部分に
今回行ったリポジトリのラベル?が表示されていました。(かっこいい)

image.png

まとめ

今回の取り組みを通じて、GitHub を使った開発の流れを体験できただけでなく、Java におけるリファクタリングの知識も深めることができました。
今後は、自分が対応できそうな Issue を見つけたり、改善点に気づいたときには積極的に取り組んでいきたいと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?