Rustで構築された少人数向けの勤怠管理Webアプリケーションです。
- 出勤/退勤の打刻
- 休憩時間の記録
- 勤務履歴の閲覧
- 有給休暇申請
- 残業申請
- 月次勤務時間の確認
- 多要素認証(MFA)の設定
- 従業員管理(登録/編集/削除)
- 勤怠データの閲覧/集計
- 申請の承認/却下
- 勤務データのエクスポート(CSV)
- 勤務時間の修正
- レポート生成
- アーカイブ済みユーザーの管理
- Googleカレンダーからの祝日取り込み
- フレームワーク: Axum
- データベース: SQLite (将来PostgreSQL対応)
- 認証: JWT
- ORM: SQLx
- フレームワーク: Leptos (WebAssembly)
- スタイリング: TailwindCSS
- HTTP通信: reqwest-wasm
- Rust 1.70+
- wasm-pack (フロントエンドビルド用)
- Node.js 18+ (Tailwind CSS ビルド用)
- リポジトリをクローン
git clone <repository-url>
cd timekeeper- 環境変数を設定
cp env.example .env
# .envファイルを編集- wasm-packをインストール
cargo install wasm-pack- バックエンドを起動
cd backend
cargo run- フロントエンドをビルド・起動
cd frontend
npm install
npm run build:css
wasm-pack build --target web --out-dir pkg
python -m http.server 8000- ブラウザでアクセス
http://localhost:8000
DATABASE_URL=postgres://timekeeper:timekeeper@localhost:5432/timekeeper
JWT_SECRET=your-secret-key-change-this-in-production
JWT_EXPIRATION_HOURS=1
REFRESH_TOKEN_EXPIRATION_DAYS=7メモ: SQLite を使いたい場合は
DATABASE_URL=sqlite:./timekeeper.dbのように書き換えてください(アプリは環境変数の DSN をそのまま利用します)。既定値とenv.exampleは PostgreSQL を前提にしています。
- 管理者: username:
admin, password:admin123
timekeeper/
├── backend/ # バックエンド (Axum + SQLx)
│ ├── src/
│ │ ├── main.rs # エントリーポイント
│ │ ├── config.rs # 設定管理
│ │ ├── models/ # データモデル
│ │ ├── handlers/ # APIハンドラー
│ │ ├── middleware/ # JWT認証ミドルウェア
│ │ ├── db/ # データベース層
│ │ └── utils/ # ユーティリティ
│ ├── migrations/ # SQLマイグレーション
│ └── Cargo.toml
├── frontend/ # フロントエンド (Leptos + WASM)
│ ├── src/
│ │ ├── main.rs # エントリーポイント
│ │ ├── components/ # UIコンポーネント
│ │ ├── pages/ # ページコンポーネント
│ │ ├── api/ # APIクライアント
│ │ └── state/ # 状態管理
│ ├── index.html
│ └── Cargo.toml
└── README.md
詳細なAPI仕様については API_DOCS.md を参照してください。
POST /api/auth/login- ログインPOST /api/auth/refresh- トークンリフレッシュ
POST /api/attendance/clock-in- 出勤打刻POST /api/attendance/clock-out- 退勤打刻POST /api/attendance/break-start- 休憩開始POST /api/attendance/break-end- 休憩終了GET /api/attendance/me- 自分の勤怠履歴GET /api/attendance/me/summary- 月次集計
POST /api/requests/leave- 休暇申請POST /api/requests/overtime- 残業申請GET /api/requests/me- 自分の申請一覧
GET /api/admin/users- 従業員一覧POST /api/admin/users- 従業員登録GET /api/admin/attendance- 全従業員の勤怠データPUT /api/admin/requests/:id/approve- 申請承認PUT /api/admin/requests/:id/reject- 申請却下GET /api/admin/export- データエクスポート
cd backend
cargo runcd frontend
wasm-pack build --target web --out-dir pkg --dev
python -m http.server 8000# バックエンドテスト
cd backend
cargo test
# フロントエンドテスト
cd frontend
wasm-pack test --headless --firefoxMIT License