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
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
Taming you application's environments
salaboy
0
190
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
870
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
120
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
140
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
130
Engineer Career Talk
lycorp_recruit_jp
0
170
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
130
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.3k
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Code Review Best Practice
trishagee
64
17k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Become a Pro
speakerdeck
PRO
25
5k
Done Done
chrislema
181
16k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
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