WEB・アプリ開発

XcodeのInterface Builderは熟練者用のものなのか?

SwiftでのiPhoneアプリ開発の参考書「親切すぎるiPhoneアプリ開発の本」を読んでいて、驚いた一節がありました。

問題の箇所

826ページに、

Interface Builderは、その使い勝手の良さから初心者用として捉えられがちですが、本来熟練者用に用意されたツールであり、iOSのシステムを学ぶにはむいていません。そもそも、これまでの作業からわかるように、XIBやストーリーボードで記述できる事は、すべてソースコード側に記述可能です。

しかし、実体験してわかるようにAuto Layoutや全iOSデバイス画面配置対応をソースコードで記述するのは効率的とは言えません。このような配置や属性設定といった作業はソースコードからは分離し、ソースコードでは画面(ビュー)と内部情報(モデル)のやりとりに専念すべきでしょう。

うまくビューとモデルを分離できているアプリは、ソースコードの修正をせずに、画面の色調を変える、ボタンの位置を配置を変えるといった作業をプレビューを見ながらInterface Builderで後からいくらでも加工可能になります。

どこまでをソースコードに記述して、どこまでをXIBやストーリーボードファイルに分けるか、の判断をするためには、やはり、これまでのステップで吸収してきた知識が必要になります。非常に有効なツールですので、これまでの知識を活かして、使いどころを吟味して積極的に使ってください。

とありました。(※強調は私によるものです)

Interface Builder(以降IB)は熟練者用のものだったんですね。どうりで難しい。コードで書いたほうがずっとわかりやすいなーと思っていました。

ある程度慣れた人が、さらに効率よくUIをつくるためのツールなんだ、というふうに考えると非常に納得がいきます。

スポンサーリンク

周囲のiOSエンジニアの反応

これを自分の周囲のiOSエンジニアの方々に言うと、いろいろな意見を頂けました。

コードのみでアプリを作ったが、コンパイルに時間がかかり、確認に時間がかかるので、IBで作れるようになりたい。最近参加した勉強会でも、IBでviewを作っている人がほとんどでコードは自分だけだった。

コードは再利用性が高いという利点もある。別のプロジェクトからコピペして、ちょっと調整すれば使える。ストーリーボードにせず、独立したxibファイルとかにするのがいいかもしれない。

Interface Builderが「本来熟練者用に用意されたツール」というのは、言いすぎな感じがする。Autosizingしかなかったころは、明らかにコードより簡単だった。Autolayoutがいろいろできすぎて複雑になりすぎたせい。コードのみでUIをつくってる人はなかなかみない。

使い分けは、画面10画面くらいまでならStory board。規模が大きければxibも考える。画面を作る人数が多いとxibのほうが有利そうだ。

Storyboardは気軽でべんりだけど、作ると使い捨になってしまって、再利用はしにくい。ほぼ全員がInterface Builderを使うので、コードのみの良さを理解できる人は、あまりいないと思われる。

能単位で分けたStoryboard(巨大だと開くのが毎回重いし、複数人開発時に大変マージなので)、共通で使用するUITableViewCellなどはXIBで実装することが多い。Storyboardで出来ることは、出来るだけStoryboardで実現するスタイル。

Storyboard=マージできないと思われがちですが、中身はxmlなので、作業箇所がぶつかっていなければ(別のViewとかなら)テキストとして手動マージできる。慣れるまでちょっと嵌まるが。

IBInspectableにすれば、カスタムビューでも良い感じにStoryboard上でプロパティを設定できます。
IBInspectable / IBDesignable

IBDesingnable設定しておくとdrawRect: の結果がそのままIBに表示されるので見やすい。ただ、drawRect: はあくまで1回しか呼ばれないので、最初真っ白で少しずつアニメーションで表示されるようなビュー等だと結局真っ白になる。

XIB主体 vs Storyboard主体 比較だと、以下の印象。

XIB主体:どうしてもUINavigationControllerやUITabBarControllerの扱いが悩ましく、コードで生成しないといけない。そのためコードをどこに書くか等人それぞれなので、引き継ぎや複数人のとき面倒。

Storyboard主体:UINavigationControllerやUITabBarControllerをIB上で作成できて、UITabBarControllerのタブの入れ替えなんかも容易。誰が作っても同じなので引き継ぎが簡単。

まとめ

IBが熟練者用のものかはおいておいて、ほとんどの熟練者はIBを使っていることがわかりました。なので、StoryboardやXIBは使えるようになる必要があります。さらに、今回収穫だったのはIBInspectable / IBDesignableです。これを使うことで、コードで書いたカスタムビューもIBで表示できるようになるようです。