Vision Pro実機なしで空間ジェスチャーを作った話

# 空間ジェスチャーアプリを作る

こんにちは、還暦を迎える現役プログラマーの[@AlohaYos](https://github.com/AlohaYos/VisionGesture/)です。

私は[Newton MessagePad](https://ja.wikipedia.org/wiki/MessagePad)からAppleの世界に入り、iPhone→iPad→Watch→TV→Vision Proとアプリを作り続けてきました。顧客企業のプロトタイプ制作が多かったので、自社アプリはそんなに多くありませんけど。

[中島さん](https://twitter.com/snakajima)のTweetで[Singularity Society](https://singularitysociety.org)を知ったのが2023年6月頃のことでした。面白そうなイベントを見つけたので、息子とユニットを組んで7月からの[BootCamp](https://singularitysociety.org/activities/bootcamp/)に参加。6月のWWDCで発表されたばかりのVision Proのアプリ制作を題材にすることにしました。

この話はVision Proの実機も無いのにvisionOSで空間ジェスチャーを使ったアプリを発売し、そのテクニックをオープンソース化するまでの物語です。  

BootCampを通じて出来上がったアプリ "[Air Poolbar](https://apps.apple.com/us/app/air-poolbar/id6473489849)"は、こんな感じ。
<iframe width="560" height="315" src="https://www.youtube.com/embed/-KGQhV8TA-Q?si=fH4CPSNbiROo6zBA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## なぜVision Pro？
2023年7月にBootCampのキックオフがあり、錚々たるSingularity Societyメンターやスタッフと参加者の中、東京から遥か遠い[**金沢**](https://www.kanazawa-kankoukyoukai.or.jp)に陣取っている地味な私達。  
みんながAIについて熱く語っている中、BootCamp的にそこはレッドオーシャンだと思って（笑）、誰もやりそうにないVision Proのアプリ制作を選択しました。じつは「誰もやりそうにない」からこそ大変な思いをしていく事になるのですが...。

## 空間コンピューティング・インターフェイスとは何だろう
私は元々、工場の現場にメカトロニクス系のコンピュータシステムを導入する泥臭いプログラマを長くしていたので「人間とのインターフェイス」をずっと考え続けて来ました。  
ソフトとハードとメカも含めて「使い易い」とは、どういう事なのか。そしてAppleが提唱する「空間コンピューティング」ではどのようなインターフェイスが最適なのか。  

理解できないことはやってみるしかないわけで、今までに無かった「空間ジェスチャー」を使った製品を作ってみようと思い立ったわけです。  
若い頃、近所に耳の聞こえない子供が住んでいて、その子と会話するために手話を独学した事がありますが、手話というのはシンプルなようで非常に表現力があります。それを想い出し「空間ジェスチャー」の可能性を感じたわけです。

## 無いものは作る。とにかく出来るところから始めよう
ところがベータ版のXcodeでvisionOSのサンプルコードを読み始めてみると、さっそく壁に突き当りました。  
 - visionOSはNDAが多くて英語の情報さえも少なすぎる。
 - 誰もジェスチャーをやっている人がいない。
 - ハンドトラッキングはVision Pro実機でしかできない！
 - Vision Proの発売は未定！

どうしよう...BootCampの成果発表は半年後の2024年3月。成果が出せるメドが立たない...。

こういう時にムクムクと闘争心が沸き立つのが私の性格で（笑）  
シャープの[MZ-80K](https://ja.wikipedia.org/wiki/MZ-80#MZ-80K系機種)から始まった私のプログラマー歴。当時は乱数を発生させるルーチンや矩形を塗りつぶすルーチンさえもアセンブラで自作する時代でしたから、とにかく無いなら作るというのが普通でした。

今回も「**ハンドトラッキングできないなら、できるようにする**」と決め、Macのカメラに写った自分の手の画像を使ってvisionOSのハンドトラッキングを置き換える[HandTrackFake](https://github.com/AlohaYos/VisionGesture/tree/main/HandTrackFake)という仕組みを作りました（後にオープンソース化）。  

<iframe width="560" height="315" src="https://www.youtube.com/embed/cHgTY3yTLuw?si=HK4uM86_uowTNAtR" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
Macカメラに向かって手を動かし、それをvisionOSシミュレータの中に投影して、シミュレータ内の空間オブジェクトを動かしてみます。

**動いた！**

<iframe width="560" height="315" src="https://www.youtube.com/embed/Rd27NMTmHlA?si=dp5QcLognhfHRpjx" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

ここまで2ヶ月ちょっと掛かりました。

*HandTrackFakeの仕組み*  
![handtrackfakefig](https://github.com/AlohaYos/VisionGesture/assets/4338056/e1e69621-22d9-4f9f-8d9f-5d9ffd26c4bb)

##  Vision Proラボへ通う
![IMG_9123.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839672/ec3ab8e6-29a4-f05d-9d5b-552040d814d0.jpeg)

Appleに行けばVision Proの実機が使えるという話を聞いて、さっそくvisionOSラボに参加申請。Apple側も新しいデバイスを世に問うという姿勢でヤル気を出しています。  
（ラボでの情報は全てNDA）

仕事の合間を縫ってアプリを試作してvisionOSラボに持ち込み。HandTrackFakeを使って何週間も机上デバッグしていたアプリが実機で１発で動いた時は感動しました😭  
その後、ラボで発見した新しい課題を金沢に持ち帰ってはHandTrackFakeでデバッグし再びラボへ。金沢から六本木まで日帰りで8回参加しました。

通算で50時間ほど実機を使い、アップルWWDR部門のスタッフとは顔見知りになって、私には毎回同じデスクが用意されるようになりました（笑）  
ラボにはvisionOSを開発しているエンジニア本人が参加してくれていて、質問をするとその場で一緒に考えてくれます。ただし全ての疑問が解消するわけでもなく、分からない事も増えていきます。  

## Apple本社へ行く
![IMG_8768 4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839672/9ebd4f28-86d6-35f1-c082-56b6a8d74bb5.jpeg)

ここはひとつ、アップル本社エンジニアに聞くしかないと考えた私は、[格安航空券](https://www.zipair.net/ja/notification/200)と[格安Airbnb](https://www.airbnb.jp/rooms/988516074251398001?check_in=2024-04-01&check_out=2024-04-03&guests=1&adults=1&s=67&unique_share_id=39c189a5-41c6-4802-9f06-ea2831958d48)を駆使して本社で開催されるvisionOSセッションに参加（WWDCをvisionOS専用に小さくしたようなセッション）。
セッション後の懇親会では、Reality Composer Proを作っているチームやvisionOSチームのメンバーに直に質問をし、自分の作ってきたアプリを見せてアピール。
HandTrackFakeに食いつくエンジニアが多かったです。セッション参加者の中には「このFake機能をVisionProシミュレータに内蔵してよ」とvisionOSチームに進言してくれた人もいました（笑）

## Air Poolbar発売
[11月のBootCamp中間発表](https://singularitysociety.org/activities/bootcamp/2023-11-23/)で方向性は間違っていないと確認した上で「**Vision Pro発売初日からアプリを売り出す**」と決めて、本当のビリヤードのようなアクションでプレイできるアプリ「Air Poolbar」を完成に向けて作り続けました。  
この時点でも実機の発売日は決まっていません。  

2023→2024年の年越しをvisionOSアプリ制作に費やし、やがて2024年1月8日に「Vision Proは2月2日に発売」という発表。私達のアプリは1月9日にApp Store審査に提出しましたが、この時点では製品版のVision Proが存在していません。  
ラボでは試作機でテストしていたので、本当にうまく動くのか不安が残った状態でした。

不安な製品を利用者に使ってもらうわけにはいきませんよね。  
私は製品版Vision Proを買いに行くことにしました。  

![IMG_9389.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839672/4747c158-7339-e2ec-7be7-810e93f10ecb.jpeg)

iPhoneの時のようなお祭り騒ぎも無い中、すんなりと製品版を手に入れた私は、そのままアパートに帰ってデバッグを始め、動きのおかしい所を修正してアップデート申請。  
現在までに6度の修正版をアップデートし、ようやく落ち着いてきました。

アプリはそこそこ売れていて、夏の終わりまでにはVision Proのモトが取れそうな感じです（[WWDC2024までに日本発売されるというウワサ](https://iphone-mania.jp/news-577251/)が出てきたので、もっと早く回収できるかもw）

## 仲間を求めてオープンソースへ
Singularity SocietyのBootCampでの私達の目標は次の３つでした。  

　１．空間ジェスチャーを使ったvisionOSアプリをDay1から販売すること  
　２．アプリ制作で使ったテクニックをオープンソースにすること  
　３．参加エンジニアを募って空間ジェスチャーライブラリを作ること  

アプリの販売に漕ぎ着けた後は、空間ジェスチャーで遊べるシンプルなアプリを作り、そこに独自のジェスチャーを追加できるテンプレートを添付してオープンソース化しました。技術的に詳しい内容はQiitaの記事を読んでみてください。

[Qiita記事：Vision Pro 空間ジェスチャーを作る](https://qiita.com/AlohaYos/items/aa7a6b0190d35a275e63)

公開したオープンソースに含まれるプレイグラウンドは、こんな感じです。
<iframe width="560" height="315" src="https://www.youtube.com/embed/-j5wBexSdOw?si=Iklc9KfoEPQtr6v2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

これからは仲間を集める３番めのフェーズに入ります。  
まだ海のものとも山のものとも分からない空間コンピューティングですが、だからこそ試行錯誤して楽しめる時期でもあります。興味のある方はオープンソース[VisionGesture](https://github.com/AlohaYos/VisionGesture/tree/main)をforkして、ぜひ自分の空間ジェスチャーを作ってみてください。みんなで空間ジェスチャーライブラリを作っていきましょう。プルリクエスト待ってます！  

私自身の次の目標は、空間ジェスチャーと自然言語UIをミックスして、手話のように人間の表現力を育てるようなアプリやシステムを手掛けてみたいです。  

## できる道を作るのがエンジニア
テック業界にそれなりに長くいて[会社も経営](https://newtonjapan.com)しているので、新技術を使ったビジネスも考えてはいますが、やはり自分の手を動かしてモノを作り出し、それが人の役に立って評価された時には喜びを感じます。  

半年近く、ガムシャラにvisionOSアプリを作り続けてきましたが、「できない理由を探すぐらいなら、できる道を探すほうが楽しい」という基本に戻る旅でした。  

今回、アップルWWDRスタッフとBootCamp関係者のみなさんには、本当にたくさんの刺激をもらいました。  締切り設定してもらったからこそDay1からvisionOSアプリが販売できたと痛感しています。長期間にわたるサポートをありがとうございました！

## 空間ジェスチャーの技術的な話はこちらの記事をどうぞ

[Vision Pro 空間ジェスチャーを作る](https://qiita.com/AlohaYos/items/aa7a6b0190d35a275e63)

## BootCampに参加しませんか

[Singularity Societyブログ](https://singularitysociety.org/articles/blog/2024-03-15-jarvis-airpoolbar/)にも、この記事が掲載されています。
みなさんも次の[BootCamp](https://singularitysociety.org/activities/bootcamp/)に参加してみませんか！

https://singularitysociety.org/articles/blog/2024-03-15-jarvis-airpoolbar/


---