【開発日記】渓流釣り向けアプリ #8 メッセージ機能とダークモード

アプリ開発

渓流釣りアプリの開発、今回はメッセージ機能とダークモード対応を中心に進めました。

ダークモードに対応した

これまで後回しにしていたダークモード対応を一気にやりました。

iOSアプリを作るときに意外とハマるのが色の管理。たとえば「グレー」とベタ書きしていると、ダークモードでは背景に溶けて見えなくなります。色を用途ごとに名前をつけて管理する(セマンティックカラー)方式に統一しました。

こうしておくと、新しい画面を作るときも自然とダークモードに対応できます。地味な作業ですが、後から全画面を修正するよりずっと楽です。

メッセージ機能をつくった

ユーザー同士がアプリ内でメッセージをやり取りできる機能を実装しました。

技術的にこだわったのはリアルタイム性。相手がメッセージを送った瞬間に画面に表示される仕組みにしています。また、メッセージの送信と関連データの更新を「まとめて一発」で処理しているので、途中で失敗してデータがおかしくなることがありません。

新着メッセージが届いたら自動でスクロールする、というのも当たり前のようで実装してみると一筋縄ではいきません。初期表示で一番下に移動するのと、新しいメッセージが来たときに追従するのは別の仕組みが必要でした。

「で、何を書けばいいの?」問題

メッセージ機能が動いて「やった!」と思ったのも束の間。実際にボタンを押してみると、真っ白なチャット画面に放り出されます。「えっと…何から書けばいいんだ?」となる。

これはUX的にまずいと思い、初回メッセージ専用の入力シートを追加しました。ボタンを押すとハーフモーダルが表示され、あらかじめサンプルメッセージが入った状態から始められます。「はじめまして、○○と申します」のような定型文をベースに、自分の言葉で書き換えてもらう想定です。

メッセージ画面

2回目以降は、すでにやり取りがあるので入力シートをスキップしてチャット画面に直行します。「既存のやり取りがあるか」を事前にチェックする処理を追加して対応しました。

ステータス表示の文言に悩んだ話

メッセージ機能に付随して、やり取りの状態を表示する部分の文言にかなり悩みました。

たとえば「キャンセル」という言葉。自分から取り下げた場合と、相手側の判断で終了した場合、どちらも「キャンセル」で表現してしまうと、ユーザーは「あれ、自分が何かしたっけ?」と混乱します。

結局、誰のアクションなのかが伝わる文言にすることで落ち着きました。状態の数だけ文言と色のバリエーションが増えるので、組み合わせを一覧にして何度も見直しました。

こういう細かい部分こそ、実際に画面を操作してみないと気づけないことが多いです。

ハプティックフィードバックを全体に追加

ボタンを押したときの振動フィードバックを、アプリ全体に入れました。

操作の重要度に応じて振動の強さを3段階で使い分けています。軽い操作は「コツ」、通常の操作は「トン」、重要な操作は「ドン」という感じ。地味ですが、タッチの手応えがあるだけで操作感が全然違います。

技術負債を一斉清掃

新機能の実装がひと段落したので、溜まっていた技術負債を一気に片付けました

一番大きかったのは、77箇所のAPI置換。iOSの新しいバージョンで非推奨になった書き方が77箇所も残っていたので、一括で新しい書き方に置き換えました。機械的な置換なので壊れにくいとはいえ、77箇所を変えた後にビルドが通るまでは緊張しました。

他にも、同じ役割のコードが3箇所にバラバラに存在していたのを1つにまとめたり、無駄なデータ取得を減らしたり。「あとでやろう」リストは放置するとどんどん膨らむので、今のうちに全部やっておくことにしました。

次のステップ

メッセージ機能が入ったことで、アプリの核となる「ユーザー同士のコミュニケーション」が形になってきました。次はこの仕組みをさらに磨いていきます。

コメント

タイトルとURLをコピーしました