たくやチャレンジ日記

たくやがいろいろチャレンジすることを残す日記

Storyboard は使わないでいこうと思った

どうも、たくチャレです。

前回のブログで書きましたけど、今頑張って iOS app 開発の勉強中です。

Todo アプリを Storyboard 使わずに作ってみました。タイトルにある通り Storyboard は使わないでいいなって思った感想を書きたいと思います。

コードとして見えないと不安

まず Storyboard を使ってて思ったのが、コードとの紐付けがどうなってるのか全然分からないということです…パーツを配置したり、GUI で設定を変えたけどどう反映するのかイマイチピンときませんでした。もともと組み込みソフトウェアプログラマで GUI とは違う世界にいたからかもしれませんが、慣れませんでした。

Storyboard を使わない時に気づいたのですが、そのまま UITextField をインスタンス化しても Storyboard で追加した UITextField と同じにはならないのですね。下記の Gist みたいに枠組みとか角を丸めるとか行わないとそれっぽくならないです。

Storyboard を使うとそのあたり隠蔽してくれて楽な反面、凝った使い方をしたいなって思った時に不便だなと感じました。もちろん隠蔽は必要な時はあります(いわゆるカプセル化とか)が、デザインの設定に関しては僕は不要だし、見えていないのが不安でした。

修正の差分がわからない

修正を git でバージョン管理をしてるのですが、storyboard で変更した時の差分が全然分かりません。

下記の差分は storyboard にUILabel を追加した時のものですが、ぱっと見何が起きたのか分かりませんよね…プロになると分かるようになるのかもしれないけど、僕はイヤだなって思いました。(細かく見ないで良いです。ごちゃごちゃしてるなって印象を持っていただければ。

@@ -87,6 +88,13 @@
                        <action selector="addTodoItem:" destination="JCL-PK-z6b" eventType="touchUpInside" id="wM4-8G-rBe"/>
                     </connections>
                 </button>
+               <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xma-3r-2fm">
+                  <rect key="frame" x="167" y="220" width="42" height="21"/>
+                  <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                  <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                  <nil key="textColor"/>
+                  <nil key="highlightedColor"/>
+               </label>
                 </subviews>
            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
            </view>

Storyboard を使わずにコードだけで書くと何が起きてるのか一目瞭然です。コードで書くのであれば、(差分ではないですが)さきほど貼った Gist のように一行一行何をしてるのか明確に分かります。

ドキュメントがしっかりしている

GUI のパーツの名前で検索すると上位に Apple 公式のドキュメントが出てきます。UITextField であれば以下のようにしっかりしたドキュメントが検索で引っかかります。

UITextField - UIKit | Apple Developer Documentation

公式ドキュメントは英語なので、日本語で調べたいって思う人がいると思いますが、日本語だとエンジニアのレベルが分からない人が書いてて情報が古かったり、誤ってたりします。特に Objective-C の記事も未だに結構引っかかるので、かなりのノイズになります。

その点、公式ドキュメントは API の仕様だけではなく、このパーツの存在意義まで説明してくれています。なので正確な情報と思想まで知ることができてオススメです。

あと、英語が苦手な人は慣れるチャンスでもあります。

結局コードは書く

Storyboard を使っていても、パーツとコードの紐付けしてアクションとか書く必要があります。 結局コードを書くのであれば中途半端に混ぜるのではなく、コードに統一した方が一覧性が良いのではと思っています。

僕がまだ慣れていないせいかもしれないけど、どこまで Stoyboard でやるべきか、コードで書くべきか難しいなって感じました。

Storyboard を使わないで行こうと思う理由を4点挙げました。 全然規模が大きくないアプリだから、もっと大きなアプリになったら違う考えになるのかな…でもデザインのコードの再利用ができると思うし、やっぱり Storyboard を使わない方がいいのかなあと思ったり、思わなかったり…

今後また考えが変わったら書いて行こうと思います。

Enjoy, programming!!