書評:現場のためのSwift4

書評:現場のためのSwift4

こんにちは。たけしです。
今回澤田さん(@takashings)さんより「現場のためのSwift4」を献本いただきました。


やっと読み終わったので書評していきたいと思います。

一言で感想述べると「サービスに関わる全てのiOS開発者全員におすすめしたい本」と思いました。
とてもためになるものでした。

この本の特徴

私、常々エンジニアも全体を見通すことが大事だと思っています。
機能を追加するにしても、その機能が「なぜ作り」「どういう問題を解決するのか」を考慮にいれて開発するべきだと思っています。
しかし、開発チームが部分最適化されすぎて、なんのために開発するのかが疎かになることもよくありがちです。
5年前受託会社に働いていたときは言われたことを作ることが優先されて「なぜ」の部分がないがしろにされていた現場でした。けっきょく合わないので辞めてしまいましたが。

「現場のためのSwift4」の主題は開発の工程全体を把握することです。

p2からの引用です。

本書では「プログラミング」以外の工程にも着目し「開発の全体像を知る」ことで、プロジェクトの成り立ち、進行の過程を学ぶことを目的にしています。(略)本書では「開発の全行程を知る」ことの大切さをお伝えしています。

アプリを一つ作るとすると以下の工程を踏みます。本書の説明ですと

p3からの引用です。

  • アプリ、サービスのアイディアや要件を形にする「企画/要件定義」
  • 要件を基に仕様や、クラスやデータモデルなどの構造を作る「設計」
  • 実際に手を動かしてコードを書く「実装(プログラミング)」
  • アプリをリリースし、アップデートやユーザーサポートなどを対応を行う「運用」

そして、実際に「企画/要件定義」(第2章)、「設計」(第3章)、「実装」(第6章-第11章)、「運用」(第12章-第13章)で説明がされていく構成になっています。
開発はコードを書くだけが仕事じゃないことを伝えています。

これは言われれば当たり前ですが、時々抜けてしまい開発が進むこともままあることです。
それを伝えてくれるものでした。

また、プロジェクトマネージャー向けに工数見積もり、ビジネスロードマップ、プロジェクト進行管理なども触れられています。さらに最新Swift4.0/4.1やiOS11の新機能の説明もあり、これからSwiftでiOSアプリを開発するプログラマーにうってつけな内容となっています。

実装は部分最適化ではいけない

つい先日ある勉強会に参加しました。
有名なプログラミングの課題FizzBussをモブプログラミングで作るという内容でした。
課題は2つあって、

  1. SwiftでFizzBussを作る
  2. 1で作った内容からFizzBussのゲームを作る
  3. ゲームの内容は数値を表示し、ユーザーがFizzかBuzzかFizzBuzzかそれ以外かのボタンを選択する。正しかったら加点する。

という要件でした。 が、1の仕様は共有されていたけど2の仕様が共有されないまま1の実装に進んでしましました。
結果、2を実装するときに作りにくいデータ構造になってしまったことがありました。

要件の共有に失敗して設計と実装がおかしくなった例ですね。

サンプルアプリは要件定義から始まる。

「現場のためのSwift4」ではサンプルアプリを要件定義から説明しています。

第8章「総合演習・iOSアプリ開発カメラアプリその1」では架空の上司からの開発依頼「今週いっぱいで簡単なカメラアプリ(サンプルアプリ)を作って欲しい」が来ることを想定してアプリの開発を説明していきます。

このような導入は他の入門書ではまずないです。
よくある入門書では「これを作りましょう」と作者の指定があって作っていく形式が多く「どんな要件があるのか」まで踏み込んだ説明は初めてみました。

更に良いと思ったのはすべての要件にあった実装方法がなんなのかの思考の流れを丁寧に説明していたところです。

例えば、要件の一つに「カメラを使い、写真を撮影する」というものがあったのですが同時に「あまり工数をかけたくない」という要件もありました。

「カメラを使い、写真を撮影する」という要件にあう実装は「UIImagePickerController」「AVCapturePhotoOutput」の2つが考えられます。それぞれの特徴を列挙してどちらがより今回の要件に合うのかを考慮する場面がありました。

  • UIImagePickerController
    • 導入が簡単
    • UIや機能が固定のため、カスタマイズが不可
  • AVCapturePhotoOutput
    • UIの設計や機能のカスタマイズが可能
    • LivePhotoの撮影も可能
    • UIImagePickerControllerと比べると実装が複雑

「あまり工数をかけたくない」要件を満たすため「UIImagePickerController」でサンプルアプリは作られていきます。

このように、サンプルアプリでも「要件はなんなのか」「それを満たす実装はなんなのか」を説明していってます。
ここまで徹底して説明する書籍はまずないと思います。
とても私が共感したポイントです。

さいごに

アプリは価値あるものをリリースしていかなければいけません。
しかし今までの書籍ではその企画や要件と実装と串刺しして説明するものがなかなかないものが多かったです。
実装が部分最適化ではなく、なぜ作るのかの要件を確定して作れば手戻りもありません。

実装だけにとらわれない視点、要件を確定してから設計実装に入るという視点を身につける最良の書籍だと私は思います。

エンジニアの視点から一本通した本があるのは価値があることだと思います。
ぜひおすすめです。

この本は本当におすすめなのでぜひ書店で見つけたときは手にとってください。
Amazonからの購入はこちらから。