Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSSにコントリビュートした話
Search
yu mitsuhori
April 25, 2019
Technology
1
71
OSSにコントリビュートした話
DroidKaigi2019公式アプリで初めてOSSにコントリビュートした話について社内勉強会で発表した資料です。
yu mitsuhori
April 25, 2019
Tweet
Share
More Decks by yu mitsuhori
See All by yu mitsuhori
【DroidKaigi版】ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
3.1k
ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
760
stand.fm(Android)におけるreact-native-track-playerの改善
youmitsu
1
2k
TargetSdkVersion29で BottomNavigationが点滅する件
youmitsu
1
1.5k
リリース前のリグレッションテストをUIテストで自動化、1年間運用した話
youmitsu
2
330
New features in RemoteConfig, Analytics at Google I/O 2019
youmitsu
1
610
FirebaseNotification,RemoteConfigでユーザセグメントごとにプッシュ通知を実装する
youmitsu
9
1.5k
Report from Google I/O 2019
youmitsu
1
69
初めて自作ViewのAARライブラリを公開した話
youmitsu
1
350
Other Decks in Technology
See All in Technology
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
310
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
9
1.1k
心が動くエンジニアリング ── 私が夢中になる理由
16bitidol
0
100
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
The Role of Developer Relations in AI Product Success.
giftojabu1
0
130
複雑なState管理からの脱却
sansantech
PRO
1
150
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
3
620
安心してください、日本語使えますよ―Ubuntu日本語Remix提供休止に寄せて― 2024-11-17
nobutomurata
1
1k
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
690
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Happy Clients
brianwarren
98
6.7k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
4 Signs Your Business is Dying
shpigford
180
21k
Bash Introduction
62gerente
608
210k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Site-Speed That Sticks
csswizardry
0
27
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Transcript
OSSにコントリビュートした話 テクノロジー本部 SD1部 三堀 裕
アジェンダ • この発表の目的、ゴール • OSSとは • OSSのコントリビュートをした話 • OSSのコントリビュートの仕方 •
自社サービスに活かすには〜OSS活動のメリット〜 • まとめ 2
自己紹介 • 三堀裕 • テクノロジー本部SD1部 • 3年目 • ルナルナアプリAndroid 3
今回の発表の目的、ゴール 目的 • 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 License
2. Permissive系ライセンス a. MIT License b. Apache License 2.0 11
OSSにコントリビュートした話 12
今回コントリビュートしたOSS DroidKaigi2019の公式アプリ(https://github.com/DroidKaigi/conference-app-2019) 13 Androidの方はこちらからイ ンストールできます->
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 coroutines 15 Android jetpack Flux-based Architecture→
コントリビュート内容 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
1. UI編集中のプレビュー画面に表示する Sampleデータを作る 17
1. UI編集中のプレビュー画面に表示する Sampleデータを作る 18 sampledataディレクトリに jsonファイルの追加 json(サンプルデータ)作成
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 AndroidStudioのプレビュー画面 1. UI編集中のプレビュー画面に表示する Sampleデータを作る List系(RecyclerViewなど)の プレビュー画面の見た目がよ くなる→ sampledataが適用されているlistitem をxmlで指定
2. スクロールによって、ツールバーに タイトルを表示させる機能追加 21
22 2. スクロールによって、ツールバーに タイトルを表示させる機能追加 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=JA 38