DroidKaigi2019公式アプリで初めてOSSにコントリビュートした話について社内勉強会で発表した資料です。
OSSにコントリビュートした話テクノロジー本部 SD1部三堀 裕
View Slide
アジェンダ● この発表の目的、ゴール● OSSとは● OSSのコントリビュートをした話● OSSのコントリビュートの仕方● 自社サービスに活かすには〜OSS活動のメリット〜● まとめ2
自己紹介● 三堀裕● テクノロジー本部SD1部● 3年目● ルナルナアプリAndroid3
今回の発表の目的、ゴール目的● OSSとは何か、コントリビュート方法がわかる● OSSのコントリビュート活動をしてよかったなという点の共有※Androidの話多めかもしれません。ゴール● 少しでもOSS活動について、重要性、面白さを感じてもらい興味を持ってもらえる● コントリビュートしてみよう!という方が増える4
OSSとは~基礎知識~5
突然ですが、、OSSってどんなものがあると思いますか?6
7
OSSとは● OSS(OpenSourceSoftware)● ソースコードの改変や、再配布が認められている無償のソフトウェアのこと● 様々なライセンスがある(MIT, Apache2など)● ソフトウェア開発組織の人間でなくてもソースコードをみれたり、自分でissueを起票したり、実装したりすることができるものもある8
例えばこのようにGithubに公開されている(Kotlinの例)9
コントリビュートとはGithubなどに公開されているOSSプロジェクトに対して、何かしらの活動(貢献)をする。● PullRequestを投げる● issueを報告する10
OSSのライセンス複製・配布・改良を制限するために、OSSの利用にはライセンスというものが定められている。1. Copyleft系ライセンスa. GNU General Public License2. Permissive系ライセンスa. MIT Licenseb. Apache License 2.011
OSSにコントリビュートした話12
今回コントリビュートしたOSSDroidKaigi2019の公式アプリ(https://github.com/DroidKaigi/conference-app-2019)13Androidの方はこちらからインストールできます->
DroidKaigi2019?● 国内で行われるAndroidDevloperによる年に一度のカンファレンス● 公式アプリが毎年あり、OSSでGithub上に公開されている。もちろんコントリビュート可能● コントリビュータはWelcome talkの時に紹介されるのでちょっと嬉しい14
DroidKaigi2019公式アプリについて● Kotlin Multiplatform Project(Kotlin MPP)https://kotlinlang.org/docs/reference/multiplatform.html● Multi module● Flux-based● Android JetPack(Lifecycles, LiveData, Navigation)● Kotlin coroutines15Android jetpack Flux-based Architecture→
コントリビュート内容issue(PullRequest)を2件対応1. UI編集中のプレビュー画面に表示するSampleデータを作るhttps://github.com/DroidKaigi/conference-app-2019/pull/3592. スクロールによって、ツールバーにタイトルを表示させる機能追加https://github.com/DroidKaigi/conference-app-2019/pull/52516
1. UI編集中のプレビュー画面に表示するSampleデータを作る17
1. UI編集中のプレビュー画面に表示するSampleデータを作る18sampledataディレクトリにjsonファイルの追加json(サンプルデータ)作成
1. UI編集中のプレビュー画面に表示するSampleデータを作る19↑サンプルデータ(sampledata/service_session.json)item_session.xml(例)タイトル部分のxml指定した部分のデータ(sessionA)が反映されるandroid:id="@+id/title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="16dp"…tools:text="@sample/service_session.json/data/session_name"/>xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"> …android:id="@+id/title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="16dp"android:fontFamily="@font/notosans_medium"android:text="@{session.title.getByLang(lang)}"android:textAlignment="viewStart"android:textAppearance="@style/TextAppearance.App.Subtitle1"app:highlightText="@{query}"app:layout_constraintEnd_toStartOf="@id/favorite"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/ongoing"tools:text="@sample/service_session.json/data/session_name"/>…
20AndroidStudioのプレビュー画面1. UI編集中のプレビュー画面に表示するSampleデータを作るList系(RecyclerViewなど)のプレビュー画面の見た目がよくなる→sampledataが適用されているlistitemをxmlで指定
2. スクロールによって、ツールバーにタイトルを表示させる機能追加21
222. スクロールによって、ツールバーにタイトルを表示させる機能追加1. 下にスクロールすると、ヘッダーのtitle、elevationが表示される2. 一番上までスクロールすると、ヘッダーのtitle、elevationが消える3. 他の画面に遷移してもヘッダーが残っている仕様DroidKaigi2019セッション詳細画面→
2. スクロールによって、ツールバーにタイトルを表示させる機能追加23多くの指摘を受けてしまいマージされるまで大変でした、、
マージされたと思いきや、、2,3日後には実装が変わっていました、、wプロジェクト管理者の想定では、「MotionLayout」というアニメーションを新技術を使う想定だったらしいです24
コントリビュートしてみよう25
コントリビュートするためのステップ※DroidKaigiアプリの場合1. やりたいIssueを決める2. Discussionで 宣言する3. コントリビュートしたいプロジェクトをフォークし、ブランチを切って、実装する4. PullRequestを出す5. レビューをしてもらい、修正点があれば修正してプッシュを繰り返す6. 問題なければマージ←祝コントリビュータ!!26
コントリビュートしてみよう①〜やりたいissueを決める〜27①issueの中からやりたいものを選ぶ
28コントリビュートしてみよう②〜意思表明をする〜↑このissueをやろう!② で意思表示プロジェクト管理者の方からアサインされる※実装方針等で不安な部分あればissueのDiscussionで聞いておくと手戻りなくて良さそう
1. 右上の からリポジトリをForkする2. Forkしたリポジトリをクローン。作業ブランチを切る3. issueの内容に沿って、実装やテストを書く。4. 修正したコードをプッシュする(例:hackers_hour_testブランチ)5. PullRequestを親リポジトリに対して出す29コントリビュートしてみよう③〜実装してPullRequestを出す〜
コントリビュートしてみよう④〜PR上にてコードレビュー、修正〜30マージされたら、、祝Contribute!
これで君も祝コントリビュータ!!31
コントリビュートの注意点● 各プロジェクトのやり方に従う○ github上以外で管理されているプロジェクトもある○ issueの意思表明の仕方○ コーディング規約など● 最初に対応方針とか相談した方が良さそう32
OSS活動を自社サービスに活かすには33
OSS活動を自社サービスに活かすには〜OSS活動のメリット〜● 優秀なエンジニアのコードレビューが受けれる● 自社以外のプロジェクトの良い設計や実装を知ることで価値観が広がる。良い部分は盗んで、自社サービスにも活かせる● 最新の技術を知れて、自社アプリのリファクタリングにも応用できるような経験ができる● (自分で1からOSSを作る場合)ソフトウェアとしてアプリの一機能を切り出す必要がある。モジュール分割のための設計を考える訓練にもなる?● もし社内で共通して使えるロジックや処理などがあれば、社内OSSとして公開することによって各プロジェクトごとで同じロジックを実装する必要もなくなる?34
まとめ35
まとめ● OSSのコントリビュート活動の一例を紹介(DroidKaigi2019公式アプリ)● OSS活動は多くのメリットがあるし、意外とすぐできる(ものもある)○ 有名なエンジニアのコードレビューを受けれたり、ディスカッションができる○ 新技術を知れる、価値観を広げられる○ キャリアにもプラスになる● これを機に(興味があるor自分も使っている)ようなOSSがあればコントリビュートしてみてはいかがでしょうか?36
ご静聴ありがとうございました37
参考資料● オープンソースソフトウェア(OSS)ライセンスの比較・まとめ、GPLやMITは何が違うのかhttps://www.sbbit.jp/article/cont1/34811 ● 公開ライセンスの話(Qiita) https://qiita.com/lovee/items/484ae3fc038314a64ee2● Kotlin Multiplatform(Kotlin Programing Language)https://kotlinlang.org/docs/reference/multiplatform.html● Android Jetpack(Android Developers)https://developer.android.com/jetpack?hl=JA38