Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
OSSにコントリビュートした話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yu mitsuhori
April 25, 2019
Technology
120
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OSSにコントリビュートした話
DroidKaigi2019公式アプリで初めてOSSにコントリビュートした話について社内勉強会で発表した資料です。
yu mitsuhori
April 25, 2019
More Decks by yu mitsuhori
See All by yu mitsuhori
【DroidKaigi版】ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
3.3k
ReactNativeとKotlinで叶える夢のリアルタイム音声配信
youmitsu
1
940
stand.fm(Android)におけるreact-native-track-playerの改善
youmitsu
1
2.3k
TargetSdkVersion29で BottomNavigationが点滅する件
youmitsu
1
1.7k
リリース前のリグレッションテストをUIテストで自動化、1年間運用した話
youmitsu
2
450
New features in RemoteConfig, Analytics at Google I/O 2019
youmitsu
1
790
FirebaseNotification,RemoteConfigでユーザセグメントごとにプッシュ通知を実装する
youmitsu
8
1.6k
Report from Google I/O 2019
youmitsu
1
120
初めて自作ViewのAARライブラリを公開した話
youmitsu
1
450
Other Decks in Technology
See All in Technology
超⼩型・多⾔語検索モデル Bekko Embedding
hotchpotch
1
110
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
110
Gifu WordPress Meetup #200 に向けて、私たちには何ができるだろうか?/ 2026-11-07 Gifu WordPress Meetup
torounit
0
140
AI AgentによるEmbedded SREの取り組み
tgidgd
1
340
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
3
2k
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
280
kintoneで在庫管理システムを作るときの要件定義・設計ポイント
kai0707
0
230
[General] 개발자로 해외 기업에서 일하기
skydoves
1
300
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
410
複雑な業務システムを高速でつくるため、チーム全員をつくれる人へ
ayakurabuchi
0
130
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
330
生き様としてのSRE
hokkai7go
1
170
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Claude Code のすすめ
schroneko
67
230k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
600
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Context Engineering - Making Every Token Count
addyosmani
9
1.3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Thoughts on Productivity
jonyablonski
76
5.4k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.7k
Optimising Largest Contentful Paint
csswizardry
37
4k
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