SlideShare a Scribd company logo
iOSアプリの設計で
BaseViewControllerは作りたくない
株式会社キュリオシティソフトウェア
今城善矩(@yimajo)
何の話か
【前提】
iOSアプリ開発では
基本的にUIViewControllerを
各画面用に継承して利用する
UIViewController
ViewController ViewController
その際、アプリ独自の処理を実装するため
にBaseViewControllerを作って各画面用の
ViewControllerが継承して使うことがある
UIViewController
BaseViewController
ViewController ViewController
これはViewControllerのライフサイク
ルに応じて勝手に動作する
親クラス設計している
• 各画面共通の処理をライフサイクルに合
わせてまとめられる
• 各画面ごとの実装に集中できる
このやり方は効率的!
会場の皆さんに質問です
BaseViewController/BaseActivityを
よく作るという方
挙手でお知らせください
(・ω・)ノノノノノシ (´∀`)ノノノノノシ
追記: 会場ではiOS 3人,Android 12人ぐらい居ました
でも
このやり方って自分は経験上良く
ない場面に遭遇することが多く
正解とかベストプラクティス
がどうとかじゃなく
継承という仕組みを
開発効率や問題解決
のために使うと
アプリの仕様変更がある際に
影響範囲を大きくしてしまう
画面数多くなる画面数少ない
BaseViewController
メリット
勝手なイメージ
BaseViewController
デメリット
しかし
ケースバイケースのような気
もするし
好みの問題のような気がしな
くもない
ずっとモヤモヤしてたので
先にQiitaで公開して
整理しフィードバック集めてみた
http://qiita.com/yimajo/items/8ef1850e1362bd3bf3d8
反応(2015.1.14現在)
• 閲覧数4760
• ストック数 98
• はてブ 86
• Tweet 94
• コメント 1
2015年元旦に
おとそ気分でQiitaに投稿してみ
たけど案外反応があったので
正月三が日は
エゴサーチして過ごした
具体的に書かれている意見を
集めた
“わかる。AndroidのBaseActivityも同じ問題起きま
すね”
“ぼくもBVC作るのはあまり好きじゃない。デメ
リットはここにあげたことのほか、そのプロジェ
クトに対する学習コストが増えるってのもある
とおもう”
“私もBaseViewControllerは反対。たいていBaseを
つかわなくてすむ方法はあるし、プロジェクト
規模が大きくなるにつれ、弊害が増える”
“BaseViewControllerのようなものをちゃんと設計
して作るのは難しいので、世の中の
BaseViewControllerはたいていダメな実装になっ
ていて、そしてクラスの性格上プロジェクト全
体でそれが使われるので後から直せない、とい
うのが私の見てきたパターン”
“まぁ改善する用にお願いされるプロジェクトと
いうのはそもそも要件が右行ったり左行ったり
曲がるプロジェクトなので、それと相性が致命
的に悪いだけとも言えます”
“確かにBaseViewControllerとかやると簡単に破綻
していくな。継承すると不都合が出るケースは
あるだろうし、そうして継承しないクラスが出
ると、それはBaseでも何でもなくなる。したら
名付けをBaseじゃなくて、具体的な機能の名前
にした方が良さそうね”
“BaseViewControllerとか
UIViewController+Commonは甘え”
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
フィードバックありがとう
ございました
フィードバックの内容を読んだ
感じでは…
BaseViewController 使わないで済む
方法について検討し
実行した上の意見じゃないかと思う
ここで
継承を使ったViewController設計が
実装に応じて進化していく例を
お見せしよう
UIViewController
BaseViewController
VC VC VC
「私の戦闘力は53万です…ですが、もちろんフルパワーで
あなたと戦う気はありませんからご心配なく…」
UIViewController
BaseViewController
A
VC
BaseViewController
B
VC VC VC
「何しろ力があり余っているんだ。ちょっとやりすぎてしまうか
もしれん。くっくっく…戦闘力にしたら100万以上は確実か…」
UIViewController
BaseViewController
A
VC
BaseViewController
B
VC VC VC
BaseViewController
C
VC
「このフリーザは継承をするたびにパワーがはるかに増す…
その変身をあと2回もオレは残している…その意味がわかるな?」
UIViewController
BaseViewController
A
VC
BaseViewController
B
VC VC VC
BaseViewController
C
VC
SuperBaseView
Controller
「光栄に思うがいい!この変身まで見せるのは貴様らが初めてだ!」
UIViewController
BVC
A
VC
BCV
CA
SuperBaseTableView
Controller
UITableView
Controller
UICollectionView
Controller
SuperBaseView
Controller
SuperBaseCollection
ViewController
BVC
B
BVC
C
VC VC VC
BTV
CA
BTV
CB
BCV
CB
VC VCVC VC VC VC VC VC VC VC
「大サービスでご覧に入れましょう!
わたくしの最後の変身を…わたくしの真の姿を…」
あなたが例えば
同僚からこういう
コードを引き継いだら大変
画面を増やしたいって時に
ViewControllerの設計を把握し
実装を細かく理解しないと
対称性を崩してしまって良く
ない気分になる
他の画面の実装を細かく理解
すればするほど突っ込みどこ
ろが気になってきたりする
まとめ
• ひとりきりでやりきるときは問題ないけ
ど他人のコードだと涙すら流れる!
• ケースバイケースだからと停止せず、踏み
込んで整理して公開してすっきり

More Related Content

PDF
iOSやAndroidアプリ開発のGoodPractice
PDF
iOS アプリのメンテナンス性を高めるための基本的な考え方
PDF
VIPER アーキテクチャによる iOS アプリの設計
PPTX
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
PPTX
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
PDF
Model View Presenter for Android
PDF
Xamarin.Mac をこれからはじめるあなたへ
PPTX
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
iOSやAndroidアプリ開発のGoodPractice
iOS アプリのメンテナンス性を高めるための基本的な考え方
VIPER アーキテクチャによる iOS アプリの設計
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Model View Presenter for Android
Xamarin.Mac をこれからはじめるあなたへ
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)

What's hot (20)

PDF
Visual Studio + xamarin で始めるモバイル アプリ開発
PDF
Android Architecture
PPTX
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
PDF
Css nite(2010.09.23)
PPTX
20130316 mix cpp-yuo
PPTX
Xamarin.formsでのmvvm利用のコツ
PDF
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
PDF
Xamarin で今日から始めるクロスプラットフォーム開発
PDF
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
PDF
AngularJSについて
PDF
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
PPTX
121117 metro styleapp_templateapp
PPTX
Xamarin 101 ~環境構築からビルド・テストまで~
PDF
iOS開発豆知識_エスキュービズム勉強会20141006
PDF
はやわかりHTML5ハイブリッドアプリ開発事情
PPTX
HTML5ハイブリッドアプリ開発のベストプラクティス
PPTX
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
PDF
続Xamarinはじめました
Visual Studio + xamarin で始めるモバイル アプリ開発
Android Architecture
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Css nite(2010.09.23)
20130316 mix cpp-yuo
Xamarin.formsでのmvvm利用のコツ
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
Xamarin で今日から始めるクロスプラットフォーム開発
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
AngularJSについて
Xamarin de:code セッション:Windows Phone / iOS / Android アプリ同時開発のススメ
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
121117 metro styleapp_templateapp
Xamarin 101 ~環境構築からビルド・テストまで~
iOS開発豆知識_エスキュービズム勉強会20141006
はやわかりHTML5ハイブリッドアプリ開発事情
HTML5ハイブリッドアプリ開発のベストプラクティス
Xamarinを企業向けアプリ開発の プラットフォームとして選定し 実際にアプリをリリースした話
続Xamarinはじめました
Ad

Viewers also liked (16)

PDF
3 auto layout tips
PDF
第49回HTML5勉強会 Google I/O 2014サマリー
PDF
Swift bondでつなげてプログラミング
PDF
アップルのテンプレートは有害と考えられる
PDF
Railsチュートリアルの歩き方 (第3版)
PPTX
サイボウズの企業風土
PDF
What is reactive programming?
PDF
各アプリケーションの概要(クラウド版)
PDF
IOS/Androidアプリの3つの大事な設計方針
PDF
各アプリケーションの概要(パッケージ版)
PDF
小さく始める大規模スクラム
PDF
DeNAにおける機械学習・深層学習活用
PDF
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
PDF
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
KEY
やはりお前らのMVCは間違っている
PDF
Railsチュートリアルの歩き方 (第4版)
3 auto layout tips
第49回HTML5勉強会 Google I/O 2014サマリー
Swift bondでつなげてプログラミング
アップルのテンプレートは有害と考えられる
Railsチュートリアルの歩き方 (第3版)
サイボウズの企業風土
What is reactive programming?
各アプリケーションの概要(クラウド版)
IOS/Androidアプリの3つの大事な設計方針
各アプリケーションの概要(パッケージ版)
小さく始める大規模スクラム
DeNAにおける機械学習・深層学習活用
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
やはりお前らのMVCは間違っている
Railsチュートリアルの歩き方 (第4版)
Ad

Similar to BaseViewControllerは作りたくない (20)

PDF
サーバーからiOSアプリを変更する
PDF
Ojbecitve-C Use ContainerView (Stroyboard)
PDF
iOS 7 対応事例 FastCheckin
PDF
UIViewController のコンテナ機能
KEY
20121201yidev hirobe iPad miniでRetina
PDF
デザイナーとエンジニアが話す、iOSアプリケーション開発
PDF
Indigo Studio で作るプロトタイプ
ODP
Jenkins導入ライブ
PDF
Swift入門
PPTX
iOS13 SDK による 全機能置き換え Part1
KEY
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
PDF
きちんと理解できるiOS開発〜Auto Layout編
PPTX
Swiftビギナーズ 2016/01/09
PDF
iOSのUI構築小技集(小さなとこから始められる編)
PDF
Container View Controllerを正しく使おう
PDF
Swiftではじめる動画再生
PDF
Ignite UI 2012 最新情報 jQuery Mobile 編
PDF
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
PDF
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
PDF
iPhoneアプリのUIデザイン - NoteCubeの場合
サーバーからiOSアプリを変更する
Ojbecitve-C Use ContainerView (Stroyboard)
iOS 7 対応事例 FastCheckin
UIViewController のコンテナ機能
20121201yidev hirobe iPad miniでRetina
デザイナーとエンジニアが話す、iOSアプリケーション開発
Indigo Studio で作るプロトタイプ
Jenkins導入ライブ
Swift入門
iOS13 SDK による 全機能置き換え Part1
ニコニコ動画iOSアプリの UX・マネタイズ・技術の話
きちんと理解できるiOS開発〜Auto Layout編
Swiftビギナーズ 2016/01/09
iOSのUI構築小技集(小さなとこから始められる編)
Container View Controllerを正しく使おう
Swiftではじめる動画再生
Ignite UI 2012 最新情報 jQuery Mobile 編
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
Visual Studio OnlineとUnityを使った バージョン管理と 継続的インテグレーション
iPhoneアプリのUIデザイン - NoteCubeの場合

More from 今城 善矩 (13)

PDF
HealthKitで日別のデータを一度に取得する
PDF
Stargazer Meetup1
PDF
とにかく明るいCore Spotlight
PDF
SansanのEightアプリでRealmを導入した件
PDF
まだSwiftで消耗してるの?
PDF
小学生でも分かった気になるiOS8のSize Class
PDF
iOSアプリ開発の現場で訊いてきたtips
PDF
Swiftだめ自慢Beta5
PDF
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
PDF
やはりお前らのCore Dataの使い方も間違っている
PDF
OHHTTPStubsを使ったiOSアプリ開発
PDF
ジョブズも成仏するTips考えたったwww
PDF
やはりお前らのiOS7対応は間違っている
HealthKitで日別のデータを一度に取得する
Stargazer Meetup1
とにかく明るいCore Spotlight
SansanのEightアプリでRealmを導入した件
まだSwiftで消耗してるの?
小学生でも分かった気になるiOS8のSize Class
iOSアプリ開発の現場で訊いてきたtips
Swiftだめ自慢Beta5
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
やはりお前らのCore Dataの使い方も間違っている
OHHTTPStubsを使ったiOSアプリ開発
ジョブズも成仏するTips考えたったwww
やはりお前らのiOS7対応は間違っている

BaseViewControllerは作りたくない