何か生活習慣を変えたい時、とりあえずアプリを作りたくなりますよね。
僕はお金はあったらあるだけ使っているのですが、いつの間にか20代も終わり、若さを理由に投資と言い訳して無駄使いをするのはそろそろ抑えた方がいいんじゃないかなぁと思い至りました。ということで、試しに節約でもしてみようかと思いました。
それで今作っているのがZenBudgetという名前のアプリです。ZenBudgetはお金を使った時に自分で記録していく支出管理アプリです。本気で節約したいなら自分で記録していくのが良いかなと思ったので、自動化はやらないようにしようと決めています。レコーディングセーブマネーです。アプリ名にはゆるく・習慣的に予算を管理したいという気持ちを込めています。
少し前に作り始めたばかりなので、まだ何もできていません。とりあえず記録だけは始めようと思って、記録する部分を作りました。記録を始めて一週間くらいなんですが、記録するのがめんどくさいからお金を使うのをやめよう、って気持ちになれている気がします。


とりあえず記録だけできればいいやと思っていたので編集機能もありませんでした。ただ、流石に入力間違いのときに不便なのでそろそろ入力を変更したいと思い、先ほどすでに登録した支出の変更機能を作っていました。コードを書いて動かしてみるのですが、なぜか全然動かない。なぜかと思っていたら、DBに登録している部分を適当に実装していたせいで表示に使う部分しか登録していなかった。これまで一週間、律儀に入力し続けていたカテゴリが全て入力されていないことに気づいたショックでこのブログを書き始めました。ちゃんと動作確認はしなくちゃいけないですね・・・。
@Model final class Expense { // ...省略 init(price: Decimal, phase: ExpensePhase, expenseAt: Date, category: ExpenseCategory?, memo: String) { self.price = price self.memo = memo } }
こんな感じで、僕の欲しい機能をどんどん作りながら育てていく予定です。習慣を作るにはアプリ作りがいいですね。やっていきましょう。もし一緒に節約したいという人がいたらTestFlightを招待するので教えてください!
技術ブログなので、実装技術についても書いておきます。
SwiftUI/SwiftData/CloudKit
まず、UIはSwiftUI、データはSwiftDataです。SwiftDataはCloudKitに対応させていて、iCloudを使って複数デバイス間での同期ができます。Appleデバイスだけで動けばいいなら、これが一番簡単で王道ですね。ユーザーのデータはユーザーのiCloudの領域に保存されるので、開発者にも見ることはできません。ユーザーのiCloud領域を使うので、デベロッパ側には料金はかかりません。
SwiftDataをCloudKitに対応させるのは簡単で、プロジェクトを作るときに Host in CloudKit にチェックを入れるだけ。後はiCloudのコンテナを設定して終わりです。SwiftDataでCloudKitを使う場合は全てのプロパティに初期値が必要だったり、ユニーク制約が使えないなどの制約があるのですが、それ以上にデバイス間でのデータの同期が便利です。
watchOSアプリも作る
CloudKitでデバイス間でデータが同期されるので、Apple WatchでもiPhoneやiPadと同じデータを扱えます。なので、watchOSアプリも作っておきました。自分の好きなものを作れるのは個人開発の醍醐味ですね。



App Intentsも作る
とりあえず、記録だけできればいいと思って集計機能は作っていませんでした。でも流石に寂しいかなぁと思って、App Intentsを作りました。SiriやSpotlightに聞くと集計結果を教えてくれます。App Intentsにしたのは最低限のことがわかればいいやと思ったのと、どのように表示するかを考えるのをサボりたかったからです。もうちょっとデータが溜まってきたら、どういう見た目にするのがいいかを考えてちゃんと実装する気持ちもあります。



まとめ
こんな感じで、自分の生活習慣を変えるために、自分の好きなアプリを自由気ままに作っています。名前はZenBudget。Budgetと名前をつけたので、最終的には予算をもとにどれくらいお金を使えるかを確認できるようにする気持ちもありますが、今はただの支出管理アプリ。自分が欲しい機能をどんどん作っていくのでそのうち進化していくでしょう!