☕️

コーヒードリップのためのアプリを作った

2023/05/27に公開

はじめに

コーヒーはコーヒー粉にお湯を注ぐなどして得られる抽出液である。抽出の方法の1つに粕谷 哲さんが発明した“4 : 6メソッド”という手法があり、これは要約すると下記のようになる。

  • コーヒー抽出の工程を注ぐお湯の量で前半4割と後半6割に分割する
  • 前半4割の抽出においては、2回または1回お湯を注ぐがこのときの割合をコントロールする
  • 後半6割はお湯を分割する回数をコントロールする

このような調整を行うことによって、コーヒーの甘さ・酸味、濃さをある程度の再現性をもって調整できるという方法である。この手法は大変よいものであると思いつつも、次のような問題があると感じていた。

  • コーヒー豆の質量比でお湯の量を決定するが、豆 : 水 = 1 : 15以外の比率を用いると計算が複雑になる
  • 前半4割の抽出では、1 : 1以外の比率を用いると計算が複雑になる
  • 後半6割の抽出では抽出回数によっては1回あたりのお湯の量の計算が複雑になる

このように4 : 6メソッドは極めて決定的に色々な設定ができる反面、それを人間による暗算のみで行うにはやや複雑すぎると考えていた。
そのため筆者は4 : 6メソッドのパラメーターを与えるとお湯の量と抽出のタイミングを指示してくれるiOSアプリを開発した。

CoffeeBrew46

今回開発したアプリはiOS・macOS向けに下記のURLからApp Store経由で入手できる。(無料)

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

特徴

  • 1投目を100%にして最初の4割を1回で抽出したり、後半6割を1回で抽出するなど4 : 6メソッドのコンストレイントの中で許可されている操作をなるべく実行可能にした
  • 蒸らし時間(= 1投目から2投目までの時間)を設定できるなど、筆者の調べた限りにおいて多くの設定項目に対応した
  • 設定をJSONでインポートしたりエクスポートする機能を搭載した

ソースコード

またこのソフトウェアはオープンソースとなっており、下記のGitHubリポジトリーでソースコードを公開している。

アプリに関する質問があれば気軽にどうぞ!

はじめてiOSアプリを作った感想

  • ライブラリーなどを入れなくても、SwiftUIでガリガリGUIアプリが作れるのはよかった
    • CoffeeBrew46はサードパーティーのライブラリーは未使用このあとUIをリッチにした関係でライブラリーを利用した
    • CodableなどSwiftの言語コアライブラリーは割といろいろできる
  • 普段はScalaを使ってサーバーサイドアプリを書くことが多いが、GUIアプリはドメインモデルとプレゼンテーション(ViewModel)が完全に分離されきっていなかったり、GUIから直接ViewModelが編集されたりするのでなかなか違ったプログラミングの仕方を求められおもしろかった
    • サーバーサイドアプリはクライアントアプリに比べて業務ロジックは複雑なのかもしれないが、その代わりに入出力がJSONやprotobufなど形式化された状態であり、かつレスポンスも同様に形式化されている。一方でGUIでは入出力をそのようにできるかどうかまだ分からない
  • 途中まではxcodeprojファイルをXcodeからいじっていたが、XcodeGenに乗り換えたがこれは最終的に成功だったと思う
    • 1人開発であってもGUIでMakefileのようなビルド設定を編集するというのは個人的にかなりの抵抗があったので、XcodeGenを導入してproject.yml管理になってストレスが緩和された
    • ブランチを切り替えるなどしてSwiftのソースファイルが消えるとXcodeの調子が悪くなる(?)ことがある気がするが、そういう場合でもxcodegen generateしなおせば大丈夫なのは精神的に楽だった👍
  • 無料のアプリ配布であってもApple Developer Programに加入(年間$99)しないといけないのがツラい💸
    • せめて学生は無料とか低価格などが提供されていてもいいのでは?🤔
    • そもそも開発環境としてMacBookなどのある程度専用のパソコンに課金が必要
  • TestFlightによる内々のテストのための仕組みは簡単でよくできていると思った👍
    • ただTestFlightによる配信くらいは無料でやれてもいいのでは?🤔
  • Appleの審査まわりはiOS開発者など詳しい人の支援がないと難しい気がする
    • Support URLに何を登録しておくといいか?といったところはやったことがないと分からないような……🤔
    • 審査後になってiPhone版のApp Store ConnectアプリからリリースしたらDeveloper Removed from Saleになるといった挙動不信なところがあった

おわりに

アプリの感想など待ってます!🙏

参考文献

Discussion