ユウのブログ

なんでも書きますよ。

このコードは共有化すべきだろうか?

まえがき

こんにちは!ユウです。

 

今日は久々にエンジニアリングな話題。

ふだんはフリーランスとして、Swift使ってiOSアプリの開発をやっているんですが、今日の話題はわりと汎用的な話題。Swiftに限らず、どの言語でも関係してくると思います。

オブジェクト指向な言語しか経験がないのでそうでない言語はそもそもコードの共有化みたいな概念がないのかもしれませんが…。

本題

さて、タイトルと上記の前書きに何度か登場した「共有化」という言葉。

この言葉はこの記事を書き始めたときに適当に考えた造語みたいなものなんですが、ざっくり「同じ動きをするコードを一箇所にまとめる」ぐらいのニュアンスだと思ってください。

一例を挙げると、以下のような感じ。

f:id:f_julover:20210202193854j:plain

SNS風のアプリのざっくりとしたデザインカンプをイメージしてもらえると伝わりやすいと思います。UserList、UserProfileそれぞれで同一のUserCardViewが使われる予定です。

さて、このUserCardViewをUserListとUserProfileで共有化する場合を考えてみましょう。

単一でレンダリングできるUIViewとして作ったあと、UserListとUserProfileそれぞれに入れれば、同じコードを複数の部分で使い回せそうですし、他のUserxxxViewでUserCardViewが必要になった時も、すぐに呼び出せて便利そうですね。

ですが、本当にそうすべきでしょうか?

共有化してコードを減らし、同一の変更を一箇所に纏める…というと、たしかに魅力的に聞こえます。多くの場合、そうしたほうが良いと思います。

しかし、片方のビューにだけ変更を加える場合はどうでしょう?

先程の例だと、UserListにあるUserCardViewにだけ、そのユーザーへのアクションが行えるボタン(たとえばフォローボタンとか)を表示する、という仕様が加わったとします。

そこで、UserCardViewに変更を加えようとすると、ボタンを表示するかどうかのステータスをUserCardViewに付与するのか、ここで改めてそれぞれ別個のビューとして独立させるのか、UserList、UserProfileのコードにUserCardViewを埋め込んでしまうのか…。色々とやり方はありますが、最初からビューを共有化しなければ楽に終わる話ですよね。

でも、そう思ってビューを共有にせず、それぞれのビューの中にUserCardViewを作ったとして、同じような変更を加えるようになったり、他の場所でもUserCardViewを使いたくなったときに使いまわしづらかったりするかもしれません。

今回の例では単純なビューなので適当にコピペするだけで動くかもしれませんが、実際のアプリではAPIから取得したデータを表示したりするわけで、ビューのレンダリングの前後関係と表示するデータの取得タイミングの前後とか、色々考え出すと無限に面倒に思えてきます。

では、結局のところ、最初からビューを分けておくべきなのか?それとも共有化してしまっておいたほうが良いのか?どっちが良いんでしょうか。

先に仕様の変更を予測できればいいんだけどなぁ…。と、思う方も多いと思います。僕もそう思いました。しかし、ぶっちゃけいちエンジニアにそれを予測するのは難しいです。

でも、プロジェクトの中、もしくは会社の中には、それをある程度予測できる立場の人が居ます。

経営を理解しており、その上で技術にも精通している人。最高技術責任者、いわゆるCTOと呼ばれる人たちです。

コードを共有化すべきなのか?という問題は、単なるコーディング上の良し悪しではなく、経営の判断なんだと僕は結論づけました。

もちろん、今回の例だと、UserCardViewをラッピングするビューを用意して、そちらのビューにボタンを表示したり、例に上げたようにUserCardViewのボタンを表示するUserList側からisHiddenにしてあげたり、色々なアプローチが考えられます。なので、どっちでもいいといえばそうかもしれません。

ですが、コードというのは売り物です。最終的にどういった方向に歩むべきなのか?というのは、どうそのアプリを売っていくのか?という経営と密接に関わってきます。

経営に深く関わらないいち開発者が、経営判断をするのは誰にとっても良い結果になりません。もし可能であれば、経営に関わる人ともうまくコミュニケーションを取って開発を進めていけるといいですね。

駆け足で書いたのでちょっと読みづらい部分も会ったと思いますが、読んでくださってありがとうございました。ふとした気づきを書きなぐるだけでも、結構頭の中が整理されて良いものですねぇ。

ではまた。