SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
GitHub活動を通して

個人のキャリアを積みつつ

仕事の成果を出す方法
https://github.com/ninjinkun/
はじめに
GitHub活動とは
•

GitHubで行うオープンソース活動
•

自分のプロジェクトの公開

•

他人のプロジェクトへの貢献
はじめに
なぜiOS界隈でGitHubが盛り上がっているのか
•

AppleのNDA緩和 (2008/10)
•

それまではSDKについて話すこと自体が難しかった

•

ASIHTTPRequest, AFNetworkingなどの成功事例

•

CocoaPodsの普及 (2011 )
•

GitHubがセントラルリポジトリ
はじめに
個人的なGitHub活動への道のり
•

PsycsさんのImageStoreでiOSの勉強 (2008)

•

ASIHTTPRequestにお世話になる(2009)

•

kishikawaさん見てすげーと思う (2011)

•

ishkawaさん見てすげーと思う (2012)

•

自分のOSSモジュール公開 (2013)
はじめに
アジェンダ
•

事例紹介: NJKWebViewProgress

•

事例紹介: NJKScrollFullScreen

•

いつモジュールを作るのか

•

モジュールを使ってもらう方法

•

事例紹介: はてなブックマークiOS SDK
事例紹介


NJKWebViewProgress
NJKWebViewProgress
•

UIWebViewのロードプログレスを
取得する

•

2013年4月公開
NJKWebViewProgress

DEMO
NJKWebViewProgress
実装
•

UIWebViewDelegateからロードが完了したリソース
の数を数える
- (void)webViewDidStartLoad:(UIWebView *)webView
{
_loadingCount++;
_maxLoadCount = fmax(_maxLoadCount,
_loadingCount);
!
[self startProgress];
}
!
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
_loadingCount--;
[self incrementProgress];
}
NJKWebViewProgress
実装
•

JavaScriptでページロードの完了をフック
•

document.readyState
•

loading

=> 未表示

•

interactive => 表示済、DOMアクセス化

•

complete

=> 完了
NJKWebViewProgress
実装
•

UIWebViewとViewControllerとの間に

Proxyとして挟む
UIWebView

.progressDelegate

NJKWebView

Progress
.delegate

.webViewProxy
Delegate

ViewController
NJKWebViewProgress
どうやって作ったか
•

1Passwordが実現していた

•

CordovaのJavaScriptを読んでいてひらめいた

•

暇な週末になんとなく実装、プロト実装半日、綺麗に
するのに1日

•

同僚に見てもらって.podspec追加してpush
NJKWebViewProgress
作った結果
•

Yahoo! Japan, Facebook Messengerで採用

•

GitHub☆500

•

仕事でも使用

•

転職先でも(!)
事例紹介


NJKScrollFullScreen
NJKScrollFullScreen
•

Facebookアプリライクな

フルスクリーン表示ができる

•

2014年1月公開
NJKScrollFullScreen

DEMO
NJKScrollFullScreen
実装
•

NJKScrollFullScreen
•

•
•

UIScrollViewDelegateをフックしてバーを隠す

タイミングを教えてくれる
proxyとして動く

UIViewController+ NJKFullScreenSupport
•

UINavigationBar, UIToolbarなどを動かす

UIまわりの機能を提供するモジュール
NJKScrollFullScreen
実装
UINavigationBarが隠れる
UIViewController+
NJKFullScreenSupport

UIScrollViewDelegate,
UITableViewDelegateをproxy

発火
NJKScrollFullScreen

スクロール操作

UIScrollViewDelegate
NJKScrollFullScreen
どうやって作ったか
•

前職で必要になったが、実装が難しくて断念
•

•

コードは新しく書いた

当初動きのモジュールの方は作る予定がなかった
•

DemoApp作ってたらできてた
NJKScrollFullScreen
どうやって作ったか
•

正月休みに実装
•

ゼルダをクリア

•

実装2日、READMEとブログ書き1日
NJKScrollFullScreen
作った結果
•

GitHub☆380

•

Issue, PullRequestぼちぼち来てる

•

まだ仕事では未投入
GitHubチャンス!
GitHubチャンス!
いつモジュールを作るのか
•

ググっても自分の欲しいライブラリがない

•

Github, CocoaControlsで見つかったライブラリも要
件に合わなかった

•

気づけば毎回同じ処理を書いている
GitHubチャンス!
作るのにおすすめのモジュール
•

手離れがよいもの
•

UIがないモジュール
•

UIが絡むとOSのアップデートに追従しなければい
けなくなる…

•

とは言っても欲しいのはだいたいUI絡み
GitHubチャンス!
作るのにおすすめのモジュール
•

Web連携アプリに必要なパーツはまだ足りてない
•

例えば…
•
•

•

URLを良い感じに使う
決定版NSDateFormatter

他の言語、プラットフォームにあってiOSにないもの
•

この前見つけた JLRoutes
モジュールを

使ってもらう方法
モジュールを使ってもらう方法
•

試しやすくする

•

組み込みやすくする

•

品質を高める

•

表現を工夫する

•

広報
モジュールを使ってもらう方法
試しやすくする
•

DemoAppをつける

•

依存ライブラリはPodfile, submodulesで一発インス
トールできるようにしておく
モジュールを使ってもらう方法
組み込みやすくする
•

例えば…継承前提では作らないとか
•

ObjCは多重継承ができない
•

•

UIViewControllerのサブクラスだと使いづらい

疎な設計はカスタマイズ性を高める
•

オプションを増やすよりハックしやすい設計を工夫
モジュールを使ってもらう方法
品質を高める
•

テストを充実させる

•

CIを導入する

•

このあたりはishkawaさんが話してくれるはず!
モジュールを使ってもらう方法
表現を工夫する
•

GitHubのDescriptionと
README.mdをがんばる
•

•

ストレートに伝わる文言

UI系ライブラリならGIFを使う
•

Gyazo gifおすすめ
モジュールを使ってもらう方法
広報
•

CocoaPodsにPullRequest
•

ウォッチャーが居るので、広まる可能性が高い
モジュールを使ってもらう方法
広報
•

ブログ書く & Twitterで周知

•

@iphone_dev_jpとか
•

読みやすい日本語の解説があると人が集まる
事例紹介


はてなブックマーク

iOS SDK
はてなブックマークiOS SDK
•

オープンソースプロジェクトを

仕事としてやった例

•

はてブの機能をiOSに組み込む
はてなブックマークiOS SDK

DEMO
はてなブックマークiOS SDK
どうやって作ったか
•

シード開発者を募集

•

GitHub上でシード開発者向けに

クローズド公開

•

Issue, PullRequest 多数

•

テスト+CI整備

•

1ヶ月後に正式公開
はてなブックマークiOS SDK
どうやってOSSを仕事にしたか
•

SDK構想を前からしつこく話していた

•

Pocket SDK等を研究、出すならOSS

•

GitHubで公開を提案
•

個人活動でGithubでの振る舞いが多少分かっていた
ので話を進めやすかった
はてなブックマークiOS SDK
どうやってOSSを仕事にしたか
•

社内にコードレビューできる体制が整った
•

最初のバージョンの品質担保

•

OSSプロジェクトとして参加したいか見てもらう

•

一人ではできなかった
はてなブックマークiOS SDK
作った結果
•

様々なアプリで採用

•

アクティブユーザー数への好影響

•

退職後もメンテナに

•

SDKを作るならGitHubでやるのがおすすめ!
おわりに
おわりに
大事なことはみんなPerlに教わった
•

OSSハッカーのロールモデルは既にある

•

CPAN
•

Perlライブラリのリポジトリ

•

企業の垣根を越えてCPANにコミットする文化がある

•

転職しても前職で作ったモジュールのメンテを続けて
いたりする
おわりに
まとめ
•

OSSモジュールは個人と仕事の両方に良い影響がある
•
•

•

業務効率化、見えやすい実績、承認
GitHubは履歴書

アプリ作るより簡単でメンテコスト低い
次の週末は

GitHub活動しましょう!

Mais conteúdo relacionado

Semelhante a GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法

[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
VOYAGE GROUP
 

Semelhante a GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法 (20)

GitHubのIssue作成について
GitHubのIssue作成についてGitHubのIssue作成について
GitHubのIssue作成について
 
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントGit学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
 
[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
 
Yapc2012資料
Yapc2012資料Yapc2012資料
Yapc2012資料
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 
Git_GiHub講習会.pdf
Git_GiHub講習会.pdfGit_GiHub講習会.pdf
Git_GiHub講習会.pdf
 
Hiroshima.rb on github
Hiroshima.rb on githubHiroshima.rb on github
Hiroshima.rb on github
 
「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう「CodeYourRuby」で オープンなコードレビューを体験しよう
「CodeYourRuby」で オープンなコードレビューを体験しよう
 
オープンセミナー2014@広島 懇親会LT
オープンセミナー2014@広島 懇親会LTオープンセミナー2014@広島 懇親会LT
オープンセミナー2014@広島 懇親会LT
 
GitHub ActionsでiOSのCIを実現しよう
GitHub ActionsでiOSのCIを実現しようGitHub ActionsでiOSのCIを実現しよう
GitHub ActionsでiOSのCIを実現しよう
 
プログラミング支援AI GitHub Copilot すごいの話
プログラミング支援AI GitHub Copilot すごいの話プログラミング支援AI GitHub Copilot すごいの話
プログラミング支援AI GitHub Copilot すごいの話
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!
 
SNS 「github」で遊ぼう
SNS 「github」で遊ぼうSNS 「github」で遊ぼう
SNS 「github」で遊ぼう
 
APL EPUB WG報告
APL EPUB WG報告APL EPUB WG報告
APL EPUB WG報告
 
Pythonを始めよう
Pythonを始めようPythonを始めよう
Pythonを始めよう
 
Git for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオンGit for Begineers GitHub ハンズオン
Git for Begineers GitHub ハンズオン
 
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
Git & GitHub を使いこなしてハッピーになろう! - WordBench 名古屋 & concrete5 名古屋 合同勉強会
 
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整えるAzure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
 
LINE BOT AWARDS ハンズオン
LINE BOT AWARDS ハンズオンLINE BOT AWARDS ハンズオン
LINE BOT AWARDS ハンズオン
 
Katib
KatibKatib
Katib
 

Mais de Satoshi Asano

I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理
Satoshi Asano
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
Satoshi Asano
 
iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編
Satoshi Asano
 
Asihttp requestについて
Asihttp requestについてAsihttp requestについて
Asihttp requestについて
Satoshi Asano
 
バックグラウンド位置取得について
バックグラウンド位置取得についてバックグラウンド位置取得について
バックグラウンド位置取得について
Satoshi Asano
 

Mais de Satoshi Asano (11)

I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理I phoneアプリの通信エラー処理
I phoneアプリの通信エラー処理
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
 
Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Webエンジニアから見たiOS5
Webエンジニアから見たiOS5
 
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
iPhoneアプリとAndroidアプリを比較する〜はてなブックマーク開発の現場から〜
 
Google Analytics & iPhone
Google Analytics & iPhoneGoogle Analytics & iPhone
Google Analytics & iPhone
 
iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編iPhoneアプリ開発講座Web連携アプリ編
iPhoneアプリ開発講座Web連携アプリ編
 
Asihttp requestについて
Asihttp requestについてAsihttp requestについて
Asihttp requestについて
 
バックグラウンド位置取得について
バックグラウンド位置取得についてバックグラウンド位置取得について
バックグラウンド位置取得について
 
iPhoneアプリ開発講座入門編
iPhoneアプリ開発講座入門編iPhoneアプリ開発講座入門編
iPhoneアプリ開発講座入門編
 
集合知プログラミング第2章復習
集合知プログラミング第2章復習集合知プログラミング第2章復習
集合知プログラミング第2章復習
 
Algorithm Introduction #18 B-Tree
Algorithm Introduction #18 B-TreeAlgorithm Introduction #18 B-Tree
Algorithm Introduction #18 B-Tree
 

Último

Último (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法