RT

reitojike/think-canvas

Developer tools
1 stars Quality 42 Trend 13

An Android app for capturing and organizing thoughts on a spatial canvas, with local storage.

Overview

ThinkCanvas は Android 向けのローカルファーストな思考キャンバスです。テキストや手書き、 図形・囲み・矢印・写真を自由に置き、配置に込めた意味を保ちながら考えを組み替えられます。 複数のボードを管理し、検索で見返し、必要な範囲を画像として持ち出せます。 ボードと要素は Room 3 で端末内に保存し、記録・閲覧・編集・保存はアカウントや AI、通信なしで完結します。 初期構築 #1 と Spec 001〜005 の実装、 初期ロードマップ #7 は完了しています。 Roadmap v2 #81 の mobile-first usability / capture wave は完了しました。 日常利用での検証(dogfooding)は継続し、後続の改善は #108、#110、#111 などの独立した Issue で追跡しています。 - テキストの作成・編集、見出し/本文と墨色/朱色の切り替え。 - テキストの外側タップによる確定・終了。編集時のBackは未確定の変更がある場合だけ破棄を確認し、ツール・検索・選択のBackは通常キャンバスへ段階的に戻ります。 - パン・ピンチズーム、要素の選択・移動、Undo/Redo。表示の移動や倍率変更では保存された配置を変えません。 - 要素・複数選択を移動中に指を画面端で保持すると自動panし、指を離さず遠くへ運べます。中央へ戻ると停止し、一回の移動を一回の保存・Undoとして扱います。取消と検証範囲はSpec008と検証手順を参照してください。 - 四角・丸・名前付き囲みの作成・サイズ変更、囲みと中身の移動、矢印の接続・曲げ・反転、 複数選択とまとめて移動、空白の長押しドラッグによる余白挿入。 - Jetpack Ink によるペン/マーカーの手書きとスタイラス入力。手書きも選択・移動・削除・保存できます。 - Semantic Zoom による近・中・遠の表示、囲みへのフィット、ボード内のテキスト・囲み名の検索と結果の前後移動。 - 現在の検索結果または選択範囲が完全に画面外になると、画面端の方向表示から戻れます。複数選択は1まとまり、同じ単一対象は統合し、必要時だけ最大2個を表示します。対象と検証範囲はSpec009を参照してください。

README

ThinkCanvas

ThinkCanvas は Android 向けのローカルファーストな思考キャンバスです。テキストや手書き、 図形・囲み・矢印・写真を自由に置き、配置に込めた意味を保ちながら考えを組み替えられます。 複数のボードを管理し、検索で見返し、必要な範囲を画像として持ち出せます。 ボードと要素は Room 3 で端末内に保存し、記録・閲覧・編集・保存はアカウントや AI、通信なしで完結します。

現在の状態

初期構築 #1 と Spec 001〜005 の実装、 初期ロードマップ #7 は完了しています。 Roadmap v2 #81 の mobile-first usability / capture wave は完了しました。 日常利用での検証(dogfooding)は継続し、後続の改善は #108、#110、#111 などの独立した Issue で追跡しています。

実装済みの仕様 対象 Issue 公開仕様
Spec 001: Canvas Foundation #2 spec
Spec 002: Spatial Organization #3 spec
Spec 003: Ink & Stylus #4 spec
Spec 004: Semantic Navigation #5 spec
Spec 005: Board Lifecycle #6 spec
Spec 006: Text Editor Dismissal #71 spec
Spec 007: Neutral Canvas Interaction #73 spec
Spec 008: Drag Edge Auto-Pan #78 spec
Spec 009: Offscreen Direction Indicators #76 spec
Spec 010: Viewport History #77 spec
Spec 011: Android Share Target #79 spec
Spec 012: Blank Tap Arbitration #67 spec
Spec 013: Image Element #80(実機:小画面・大きい文字は問題なし/TalkBackは未確認・#81今回の完了対象外) spec

利用できる主な機能

  • テキストの作成・編集、見出し/本文と墨色/朱色の切り替え。
  • テキストの外側タップによる確定・終了。編集時のBackは未確定の変更がある場合だけ破棄を確認し、ツール・検索・選択のBackは通常キャンバスへ段階的に戻ります。
  • パン・ピンチズーム、要素の選択・移動、Undo/Redo。表示の移動や倍率変更では保存された配置を変えません。
  • 要素・複数選択を移動中に指を画面端で保持すると自動panし、指を離さず遠くへ運べます。中央へ戻ると停止し、一回の移動を一回の保存・Undoとして扱います。取消と検証範囲はSpec008と検証手順を参照してください。
  • 四角・丸・名前付き囲みの作成・サイズ変更、囲みと中身の移動、矢印の接続・曲げ・反転、 複数選択とまとめて移動、空白の長押しドラッグによる余白挿入。
  • Jetpack Ink によるペン/マーカーの手書きとスタイラス入力。手書きも選択・移動・削除・保存できます。
  • Semantic Zoom による近・中・遠の表示、囲みへのフィット、ボード内のテキスト・囲み名の検索と結果の前後移動。
  • 現在の検索結果または選択範囲が完全に画面外になると、画面端の方向表示から戻れます。複数選択は1まとまり、同じ単一対象は統合し、必要時だけ最大2個を表示します。対象と検証範囲はSpec009を参照してください。
  • 視点の戻る/進むを編集Undo/Redoと独立して使えます。検索・fit・倍率切替・pan/pinchを辿り、画面外の編集Undo/Redoでは変更位置を表示します。視点操作で編集Redoや保存内容を変えません。対象と寿命はSpec010を参照してください。
  • 最終編集順のボード一覧とサムネイル、作成・再開・名前変更・複製・削除、最後に開いたボードの復元。
  • 初回の空ボードでの操作案内と、一覧の「使い方」からの再表示。
  • ボード全体または選択範囲の画像プレビュー、端末への画像保存、コピー、Android 共有メニューへの受け渡し。
  • ボードと要素のローカル専用保存。内容と位置関係を保って再起動後に復元します。
  • Android共有メニューからテキスト・URLを取り込み、追加先を確認してボードへ配置できます。
  • 写真・画像ファイルpickerから静止JPEG・PNG・WebPを追加できます。画像も選択・移動・縦横比resize・削除・Undo/Redo・囲み・矢印・複製・出力へ参加し、元ファイルに依存せず端末内に保存します。任意の代替テキストは画像メニューから編集でき、空欄は「画像」と読み上げます。検証範囲はSpec013の検証手順を参照してください。

現在の対象外は、クラウド同期・端末間同期、リアルタイム共同編集、AI による自動整理、 画像Share Target受信、動画、画像の画素編集、OCR、手書き認識・図形の自動補正です。 自動整列・グリッド吸着・自動分類は行いません。

APK 配布と実機確認

Android 実機確認 runbook に配布と確認の手順をまとめています。

  • PR debug APK: PR の Android checks から、same-repository PR は think-canvas-debug-apk(専用固定署名)、fork PR は think-canvas-debug-apk-ephemeral(run 固有署名)の artifact を zip で取得します(各7日保存)。 applicationId は com.thinkcanvas.internal.debug です。詳しくは 配布経路 を参照してください。
  • 署名済み internal APK: 継続利用・更新確認には Releases の pre-release にある think-canvas.apk(com.thinkcanvas.internal)を使います。 作成は main から手動実行する Internal APK release と pre-release の作成手順 に従います。
  • 実機確認: 初回インストール、Obtainium、更新後のボード保持の確認は 端末での確認手順 を参照してください。

debug APK と internal APK は applicationId と署名が異なり、端末上で併存できます。 相互に上書き更新はできません。

開発環境

  • Android Studio と Android SDK Platform 37 / Build Tools 36.0.0
  • JDK 25
  • インターネット接続(初回の Gradle と Android 依存関係の取得に必要)
  • Spec Kit の操作には Python 環境と uv が必要です

compileSdk / targetSdk は Android 17 / API 37、minSdk は API 30 です。 Android checks は Ubuntu 26.04 / JDK 25 で lint・単体テスト・ debug build・Room schema の差分・公開情報境界を確認します。必須の Gradle Managed Device (GMD)は Pixel 9 / Android 17(API 37、google_apis、x86_64)で、 :app:pixel9Api37DebugAndroidTest を実行します。 Windows ローカルの GMD 検証は Windows GMD 検証 を参照してください。

プラグインとライブラリの版数は root の Gradle 設定 と app の Gradle 設定、Gradle の版数は Gradle Wrapper の設定 を参照してください。

リポジトリを clone して Android Studio で開き、SDK Platform 37 をインストールしてください。 コマンドラインでは sdkmanager "platforms;android-37.0" "build-tools;36.0.0" を使います。 Android Studio が作成する local.properties は追跡しません。コマンドラインでは JDK 25 と ANDROID_HOME または ANDROID_SDK_ROOT を設定し、Windows なら次を実行します。

.\gradlew.bat :app:lintDebug
.\gradlew.bat :app:testDebugUnitTest
.\gradlew.bat :app:assembleDebug

macOS / Linux では各 Gradle コマンドの先頭を ./gradlew に置き換えます。ビルド成果物は app/build/outputs/apk/debug/ に作成されます。

Spec Kit

Spec Kit は公式 v1.1.3 に固定しています。Codex skills は .agents/skills/、 Claude Code skills は .claude/skills/、共通テンプレートと Python スクリプトは .specify/ にあります。既定の integration は Codex、両方の script variant は py です。 以前の PowerShell スクリプトも公式 manifest の管理対象として残りますが、両方の skills は Python スクリプトを参照します。 前提不足のエラーで共有スクリプトが $speckit-... と案内した場合、Claude Code では 対応する /speckit-... を使います。v1.1.3 の共有スクリプトは既定の Codex 表記で案内します。 CLI/scaffold の版は .specify/init-options.json、導入状態は .specify/integration.json に記録されています。workflow の版(.specify/workflows/speckit/workflow.yml)は別管理です。

Python 3 と uv を用意した後、公式タグに固定した一時 CLI で導入状態を確認し、 既存の連携を更新します。 Windows では python3 --version が実際の Python 3 を起動することも確認します。 管理対象ファイルの手編集が報告されたら、差分を確認して更新を止めてください。

uvx --from git+https://github.com/github/[email protected] specify version
uvx --from git+https://github.com/github/[email protected] specify integration status
uvx --from git+https://github.com/github/[email protected] specify integration upgrade codex --script py
uvx --from git+https://github.com/github/[email protected] specify integration upgrade claude --script py

Claude Code をまだ導入していない場合だけ、最後の upgrade claude の代わりに uvx --from git+https://github.com/github/[email protected] specify integration install claude --script py を実行します。追加しても既定の Codex は変わりません。

Constitution は .specify/memory/constitution.md にあります。 開発と PR レビューの手順は docs/runbooks/change-review.md にまとめています。AGENTS.md はこれらの判断基準を案内します。 Codex では $speckit-constitution、Claude Code では /speckit-constitution などの skill 名を使います。各機能の成果物は specs/ 内にあり、公開仕様は上の「現在の状態」から参照できます。 $speckit-specify → $speckit-clarify → $speckit-plan → $speckit-checklist → $speckit-tasks → $speckit-analyze → $speckit-implement → $speckit-converge の順に進め、設計判断をその機能の成果物に残します。

要件の基準と公開境界

PRD が製品要件の authority です。HTML モックは操作とコンポーネントの見た目の reference implementation として扱います。内容が食い違う場合は PRD を優先し、差分と理由を spec に記録します。 PRD が決めていないことは spec で明示してから実装します。両ファイル自体は公開しません。

このリポジトリには API キー、トークン、認証情報、個人情報、ローカルパス、非公開サービス情報、 会話ログ、PRD、HTML モックを追加しません。.gitignore は既知のローカル設定と秘密ファイルを 除外します。公開前には次を実行し、さらに差分を目視確認してください。

pwsh -File scripts/check-public-boundary.ps1
git diff --check
git status --short

チェックは典型的なパターンの検出補助です。新しい名前の秘密情報や、文章に混ざった 非公開情報まで自動的に判定するものではありません。

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add reitojike/think-canvas