☕️

4 : 6メソッド(コーヒードリップ)用のwatchOSアプリを作った

2024/09/06に公開

はじめに

コーヒー抽出の方法の1つに4 : 6メソッドという手法があり、この4 : 6メソッドを支援するiOSアプリBrewCoffee46を作成[1]し、この1年間で30回ほどの更新を行って少しずつ機能強化を行ってきた。
iOSDC Japan 2024 0日目のセッションwatchOS 最前線 〜現代のApple Watch向けアプリの作り方〜でBrewCoffee46のApple Watch対応を着想し、2024/9/3に配信開始したバージョン2.0.0にてwatchOSアプリをリリースした[2]
この記事では、まず作成したアプリについてデモ動画などで解説し、次にiOS・watchOS両方のアプリを作るうえで行ったパッケージ構成をまとめておく。なお、iOSアプリとwatchOSアプリの両方を含めたBrewCoffee46全体のソースコードは下記のGitHubリポジトリーから入手できる。

watchOSアプリ版のBrewCoffee46

作成したwatchOSアプリは上記リンクのiOS版アプリにバンドルされて配布されている。


watchOSアプリのトップ

全体的な動作

次の動画のように、iOSアプリのコントローラーというよりはこのwatchOSアプリがスタンドアローンで動作する。

https://www.youtube.com/watch?v=6pyIxLjKDn4

上記のデモ動画であるように、watchOSアプリにも4 : 6メソッドの計算ロジックが実装されている[6]ため、watchOSアプリでコーヒー豆の重さを変更してそれに基づく設定を計算できる。
また、動画では説明できないが注水タイミングでApple Watchが振動する(Haptic Feedback)ようにしてあり、画面を注視しなくても注水タイミングを把握できるようになっている。これは作ったあとになって気づいたことだが、筆者はApple Watchを利き手である右手に付けており、ドリップ中は右手でお湯を注いだりする必要があるため画面を注視できない。よってHaptic Feedbackで画面を細かく見ることなく注水タイミングが把握できるようにした。

iOSアプリとの設定共有

現状はwatchOSアプリで変更できるのはコーヒー豆の重量のみとしてあり、他の設定は下記の動画にあるようにiOSアプリから送信することにした。

https://www.youtube.com/watch?v=iKs7kAaP9f0

モジュール構成の変化

これまではwatchOSアプリが存在しなかったっため、iOSアプリとそのテストという下記のような2ターゲットの構成であった。

一方でwatchOSアプリが加わったため、下記のようなやや複雑な構成となった。

この図に登場するモジュールを表で整理すると次のようになる。

モジュール 管理 目的
BrewCoffee46 XcodeGen iOSアプリ
BrewCoffee46Tests XcodeGen iOSアプリ部分のテスト
BrewCoffee46WatchKitApp XcodeGen watchOSアプリ
BrewCoffee46Core SwiftPM iOS・watchOSの両方で共有するコアパッケージ
BrewCoffee46CoreTests SwiftPM コアパッケージのテスト
BrewCoffee46TestsShared SwiftPM コアパッケージのテストとiOSアプリのテストで共有するパッケージ

このようなiOS・watchOSアプリで共有するパッケージ管理のためにSwiftPMを新規に導入した。これまではXcodeGenを使っていたが、XcodeGenのみをつかってiOS・watchOSから参照されるフレームワークを作成することが最終的にできなかった[7]
共有パッケージであるBrewCoffee46Coreの設定をPackage.swiftで与えて、それをXcodeGenからローカルパッケージとして読み込むという方法であればiOS・watchOSアプリから依存できるフレームワークを簡単に作ることができた。

まとめ

SwiftPMを使えばXcodeGenでxcodeprojファイルを直接バージョン管理せずにiOS・watchOSの両方に対応したアプリを作成できる。実はこのwatchOSアプリの開発で一番苦労したのはiOSとの共有フレームワークをどうやって設定するかというコーディングとはまるで関係ないところであり、このようなXcodeのご機嫌をとる(?)作業の比重がプログラミングと比べて多めになってしまうのがApple系の開発で大変なところだと思う。
また、iOSDC 2024 Tokyoにはじめて参加したが、最終的にそれをきっかけにしてwatchOSアプリをリリースできたので、他にも懇親会でのディスカッションなども含めて行って本当によかったと感じている。

謝辞

SwiftPMを使うといったパッケージ構成などの様々な相談に乗ってくれた@kouki_danさんと@nanashikiさんに感謝する。

脚注
  1. このiOSアプリを作ったときの話を前回の記事で書いた。 ↩︎

  2. そういうわけで(?)この記事をiOSDC Japan 2024ということにする! ↩︎

  3. このあたりの詳細はコーヒーの科学(Amazon)という本が詳しい。 ↩︎

  4. https://philocoffea.com/?mode=f1 ↩︎

  5. 誰でも簡単! 世界一の4:6メソッドでハマる 美味しいコーヒー(Amazon) ↩︎

  6. 後述するがiOSアプリとwatchOSアプリとで主要なロジックを共有できるようにSwiftPMを利用してパッケージに切り出しているため、iOSアプリとwatchOSアプリでロジックに差が生じないようにした。 ↩︎

  7. 実はできるやり方があるのかもしれないが……😇 ↩︎

Discussion