Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSSにコントリビュートした話

 OSSにコントリビュートした話

DroidKaigi2019公式アプリで初めてOSSにコントリビュートした話について社内勉強会で発表した資料です。

yu mitsuhori

April 25, 2019
Tweet

More Decks by yu mitsuhori

Other Decks in Technology

Transcript

  1. OSSにコントリビュートした話 テクノロジー本部 SD1部 三堀 裕

  2. アジェンダ • この発表の目的、ゴール • OSSとは • OSSのコントリビュートをした話 • OSSのコントリビュートの仕方 •

    自社サービスに活かすには〜OSS活動のメリット〜 • まとめ 2
  3. 自己紹介 • 三堀裕 • テクノロジー本部SD1部 • 3年目 • ルナルナアプリAndroid 3

  4. 今回の発表の目的、ゴール 目的 • OSSとは何か、コントリビュート方法がわかる • OSSのコントリビュート活動をしてよかったなという点の共有 ※Androidの話多めかもしれません。 ゴール • 少しでもOSS活動について、重要性、面白さを感じてもらい興味を持ってもらえる

    • コントリビュートしてみよう!という方が増える 4
  5. OSSとは~基礎知識~ 5

  6. 突然ですが、、 OSSってどんなものがあると思いますか? 6

  7. 7

  8. OSSとは • OSS(OpenSourceSoftware) • ソースコードの改変や、再配布が認められている無償のソフトウェアのこと • 様々なライセンスがある(MIT, Apache2など) • ソフトウェア開発組織の人間でなくてもソースコードをみれたり、自分でissueを起票

    したり、実装したりすることができるものもある 8
  9. 例えばこのようにGithubに公開されている (Kotlinの例) 9

  10. コントリビュートとは Githubなどに公開されているOSSプロジェクトに対して、何かしらの活動(貢献)をする。 • PullRequestを投げる • issueを報告する 10

  11. OSSのライセンス 複製・配布・改良を制限するために、OSSの利用にはライセンスというものが定められて いる。 1. Copyleft系ライセンス a. GNU General Public License

    2. Permissive系ライセンス a. MIT License b. Apache License 2.0 11
  12. OSSにコントリビュートした話 12

  13. 今回コントリビュートしたOSS DroidKaigi2019の公式アプリ(https://github.com/DroidKaigi/conference-app-2019) 13 Androidの方はこちらからイ ンストールできます->

  14. DroidKaigi2019? • 国内で行われるAndroidDevloperによる年に一度のカンファレンス • 公式アプリが毎年あり、OSSでGithub上に公開されている。もちろんコントリビュート 可能 • コントリビュータはWelcome talkの時に紹介されるのでちょっと嬉しい 14

  15. DroidKaigi2019公式アプリについて • Kotlin Multiplatform Project(Kotlin MPP) https://kotlinlang.org/docs/reference/multiplatform.html • Multi module

    • Flux-based • Android JetPack(Lifecycles, LiveData, Navigation) • Kotlin coroutines 15 Android jetpack Flux-based Architecture→
  16. コントリビュート内容 issue(PullRequest)を2件対応 1. UI編集中のプレビュー画面に表示するSampleデータを作る https://github.com/DroidKaigi/conference-app-2019/pull/359 2. スクロールによって、ツールバーにタイトルを表示させる機能追加 https://github.com/DroidKaigi/conference-app-2019/pull/525 16

  17. 1. UI編集中のプレビュー画面に表示する Sampleデータを作る 17

  18. 1. UI編集中のプレビュー画面に表示する Sampleデータを作る 18 sampledataディレクトリに jsonファイルの追加 json(サンプルデータ)作成

  19. 1. UI編集中のプレビュー画面に表示する Sampleデータを作る 19 ↑サンプルデータ (sampledata/service_session.json) item_session.xml (例)タイトル部分のxml 指定した部分の データ(sessionA)が

    反映される <androidx.emoji.widget.EmojiTextView 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" /> <?xml version="1.0" encoding="utf-8"?> <layout 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" >  … </androidx.constraintlayout.widget.ConstraintLayout> <androidx.emoji.widget.EmojiTextView 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" /> … </androidx.constraintlayout.widget.ConstraintLayout> </layout>
  20. 20 AndroidStudioのプレビュー画面 1. UI編集中のプレビュー画面に表示する Sampleデータを作る List系(RecyclerViewなど)の プレビュー画面の見た目がよ くなる→ sampledataが適用されているlistitem をxmlで指定

  21. 2. スクロールによって、ツールバーに タイトルを表示させる機能追加 21

  22. 22 2. スクロールによって、ツールバーに タイトルを表示させる機能追加 1. 下にスクロールすると、ヘッダーのtitle、elevation が表示される 2. 一番上までスクロールすると、ヘッダーのtitle、 elevationが消える

    3. 他の画面に遷移してもヘッダーが残っている 仕様 DroidKaigi2019セッション詳細画面→
  23. 2. スクロールによって、ツールバーに タイトルを表示させる機能追加 23 多くの指摘を受けてしまい マージされるまで大変でした、、

  24. マージされたと思いきや、、 2,3日後には実装が変わっていました、、w プロジェクト管理者の想定では、 「MotionLayout」というアニメーションを新技術を 使う想定だったらしいです 24

  25. コントリビュートしてみよう 25

  26. コントリビュートするためのステップ ※DroidKaigiアプリの場合 1. やりたいIssueを決める 2. Discussionで  宣言する 3. コントリビュートしたいプロジェクトをフォークし、ブランチを切って、実装する 4. PullRequestを出す

    5. レビューをしてもらい、修正点があれば修正してプッシュを繰り返す 6. 問題なければマージ←祝コントリビュータ!! 26
  27. コントリビュートしてみよう① 〜やりたいissueを決める〜 27 ①issueの中から やりたいものを選ぶ

  28. 28 コントリビュートしてみよう② 〜意思表明をする〜 ↑このissueをやろう! ② で意思表示 プロジェクト管理者の方からアサインされる ※実装方針等で不安な部分あればissueのDiscussionで聞いておく と手戻りなくて良さそう

  29. 1. 右上の      からリポジトリをForkする 2. Forkしたリポジトリをクローン。作業ブランチを切る 3. issueの内容に沿って、実装やテストを書く。 4. 修正したコードをプッシュする (例:hackers_hour_testブランチ) 5.

    PullRequestを親リポジトリに対して出す 29 コントリビュートしてみよう③ 〜実装してPullRequestを出す〜
  30. コントリビュートしてみよう④ 〜PR上にてコードレビュー、修正〜 30 マージされたら、、 祝Contribute!

  31. これで君も祝コントリビュータ!! 31

  32. コントリビュートの注意点 • 各プロジェクトのやり方に従う ◦ github上以外で管理されているプロジェクトもある ◦ issueの意思表明の仕方 ◦ コーディング規約など •

    最初に対応方針とか相談した方が良さそう 32
  33. OSS活動を自社サービス に活かすには 33

  34. OSS活動を自社サービスに活かすには 〜OSS活動のメリット〜 • 優秀なエンジニアのコードレビューが受けれる • 自社以外のプロジェクトの良い設計や実装を知ることで価値観が広がる。良い部分 は盗んで、自社サービスにも活かせる • 最新の技術を知れて、自社アプリのリファクタリングにも応用できるような経験がで きる

    • (自分で1からOSSを作る場合) ソフトウェアとしてアプリの一機能を切り出す必要がある。モジュール分割のための 設計を考える訓練にもなる? • もし社内で共通して使えるロジックや処理などがあれば、社内OSSとして公開するこ とによって各プロジェクトごとで同じロジックを実装する必要もなくなる? 34
  35. まとめ 35

  36. まとめ • OSSのコントリビュート活動の一例を紹介(DroidKaigi2019公式アプリ) • OSS活動は多くのメリットがあるし、意外とすぐできる(ものもある) ◦ 有名なエンジニアのコードレビューを受けれたり、ディスカッションができる ◦ 新技術を知れる、価値観を広げられる ◦

    キャリアにもプラスになる • これを機に(興味があるor自分も使っている)ようなOSSがあればコントリビュートし てみてはいかがでしょうか? 36
  37. ご静聴ありがとうございました 37

  38. 参考資料 • オープンソースソフトウェア(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=JA 38