その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

『iOS×BLE Core Bluetoothプログラミング』という本を書きました

konashi 開発者の松村礼央さんと、iOS エンジニアの堤の共著で執筆させていただいた技術書「iOS × BLE Core Bluetooth プログラミング」がついに本日発売となりました!



iOS×BLE Core Bluetoothプログラミング


タイトルの通り、BLEを利用したiOSアプリ開発の解説書です。


企画当初の予定ページ数(230ページぐらい)を大きく越え、480ページの大ボリュームになりました。企画が決まってからだと足かけ1年、共著の松村さんも僕も編集の大内さんも(おそらくDTPさんやデザイナーさんも)徹夜しまくりでデスマーチの様相を呈しつつ仕上げた労作なので、ぜひみなさまにポチッと・・・お願いしたいところではありますが、ニッチなテーマですし、価格も少々高めではあるので、本記事の内容紹介をご一読いただき、ピンとくるものがあればぜひお求めいただけると幸いです。



iOS×BLE Core Bluetoothプログラミング
堤 修一 松村 礼央
ソシム
売り上げランキング: 898


【電子版】(PDF・達人出版会)

iOS×BLE Core Bluetoothプログラミング
堤 修一, 松村 礼央
ソシム
発行日: 2015-03-23
対応フォーマット: PDF

書籍の特徴

大きく分けて2つのパートにわかれていて、

  • 最初のパート、第1章から第3章は、konashiの開発者である松村礼央さんによる執筆で、BLEという通信規格そのものについての解説
  • 第2のパート、第4章から第12章は、(iOSエンジニアである)堤による執筆で、Core Bluetoothを中心に、BLEを用いたiOSアプリ開発の解説

となっています。



各章の詳細項目は後述するとして、iOSにおける実装方法の解説だけじゃなくて、BLEの規格そのものについての解説もしっかり書いてあるのが本書のポイントのひとつです。(そのあたりを堤が生半可な知識で書いても有用性が低いだろうということで、フィジカルなレイヤーから熟知されている松村さんとタッグを組ませていただいた、という経緯があります)


特筆すべきは松村さんが書かれた「3. BLEを理解する」で、なんとこの章だけで約150ページ(!)もあります。Bluetooth SIGによるドキュメント "Core Specification" は英語で約2700ページもあり、とても読める気はしないので、iOSエンジニア向けに噛み砕いて解説してくれているこの章だけでも個人的には「買い」だと思っています。



その他の概要・特徴紹介代わりに、「まえがき」に書いた内容を載せてみます。*1

「BLEって何?」という質問に答えようとすると

  • 2.4GHz帯の電波を用いた–––
  • 超低消費電力を特徴とし–––

などなど、色々と説明すべきことがあるのですが、筆者(堤)のようなアプリ開発者の視点から端的にいうと、 「スマホアプリと外部デバイスをワイヤレスでつなげられる通信方式」 ということになります。


BLEという通信規格自体への興味はさておき、「スマホアプリと外部デバイスを連携させる」という分野に興味のあるアプリエンジニアの方は結構多いのではないでしょうか。

筆者も例外ではなく、そもそもBLEとの馴れ初めを振り返ると、「BLE」自体は意識せず、ただただ「iOSアプリと外部デバイスを連携させて何かやるのって楽しそう」という動機でkonashiを購入したのが始まりでした。


その後、次世代パーソナルモビリティ「WHILL」、ウェアラブルなおもちゃ「Moff」など、さまざまな案件にiOSアプリエンジニアとして関わらせていただくうちにBLEに関する知識も深まっていき、こうして書籍まで執筆させていただいているわけですが、ずっとベースにあったのは「スマホアプリと外部デバイスと連携させるのは楽しい」これに尽きます。


私個人のそういった経験もあり、「楽しそう」「つくってみたい」から入って、だんだんBLEのしっかりした知識もつくように構成したのが本書です。


たとえば、私は当初「セントラル」「ペリフェラル」「キャラクタリスティック」「アドバタイズ」という専門用語を難しく感じた経験があったので、4章「Core Bluetooth 入門」の序盤では、「周辺のBLEデバイスを探索する」「接続する」といったようになるべく専門用語を使わず説明するようにしています。


また、最初は「周辺のBLEデバイスを探索したい」だけなのに、そこでオプションの解説まで含めてしまうと、イベントディスパッチ用のキューの話やサービスによる絞り込みを行うかどうか、その場合バックグラウンドではどういった挙動になるか・・・といきなり新しい事柄が一度にたくさん出てきてしまい混乱のもとになるので、各項では新しく学ぶ事項を必要最小限にとどめ、後からより詳細を知りたくなったときに関連ページに飛べるよう、各項に「関連項目」の欄を設けています。


本書では、こういった「楽しそう」「つくってみたい」という気持ちを削がないための工夫を随所にしています。

・・・ブログに載せると長いのでいったんここで切りますが、そんなわけで入門者の方が入門しやすいように配慮して書いております。

松村・堤という実際にBLEプロダクトを開発した執筆陣がその経験に基いて書いているので、実践的な内容になっているのも本書のポイントです。


たとえば、「10. 開発ツール・ユーティリティ」で紹介しているツール群は、どれも筆者が日々の開発で使用しているものですし、「11. ハマりどころ逆引き辞典」は、筆者が実際に開発現場においてハマって大量の時間を食いつぶした汗と涙が凝縮されています。また本書の随所で、リファレンスなどからは汲み取りづらい注意点やポイントについて触れています。


そして松村の執筆した3章「BLEを理解する」では、超濃厚なBLE仕様に関する解説が展開されています。実案件においてBLEの特色を活かしたプロダクト設計をする際に、あるいはアプリエンジニアがハードウェアエンジニアと意思疎通する際に、これらの知識が役立ちます。


そして既にある程度BLEに慣れている人にも役立つ実践的な内容や、Core Bluetoothよりももっと下位のレイヤーについても学べるようになっています。

対象読者

本書は、iOSアプリ開発には慣れていることを前提としています。


したがって、Objective-C や Swift の言語そのものについてや、Xcode の一般的な操作方法、Gitやターミナルの基本的な扱い等々については解説を省略しています。UIKit や NSFoundation といった iOS SDK の一般的なフレームワークについても前提知識として取り扱っています。


逆に、BLEについては、知識ゼロからでOKです。


「BLEって何?」「何が嬉しいの?」という状態から読み進められるよう配慮し、構成してあります。


ゼロから入れるようにしつつも、かなり詳細な内容までカバーしているので、本書の内容をマスターすれば、実際に新規ハードウェア開発プロジェクトにiOSエンジニアとして入り、活躍することも可能かと思います。

経験者向けの見どころ

ある程度 BLE および Core Bluetooth の経験がある人にとっても、BLEの規格自体について説明している3章(松村さん執筆)は相当学びがあると思われます。(#僕は新しく勉強になることだらけでした。。)


また僕が執筆したiOSプログラミングのパートにも、何か新しい発見はあるかもしれません。「ペリフェラルへの再接続」「状態の保存と復元」など、Core Bluetooth では「知らなくても大抵の実装ケースにおいて問題ないが、知らないと損」なことが多くありますし、「Service Changed」サービスへの対応方法等、ググってもあまり具体的な実装方法が出てこない(2015年3月堤調べ)事項についても書いてあります。


実案件でBLEさわりはじめてるけどまだあまり自信がない、という方には11章「ハマりどころ逆引き辞典」が役立つと思います。実際に堤が数々の実案件でハマりつつ書き溜めてきた内容なので、かなりの時間短縮になるのでは、と思っています。

書籍についてのFAQ

以下、本書について、よく聞かれる質問です。

Swift?Objective-C?

Part 2 は、ほとんどの節についてダウンロードサンプルを用意しています。(今数えたら、Part 2 だけで Xcode プロジェクトの数が 52 個ありました。)


で、セントラル・ペリフェラルの基本事項の解説にあたる4章・5章については ObjC・Swift 両方のサンプルを用意し、掲載しています。


その後の章についてはObjCをベースに解説しています。

konashiがないと読み進められない?

いくつかの例でkonashiを使ってますが、もちろん、お持ちでなくても全然大丈夫です。iPhone同士で通信する、Macと通信する、SensorTagを使う、といった諸々の代替方法も紹介しています。



(本書内の図版で使用している各種BLEデバイスの模式図)

BLE、用語がややこしくて敬遠している

筆者も、「ペリフェラル」とか「キャラクタリスティック」といった用語が難しそうで、ずっと敬遠してました。Core Bluetooth編の最初の章(4章)序盤では、なるべくそういう用語を使わないように「周辺のデバイスを探す」「接続する」といった感じで解説しています。(このあたりの配慮については、上に載せた「まえがき」もご参照ください)

BLE云々はよくわからないけどとにかく何かつくってみたい

いきなり12章のレシピからはじめてみるのも手です。「心拍数モニタアプリ」「活動量計デバイスとアプリ」「ジェスチャ認識ウェアラブルデバイス&アプリ」「すれちがい通信」とiOS✕BLEの分野において人気のある題材を集めつつ、本書の内容がまんべんなく復習できるようなサンプルにしてあります。関連項目もまとめてあるので、つくりながら必要に応じて戻って学習する、という学習スタイルも可能です。

BLEデバイスを買わないと気分が出ない

たとえば12章の「レシピ1. 心拍数モニタアプリ」「レシピ2. 活動量計デバイスとアプリ」はデバイス側をiPhoneで代用するレシピにしているので、(気分は出ないかもしれませんが)専用デバイス無しですぐに試してみることができます。また「レシピ4. すれちがい通信」も、iPhone同士で試せるレシピです。

「Bluetooth Low Energyをはじめよう」とどっちを買っていいかわからない

僕も買いました!原著も持ってましたが、和書も改めて。良書です。


Bluetooth Low Energyをはじめよう (Make:PROJECTS)
Kevin Townsend Carles Cufi Akiba Robert Davidson
オライリージャパン
売り上げランキング: 1,674


それぞれのAmazonのカテゴリの違いが、書籍のベクトルの違い・棲み分けを表しているかと思います。

  • Bluetooth Low Energyをはじめよう・・・カテゴリ:自作パソコン
  • iOS×BLE Core Bluetoothプログラミング・・・カテゴリ:モバイルプログラミング


目次を見ても内容のかぶりはほとんどなく、ボリューム的にもだいぶ違いがあります(そのぶん価格帯もちがう)。



なので、個人的には両方購入しても損はないと思いますが、ざっくり、

  • BLE という技術全体の概要を把握したい方・・・「〜をはじめよう」
  • BLEを使ったiOSアプリの実装に興味がある方・・・本書

みたいな感じかなと。

高い

すいません、価格はおさえたかったのですが。。なにぶんニッチな技術分野なもので、初回発行部数少なめなのと、ページ数やらの関係で、これぐらいになってしまうとのことです。このあたりは筆者側ではほとんどどうにもできない大人の世界のことなので、なにとぞご理解を。。

評判など

iOS x BLE Core Bluetooth プログラミング - maaash.jp

IRKit開発者による大塚さん( @maaash )によるレビュー記事。

BLEを使いiPhoneと通信するハードウェアを開発しようとする時、
まず身につけるべきは、問題が起きた時の切り分け能力だと思う。


iPhone側はアプリから見るとCoreBluetoothという抽象化したレイヤなので、
アプリ開発者は「scanFor…してるのに見つからないよ?」
デバイス側では「advertiseしてるよ?」
となった時にすぐパケットロガーを出せると話が早い。


この辺もちゃんと10章,10-3,10-4で書いてあってすばらしい。
実戦をこなしている著者陣ならでは。

ふわっとiOSアプリの作り方を解説するだけではなく、BLEについて詳しい3章があるのが心強い。
ハードウェアを作るならば、Bluetooth4の仕様を読むことになるだろう。
だが Core_V4.0.pdf は2302ページもあってしんどい。


そんなときにまずこの3章を日本語で読んで挑めるとかなりスムーズになるだろう。 自分も仕様はところどころピックアップして読んだだけなので、3章はいざという時のためにあたためておきたい。

Amazonのレビュー

BLEを使うサービス開発に関わる人必読の1冊, 2015/3/22


BLEをサービスに活用するにはどうすればいいのか?という一貫した視点で、BLEの通信規格とiOSのCoreBluetoothフレームワークの2つの基礎知識をしっかり解説しています。


開発対象がiOSではなくAndroidでも、またアプリやハードの直接の開発者でなくても、BLEを使った何かを考える方には、必読の1冊です。


iOSアプリ開発では、開発方法だけではなく、トラブルに遭遇したときに、なぜそうなるのかありうる原因の逆引きが書かれています。分野をまたぐ開発では、なにかうまくいかない時に、通信を含む全てを知っていないと原因すら思いつけません。一方で、通信規格やSDKがしっかりしているので、開発者が陥りやすいトラブルは数える程度しかありません。筆者の開発実務経験があるから、逆引きを書かれたのだろうと思います。


BLEを使ったいろいろなものを手がけられてきた方々の対談がAppendixとして収録されています。BLEを使ったサービスを考えるときに外せない考え方や原則みたいな、まだ構造化できない不定形の知識がこの対談にまとまっていると思いました。BLEを使うサービス開発は、どうしても形あるハードウェアに目を奪われます。ですが、Appendixと1章を何度か読み返していると、BLEはリモコンじゃないんだな、とか、なぜ1章でサービスという単語が度々使われているのかが、すっとわかる気がします。


IoTという単語が話題になる2015年、"つながる"を強く主張する発表が続くと思います。しかし、IoTの強力な1手段でもあるBLEの本質は、つながることよりも、つなげない使い方や、つながったり切れたりする利用場面を思うことが重要なのだなと、読んでいて思いました。

買えるところ

Amazon

iOS×BLE Core Bluetoothプログラミング
堤 修一 松村 礼央
ソシム
売り上げランキング: 898


リアル書店

下記リンクから、本書の近隣のリアル店舗における在庫の有無が調べられます。


https://takestock.jp/book/4883379736/search/


(新宿紀伊國屋書店での松村さんのツイート)

(2013.3.31追記)電子書籍版

多くのお問い合わせをいただいていた 電子書籍版(PDF)も出ました!!!!達人出版会さんよりご購入いただけます。


iOS×BLE Core Bluetoothプログラミング
堤 修一, 松村 礼央
ソシム
発行日: 2015-03-23
対応フォーマット: PDF


こちらからサンプルが読めます。


ちなみに、ソシムの本書の読者サポートページの「正誤情報」から、該当ページだけ修正PDFがダウンロードできるのですが、こちらも購入検討用サンプルとして見ていただくといいかもしれません。

関連リンク


*1:赤字等の一部装飾はこの記事用に編集したもの。書籍自体は1色刷りです。