プログラミング
Show HN: Kadō – iOS向けオープンソース習慣トラッカー、非二値の習慣スコア搭載
Show HN: Kadō – open-source habit tracker, with non-binary habit score, for iOS (github.com)
要約
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に直接構築されています。