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、iPhone Duo、iPad向けのプライバシーファーストな習慣トラッカー。
非二値の習慣スコア · オフラインファースト · オープンソース (MIT) · アカウント不要、サブスクリプション不要、テレメトリ(遠隔測定)なし。
[画像: MITライセンス] [画像: App Store 1.14] [画像: Swift 5.10] [画像: 対応プラットフォーム]
Kadōとは?
Kadōは、3つのコミットメントを持つiOS習慣トラッカーです。
- ストリークではなくスコア。 習慣スコアは、AndroidのLoop Habit Trackerに触発された、完了率の非二値(ノンバイナリー)指数移動平均です。一度達成できなかった日があっても、あなたの進捗がすべて消えることはありません。壊れやすい連鎖ではなく、トレンドを見ることができます。
- あなたのデータはあなたのもの。 アカウント、分析、サードパーティ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、無料、アカウント不要、サブスクリプション不要です。
スクリーンショット
iPhoneおよびiPhone Duo
[画像: iPhoneの今日のビュー] [画像: iPhone Duoでのスコアとカレンダー付き習慣詳細] [画像: iPhoneでの複数習慣の概要] [画像: iPhone Duoでの新規習慣フォーム] [画像: iPhoneでの習慣カラーパレットとアプリアイコン付きの外観設定] [画像: iPhone Duoのダークモードでの今日のビュー]
iPad — 習慣リストと選択した習慣が並べて表示されます
[画像: iPadでの今日のビュー:習慣リストの横に「Morning meditation」のスコア、ストリーク、カレンダー、履歴を表示]
機能
- 今日のビュー — 今日行うべき習慣が表示され、タップで完了、長押しで部分完了/メモ/タイマー、ドラッグで並べ替え(順序はiCloud経由で同期されます)。カウンターとタイマーの行は、その日の合計を−と+の間で表示し、タップごとに触覚フィードバックがあります。「特定の値で記録…」を開くと、今日の値が選択された数値入力パッドが表示されます。その日のタスクを完了すると、Kadōは紙吹雪を表示します(Reduce Motion設定が有効な場合はキャプションのみ)。
- 習慣詳細 — 月ごとのカレンダーで月を移動でき、現在のストリーク、最長ストリーク、習慣スコアが表示され、ポップオーバーで計算方法の説明があります。カレンダーから過去の任意の日付を直接編集できます。習慣が存在する前の日付も編集可能で、その場合カレンダーはその日付を新しい開始日として表示します。履歴のエントリを長押しすると削除できます。
- iPadとiPhone Duoでのサイドバイサイド表示 — 通常の幅では、「今日のビュー」に習慣リストと選択した習慣が並んで表示されます。スコア、ストリーク、カレンダー、履歴がリストの横に表示され、記録を続行できます。iPhone Duoではこれが展開レイアウトになります。折りたたむとiPhoneアプリになります。
- 1日ごとのメモ — 習慣達成日の短いメモ。エクスポートとインポートで引き継がれます。
- 概要 — 習慣×日数のマトリックスで、スコアで色分けされたセルが表示されます。Loop/Way of LifeのパターンとKadōのスコアDNAが表示されます。日をタップすると、ポップオーバーから直接習慣を完了として記録できます。スケジュール外で記録された完了も表示され、休息日として隠されることはありません。
- 柔軟なスケジュール — 毎日、週N日、特定の曜日、N日ごと(サイクルは各完了時に再設定されるため、早く完了しても日数が無駄になることはありません)。二値、カウンター、タイマーの習慣タイプがあります。
- 一日の開始時刻 — 一日の切り替わり時刻を任意の時間に設定できるため、深夜の記録(または夜勤スケジュール)が意図した日に記録されます。変更しても履歴のバケットは再編成されません。
- 週の開始曜日 — カレンダーと週のグリッドは、地域の最初の曜日、または設定で選択した曜日に従います。
- アーカイブされた習慣 — 設定画面にリスト表示されます。履歴をそのままにアーカイブ解除したり、完全に削除したりできます。
- ウィジェット — ホーム画面(小/中/大)、各ウィジェットで選択した習慣を表示(最大5または8個、順序通り)、ロック画面(長方形/円形/インライン、およびデイリープログレスリング)。
AppIntent経由でのクイック完了。ウィジェットは自動的に新しい日にロールオーバーし、クリアおよびティントされたホーム画面の外観の下でも読みやすく保たれます。 - Siriとショートカット — ハンズフリーで習慣を完了したり、値を記録したり、スコアやストリークを問い合わせたりできます。ホーム画面のアクションやショートカットの自動化としても利用可能です。
- リマインダー — 習慣ごとのローカル通知。繰り返しスケジュールとチェック/スキップのクイックアクションを備えています。
- iCloud同期 — オプション、オプトイン、ユーザー自身のプライベートCloudKitデータベースのみを経由します。設定画面にはライブ同期状態が表示され、同期が機能していない場合も示されます。
- JSONおよびCSVエクスポート/インポート — データのロスレスバックアップ。両方の形式で、ラウンドトリップテスト済み。CSVバックアップをNumbersやExcelで開き、編集して、再度インポートできます。
- 外観 — 習慣の色を選択できます。KadōまたはClassicは無料で利用でき、さらに4つのパレット(Muted、Vivid、Autumn、Monochrome sage)と7つの代替アプリアイコンがSupporterパックで利用可能です。ウィジェットもパレットに従います。
- Supporterパックとチップジャー — 追加パレットとアイコンをアンロックする買い切り型(ファミリー共有対応)の購入。チップジャーは何もアンロックしません。どちらもオプションです。習慣を追跡するすべての機能は、広告、サブスクリプション、トラッキングなしで無料のままです。
- アクセシビリティ — XXXLまでのDynamic Type、すべての画面にVoiceOverラベル、完全なダークモード対応。
- ローカライゼーション — 英語とネイティブフランス語(機械翻訳ではありません)。
ステータス
App Storeでリリース中 — 現在のバージョン 1.14。
| バージョン | ハイライト |
|---|---|
| 1.0 | 初回公開リリース — スコア、今日のビュー/概要/詳細、ウィジェット、iCloud同期、リマインダー、JSONエクスポート、EN + FR |
| 1.1 | Siriとショートカット;カレンダーから過去の日付を編集 |
| 1.2 | 1日ごとのメモ;過去の日付の記録;月移動 |
| 1.3 | 習慣のドラッグによる並べ替え;控えめな1回限りのレビュープロンプト |
| 1.4 | iCloud同期の信頼性向上 — iPadクラッシュ修正、正確な同期状態表示 |
| 1.5 | チップジャー(StoreKit 2)、オプションで何もアンロックしない |
| 1.6 | 「一日の開始時刻」設定;週N日スコアリング修正;概要でのスケジュール外完了表示 |
| 1.7 | CSVエクスポート/インポートのラウンドトリップ;「N日ごと」サイクルは完了時に再アンカー |
| 1.8 | 週の開始曜日設定;クリアおよびティント表示下でのウィジェットの可読性向上 |
| 1.9 | 完了時の紙吹雪表示;ロック画面デイリープログレスリング;習慣カラーの再描画;ウィジェットの自動ロールオーバー |
| 1.10 | 各ウィジェットの習慣選択;アーカイブされた習慣リスト;数値入力パッド;「一日の開始時刻」任意設定;概要からの完了操作 |
| 1.11 | 設定›外観に習慣カラーパレットを追加;Supporterパックで追加パレットと代替アプリアイコンを提供;Siriが「Kado」を認識 |
| 1.12 | iOS 27修正:習慣画面がタップに追従するように修正 |
| 1.13 | カレンダーの日付メモがポップオーバーの閉じ方に関わらず保存されるように修正 |
| 1.14 | サイドバイサイド表示:iPadと展開状態のiPhone Duoでリストと習慣詳細を同時に表示 |
予定なし。 ネイティブApple WatchアプリとHealthKit自動完了はv0.3で計画されていましたが、リリース以降、ユーザーからの要望がないため計画から外されました。これらはdocs/ROADMAP.mdの「Descoped」セクションにリストされたままですが、実際の需要があれば再検討されます。
次期予定 — タイマー習慣のためのLive ActivitiesとDynamic Island、その後v1.xの残りの磨き上げ(生体認証、カテゴリ、バックアップファイル)。完全なロードマップはdocs/ROADMAP.mdにあります。
テックスタック
- SwiftUIと
@Observable(iOS 17+)による状態管理 — Combineは不使用。 - ローカル永続化のためのSwiftData。初日から
VersionedSchema+SchemaMigrationPlanを組み込んでいます。 - マルチデバイス同期のためのCloudKit(SwiftData経由、
.private(...))。 - WidgetKit + 拡張サーフェス用のApp Group JSONスナップショット(ウィジェットプロセスはSwiftDataを開きません。理由については
CLAUDE.mdを参照)。 - ウィジェットのクイック完了、Siri、ショートカットのためのApp Intents。
- チップジャーとSupporterパックのための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/site/ # iPhone、iPhone Duo、iPadのショット(EN + FR)、
# App Storeからリサイズされたもの
# サイトおよびこのREADME用
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。コミットメッセージ形式は軽量なConventional Commits規約に従います —
feat(scope): description、fix(scope): …など。 - サードパーティの依存関係はありません。チップジャーとSupporterパックはStoreKit 2に直接構築されており、
Scripts/内のApp Store Connectクライアントはopensslで独自のJWTに署名します。これにより、その状態が維持されます。
Kadōは何も収集しません。分析、テレメトリ、クラッシュレポーターはありません。iCloud同期はオプションであり、ユーザー自身のプライベートCloudKitデータベースを経由します。
完全なポリシーはPRIVACY.mdにあります。
ライセンス
MIT © 2026 Sébastien Castiel。
謝辞
- Loop Habit Tracker (Álinson S. Xavier, GPLv3) — 非二値習慣スコアアルゴリズムのソース。KadōはアイデアをネイティブSwiftで再実装しています。Loopのコードはコピーされていません。
- Streaks (Crunchy Bagel) — この種のアプリがどのように感じるべきかについてのiOS UXリファレンス。
- Teymia Habit (MIT) — iOSにおけるモダンなSwiftUI + SwiftData + CloudKit + WidgetKitスタックのリファレンスポイント。
- XcodeBuildMCP (getsentry, MIT) — Claude Codeで自律的なビルド/テスト/スクリーンショットループを可能にするMCPサーバー。