その後のその後

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

「iOS 12 Programming」のARKitとデプスの章を執筆しました

12月17日、共著で執筆したiOSの技術書「iOS 12 Programming」の一般販売が開始されました!

iOS 12 Programming

iOS 12 Programming

  • 著者: 加藤 尋樹,佐藤 紘一,石川 洋資,堤 修一,吉田 悠一,池田 翔,佐藤剛士,大榎一司,所 友太,
  • 製本版,電子版
  • PEAKSで購入する

私は「ARKit」と「デプス」1の章の執筆を担当しました。担当章の詳細については後述します。

中身が良いのはもちろんなのですが、とにかく表紙のデザインがすごく良くて、自分が過去に執筆で関わった書籍では一番のお気に入りです。マットな質感と色合いが好きで、ついつい手にとってしまいます。モノとしての技術書が好き、という方はぜひ製本版をおすすめします!

f:id:shu223:20181221153048j:plain

今のところAmazonでは売ってなくて、PEAKS社のサイトより購入できます。

以下、担当した章の紹介です。

第4章: ARKit

ARKit 2.0の新機能だけではなく、ARKit 1.5で追加された機能、さらにARKit 1.0の中でも前著「iOS 11 Programming」執筆以降に追加発表されたフェイストラッキング 2 等の機能も網羅しています。

- 4.1 はじめに
- 4.2 垂直平面の検出
  - 4.2.1 検出する平面のタイプを指定する
  - 4.2.2 検出した平面のアラインメントを判別する
- 4.3 平面ジオメトリの取得
  - 4.3.1 ARPlaneGeometry
  - 4.3.2 ARSCNPlaneGeometry
  - 4.3.3 ARPlaneAnchorのgeometryプロパティ
  - 4.3.4 実装
- 4.4 画像検出
  - 4.4.1 ARWorldTrackingConfiguration の detectionImages プロパティ
  - 4.4.2 ARReferenceImage
  - 4.4.3 ARImageAnchor
  - 4.4.4 実装
  - 画像検出のパフォーマンス
- 4.5 画像トラッキング
  - 4.5.1 ARImageTrackingConfiguration
  - 4.5.2 実装
  - 4.5.3 画像トラッキングと画像検出の違い
  - 4.5.4 ワールドトラッキングコンフィギュレーションで画像トラッキング
- 4.6 フェイストラッキング
  - 4.6.1 ARFaceTrackingConfiguration
  - 4.6.2 ARFaceAnchor
  - 4.6.3 ARFaceGeometry
  - 4.6.4 ARSCNFaceGeometry
  - 4.6.5 実装
- 4.7 3D物体検出
  - 4.7.1 ARReferenceObject
  - 4.7.2 detectionObjects
  - 4.7.3 ARObjectAnchor
  - 4.7.4 実装
  - 4.7.5 3D 物体スキャンの公式サンプルと独自実装について
- 4.8 AR体験の永続化と共有
  - 4.8.1 ARWorldMap
  - 4.8.2 ワールドマップの取得
  - 4.8.3 ワールドマップからの復元/initialWorldMap
  - 4.8.4 ワールドマップのアーカイブ/アンアーカイブ
  - 4.8.5 ワールドマップ取得タイミング
- 4.9 ビデオフォーマット
  - 4.9.1 ARConfiguration.VideoFormat
  - 4.9.2 videoFormat
  - 4.9.3 supportedVideoFormats
- 4.10 USDZの利用
  - 4.10.1 USDZファイルからMDLAssetを初期化する
  - 4.10.2 MDLAssetからSCNSceneを初期化する

なお、基礎から順序立ててARKitについて学びたい方は「iOS 11 Programming」の第2章を参照してください(後述)。

第5章: デプス

デプス(深度)が取得可能になったのはiOS 11から、つまり比較的最近のことです。 従来のカメラやGPSが、デジタルの世界と我々が生きる現実世界を繋ぐ重要な役割を担い、 アプリ開発者に多くの創造性を与えてくれたのと同様に、 モバイル端末で「奥行き」がわかるようになったというのはアプリ開発の次元がひとつ増えたようなものです。

そんなデプスですが、登場して間もないということもあり、日本語での情報はまだほとんどありません。 そこで本章ではデプスについて、iOS 12で追加されたAPIの解説だけでなく、 基礎から応用まで順序立てて30ページにわたって解説しています。

- 5.1 はじめに
- 5.2 デプスとは?
- 5.3 Disparity(視差)とDepth(深度)
- 5.4 AVDepthData
- 5.5 iOSにおけるデプス取得方法
- 5.6 デプス取得方法1:撮影済み写真から取得
  - 5.6.1 CGImageSourceオブジェクトを作成する
  - デプスデータをもつ PHAsset だけを取得する
  - 5.6.2 CGImageSource から Auxiliary データを取得する
  - 5.6.3 Auxiliary データから AVDepthData を初期化する
  - デプスマップをCIImageとして取得する
- 5.7 デプス取得方法2:カメラからリアルタイムに取得
  - 5.7.1 デプスが取れるタイプの AVCaptureDevice を使用する
  - 5.7.2 デプスが取れるフォーマットを指定する
  - 5.7.3 セッションの出力に AVCaptureDepthDataOutput を追加する
  - 5.7.4 AVCaptureDepthDataOutputDelegate を実装し、AVDepthData を取得する
  - 5.7.5 AVCaptureDataOutputSynchronizer で出力を同期させる
- 5.8 デプス取得方法3:ARKitから取得
- 5.9 デプス応用1:背景合成
  - 5.9.1 背景合成とは
  - 5.9.2 CIBlendWithMask
  - 5.9.3 デプスデータの加工
- 5.10 デプス応用2:2D写真を3D空間に描画する
- 5.11 PortraitEffectsMatte
  - 5.11.1 AVPortraitEffectsMatte
  - 5.11.2 PortraitEffectsMatteの取得方法
  - 5.11.3 PortraitEffectsMatteの取得条件/制約

iOSにおけるデプスについてこれだけ網羅的に、しかもフレームワークを横断して解説している書籍は英語圏を含めても存在しないのではと思っています。たぶんiOS 13が出ても14が出てもデプスについて詳しく書かれた日本語解説書は出てこないので、「デプスやるならiOS 12 Programming」と末永くご愛読いただけるといいなぁと思っております。

f:id:shu223:20180913012548g:plain

(PortraitEffectsMatteで背景切り抜き)

f:id:shu223:20180915110312g:plain

(2D写真を3D空間に描画)

全体のPR

本書の目次全体は次のようになっております。

  • 第1章 Siri Shortcuts ( @cockscomb 加藤 尋樹)
  • 第2章 Notifications ( @justin999_ 佐藤 紘一)
  • 第3章 Password AutoFillとAuthentication Services( @_ishkawa 石川 洋資)
  • 第4章 ARKit( @shu223 堤 修一)
  • 第5章 デプス( @shu223 堤 修一)
  • 第6章 Core ML 2, Create ML( @sonson_twit 吉田 悠一)
  • 第7章 Swift 4.0からSwift 4.2へのアップデート( @ikesyo 池田 翔)
  • 第8章 Xcode 10の新機能( @hatakenokakashi 佐藤剛士
  • 第9章 Mojaveの新機能( @tamadeveloper 大榎一司)
  • 第10章 tvOS 12の新機能( @tokorom 所 友太)

いかがでしょうか。ここで僕が声を大にして言いたいことはiOS 11のときも言ってますが)

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

ということです。今後もiOSやSwiftの入門本は多く出てくると思いますが、本書が扱っているような項目について同様の詳細度で解説する書籍はそうそう現れないでしょう。というわけで、ひとつでも興味のある項目があれば、ぜひご検討ください。

iOS 11 Programming」も併せてどうぞ

なお、ついでに言わせていただきますと、同じ理由でiOS 11本も今でも「買い」です。

iOS 11 Programming

iOS 11 Programming

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

もう一度改めて目次を見てください。

- 第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関連アップデート

私が担当したARKitの章、こちらはiOS 12本で書いた内容と一切の重複はありませんiOS 11本のARKitの章では、3行で実現できるARKitのはじめの一歩から、水平面の検出・仮想オブジェクトの設置・インタラクションといった重要な基礎機能の解説、そして現実世界の長さを測るメジャーアプリや空中に絵や文字を描くお絵かきアプリといった応用アプリケーションの実装方法を解説しています。iOS 12が登場した今でも古びない内容ですので、ARKitの実装を基礎から学びたい方はぜひご検討ください。

また同じく私が担当したMetalの章、こちらもiOS 11の新機能だけではなく、基礎からじっくり順序立てて解説しています。OpenGLDirectXGPUに近いレイヤでのグラフィックスプログラミングに親しんで「いない」人達にはMetalはかなりとっつきにくいと思うのですが、そういう方達にとってのわかりやすさにおいては英語の情報ソース含めても随一なのではないかなと勝手に自負しております。

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

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

というわけで今でもその価値は色あせてないと思うので、興味のあるトピックがあればぜひiOS 11 Programmingもご検討ください。

まとめ

ついに一般販売が開始された書籍「iOS 12 Programming」について執筆者の立場から紹介させていただきました。ちょっと気になってきた、というみなさま。PEAKSのサイトに無料サンプルもあるので、ぜひぜひチェックしてみてください。

iOS 12 Programming

iOS 12 Programming

  • 著者: 加藤 尋樹,佐藤 紘一,石川 洋資,堤 修一,吉田 悠一,池田 翔,佐藤剛士,大榎一司,所 友太,
  • 製本版,電子版
  • PEAKSで購入する

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


  1. 実はクラウドファンディングで購入者を募った時点ではMetalのiOS 12の新機能について書く予定だったのですが、執筆段階でデプスの章に変更させていただきました。Metalの章を楽しみにしていたクラウドファンディング支援者の方々には申し訳なかったのですが、デプスもまたiOSアプリ開発の新しい可能性を切り拓くものなので、いまこのタイミングで体系だった解説を書くことの意義は大きいと考え、この決断に至りました。この変更については支援者にはメールでベータリリース時お知らせしています。

  2. フェイストラッキングはARKit 1.0に属する機能ですが、ARKitが初めて発表されたWWDC 2017の時点ではまだ隠されており、2017年秋にiPhone X発表と同時にAPIが公開されました。