Your SlideShare is downloading. ×
0
GitHub活動を通して

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

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

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

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

•

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

AppleのNDA緩和 (2008/10)
•

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

•

ASIHTTPRequest, AFNetworkingなどの成功事...
はじめに
個人的なGitHub活動への道のり
•

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

•

ASIHTTPRequestにお世話になる(2009)

•

kishikawaさん見てすげーと思う (2011)
...
はじめに
アジェンダ
•

事例紹介: NJKWebViewProgress

•

事例紹介: NJKScrollFullScreen

•

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

•

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

•

事例紹介: はてなブックマ...
事例紹介


NJKWebViewProgress
NJKWebViewProgress
•

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

•

2013年4月公開
NJKWebViewProgress

DEMO
NJKWebViewProgress
実装
•

UIWebViewDelegateからロードが完了したリソース
の数を数える
- (void)webViewDidStartLoad:(UIWebView *)webView
{
_loadin...
NJKWebViewProgress
実装
•

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

document.readyState
•

loading

=> 未表示

•

interactive => 表示済、DOMアクセス...
NJKWebViewProgress
実装
•

UIWebViewとViewControllerとの間に

Proxyとして挟む
UIWebView

.progressDelegate

NJKWebView

Progress
.dele...
NJKWebViewProgress
どうやって作ったか
•

1Passwordが実現していた

•

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

•

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

•
...
NJKWebViewProgress
作った結果
•

Yahoo! Japan, Facebook Messengerで採用

•

GitHub☆500

•

仕事でも使用

•

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


NJKScrollFullScreen
NJKScrollFullScreen
•

Facebookアプリライクな

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

•

2014年1月公開
NJKScrollFullScreen

DEMO
NJKScrollFullScreen
実装
•

NJKScrollFullScreen
•

•
•

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

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

UIViewCont...
NJKScrollFullScreen
実装
UINavigationBarが隠れる
UIViewController+
NJKFullScreenSupport

UIScrollViewDelegate,
UITableViewDelega...
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...
モジュールを

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

試しやすくする

•

組み込みやすくする

•

品質を高める

•

表現を工夫する

•

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

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活動しましょう!
Upcoming SlideShare
Loading in...5
×

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

13,691

Published on

次の週末はGitHub活動しよう

Published in: Technology

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

  1. 1. GitHub活動を通して
 個人のキャリアを積みつつ
 仕事の成果を出す方法 https://github.com/ninjinkun/
  2. 2. はじめに GitHub活動とは • GitHubで行うオープンソース活動 • 自分のプロジェクトの公開 • 他人のプロジェクトへの貢献
  3. 3. はじめに なぜiOS界隈でGitHubが盛り上がっているのか • AppleのNDA緩和 (2008/10) • それまではSDKについて話すこと自体が難しかった • ASIHTTPRequest, AFNetworkingなどの成功事例 • CocoaPodsの普及 (2011 ) • GitHubがセントラルリポジトリ
  4. 4. はじめに 個人的なGitHub活動への道のり • PsycsさんのImageStoreでiOSの勉強 (2008) • ASIHTTPRequestにお世話になる(2009) • kishikawaさん見てすげーと思う (2011) • ishkawaさん見てすげーと思う (2012) • 自分のOSSモジュール公開 (2013)
  5. 5. はじめに アジェンダ • 事例紹介: NJKWebViewProgress • 事例紹介: NJKScrollFullScreen • いつモジュールを作るのか • モジュールを使ってもらう方法 • 事例紹介: はてなブックマークiOS SDK
  6. 6. 事例紹介
 NJKWebViewProgress
  7. 7. NJKWebViewProgress • UIWebViewのロードプログレスを 取得する • 2013年4月公開
  8. 8. NJKWebViewProgress DEMO
  9. 9. NJKWebViewProgress 実装 • UIWebViewDelegateからロードが完了したリソース の数を数える - (void)webViewDidStartLoad:(UIWebView *)webView { _loadingCount++; _maxLoadCount = fmax(_maxLoadCount, _loadingCount); ! [self startProgress]; } ! - (void)webViewDidFinishLoad:(UIWebView *)webView { _loadingCount--; [self incrementProgress]; }
  10. 10. NJKWebViewProgress 実装 • JavaScriptでページロードの完了をフック • document.readyState • loading => 未表示 • interactive => 表示済、DOMアクセス化 • complete => 完了
  11. 11. NJKWebViewProgress 実装 • UIWebViewとViewControllerとの間に
 Proxyとして挟む UIWebView .progressDelegate NJKWebView
 Progress .delegate .webViewProxy Delegate ViewController
  12. 12. NJKWebViewProgress どうやって作ったか • 1Passwordが実現していた • CordovaのJavaScriptを読んでいてひらめいた • 暇な週末になんとなく実装、プロト実装半日、綺麗に するのに1日 • 同僚に見てもらって.podspec追加してpush
  13. 13. NJKWebViewProgress 作った結果 • Yahoo! Japan, Facebook Messengerで採用 • GitHub☆500 • 仕事でも使用 • 転職先でも(!)
  14. 14. 事例紹介
 NJKScrollFullScreen
  15. 15. NJKScrollFullScreen • Facebookアプリライクな
 フルスクリーン表示ができる • 2014年1月公開
  16. 16. NJKScrollFullScreen DEMO
  17. 17. NJKScrollFullScreen 実装 • NJKScrollFullScreen • • • UIScrollViewDelegateをフックしてバーを隠す
 タイミングを教えてくれる proxyとして動く UIViewController+ NJKFullScreenSupport • UINavigationBar, UIToolbarなどを動かす
 UIまわりの機能を提供するモジュール
  18. 18. NJKScrollFullScreen 実装 UINavigationBarが隠れる UIViewController+ NJKFullScreenSupport UIScrollViewDelegate, UITableViewDelegateをproxy 発火 NJKScrollFullScreen スクロール操作 UIScrollViewDelegate
  19. 19. NJKScrollFullScreen どうやって作ったか • 前職で必要になったが、実装が難しくて断念 • • コードは新しく書いた 当初動きのモジュールの方は作る予定がなかった • DemoApp作ってたらできてた
  20. 20. NJKScrollFullScreen どうやって作ったか • 正月休みに実装 • ゼルダをクリア • 実装2日、READMEとブログ書き1日
  21. 21. NJKScrollFullScreen 作った結果 • GitHub☆380 • Issue, PullRequestぼちぼち来てる • まだ仕事では未投入
  22. 22. GitHubチャンス!
  23. 23. GitHubチャンス! いつモジュールを作るのか • ググっても自分の欲しいライブラリがない • Github, CocoaControlsで見つかったライブラリも要 件に合わなかった • 気づけば毎回同じ処理を書いている
  24. 24. GitHubチャンス! 作るのにおすすめのモジュール • 手離れがよいもの • UIがないモジュール • UIが絡むとOSのアップデートに追従しなければい けなくなる… • とは言っても欲しいのはだいたいUI絡み
  25. 25. GitHubチャンス! 作るのにおすすめのモジュール • Web連携アプリに必要なパーツはまだ足りてない • 例えば… • • • URLを良い感じに使う 決定版NSDateFormatter 他の言語、プラットフォームにあってiOSにないもの • この前見つけた JLRoutes
  26. 26. モジュールを
 使ってもらう方法
  27. 27. モジュールを使ってもらう方法 • 試しやすくする • 組み込みやすくする • 品質を高める • 表現を工夫する • 広報
  28. 28. モジュールを使ってもらう方法 試しやすくする • DemoAppをつける • 依存ライブラリはPodfile, submodulesで一発インス トールできるようにしておく
  29. 29. モジュールを使ってもらう方法 組み込みやすくする • 例えば…継承前提では作らないとか • ObjCは多重継承ができない • • UIViewControllerのサブクラスだと使いづらい 疎な設計はカスタマイズ性を高める • オプションを増やすよりハックしやすい設計を工夫
  30. 30. モジュールを使ってもらう方法 品質を高める • テストを充実させる • CIを導入する • このあたりはishkawaさんが話してくれるはず!
  31. 31. モジュールを使ってもらう方法 表現を工夫する • GitHubのDescriptionと README.mdをがんばる • • ストレートに伝わる文言 UI系ライブラリならGIFを使う • Gyazo gifおすすめ
  32. 32. モジュールを使ってもらう方法 広報 • CocoaPodsにPullRequest • ウォッチャーが居るので、広まる可能性が高い
  33. 33. モジュールを使ってもらう方法 広報 • ブログ書く & Twitterで周知 • @iphone_dev_jpとか • 読みやすい日本語の解説があると人が集まる
  34. 34. 事例紹介
 はてなブックマーク
 iOS SDK
  35. 35. はてなブックマークiOS SDK • オープンソースプロジェクトを
 仕事としてやった例 • はてブの機能をiOSに組み込む
  36. 36. はてなブックマークiOS SDK DEMO
  37. 37. はてなブックマークiOS SDK どうやって作ったか • シード開発者を募集 • GitHub上でシード開発者向けに
 クローズド公開 • Issue, PullRequest 多数 • テスト+CI整備 • 1ヶ月後に正式公開
  38. 38. はてなブックマークiOS SDK どうやってOSSを仕事にしたか • SDK構想を前からしつこく話していた • Pocket SDK等を研究、出すならOSS • GitHubで公開を提案 • 個人活動でGithubでの振る舞いが多少分かっていた ので話を進めやすかった
  39. 39. はてなブックマークiOS SDK どうやってOSSを仕事にしたか • 社内にコードレビューできる体制が整った • 最初のバージョンの品質担保 • OSSプロジェクトとして参加したいか見てもらう • 一人ではできなかった
  40. 40. はてなブックマークiOS SDK 作った結果 • 様々なアプリで採用 • アクティブユーザー数への好影響 • 退職後もメンテナに • SDKを作るならGitHubでやるのがおすすめ!
  41. 41. おわりに
  42. 42. おわりに 大事なことはみんなPerlに教わった • OSSハッカーのロールモデルは既にある • CPAN • Perlライブラリのリポジトリ • 企業の垣根を越えてCPANにコミットする文化がある • 転職しても前職で作ったモジュールのメンテを続けて いたりする
  43. 43. おわりに まとめ • OSSモジュールは個人と仕事の両方に良い影響がある • • • 業務効率化、見えやすい実績、承認 GitHubは履歴書 アプリ作るより簡単でメンテコスト低い
  44. 44. 次の週末は
 GitHub活動しましょう!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×