その後のその後

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

「iOS 11 Programming」を共著で執筆しました/本書のおすすめポイント

昨日、共著で執筆したiOSの技術書「iOS 11 Programming」の販売が開始されました!


iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
  • 発行日:2017年11月16日
  • 対応フォーマット:製本版,PDF
  • PEAKSで購入する


私は ARKit と Metal の章の執筆を担当しました。


7月頭のクラウドファンディング成立を機に執筆を開始し、脱稿まで約4ヶ月。技術書の執筆期間としては長くはないですが、がんばりました。基本的に週末はほぼ執筆、有休は使い果たしましたし、どこかに出かけてもずっと執筆してました。


(こういう箱に入って届きます。装丁カッコイイです)


本記事では自分の担当章を中心に、「iOS 11 Programming」を紹介させていただきます。

第2章: ARKit

ARKitは、ちょっと試すだけなら超簡単です。APIはシンプルだし、Xcodeのテンプレートからサクッと動くものがつくれます。


しかしまた、ものすごく奥深くもあります。レンダリングはSceneKitやMetalと組み合わせられるので、これだけで3Dプログラミングのほぼあらゆるテクニックが使えるということになりますし、カメラからの生の入力データ`CVPixelBuffer`にもアクセスできるので、Core Image, Core ML, Vision, OpenCV, GPUImage, etc…と組み合わせて、シーケンシャルな画像を入力とするあらゆるテクニックを駆使できるということにもなります。ARKitが検出している特徴点データにもアクセスできます。


そんな手軽さも奥深さも兼ね備えるARKit、ネット上ではiOS 11の正式リリースを待たずして多くのデモが公開され、開発者の間だけではなく一般ユーザーの間でも話題になっていました。


(ARKitで巻尺のように実寸を測るデモ動画)


本章では、そういったARKitの「超簡単な導入」から始めて、最終的にはネットで話題になっていたようなアイデアを実装できるようになるところまでをカバーするように構成しました。

  • 2.1 はじめに
  • 2.2 ARKit入門その1 - 最小実装で体験してみる
  • 2.3 ARKit入門その2 - 水平面を検出する
  • 2.4 ARKit入門その3 - 検出した水平面に仮想オブジェクトを置く
  • 2.5 ARKit開発に必須の機能
  • 2.6 特徴点(Feature Points)を利用する
  • 2.7 AR空間におけるインタラクションを実現する
  • 2.8 アプリケーション実装例1: 現実空間の長さを測る
  • 2.9 アプリケーション実装例2: 空中に絵や文字を描く
  • 2.10 アプリケーション実装例3: Core ML + Vision + ARKit
  • 2.11 Metal + ARKit


最初の「ARKit入門」では、はじめの一歩として、最小実装でARKitを体験します。実にシンプルな実装で強力なAR機能が利用できることを実感していただけることでしょう。


その後は平面を検出する方法、その平面に仮想オブジェクトを設置する方法、そしてその仮想オブジェクトとインタラクションできるようにする方法…と、読み進めるにつれて「作りながら」引き出しが増えていき、最終的にはARKitを用いた巻尺(メジャー)や、空間に絵や文字を描くといったアプリケーションの実装ができるようになっています。


(本章で作成するサンプル)



ARKitのAPIはシンプルとはいえ、リファレンスだけから実装方法を汲み取るのは難しい部分もあります。またAppleのサンプルは動かして試してみたり、ちょっと改変してみたりして用いる分にはいいですが、実装内容は結構複雑で初心者には意図がわかりにくいものになっている面があります。

  • ARKitには興味があるけどなかなか手を動かせていない
  • 公式サンプルを動かしただけで止まっている
  • どこから始めていいかわからない

といった方には、本章は合っているかなと思います。



一部だけですが、PEASKの本書のページサンプルPDFを読めるので、気になった方はぜひ試し読みを。

第13章: Metal

クラウドファンディング当初は「Metal 2」と題されており、iOS 11のMetalの新機能の紹介を中心とするような章タイトルでしたが、そもそもほとんどのiOSエンジニアがMetalのAPIを自分でたたいて何かを書いたことがないであろう中で新機能についても仕方がないのでは・・・と考え、がっつりMetalの基礎から書きました。

  • 13.1 はじめに
  • 13.2 Metalの概要
  • 13.3 Metalの基礎
  • 13.4 MetalKit
  • 13.5 Metal入門その1 - 画像を描画する
  • 13.6 Metal入門その2 - シェーダを利用する
  • 13.7 Metal入門その3 - シェーダでテクスチャを描画する
  • 13.8 ARKit+Metalその1 - マテリアルをMetalで描画する
  • 13.9 ARKit+Metalその2 - MetalによるARKitのカスタムレンダリング
  • 13.10 Metal 2
  • 13.11 Metalを動作させるためのハードウェア要件

正直なところMetal 2の機能紹介は多くはありません。なので、従来のMetalについて熟知し、iOS 11での変更点を中心に知りたい方には物足りないかもしれません。


しかし2017年11月現在、Metalについての日本語でのまとまった情報はこれが唯一かと思います。そして、OpenGLやDirectXでGPUに近いレイヤでのグラフィックスプログラミングに親しんで「いない」人達にはMetalはかなりとっつきにくいと思うのですが、そういう方達にとってのわかりやすさにおいては英語の情報ソース含めても随一なのではないかなと勝手に自負しております。


なぜなら、他のMetalについての書籍はそういう方面での経験が豊富な著者が書いている一方で、本書の場合、そのあたりにほとんど知見がなく、四苦八苦しながら勉強した僕が書いたからです(胸を張って言うことではないですが)。「グラフィックスプログラミングの達人による解説」ではありませんが、同じ目線で苦労した人による「わからないところがわかる」解説にはなってるのではないかなと。



具体的には「Metalの基礎」「入門その1〜その3」。ここは、新しい事項が一気にブワーッと出てこないように、かなり苦労して解説する内容を精査し、順序を考えました。ブリットコマンドエンコーダから解説するMetalの書籍(記事も含め)はあんまりないんじゃないかなと。普通はレンダーコマンドエンコーダから始めることが多いのですが、シェーダを使うと「初心者にとってのおまじない」が爆発的に増えるのです。


そして、それでも「新しい概念」はたくさん出てくるので、本書ではそのへんを「なにをやっているのか」「なぜこの手順が必要なのか」ということがわかるように解説して、納得感を得ながら前に進められるようにしています。


(本書の執筆の真っ最中、iOSDC 2017にてMetalについて「興味ない人向けに」解説したときの動画です。『まったくMetalさわったことないけどわかった』という感想を多くいただきました)





PEASKの本書のページのサンプルPDFは他の章は基本的に冒頭2ページの公開となっていますが、Metalの章は僕個人の希望で5ページ読めるようにしていただいてます。Metalが気になる方はぜひ試し読みしてみてください。

全体のPR

ここから本書全体の話。まず、各執筆陣の素晴らしさと、その担当章の組み合わせの妙については以前に書いた記事をご参照ください。


各章のご紹介は著者様ご自身での記事にお任せしつつ、ここで僕が声を大にして言いたいことは、


本書はiOS 12, 13, 14...が登場しても価値を持ち続ける


ということです。


なぜかというと、多くの章で、他の書籍には載っていない、あるいはググってもまとまった情報は見つかりづらい内容について解説しているからです。

  • 第1章 iOS 11 概要
  • 第2章 ARKit
  • 第3章 Core ML
  • 第4章 Swift 4の新機能とアップデート
  • 第5章 Xcode 9 の新機能
  • 第6章 Drag and Drop
  • 第7章 FilesとDocument Based Application
  • 第8章 レイアウト関連の新機能及び変更点
  • 第9章 Core NFC
  • 第10章 PDF Kit
  • 第11章 SiriKit
  • 第12章 HomeKit入門とiOS 11のアップデート
  • 第13章 Metal
  • 第14章 Audio関連アップデート


たとえばHomeKitの章。長らく謎に包まれていたHomeKit、対応デバイスもなかなか登場しなかった当然それについて書かれた書籍もありませんでした。そしてポツポツとデバイスが出揃ってきた今、満を持しての所さんによる56ページに及ぶ入門〜実践の解説!他の章に用がなくてもHomeKitに興味がある人はこの本はずっと「買い」です。


岸川さんによるSiriKitの章も、以前からあるフレームワークでありつつ「動作のしくみ」から解説されていますし、僕の書いたMetalの章も新機能だけじゃなくて基礎から解説しています。


Core ML、Core NFC、PDF Kit、MusicKit、ARKitといった新フレームワーク、Drag and Drop等の新機能も、まとまった解説は現時点では(そして恐らく当面の間)本書でしか得られないのは同様でしょう*1


しかも、著書やカンファレンスでの講演に定評のある著者陣による執筆です。たまーに見かける、APIリファレンスを翻訳しただけのような、あるいはさわりをちょろっと解説しただけみたいな章はひとつもありません。それぞれが興味深く読めて、ちゃんと頭に入ってきて、実際の現場で役立つように各著者によって噛み砕かれ、再構成されています。


ひさびさに出た「非入門者向け」の「iOS SDK解説書」*2にして、かなりの良書では、と思います。


謝辞

ARKit、Metalの章ともに、同僚登本さんにチェックしていただきました。というかそもそも(ARKitで大いに必要となる)3Dプログラミングの基礎は彼から教えてもらいました。またMetalの章は後藤氏にもチェックしていただきました。Metalのレビューをお願いできる人はなかなかいないので非常に助かりました。改めてお礼を申し上げます。


また非常に精密な校正をしてくださった加藤さん、このお話をくれて、完成まで導いてくれたPEAKSの永野さん、共著者のみなさま、クラウドファンディングで購入してくださったみなさま、アーリーアクセスでコメントいただいたみなさま、どうもありがとうございました!


そして本書について知らなかったけどちょっと気になってきた、というみなさま。本書はPEAKSのサイトで購入可能です:


iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
  • 発行日:2017年11月16日
  • 対応フォーマット:製本版,PDF
  • PEAKSで購入する


何卒よろしくお願いいたします。


*1:世界的に有名な某iOSチュートリアルサイトが発行しているiOS 11本を実際に購入してARKitの章を見てみましたが、結構さわりだけな印象だったので、英語/日本語という違いを抜きにしてもこちらの方がいいのでは、と個人的には思っています

*2:言語の解説書ではなく、という意味