毎日の習慣継続を記録するシンプルなカレンダーアプリ。
- バックエンド: Common Lisp (SBCL)
- Webサーバー: Hunchentoot
- テンプレート: Spinneret (S式 → HTML)
- ORM: Mito (PostgreSQL)
- フロントエンド: HTMX (ページリロードなしの部分更新)
- データベース: PostgreSQL (Docker)
cd /home/user/src/concal
nix develop
# または direnv が有効な場合は自動で環境に入るdocker-compose up -dsbcl(ql:quickload :concal)
(concal:start)ブラウザで http://localhost:8080 にアクセス
実行可能バイナリを作成:
nix build
./result/bin/concal- カレンダーの日付をタップして、その日の習慣を達成したことを記録
- もう一度タップすると記録を解除
- 「<」「>」ボタンで前月/翌月を表示
- 「今日」ボタンで現在の月に戻る
| メソッド | パス | 説明 |
|---|---|---|
| GET | / |
メインページ |
| GET | /calendar?year=&month= |
カレンダー部分HTML (HTMX) |
| POST | /api/toggle/:date |
チェックトグル (HTMX) |
| 変数名 | デフォルト | 説明 |
|---|---|---|
CONCAL_DB_HOST |
localhost | PostgreSQLホスト |
CONCAL_DB_PORT |
5432 | PostgreSQLポート |
CONCAL_DB_NAME |
concal | データベース名 |
CONCAL_DB_USER |
concal | DBユーザー |
CONCAL_DB_PASSWORD |
concal_password | DBパスワード |
CONCAL_PORT |
8080 | Webサーバーポート |
concal/
├── src/
│ ├── package.lisp # パッケージ定義
│ ├── config.lisp # 設定
│ ├── db/
│ │ ├── connection.lisp # DB接続
│ │ └── migrations.lisp # マイグレーション
│ ├── models/
│ │ └── habit-record.lisp # Mitoモデル
│ ├── views/
│ │ ├── layout.lisp # 共通レイアウト
│ │ ├── components.lisp # UIコンポーネント
│ │ └── calendar.lisp # カレンダービュー
│ ├── handlers/
│ │ ├── pages.lisp # ページハンドラー
│ │ └── api.lisp # APIハンドラー
│ ├── routes.lisp # ルート定義
│ ├── server.lisp # サーバー設定
│ └── main.lisp # エントリーポイント
├── static/
│ └── css/
│ └── style.css # スタイルシート
├── concal.asd # ASDF定義
├── docker-compose.yml
└── README.md