手がかゆくなるアプリ作りました
クソアプリアドベントカレンダー2023の14にちめの記事です。
手がかゆい
手がかゆくなるアプリ作りました。
AppStoreに出してみようとおもったんですが、間に合いませんでした🫠そのうちサイレントリリースしているかもしれないですし、リジェクトされて諦めてるかもしれないです。
TestFlightで試すことができます。
発端
ゲームのコントローラーが震えて手がかゆくなったことはありませんか?
私は特にプレステのコントローラーでよくかゆくなります。
iOSDCでCoreHapticsのセッションをみて、このことを思い出したので、「せや、手がかゆくなるアプリ作ったろ!」と思い立ちました。
なんで手がかゆくなるのか?
振動で手がかゆくなるのは一般的な事象なのかを求めてインターネッツで調べてみましたが、正直原理はよくわかりませんでした。
一応、ありえそうな説としては2つありました。
- 血行が良くなってかゆいらしい
- ストレス反応でかゆいらしい
かゆいと感じる原理は、研究センターがあるくらい難しいようです。
ただ、Xで探してみると、ゲームのコントローラーの振動で手が痒くなる人は他にもいるようだったので、自分だけの現象ではないようです。手ではないですが、ブルブルマシンでかゆくなる人がいるということも確認できました。
自分で色々試してみた結果、
- ずっと同じペースで震えること
- それなりの強さで震えること
この2点がかゆくなるポイントだと考えました。
つくった
コードは以下で見ることができます。
バイブレーションはCoreHapticsとAudioToolboxの2種を使用しています。
意外と、バイブレーションを専門に扱うようなAPIってないんですね!
元々CoreHapticsを使いたかったのでCoreHapticsで実装しましたが、最大値にしても振動が弱く、かゆくなるまでの強度が足りなかったため、AudioToolboxも使ってみました。
CoreHapticsは、Apple Payなどで決済した時にピコーンと震えるような、触覚フィードバックのためのものなので、振動の強度をあまり強くしていないのだと思います。
AudioToolboxは、着メロなどの用途のもので、用意されているサウンドの一種としてバイブレーションがあるというものです。
比べるとCoreHapticsより振動が大きいのですが、長く再生するためのものではないため、無理矢理ループ再生しています。そのため、振動がリズミカルになってしまいました。リズミカルだとかゆさが軽減してしまうのですが、目を閉じて振動に集中するとわずかにかゆさを感じることができます。
このアプリで「よわめ」と表現されているものはCoreHaptics、「つよめ」と表現されているものはAudioToolboxを使用しています。
微妙な振動の大きさの違いを感じてみてください。
こだわり
クソアプリを作るにあたって、ゲーム性や意味を作らないように細心の注意を払いました。
ただただ手がかゆい(かもしれない)クソアプリをお楽しみください。
地味にダークモード対応しています。白と黒のかわいいねこちゃんも愛でてあげてください。
うまくいかなかったこと
本当はViewModelをObservableObjectにして、それぞれのバイブレーションの状態をViewModel側に持たせたかったんですが、アプリ全体を破壊してしまったところで残り2時間しかなかったので断念しました。
CoreHapticsとAudioToolboxが完全に独立しているので、モジュール化したらきれいになりそうな気がしたのですが、それも時間なかったです。
コントリビューションお待ちしております。私にきれいなコードを教えてください。
あとがき
クソアプリアドベントカレンダーは今回初参加でした。
クソアプリハッカソンがあって本当に良かったです。なかったら多分書けていなかった。。
ネタとハッカソンとアドカレが揃っている奇跡的な状況だったのでなんとかできました。
また奇跡的な状況が揃っていたら来年も参加しようかな♪
Discussion