森本さんから『モバイルアプリ開発エキスパート養成読本』を戴きました。

技術書評

著者の一人の森本さんから『モバイルアプリ開発エキスパート養成読本』を戴いたので、その所感を綴ってみようと思います。


森本さん(@dealforestさん )さんから、彼の著書『モバイルアプリ開発エキスパート養成読本 』を頂きました。

こちらの本は iOS や Android に携わるモバイルアプリエンジニアに向けたノウハウ本 と説明したら良いのでしょうか。各プラットフォームにおける最新事情に関する技術情報が記載されていたり、今話題のリアクティブプログラミングや設計、テストのお話などが、たくさんの著者によって各 10 ページくらいのボリュームで紹介された本になります。

最新事情が幅広く掲載されていて、それらを学ぶためにはもちろん、動向や考え方をざっくり捉えるという観点でも、良い感じの本に仕立てられているのかなって思いました。

戴ける経緯と

森本さんからこの『モバイルアプリ開発エキスパート養成読本』献本の話を頂いた時、自分が戴いていいのか若干心配だったりしました。

というのも自分はここ数年、すっかり Swift 言語で遊ぶばかりで、もはやモバイルアプリエンジニアとは呼べないものだから、頂いていいか心配だったりしたのですけど、それでも大丈夫とのことで、ありがたく戴く運びになりました。

森本利博さん

そんな森本利博さんといえば、iOS 界隈の勉強会でとてもお世話になっている人で、特にトークが面白いのが印象に強く残りますけど、話題としても特に LLDB 周りの実践面で詳しい印象があります。

熊谷知子さん

もうひとかただけ、同じく iOS 界隈の勉強会でとてもお世話になっている、熊谷知子さん(@TachibanaKaoruさん )も本書の著者のひとりです。いつも真新しい iOS 周りの技術まわりをいち早く紹介する発表が印象に残っている人です。

総勢 12 名の執筆陣

そんな感じで、本書は 12 名もの著者で綴られた本になっていて、少なくとも iOS 執筆陣は自分がよくお邪魔する勉強会界隈でお世話になっている方々ばかり。Android な方々もそんな方々らしく、普段から情報を収集することに慣れていたり、それを伝えるのに長けていたりして、そのせいもあってかとても読みやすい本になっている印象です。

モバイルアプリ開発エキスパート養成読本

そんな『モバイルアプリ開発エキスパート養成読本』について、主に iOS 周りを中心にざっくり眺めて所感を綴ってみます。

モバイルアプリの最新動向

第1章として、モバイルアプリ開発を取り巻く動向と称して、現在のモバイルが軽く紹介されていて、自分みたいなモバイルアプリ現場に疎い人間にとって良い導入部だなって思うと同時に、本書を読み進める上でも背景知識として良い感じの章になっていると感じました。

3ページでざっくり軽く記されているので、気軽に読める分量なのも嬉しいポイントですね。

第2賞と第3章も、現在の開発環境まわりですとか、今どきの流儀みたいなものにスポットライトが当てられていて、初めての人にも久しぶりの人にも、入り口としてとても良い読み物のように感じました。全部合わせれば60ページくらいと、見渡すのに不足しないボリュームで、物足りなさを感じる心配はなさそうです。

iOS 開発最前線について

自分はいちおう iOS 側に位置しているので、Android 周りのコメントはできないですけど、本書の第3章の iOS 開発最前線について、ざっくりと眺めて所感を綴ってみます。

Swift 3.0 入門

Swift 3.0 の雰囲気がざっくりと掴めるところが、とてもいいなって思いました。特に Swift API Design Guidelines について詳しく綴られているのが印象的で、これが地味ながらも Swift 3 の主軸なところだったりするので、こうやって本で触れられるのは嬉しいところです。

自分も以前に API Design Guidelines について網羅的にざっくり勉強会で発表したことがあるのですけど、本書では要所が丁寧に整理して綴られているので、最初にそれを把握する上で良い資料に思います。

iOS 10 入門

iOS 10 入門の章も切り口がとても面白くて、単なる iOS 10 の新機能なだけ話に留まらず、ユーザーへの伝搬動向や、どの旧バージョンまでサポートするかみたいな話もあって、とても良い着眼点に感じました。

もちろん iOS 10 の新機能 SiriKit, Messages App, Proactive Suggestions, User Notifications, CallKit, Haptic Feedback, Apple Pay, ATS についても充分なページを割いて触れられているので、新しい事柄をひととおり眺められるのが嬉しいところです。概要をしっかり掴めるくらいの絶妙なボリュームで綴られているところも魅力です。

こういう話題、本で掴むのってなかなか難しいように思います。東京・渋谷近隣の勉強会ではこういう新しい話題が出ると話題に上って目に触れる機会って多いと思いますけど、それでもこうやって一か所にまとまって、気軽にざっくり眺められるのは貴重なように思えました。

Xcode 8 入門

Xcode 8 入門の節では、ざっくりとした Xcode の新機能紹介に留まるかと思いきや、Playground で外部ライブラリーを使う方法が変わったことプラグイン環境が Xcode Source Editor Extension に移行したこと にも軽く触れられています。さらにはコラムとして Xcode 8 で / によるコメントアウト機能が効かなくなった場合Xcode 8 でも Xcode Plugin を利用する についても触れられていて、実に著者の森本さんらしい節に仕上がっている印象でした。

各分野ごとの記事も

それ以降は、次の章見出しで構成されています。

見るからに実践的な、現場に即した話題になっていそうですね。

自分はアプリ作りの現場を知らないのでわからないですけど、リアクティブプログラミングはこのところの勉強会でとても注目を浴びていた題材で、なんとなく "世に浸透してきた" のを感じる分野です。設計・開発やテストは今、勉強会で人気のある分野のように感じます。

第7章以降こそチーム開発をしない自分にとっては馴染みの薄い分野ですけど、眺めてみると勉強会等でちらほら耳にする言葉がたくさん並んでいて、つまりまるごと、これらのとっかかりを学ぶのにすごく良さそうです。特に、各章の冒頭に ここで扱う事柄はどういったものか が整理して綴られていて、言葉くらいしか聞いたことのない身にとって、とても嬉しいところでした。

そして、そんな4章以降のそれぞれについて iOS と Android の両観点で綴られている のも好印象でした。こうやって両方を見比べられると、片方を基軸にもう片方を理解するとかにも役立ちそうです。

Swift 言語の観点から

さて、そんな読み応えある実用的な本ですけれど、自分の知識ではとても全てについて所感を綴る力がないので、自分の知識が及びそうな Swift 言語に関する観点から2つだけ、せっかくなので綴ってみたいなと思います。あくまでも余興的なお話ですけれど。

Swift 3.0 入門

前述しましたけれど、ここで Swift API Design Guidelines について記されているところは見所のように思います。

API Design Guidelines は、メソッドやクラスなどを定義するときの名前の付け方が、状況別に丁寧・簡潔に記されているので、これを知っておくとメソッドやクラスを定義するときに名前をつけるときの負担がかなり軽減されると思います。

そればかりでなく、もし Swift 2 から Swift 3 へコードを書き換えるようなときにも、どうしてそういう変更になったのかがわかって、少なくとも幾らかは前向きに取り組めるのかなって思います。

タイプセーフでモダンな iOS アプリの設計

こういう話題がとても好きなので、これについても思ったことを気ままに綴ってみます。

この節を眺めていて衝撃的だったのは、プロトコル拡張で NSObjectProtocol に機能を追加しているところでした。なるほど、ここを拡張すると Objective-C 由来のクラス全てに振る舞いを拡張できるんですね。ちょっと強力すぎないかな?とも思ったのですけど、アプリケーションプロダクト内で拡張する分には、環境次第で普通にありな選択なのかもしれません。

extension NSObjectProtocol {

    static var className: String {

        return String(describing: self)
    }
}

String:describing: が良い感じみたい

ところでこの拡張、String:describing: を使ってクラス名を取得する方法だと『もし description をオーバーライドすると必ずしも className でクラス名が取得できなくなるかもしれない?』と思ってみたのですけど、これは自分の勘違いで、ここでの String:describing: は Metatype の情報に対して文字列化を試みるのでしたね。

ただ、それよりは NSStringFromClass の方が、明らかにクラスを文字列化するための関数だから良いかなと思ったのですけど、こちらも自分の勘違いで、これを使うと Objective-C 内部名に変換されてしまう様子でした。今回は String:describing: の方が適切に動作してくれる様子です。

macOS 環境には className が存在する様子

ところで調べてみていたら、macOS 環境では className がクラスメソッドとして、NSObject にクラス拡張される形で実装されている様子でした。iOS 環境には用意されていないようです。

そのため、本書に載っていたコードの方が Swift らしいように自分は感じますけど、もし macOS の流儀と合わせることを意識するなら、次のような実装もアリかもしれません。

#if os(iOS)
extension NSObject {

    static func className() -> String {

        return String(describing: self)
    }
}
#endif

ただ、このように実装したとき、macOS 環境側に存在している className 関数では、クラス名は Objective-C 名で得られる様子でした。ちょうど NSStringFromClass の動きと同等な様子。そうなると、この実装は iOS と macOS とで異なる動きをしてしまうため 好ましい実装とは言えなそうです。

また、macOS 環境でも本書の通りに className プロパティーで実装すると、今度は macOS 側で className メソッドと className プロパティーを使った時とで得られる名前が違ってくる場合があるので、なかなか判断に迷うところです。

もっとも、本書は モバイルアプリ開発エキスパート養成読本なので、そもそも macOS のことは考えなくて良い かもしれませんね。

現時点の iOS, Android の流儀を手早く知れる本

最後の話は完全に余興でしたけど、ともあれそんな感じで、モバイルアプリ作りについての現時点での最新動向を iOS も Android もひっくるめて手軽に眺められる本のように感じました。大勢で執筆されているのも手伝ってか、テーマを手広くしっかりと扱えているところが、この本の良さのようにも思います。

なんとなく、勉強会の各人の発表をまとめて本にしたためたみたいな印象もしますね。各節、流れの整った短編集ともいえて、そんな手軽さも嬉しいように思います。

出版、おめでとうございました。

以上、ざっくりとした所感になりますけれど、戴いた『モバイルアプリ開発エキスパート養成読本』について綴ってみました。

本を書くのって大変なのですよね。大勢だとなおさらいろいろ大変さも増えるのかなって思いながら、ともあれ執筆者のみなさまな、山戸茂樹さん(@heki1224さん )、黒川洋さん(@hydrakecatさん )、山田航さん(@yamacraftさん )、熊谷知子さん(@TachibanaKaoruさん )さん、坂本和大さん(@kazu0620さん )、鈴木大貴さん(@marty_suzukiさん )、坂田晃一さん(@huinさん )、藤田琢磨さん(@magie_poohさん )、田坂和暢さん(@tasanobuさん )、森本利博さん(@dealforestさん )、小形昌樹さん(@ogaclejapanさん )、志甫侑紀さん(@shihochandesuさん )、この度はおめでとうございました。