この記事は、ニフティグループ Advent Calendar 2023 22日目の記事です。
はじめに
こんにちは。最近はGitHub Copilot無しでコーディングしたくないShibataRyuseiです。
業務ではiOS/Androidアプリ「マイ ニフティ」の開発を行っており、iOS, Android, バックエンドなどほとんどの開発に携わっています。
(ちなみに弊チームではエンジニアを募集中です!)
個人では日々Flutterを使った開発を楽しんでいます。
かなり昔の話ですが今年の2月ごろにFlutterにコントリビュートしたのでメモとして残します。
今年のことは今年のうちにアウトプット…
コントリビュートとは?
「コントリビュート」とは、日本語で「貢献する」という意味で、OSSに貢献することを指します。
コントリビュートするメリットとして、下の記事では「コントリビュートすることはやりがいがあり、…学習し、教え、経験を積むことができます」と述べています。
https://opensource.guide/ja/how-to-contribute/
コントリビュートというと、コードを書いてPull requestを出すイメージがありますが、コードの作成だけでなく、ドキュメントの作成やイシューの整理、カンファレンスの企画なども含まれるようです。
Flutterとは?
今回コントリビュートするFlutterを簡単に紹介します。
FlutterはGoogleが中心に開発しているOSSです。
Dartという言語のフレームワークであり、Dartのコード1つでマルチプラットフォーム(iOS, Android, Web, Windows, macOS, Linux)のネイティブアプリケーションを作ることができます。
実はFlutterはコントリビューターの多いOSSランキングでnext.jsを抑えて3位に入るような活発なOSSです。
https://octoverse.github.com/2022/state-of-open-source
Flutterへのコントリビュートのしかた
今回はコードを書いてPull Request(PR)を出す方法をまとめます。
1. Flutterのルールを学ぶ
まずはFlutterのコントリビュートに関するルールを学びます。
ここら辺は見ておくと良いと思います。
- CONTRIBUTING.md
- CODE_OF_CONDUCT.md
- FlutterのWiki
- コントリビュート関連のページ(values, Issue-hygieneなど)
2. 環境構築をする
ドキュメントに従って、Flutterのengineとframeworkの開発環境を構築します。
frameworkであればこれです。
https://github.com/flutter/flutter/wiki/Setting-up-the-Framework-development-environment
3. Issueを探す
コントリビュートするためのIssueを見つけましょう。
Flutterには多くのIssueがあるため、自力で探すのは大変です。そのためラベルから絞り込んで探すのがおすすめです。
おすすめのIssueラベルは”good first issue”、”a:first hour”です。
昔は”easy fix”もあったけどいつの間にかなくなってる…
4. 実装をする
Issueを決めたらコードを実装します。
GitHubにあるFlutterのレポジトリからforkして自分のレポジトリで作業をします。
5. Pull Requestを出す
forkしたレポジトリからFlutterのレポジトリに対してPull Requestを出します。
Pull Requestを出す際、PRテンプレートのチェックボックスを確認しましょう。
6. Mergeされたら完了!
Pull Requestがマージされたら、コントリビュートは完了です!
実際にやってみた
まず、Issueを選択します。今回は、”a:first hour”のラベルがついている(2月には”easy fix”も付いてた)このIssueに取り組みました。
https://github.com/flutter/flutter/issues/115357
このIssueは、flutter createで使用するテンプレートのLintテストを追加する内容です。
実装を完了し、Pull Requestを提出しました。
https://github.com/flutter/flutter/pull/120526
FlutterではCIが整備されており、約30分間テストなどが実行されていました。
数日後レビューがきて何回か修正したらLGTMをもらいマージされました。
3.10.0のリリースノートにも載りました!
Add lints test for all templates by @ShibataRyusei in 120526
@ShibataRyusei made their first contribution in 120526
https://docs.flutter.dev/release/release-notes/release-notes-3.10.0
終わりに
コントリビュートは難しいイメージがありましたが、全然自分でもできるものが結構ありました。
そして実際にコントリビュートすることでFlutterコミュニティの活発さを感じました。Pull Requestのレビューも早いですし、放置されているIssueもあまりなかったです。
Issueを探しているとFlutter EngineのIssueはまだまだ難しいと感じます。既存コードのコードリーディングがまだまだ足りなかったり、C++, Skia, Metalなどの深い知識が必要だと感じました。
皆さんもぜひOSSに貢献していきましょう!!
明日のニフティグループ Advent Calendar 2023 は@nishine829です。お楽しみに!!
Flutter and the related logo are trademarks of Google LLC. We are not endorsed by or affiliated with Google LLC.