SlideShare a Scribd company logo
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活動しましょう!

More Related Content

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