Xcode
iOS
Swift
SwiftDay 7

BondとRealmの組み合わせサンプルから感じた、アプリ開発における「守破離」

More than 1 year has passed since last update.

BondRealmを組み合わせて、ステキなMVVMを作り出そうと考えて、サンプルを作ってみた。

https://github.com/nishiyamaosamu/ESBondRealmSample

  • Xcode 7.3.1
  • Swift 2.3

Qiita APIから最新アイテムをとってきて、tableViewに表示し、タップするとお気に入りに追加される。
それらの一連を、Alamofire, SwiftyJSON, Realm, Bondを組み合わせて実装している。

Swiftアップデートの辛さ

しかし、事件は(起こるべくして)起こった。

数ヶ月前にこのサンプルを作ったので、Swift2.3で書かれている。Qiitaに載せる前に、最新の方が今後役立つだろうとSwift3に上げておこうと思い、使っているライブラリをcocoapodsでアップデートしてみたところ、大量のエラーが吐き出される。
Swiftがv2→v3になり、Bondv4→v5は大幅に変更されているし、Alamofireもv3→v4でGETリクエストすら修正しないと動かない。

「仕方がない、修正しよう」と直し始めるのだが、こんな小さなサンプルなのになんと手間がかかるのだろう。またBondの仕様がいろいろと変わっているので、学習コストも必要になった。
自社でもいくつものアプリ開発に携わっているのだが、Swiftのバージョンアップは非常に大変な作業になる。

賢人たちの声

そんなことを思っていたら、こちらのエントリーのこの一言に、強い納得しかなかった。

ライブラリを使わなくて済むならそれが一番じゃないですかね?
今から新規でiOSアプリを書き始めるなら。2016年冬

さらに、
もう数日前にこんなのも目にしていた。

(…世界中のアプリ関係者の皆様…聞こえますか… いまあなたの心に直接語りかけています… プラットフォームのデザインガイドラインは神…ガイドラインを読まずに…アプリのディレクションをしては…ダメ…絶対…独自仕様の95%は…プラットフォーム準拠する方がマシな品質になります…)
深津さんによる経営者、開発者に向けたつぶやき

プログラミングにおいても、デザインにおいても、何かのプラットフォームに乗っている時、基礎を無視して一見イケているような事をしても、すぐに風化してしまうのだろう。

本当に必要なライブラリとは?

今回のサンプルで定番と呼ばれるライブラリを入れているが、最低限に絞るならRealmだけで良い気がする。BondによるViewバインディングは非常に強力だが、故にアプリの動脈となるだろう。この動脈を維持していくには、それなりのスキルと覚悟がないと製品版アプリを生かして続けておくことは出来ない。
RealmはNotificationやKVOに対応しているので、Realmをフルに活かす方がよっぽどマシではないだろうか。

アプリ開発にも守破離

「守破離」という言葉を思い出す。

剣道や茶道などで、修業における段階を示したもの。
「守」は、師や流派の教え、型、技を忠実に守り、確実に身につける段階。
「破」は、他の師や流派の教えについても考え、良いものを取り入れ、心技を発展させる段階。
「離」は、一つの流派から離れ、独自の新しいものを生み出し確立させる段階。
守破離(シュハリ)とは - コトバンク

私(私たち)は、すでに「守」(SwiftやiOS標準)を身につけた上で、「破」(外部ライブラリ)を取り入れようとしているのか。

そういう問いを自分に投げかけ、私はまだまだ修行が足りなすぎると実感するのであった。