こんにちは、エンジニア見習いの巽(大学生)です。
HLCとは、学校でのイベントを通じて接点を持った会社で、ウェアラブルデバイスのアプリ開発を得意としていることに魅力を感じ、私はアルバイトをすることにしました。
このブログではウェアラブルデバイスを使ったアプリを開発したので紹介します。
メガネに取り付け可能なウェアラブルデバイスMonocleとは
Monocleの紹介イメージ
「Monocle」とは、2022年9月に発表された拡張現実(AR)デバイスです。このデバイスは手のひらサイズのレンズで、メガネにクリップで取り付けて使用します。特徴的な点は、オープンソースのソフトウェアを使って独自のファームウェアを作成できることです。この柔軟性の高さから、「ハッカーによるハッカーのためのARデバイス」として注目を集めています。
上部には2つの静電容量式タッチボタンがあり、他にもマイクとカメラが内蔵されています。充電に関しては、AirPodsのような専用の充電ケースを使用する方式で、Monocle本体は約1時間のバッテリー寿命を持ち、専用の充電ケースを使用することで最大6回まで再充電が可能です。充電速度は非常に早く、そこまでストレスを感じません。また、USB-Cで充電できる便利な機能も備えています。
大きさについては一般的なメガネのレンズと同じか少し小さいくらいで、重さも約14gとそこまで気にならない程度です。
のぞいてみるとこんな感じ
2023年12月13日時点では日本語表示、文字の大きさの変更はできませんが実装予定だそうです。
実際にアプリを作ってみた
Monocleの開発プロセスについて
- どのようにMonocleを調べたか
公式ドキュメントのMonocle specificのAPIを見ながらwebで開発できるツールなどを使い、APIが使えるか使えない、どのようなことができるのかを一つ一つ試して行った。
- 実際手を動かしてみた
今回私が作ったのは、Monocle用の「フラッシュ暗算アプリ」です。このアプリは、ユーザーが短時間で手軽にフラッシュ暗算を解く能力を鍛えることを目的としています。Monocleの小さな画面に一瞬数字が表示され、その後、ユーザーはその数字の合計を計算して答えるというシンプルなアプリです。
pythonのコードを配布しても仕方がないため、誰でも簡単に利用できるようにウェブアプリに公開しました。
その後、同じような機能を持つiOSアプリを開発しようと考えました。
ウェブアプリをiOSアプリにするために、2つの選択肢がありました。一つはウェブアプリをスマートフォンアプリに変換するツールを使う方法で、もう一つはSwiftを使ってアプリを開発する方法です。個人的に、将来的にApple Vision Proを触ってみたいという気持ちがあったので、Swiftを使用することを選びました。
- テンプレートの活用と初期の挑戦
Monocleのためのiosテンプレートが提供されていたので、それを利用して開発を進めました。
最初、私は「テンプレートがあるなら簡単じゃーん」と考えていましたが、実際にコードを見てみると、初めてのプログラミング言語で6000行ものコードに直面し、経験不足の私は少し絶望的な気持ちになりました。しかし、絶望していても仕方がないので、とりあえずコードに触れることにしました。Swift(UI)のチュートリアルを参考にして、アプリの About ページを作成し、コーディングに挑戦しました。少しずつ Swiftを理解し、開発環境を整え、テンプレートに触れてみましたが、それでもテンプレートを理解することは難しいと感じました。
開発期間は約2.5か月、計21日で短い間にとてもいい経験ができました
- こだわりポイント
このアプリではシンプルさを最優先にしています。なぜなら、「少ないほど豊か」、すなわち「シンプルの方が良い」という「less is more」という言葉の意味に基づいています。そのため、デザインや機能を最小限に抑え、使いやすさと直感性を追求しました。
- 苦労したポイント
- 現在のピッカーでは有限の数しか入力できないのでStepper、キーパッドを使って任意の数を入力出来るようにしたらもっと幅が広がる遊びが出来るなと思いました。
- Swift(UI)のエラーでThe compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressionsというエラーがある。エラーが出るのは良いとしてエラーの場所を詳しく教えてくれません。これじゃあどこがエラーかわかりません。しかも、このエラーメッセージが出る原因も複数あり、場所がわからない上に原因も詳しくわからないので、とっても苦しめられました。
- キーボードに関することで数字のみのキーパッドを表示すると閉じるボタンが用意されていないことです。一度キーパッドを表示させるとこちら側が閉じる処理を用意しない限り永遠とキーパッドが表示されたままです。なぜ初めからついていないのかは謎です。 ネットにあった閉じるボタンを実装してみると、閉じることは出来たのですが、処理が重たくなる、一度アプリから離れると動作が不安定になるなどのさまざまの問題によってキーパッドの採用は見送りとなりました。代わりにピッカーというツールを使いました。
-
- [キーパッドの例]
- [ピッカーの例]
- [キーパッドの例]
他にも多くの課題があり、モノづくりの大変さに気が付いた。今回、身をもって実感した柔軟な思考力を次に活用したいと思います。
-
感想
この開発で培った経験と作品を部活動の発表会で発表したところ、ハードウェア部門で1位をいただきました。40名程が在籍しており、20名程が発表するなか、過半数の票を取り、賞をいただき、とてもモチベーションが上がりました。
小さい規模のapiを触ったのが初めてだったので、完成されたapiのありがたみや、開発途中のapiのワクワク感を感じれて楽しかったです。
注力具合の内訳は、APIを触ってみたりPythonアプリを作ることに1割の努力を注ぎました。また、Webアプリの開発には0.5割、そして最も時間と労力を費やしたのはiOSアプリの開発で、全体の8.5割を占めました。
iOSアプリの開発は特に大変でしたが、その分学びも多く楽しい経験でした。Swiftでの挑戦は良い選択だったと思います。
一連の開発を通じて、技術的スキルだけでなく、柔軟な思考と持続的な努力の重要性を学びました。これは将来のキャリア形成にとっても非常に価値のあることです。このような挑戦を続け、さらなる成長を目指していきたいと感じています。
以上、ウェアラブルデバイスmonocleを使ったiosアプリの紹介でした。
良いお年を!