0
mixiにおけるiPhoneアプリ開発	
株式会社ミクシィ	
  
武田祐一
略歴	
•  武田祐一	
  
•  株式会社ミクシィ エンジニア	
  
	
  
•  2012年4月 株式会社ミクシィに入社	
  
•  同年6月 より iOSアプリ開発に	
  
アウトライン	
•  ミクシィでのiPhoneアプリの開発体制	
  
–  大規模になる中でどうやってコードを維持するか	
  
	
  

•  コードのテクニックなどよりも、開発環境や周
辺のツールなどについて
mixi	
  iPhoneアプリ	
•  アップデート回数	
  
–  23回	
  (2012年)	
  

•  スマートフォンからのアクセス	
  
–  月間800万ユーザー	
  

•  巨大なコードベース	
  
–  .mフ...
開発体制	
•  開発チーム 計11人	
  
–  ディレクター 1人	
  
–  デザイナー 1人	
  
–  エンジニア	
  7人	
  
–  QAエンジニア	
  2人	
  

•  アジャイルな開発体制の一つ、スクラムを採
...
スクラムによる開発	

日々のデイリースクラムの様子	

カンバン
開発していく上で大切にしていること	
•  設計・コードベース	
  
–  オブジェクト指向	
  
–  MVCフレームワーク	
  

•  保守性	
  
–  テスト、CI	
  
–  コードレビュー	
  
アプリの全体構成	
Mixi	
  Graph	
  Kit	
  
ビュー	

モデル	

コントローラ	
mixiの各機能	

通信を管理する
内製ライブラリ	
  

•  RESTful	
  API	
  
•  JSONRPC	
m...
MVCフレームワーク	
モデル	
•  MixiGraphKitを通じたデータのやり取り	
•  ロジックを詰め込み、テストを書く	

コントローラ	
•  モデルとビューの仲介	
•  ロジックは書かない	

ビュー	
•  画面構成・ユーザ...
オブジェクト指向	
•  同じような画面やパーツを作ることはよくある	
  
•  共通する部分は基底クラスを作ってサブクラ
ス化していく	
  
–  一方で過度の多重継承は上位のクラスの改変が
難しくなるのでほどほどに	
  
オブジェクト指向	
•  クラス間の依存度はできるだけ下げる	
  
–  delegate,	
  NSNoRficaRonなどでクラス間の通知	
  
–  プロトコル準拠などで依存度を下げる	
ViewControllerA	
  
	
 ...
オブジェクト指向	
•  クラス間の依存度はできるだけ下げる	
  
–  delegate,	
  NSNoRficaRonなどでクラス間の通知	
  
–  プロトコル準拠などで依存度を下げる	
ViewControllerA	
  
	
 ...
オブジェクト指向	
•  クラス間の依存度はできるだけ下げる	
  
–  delegate,	
  NSNoRficaRonなどでクラス間の通知	
  
–  プロトコル準拠などで依存度を下げる	
ViewControllerA	
  
	
 ...
オブジェクト指向	
•  クラス間の依存度はできるだけ下げる	
  
–  delegate,	
  NSNoRficaRonなどでクラス間の通知	
  
–  プロトコル準拠などで依存度を下げる	
ViewControllerA	
  
	
 ...
オブジェクト指向	
•  クラス間の依存度はできるだけ下げる	
  
–  delegate,	
  NSNoRficaRonなどでクラス間の通知	
  
–  プロトコル準拠などで依存度を下げる	
ViewControllerA	
  
<Mo...
テスト	
•  コードの品質を保つために、できるだけテストを
書くようにしている	
  
•  テストの種類	
  
–  モデル層の単体テスト	
  
•  GHUnit	
  

–  ユーザアクションをシミュレートしたテスト	
  
• ...
単体テスト	
•  GHUnitを用いて、モデル層のロジックをテスト	
  
•  各メソッドごとにテストを書く	
  
•  他のクラスの挙動に左右される部分について
はそのクラスのメソッドをモックする	
  
–  通信するメソッドなど	
...
KIF	
•  受け入れテストの一つ、ユーザーの操作をシ
ミュレーションする	
  
•  操作のシナリオをObjecitve-­‐Cで記述	
  
•  コマンドラインからの実行が可能	
  
–  毎日 午前/午後	
  3時に定時実行
UI	
  AutomaRon	
•  ユーザーの操作を自動実行するInstruments
の機能、AutomaRonをテストで使用	
  
•  JavaScriptで操作を記述。あるいは実際に操
作した記録を用いることも可能	
  
•  ...
KIF	
  vs	
  UI-­‐AutomaRon	
KIF	
テストの記述	

自由度	

導入のしやすさ	

ObjecRve-­‐Cで記述	

UI-­‐Automa6on	
JavaScript,	
  ユーザーによる操作	

内部...
コードレビュー	
•  エンジニアが7人もいると、コードの保守が
徐々に困難に	
  
–  記述の仕方が一致しない(命名規則とか)	
  
–  ここはこういうライブラリを使ってほしい	
  

•  ソースコードをチーム内でレビューするコー...
コードレビューで見るところ	
•  コーディングガイドラインに沿っているか	
  
•  ライブラリの使い方などが正しいか	
  
•  明らかなバグがないか	
  
コードレビューで見るところ	
•  コーディングガイドラインに沿っているか	
  
1.  Appleのコーディングガイドライン	
  
2.  Google	
  ObjecRve-­‐C	
  スタイルガイド	
  
3.  独自で決めた規...
コードレビューで見るところ	
•  ライブラリの使い方が正しいか	
  
•  ライブラリ例	
  
–  UIWebViewやNSURLConnecRonは独自の拡張を
施している	
  
•  認証用のトークンの取得/更新	
  
•  完...
コードレビューで見るところ	
•  明らかなバグがないか	
  
//	
  NON	
  ARC	
  	
  
-­‐(void)dealloc	
  
{	
  
	
  	
  	
  self.model	
  =	
  nil;	
...
コードレビューのサポートツール	
•  Gerrit	

gerritの画像を貼る
コードレビューのサポートツール	
•  Gerrit	
  
–  Google製のGit用ソースコードレビューシステム	
  
–  行単位でのインラインコメントが可能	
  
•  パッチセット単位でのマージ	
  

–  Jenkins...
ワークフロー	
push	
テスト失敗	

Jenkins	
  

(自動テスト)	

エンジニア	

コードレビューを受けて修正	

verified	
  

Gerrit	
コードレビューOK	
  
merge	

Git	
  Rem...
開発をサポートするツール	
•  社内用Over	
  the	
  Air配布ツール	
  
	
  peperoncino	
  
	
  
	
  
•  App	
  Storeのレビュー閲覧ツール	
  
koala	
  (hups...
OTA	
  ツール peperoncino	
•  「こういう環境のビルド欲しいから作って」と言
われる度に一々ビルドし直すのは面倒	
  
•  Jenkinsから	
  
–  APIエンドポイント	
  
–  ブランチ	
  
を指定...
Jenkinsでのビルド&配布	
•  xcodebuildを用いてビルドする	
  
–  configuraRonは Release	
  
–  CODE_SIGN_IDENTITYはDistribuRonのものを	
  

•  できたa...
koala	
•  AppStoreのレビューをスクレイピングして表示	
  
•  現在は結果をポーリングしてIRCで通知	
  
•  githubに上がっているので良かったらご利用
ください
以上、ご清澄ありがとうございました。
Conference withdevelopers 第二版
Upcoming SlideShare
Loading in...5
×

Conference withdevelopers 第二版

801

Published on

conference with developers 2012 で後輩の @ginrou が発表した資料。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
801
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Conference withdevelopers 第二版"

  1. 1. mixiにおけるiPhoneアプリ開発 株式会社ミクシィ   武田祐一
  2. 2. 略歴 •  武田祐一   •  株式会社ミクシィ エンジニア     •  2012年4月 株式会社ミクシィに入社   •  同年6月 より iOSアプリ開発に  
  3. 3. アウトライン •  ミクシィでのiPhoneアプリの開発体制   –  大規模になる中でどうやってコードを維持するか     •  コードのテクニックなどよりも、開発環境や周 辺のツールなどについて
  4. 4. mixi  iPhoneアプリ •  アップデート回数   –  23回  (2012年)   •  スマートフォンからのアクセス   –  月間800万ユーザー   •  巨大なコードベース   –  .mファイルは574個  
  5. 5. 開発体制 •  開発チーム 計11人   –  ディレクター 1人   –  デザイナー 1人   –  エンジニア  7人   –  QAエンジニア  2人   •  アジャイルな開発体制の一つ、スクラムを採 用しています
  6. 6. スクラムによる開発 日々のデイリースクラムの様子 カンバン
  7. 7. 開発していく上で大切にしていること •  設計・コードベース   –  オブジェクト指向   –  MVCフレームワーク   •  保守性   –  テスト、CI   –  コードレビュー  
  8. 8. アプリの全体構成 Mixi  Graph  Kit   ビュー モデル コントローラ mixiの各機能 通信を管理する 内製ライブラリ   •  RESTful  API   •  JSONRPC mixi.jpのサーバー   MVCフレームワークに則って設計
  9. 9. MVCフレームワーク モデル •  MixiGraphKitを通じたデータのやり取り •  ロジックを詰め込み、テストを書く コントローラ •  モデルとビューの仲介 •  ロジックは書かない ビュー •  画面構成・ユーザーアクションの検知 •  できるだけxibを用いて作成
  10. 10. オブジェクト指向 •  同じような画面やパーツを作ることはよくある   •  共通する部分は基底クラスを作ってサブクラ ス化していく   –  一方で過度の多重継承は上位のクラスの改変が 難しくなるのでほどほどに  
  11. 11. オブジェクト指向 •  クラス間の依存度はできるだけ下げる   –  delegate,  NSNoRficaRonなどでクラス間の通知   –  プロトコル準拠などで依存度を下げる ViewControllerA     @propery  ModelA  *model ModelA         -­‐(void)someMethod  {        //  モーダルを表示したい        //  viewControllerが必要   }
  12. 12. オブジェクト指向 •  クラス間の依存度はできるだけ下げる   –  delegate,  NSNoRficaRonなどでクラス間の通知   –  プロトコル準拠などで依存度を下げる ViewControllerA     @propery  ModelA  *model ModelA     @property  ViewControllerA    *vcA     -­‐(void)someMethod  {          [vcA  presentModal…];   }
  13. 13. オブジェクト指向 •  クラス間の依存度はできるだけ下げる   –  delegate,  NSNoRficaRonなどでクラス間の通知   –  プロトコル準拠などで依存度を下げる ViewControllerA     @propery  ModelA  *model ModelA     @property  ViewController    *vcA     -­‐(void)someMethod  {          [vcA  presentModal…];   }
  14. 14. オブジェクト指向 •  クラス間の依存度はできるだけ下げる   –  delegate,  NSNoRficaRonなどでクラス間の通知   –  プロトコル準拠などで依存度を下げる ViewControllerA     @propery  ModelA  *model 依存 ModelA     @property  ViewController    *vcA     依存 -­‐(void)someMethod  {          [vcA  presentModal…];   }
  15. 15. オブジェクト指向 •  クラス間の依存度はできるだけ下げる   –  delegate,  NSNoRficaRonなどでクラス間の通知   –  プロトコル準拠などで依存度を下げる ViewControllerA   <ModelADelegate>   @propery  ModelA  *model       -­‐(void)showModal  {        [self  presentModal…];   } ModelA   @property  id  delegate;     @protocol  ModelADelagete   -­‐  (void)  showModal     -­‐(void)someMethod  {        [delegate  showModal];         }
  16. 16. テスト •  コードの品質を保つために、できるだけテストを 書くようにしている   •  テストの種類   –  モデル層の単体テスト   •  GHUnit   –  ユーザアクションをシミュレートしたテスト   •  KIF   •  UIAutomaRon   •  テストはgitにpushするたびにJenkinsで自動実行  
  17. 17. 単体テスト •  GHUnitを用いて、モデル層のロジックをテスト   •  各メソッドごとにテストを書く   •  他のクラスの挙動に左右される部分について はそのクラスのメソッドをモックする   –  通信するメソッドなど   –  モックにはmethod_exchangeImplementaRonsを  
  18. 18. KIF •  受け入れテストの一つ、ユーザーの操作をシ ミュレーションする   •  操作のシナリオをObjecitve-­‐Cで記述   •  コマンドラインからの実行が可能   –  毎日 午前/午後  3時に定時実行
  19. 19. UI  AutomaRon •  ユーザーの操作を自動実行するInstruments の機能、AutomaRonをテストで使用   •  JavaScriptで操作を記述。あるいは実際に操 作した記録を用いることも可能   •  Xcode  4.2よりコマンドラインで実行可能に   –  こちらも毎日 午前/午後  3時に定時実行
  20. 20. KIF  vs  UI-­‐AutomaRon KIF テストの記述 自由度 導入のしやすさ ObjecRve-­‐Cで記述 UI-­‐Automa6on JavaScript,  ユーザーによる操作 内部の状態とあわせたテストが 可能   ユーザーのできる操作に限定 (例:意図的にKeyChainのデータ を破壊)
  21. 21. コードレビュー •  エンジニアが7人もいると、コードの保守が 徐々に困難に   –  記述の仕方が一致しない(命名規則とか)   –  ここはこういうライブラリを使ってほしい   •  ソースコードをチーム内でレビューするコード レビューを行っています   •  コードレビューの対象   –  ソースコードファイル(.m,  .hファイル)   –  xibなどは範囲外  
  22. 22. コードレビューで見るところ •  コーディングガイドラインに沿っているか   •  ライブラリの使い方などが正しいか   •  明らかなバグがないか  
  23. 23. コードレビューで見るところ •  コーディングガイドラインに沿っているか   1.  Appleのコーディングガイドライン   2.  Google  ObjecRve-­‐C  スタイルガイド   3.  独自で決めた規約など   NSInteger  numCols    //  NG  (むやみに省略しない)   NSInteger  numberOfColumn;  //  OK       -­‐  (CGFloat)tableView:(UITableView  *)tableView  heightForRowAtIndexPath: (NSIndexPath  *)indexPath   {          return  20.0;  //  NG  (定数を直接書かない)          retrun  kDefaultCellHeight;  //  OK   }
  24. 24. コードレビューで見るところ •  ライブラリの使い方が正しいか   •  ライブラリ例   –  UIWebViewやNSURLConnecRonは独自の拡張を 施している   •  認証用のトークンの取得/更新   •  完了時にBlocksを実行   –    画像は一度キャッシュしているので、そこを介し ているか  
  25. 25. コードレビューで見るところ •  明らかなバグがないか   //  NON  ARC     -­‐(void)dealloc   {        self.model  =  nil;        self.model.delegate  =  nil;  //  先にmodelが解放されるのでdelegateは開放されない } self.block  =  ^(){        NSLog(@“%@”,  self.value);    //  Blocksで循環参照   };
  26. 26. コードレビューのサポートツール •  Gerrit gerritの画像を貼る
  27. 27. コードレビューのサポートツール •  Gerrit   –  Google製のGit用ソースコードレビューシステム   –  行単位でのインラインコメントが可能   •  パッチセット単位でのマージ   –  Jenkinsプラグインあり   –  無料  
  28. 28. ワークフロー push テスト失敗 Jenkins   (自動テスト) エンジニア コードレビューを受けて修正 verified   Gerrit コードレビューOK   merge Git  Remote   リポジトリ
  29. 29. 開発をサポートするツール •  社内用Over  the  Air配布ツール    peperoncino       •  App  Storeのレビュー閲覧ツール   koala  (hups://github.com/punchdrunker/AppReviewViewer)  
  30. 30. OTA  ツール peperoncino •  「こういう環境のビルド欲しいから作って」と言 われる度に一々ビルドし直すのは面倒   •  Jenkinsから   –  APIエンドポイント   –  ブランチ   を指定してビルド   •  サーバーからiOS端末へ直接インストール  
  31. 31. Jenkinsでのビルド&配布 •  xcodebuildを用いてビルドする   –  configuraRonは Release   –  CODE_SIGN_IDENTITYはDistribuRonのものを   •  できたappをアーカイブ   •  manifestファイルを生成   •  itms-­‐services://?acRon=download-­‐manifest&url=< アーカイブへのパス>   でDLリンクを作る
  32. 32. koala •  AppStoreのレビューをスクレイピングして表示   •  現在は結果をポーリングしてIRCで通知   •  githubに上がっているので良かったらご利用 ください
  33. 33. 以上、ご清澄ありがとうございました。
  1. A particular slide catching your eye?

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

×