書評：Swiftの各機能が「なぜ」存在し「いつ」使うべきかを解説した技術書 - Swift実践入門

『Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語』は、その名の通りSwiftの実践的な利用方法を解説した入門書です。

2017年2月に出版されたばかりですが、観測範囲では「Swift実践入門輪読会」「Swift実践入門読書勉強会」といった会も開催されていて、もう世間ではすっかり教科書のような<b>定番の良書</b>として認知されている感があります。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51O5F5tHiuL._SL160_.jpg" alt="Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank">Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.04.04</div></div><div class="amazlet-detail">石川 洋資 西山 勇世 <br />技術評論社 <br />売り上げランキング: 5,087<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

著者の石川さん、西山さん、およびWEB+DB PRESS plus様より、本書をご恵贈いただいたので、紹介させていただきます。

##他のSwift本との違い / Appleの公式ドキュメントで十分？

Swiftについて書かれた技術書は既に数多出ています。入門本はたぶんそれだけで本屋のコーナーができるほど出てますし、リファレンス本や逆引き辞典のような書籍もあります。また、Appleの公式ドキュメントも相当丁寧に、サンプル付きでわかりやすく書かれています。


そんな中、本書の存在意義は何かというと...前書きでグッと来た一説を引用します。


> Appleの公式ドキュメントをはじめとして、どんな（what）言語仕様があり、それらをどのように（how）使うかに関しては豊富な情報源があります。しかし、<b><span class="deco" style="color:#FF0000;">それらがなぜ（why）存在し、いつ（when）使うべきかについてまとまった情報源があるとは言えません</span></b>。本書は、読者のみなさんの「なぜ」や「いつ」を解消することにも主眼を置いています。


そうそう、そうなんですよね。多くのプログラミング言語の解説本って、「なぜそれを知らないといけないのか」「これを知っておくとどういう場面で役に立つのか」かについて述べられてないことが多いんですよ。


その点、本書は前書きにある通り、各章の冒頭で<b>「これを知っておくと開発現場のどういう場面でどう嬉しいのか」</b>ということがシンプルな具体例でわかりやすく書かれています。



たとえば、本書の第8章、「ジェネリクス」の章の冒頭文では、

> ジェネリクスとは、型をパラメータとして受け取ることで汎用的なプログラムを記述するための機能です。

とあります。よくある言語の本って、解説これだけで終わっちゃって、さっさと使い方の解説に行ってしまうと思うんですよ。


他言語でジェネリクスという概念に既に触れてたり、C++のテンプレートとかを知っている人にとってはこれだけで「はいはい、あれね」ってなると思うんですが、僕みたいにSwift以前はほぼObjective-Cしか書いたことない人間からすると、「文章としては理解できるけど・・・『型をパラメータとして受け取ることで汎用的なプログラムを記述できる』から何・・・？」ってなっちゃうわけでして。。


ところが本書の場合はこの章の最初に、まずは<b>ジェネリクスを使用「しない」例をサンプルコード付きで示したうえで、それがジェネリクスを利用するとどうなるか</b>、というbefore / afterを示してくれています。しっかりジェネリクスを学ぶ<b>モチベーションを喚起されてから使い方の解説に進める</b>、というわけです。


##目次 / 個人的な読み方

本書の目次は大見出し、中見出し、小見出しとかなり詳細に区分けされているのですが、長くなってしまうのでここでは各章のタイトルだけ紹介します。

- 第1章 Swiftはどのような言語か
- 第2章 変数、定数と基本的な型
- 第3章 制御構文
- 第4章 関数とクロージャ
- 第5章 型の構成要素 ── プロパティ、イニシャライザ、メソッド
- 第6章 型の種類 ── 構造体、クラス、列挙型
- 第7章 プロトコル ── 型のインタフェースの定義
- 第8章 ジェネリクス ── 汎用的な関数と型
- 第9章 モジュール ── 配布可能なプログラムの単位
- 第10章 型の設計指針
- 第11章 イベント通知
- 第12章 非同期処理
- 第13章 エラー処理
- 第14章 実践的なSwiftアプリケーション ── Web APIクライアントを作ろう
- 第15章 SwiftからObjective-Cを利用する

詳細な目次は[公式ページ](http://gihyo.jp/book/2017/978-4-7741-8730-3)で確認できます。


著者の一人がAPIKit作者の石川氏なので、第14章から読む人も多いようです。



個人的には、

- パラパラとめくりつつ「この機能は知らないな」「このへんちゃんとわかってないな」というところを見つけたらその項の「why」や「when」にあたる解説を読む
- 興味がわけば詳しく解説を読む

という感じで読み進めていきました。


##その他

###Swiftがバージョンアップしたら？

Swiftは（これまでのところは）毎年のようにメジャーアップデートされていて、まだまだ変化の激しい言語です。本書は現行の Swift 3 ベースに解説されたものですが、2017年秋には <b>Swift 4</b> がリリースされる見込み。そうなると、本書の内容は古くなってしまいうのでしょうか？


私は依然として価値を持ち続けると思います。言語仕様が少々変わっても、それは表面的な書き方（how）の変更であったり、できること（what）が増えたりといった公式ドキュメントでも補完できる部分であり、各機能がなぜ存在するのか（why）、いつ使うべきか（when）といった<b>核となる考え方自体は変わらないはず</b>であり、本書はその「Swiftの核となる考え方」について解説したものだからです。


###Swiftは気になるけどiOSには興味がないんだけど・・・

本書のサンプル／解説ではUIKit等のiOSやmacOSに依存するフレームワークやそのAPIは出てこず、<b>基本的にはSwiftの標準機能とFoundationのようなコアライブラリだけを用いて解説</b>されています。


僕はiOSの人間なのでiOSベースで書かれていたとしても全然嬉しいのですが、最近は「iOSには興味がないけど、Swiftでサーバーサイドを書くことには興味がある」「Swiftという言語自体に興味がある」という声も聞くので、そういった方々にも本書はいいのでは、と思います。


##まとめ

以上の紹介でピンと来た方はぜひ手にとってみてください。個人的には超勉強になりました。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="https://images-fe.ssl-images-amazon.com/images/I/51O5F5tHiuL._SL160_.jpg" alt="Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank">Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 17.04.04</div></div><div class="amazlet-detail">石川 洋資 西山 勇世 <br />技術評論社 <br />売り上げランキング: 5,087<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774187305/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


Kindle版はありませんが、Gihyo Digital Publishingで[電子版](https://gihyo.jp/dp/ebook/2017/978-4-7741-8772-3)（EPUB/PDF）を購入できるようです。