HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: Kadō – iOS向けオープンソース習慣トラッカー、非二値の習慣スコア搭載

Show HN: Kadō – open-source habit tracker, with non-binary habit score, for iOS (github.com)

32 pointsby scastiel12 コメント

要約

Kadōは、プライバシーを最優先するiOS(iPhone/iPad)向け習慣トラッカーです。習慣の達成度を二値ではなく指数移動平均でスコアリングする「スコア」システムを採用し、一度の失敗で進捗がリセットされることを防ぎます。データはローカルに保存され、iCloud同期はオプション、アカウントやサブスクリプション、テレメトリは一切ありません。MITライセンスのオープンソースです。

全文翻訳

iPhoneとiPad向けのプライバシー重視の習慣トラッカー。非二値の習慣スコア・オフラインファースト・オープンソース(MIT)・アカウントなし・サブスクリプションなし・テレメトリなし。 getkado.app Kadōとは? Kadōは、3つのコミットメントを持つiOS習慣トラッカーです。 スコア、ストリークではない。 習慣スコアは、AndroidのLoop Habit Trackerに触発された、完了の非二値指数移動平均です。1日欠かしても進捗がリセットされることはありません。壊れやすい連鎖ではなく、トレンドが見えます。 あなたのデータはあなたのものです。 アカウントなし、分析なし、サードパーティSDKなし。ストレージはローカル(SwiftData)、同期はオプションで、あなた自身のiCloud(CloudKitプライベートデータベース)を介して行われます。エクスポートはJSONまたはCSVで、いつでもロスレスで行えます。PRIVACY.mdを参照してください。 Appleネイティブ。 SwiftUI、@Observable、SwiftData、CloudKit、WidgetKit、App Intents — クロスプラットフォームレイヤーなし、サードパーティ依存なし。 なぜ別の習慣トラッカーなのか? 市場のギャップはdocs/PRODUCT.mdに記載されています。リファレンスのオープンソーストラッカー(Loop)はAndroid専用です。リファレンスのiOSトラッカー(Streaks)はクローズドソースで二値ストリークを使用しています。最も注目されているモダンなiOSオープンソースの試み(Teymia)はフリーミアムです。KadōはLoopのアルゴリズムをネイティブiOSに持ち込みました — MIT、無料、アカウントなし、サブスクリプションなし。 スクリーンショット 機能 今日のビュー — 今日やるべき習慣、タップで完了、長押しで部分完了/メモ/タイマー、ドラッグで並べ替え(順序はiCloudで同期されます)。 習慣詳細 — 月ごとのカレンダー、現在のストリーク、ベストストリーク、習慣スコア(計算方法を説明する情報ポップオーバー付き)。習慣が存在する前の日も含め、カレンダーから任意の日を編集できます。 日ごとのメモ — 完了した日の短いメモ。エクスポートとインポートに引き継がれます。 概要 — スコアで色分けされたセルを持つ習慣×日のマトリックス。KadōのスコアDNAによるLoop/Way of Lifeパターン。スケジュール外の完了も、休息日として隠されるのではなく表示されます。 柔軟なスケジュール — 毎日、週N日、特定の曜日、N日ごと(サイクルは各完了時に再設定されるため、早く完了しても日数を失うことはありません)。二値、カウンター、またはタイマーの習慣タイプ。 日の開始時刻 — 日の切り替わりを午前6時まで遅らせることができるため、深夜の記録も意図した日に記録されます。これを変更しても、履歴が再バケットされることはありません。 ウィジェット — ホーム画面(小/中/大)とロック画面(長方形/円形/インライン)。AppIntentを介したクイック完了。 Siriとショートカット — ハンズフリーで習慣を完了したり、値を記録したり、スコアやストリークを尋ねたりできます。ホーム画面アクションやショートカットの自動化としても利用できます。 リマインダー — 習慣ごとのローカル通知。繰り返しスケジュールとチェック/スキップのクイックアクション付き。 iCloud同期 — オプション、オプトイン、ユーザーのプライベートCloudKitデータベースのみを介して行われます。設定画面にはライブ同期状態が表示され、同期が機能していない場合も示されます。 JSONおよびCSVエクスポート/インポート — データのロスレスバックアップ。両方の形式で、ラウンドトリップテスト済み。CSVバックアップをNumbersやExcelで開き、編集して、元に戻すことができます。 チップジャー — 完全にオプションで、何もアンロックしません。アプリ全体は無料のまま、広告、サブスクリプション、トラッキングはありません。 アクセシビリティ — Dynamic Type(XXXLまで)、すべての画面にVoiceOverラベル、フルダークモード。 ローカライゼーション — 英語とネイティブフランス語(機械翻訳ではありません)。 ステータス App Storeでリリース中 — 現在のバージョン1.7。 バージョンハイライト 1.0 初回リリース — スコア、今日/概要/詳細ビュー、ウィジェット、iCloud同期、リマインダー、JSONエクスポート、EN+FR 1.1 Siriとショートカット、カレンダーから過去の日付を編集 1.2 日ごとのメモ、過去の日付の完了記録、月ナビゲーション 1.3 習慣のドラッグ並べ替え、穏やかな1回限りのレビュープロンプト 1.4 iCloud同期の信頼性向上 — iPadクラッシュ修正、正直な同期ステータス 1.5 チップジャー(StoreKit 2)、オプションで何もアンロックしない 1.6 「日の開始時刻」設定、週N日スコアリング修正、概要でのスケジュール外完了表示 1.7 CSVエクスポート/インポートのラウンドトリップ、N日ごとのサイクル再設定 予定なし。 ネイティブApple WatchアプリとHealthKitの自動完了はv0.3でスコープされていましたが、その後スコープ外となりました — リリース以来、どちらもユーザーから要求されていません。どちらも「Descoped」の下のdocs/ROADMAP.mdにリストされたままですが、実際の需要があれば再検討されます。 次 — タイマー習慣のためのLive ActivitiesとDynamic Island、その後、残りのv1.xのポリッシュ(テーマ、生体認証、カテゴリ、バックアップファイル)。完全なロードマップはdocs/ROADMAP.mdにあります。 技術スタック SwiftUIと@Observable(iOS 17+)をステート管理に使用 — Combineなし。ローカル永続化にはSwiftDataを使用し、VersionedSchema + SchemaMigrationPlanを最初から組み込んでいます。マルチデバイス同期にはSwiftData(cloudKitDatabase: .private(...))を介したCloudKitを使用します。WidgetKit + App Group JSONスナップショットを拡張機能サーフェスに使用します(ウィジェットプロセスはSwiftDataを開きません — 理由についてはCLAUDE.mdを参照)。ウィジェットのクイック完了、Siri、ショートカットにはApp Intentsを使用します。チップジャーにはStoreKit 2を使用します。単体テストにはSwift Testing、UIテストとApp Storeスクリーンショット実行にはXCTestを使用します。サードパーティ依存ゼロ。 ターゲット:iOS 18.0+、Xcode 16.0+、Swift 5.10+。 アーキテクチャノート、規約、ツールチェーンの癖(SwiftDataのエッジケース、CloudKitの形状ルール、Swift 6下の並行処理など)はCLAUDE.mdに文書化されています。 リポジトリレイアウト Kado/ # メインiOSアプリターゲット Packages/KadoCore/ # 共有Swiftパッケージ — @Modelタイプ、# ドメインタイプ、計算機、インテント、# ウィジェットスナップショットタイプ KadoWidgets/ # ウィジェット拡張ターゲット(App Group JSONスナップショットを読み取る) KadoTests/ # 単体テスト(Swift Testing) KadoUITests/ # UIテスト(XCUITest) + App Store # スクリーンショット実行 Scripts/ # スクリーンショットキャプチャ、フレーミング、# 依存関係のないApp Store Connectクライアント site/ # getkado.app — 静的マーケティングサイト branding/ # SVGマークとワードマーク docs/ ├── PRODUCT.md # 製品ビジョン、競合分析 ├── ROADMAP.md # バージョン管理された機能ロードマップ ├── habit-score.md # スコアアルゴリズム仕様 ├── streak.md # ストリークアルゴリズム仕様 ├── app-store/ │ # リスティングコピー、キャプチャ、フレーム付き画像、│ # およびそれらがプッシュされる方法 ├── app-store-connect.md # ストアメタデータ、コピー、チェックリスト ├── plans/ │ # 機能ごとのリサーチ/計画/複合│ # アーティファクト(Conductorワークフローより) └── screenshots/ # iPhone 6.7インチセット(EN+FR)、# マーケティングサイトのソースでもある PRIVACY.md # プライバシーポリシー(リポジトリホスト) 開発要件 macOS 14.5+ Xcode 16.x+ Apple Developerアカウントは、物理デバイスまたはTestFlightへのビルドにのみ必要です。シミュレータでは不要です。 ビルドと実行 git clone https://github.com/scastiel/kado.git cd kado open Kado.xcodeproj KadoスキーマとiOS 18シミュレータ(Xcode 26ツールチェーンではiPhone 17 Proが実質的なデフォルト)を選択します。 テスト XCodeから: Kadoスキーマに対して⌘U。 コマンドラインから、Makefileが一般的なループをラップしています: make test # 単体テストスイート(Swift Testing) — 数秒 make e2e # UIスイート(XCUITest)、スクリーンショット実行を除く make build # シミュレータ用にアプリをコンパイル make help は残りのコマンドを表示します。App Storeターゲット(make screenshots, make frames, make listing)も含まれます。これらはdocs/app-store/README.mdに文書化されています。Claude CodeとXcodeBuildMCPサーバーを使用している場合は、シェルxcodebuildよりもtest_sim / build_simを優先してください — CLAUDE.mdの「Tooling」セクションを参照してください。 開発モード 設定画面に隠し開発モードトグルがあり、SwiftDataコンテナをシードされたローカルサンドボックスに切り替えます。実際のデータに影響を与えることなく、履歴スコア/ストリークの動作を試すのに役立ちます。設計ノートについては、docs/plans/2026-04/dev-mode/を参照してください。 貢献 Issueとプルリクエストを歓迎します。いくつか注意点があります。 最初にCLAUDE.mdをお読みください — これはプロジェクトの作業協定(アーキテクチャ、規約、テストの期待値、ツールチェーンの癖)です。Claude Code向けに書かれていますが、人間の貢献者にも同様に適用されます。 ビジネスロジック(スコア、ストリーク、頻度、インポート/エクスポート)はテストファーストです。新しい動作にはテストが必要であり、回帰にはそれを検出できたはずのテストが必要です。 1つのPRにつき1つの機能または論理的な修正。 コミットメッセージ形式は、軽量なConventional Commits規約に従います — feat(scope): description, fix(scope): …, など。 サードパーティ依存なし。チップジャーはStoreKit 2に直接構築されています。