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部
    三堀 裕

    View Slide

  2. アジェンダ
    ● この発表の目的、ゴール
    ● OSSとは
    ● OSSのコントリビュートをした話
    ● OSSのコントリビュートの仕方
    ● 自社サービスに活かすには〜OSS活動のメリット〜
    ● まとめ
    2

    View Slide

  3. 自己紹介
    ● 三堀裕
    ● テクノロジー本部SD1部
    ● 3年目
    ● ルナルナアプリAndroid
    3

    View Slide

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

    View Slide

  5. OSSとは~基礎知識~
    5

    View Slide

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

    View Slide

  7. 7

    View Slide

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

    View Slide

  9. 例えばこのようにGithubに公開されている
    (Kotlinの例)
    9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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→

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  19. 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"
    />



    View Slide

  20. 20
    AndroidStudioのプレビュー画面
    1. UI編集中のプレビュー画面に表示する
    Sampleデータを作る
    List系(RecyclerViewなど)の
    プレビュー画面の見た目がよ
    くなる→
    sampledataが適用されているlistitem
    をxmlで指定

    View Slide

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

    View Slide

  22. 22
    2. スクロールによって、ツールバーに
    タイトルを表示させる機能追加
    1. 下にスクロールすると、ヘッダーのtitle、elevation
    が表示される
    2. 一番上までスクロールすると、ヘッダーのtitle、
    elevationが消える
    3. 他の画面に遷移してもヘッダーが残っている
    仕様
    DroidKaigi2019セッション詳細画面→

    View Slide

  23. 2. スクロールによって、ツールバーに
    タイトルを表示させる機能追加
    23
    多くの指摘を受けてしまい
    マージされるまで大変でした、、

    View Slide

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

    View Slide

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

    View Slide

  26. コントリビュートするためのステップ
    ※DroidKaigiアプリの場合
    1. やりたいIssueを決める
    2. Discussionで  宣言する
    3. コントリビュートしたいプロジェクトをフォークし、ブランチを切って、実装する
    4. PullRequestを出す
    5. レビューをしてもらい、修正点があれば修正してプッシュを繰り返す
    6. 問題なければマージ←祝コントリビュータ!!
    26

    View Slide

  27. コントリビュートしてみよう①
    〜やりたいissueを決める〜
    27
    ①issueの中から
    やりたいものを選ぶ

    View Slide

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

    View Slide

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

    View Slide

  30. コントリビュートしてみよう④
    〜PR上にてコードレビュー、修正〜
    30
    マージされたら、、
    祝Contribute!

    View Slide

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

    View Slide

  32. コントリビュートの注意点
    ● 各プロジェクトのやり方に従う
    ○ github上以外で管理されているプロジェクトもある
    ○ issueの意思表明の仕方
    ○ コーディング規約など
    ● 最初に対応方針とか相談した方が良さそう
    32

    View Slide

  33. OSS活動を自社サービス
    に活かすには
    33

    View Slide

  34. OSS活動を自社サービスに活かすには
    〜OSS活動のメリット〜
    ● 優秀なエンジニアのコードレビューが受けれる
    ● 自社以外のプロジェクトの良い設計や実装を知ることで価値観が広がる。良い部分
    は盗んで、自社サービスにも活かせる
    ● 最新の技術を知れて、自社アプリのリファクタリングにも応用できるような経験がで
    きる
    ● (自分で1からOSSを作る場合)
    ソフトウェアとしてアプリの一機能を切り出す必要がある。モジュール分割のための
    設計を考える訓練にもなる?
    ● もし社内で共通して使えるロジックや処理などがあれば、社内OSSとして公開するこ
    とによって各プロジェクトごとで同じロジックを実装する必要もなくなる?
    34

    View Slide

  35. まとめ
    35

    View Slide

  36. まとめ
    ● OSSのコントリビュート活動の一例を紹介(DroidKaigi2019公式アプリ)
    ● OSS活動は多くのメリットがあるし、意外とすぐできる(ものもある)
    ○ 有名なエンジニアのコードレビューを受けれたり、ディスカッションができる
    ○ 新技術を知れる、価値観を広げられる
    ○ キャリアにもプラスになる
    ● これを機に(興味があるor自分も使っている)ようなOSSがあればコントリビュートし
    てみてはいかがでしょうか?
    36

    View Slide

  37. ご静聴ありがとうございました
    37

    View Slide

  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

    View Slide