Skip to content

foo-ogawa/mdjournal

Repository files navigation

mdJournal

Markdown日報を視覚的に管理するダッシュボードアプリケーション

npm version License: MIT

mdJournal Screenshot

✨ 特徴

  • 📅 カレンダービュー - 月表示で稼働時間を可視化
  • ⏱️ タイムライン - 計画と実績を並べて表示、ドラッグ&ドロップで編集
  • TODO管理 - プロジェクト別・ステータス別のタスク管理
  • 📝 Markdown編集 - 慣れ親しんだMarkdown形式でデータを管理
  • 🔗 外部連携 - Git commit/push、Slack投稿

🚀 まずは試してみる

# サンプルデータで起動(インストール不要)
npx mdjournal

# ブラウザが自動で開きます(http://localhost:3001)

これだけでサンプル日報を使ってダッシュボードを体験できます。


📦 セットアップ

自分の日報を管理するためのセットアップ手順です。

1. 日報用ディレクトリを作成

mkdir my-journal
cd my-journal

2. 設定ファイルを作成

# mdjournal.config.yaml
projects: ./config/projects.yaml
routines: ./config/routines.yaml
reports: ./data

timeline:
  snapMinutes: 15         # ドラッグ時のスナップ単位(分)
  defaultStartHour: 8     # 表示開始時刻
  defaultEndHour: 20      # 表示終了時刻

server:
  port: 3001

3. プロジェクト定義を作成

# config/projects.yaml
projects:
  - code: P01
    name: 社内業務
    color: "#52c41a"

  - code: P02
    name: プロジェクトA
    color: "#1890ff"

  - code: P03
    name: プロジェクトB
    color: "#722ed1"

4. ルーチン定義を作成(オプション)

毎週決まった予定がある場合、ルーチンとして登録しておくと便利です。

# config/routines.yaml
routines:
  weekly:
    monday:
      - time: "09:00"
        project: P01
        task: 週次定例会議
      - time: "10:00"
        project: P02
        task: プロジェクトA 朝会

    friday:
      - time: "17:00"
        project: P01
        task: 週報作成

5. ディレクトリ構成

最終的にこのような構成になります:

my-journal/
├── mdjournal.config.yaml    # メイン設定ファイル
├── config/
│   ├── projects.yaml        # プロジェクト定義
│   └── routines.yaml        # ルーチン定義
└── data/                    # 日報が保存される場所
    └── 2025/
        └── 01/
            ├── 2025-01-06.md
            └── 2025-01-07.md

6. 起動

npx mdjournal ./mdjournal.config.yaml

日報ファイルはダッシュボードから自動的に作成されます。


📝 日報の書き方

日報は以下のようなMarkdown形式です。ダッシュボードで編集できますが、テキストエディタで直接編集することもできます。

# [日報] 山田太郎 2025-01-06

## [PLAN]

* 08:30 [P01] タスク確認・朝会
* 09:00 [P02] プロジェクトA 開発
* 12:00
* 13:00 [P03] プロジェクトB MTG
* 15:00 [P02] プロジェクトA 開発
* 18:00

## [RESULT]

* 08:30 [P01] タスク確認・朝会
* 09:00 [P02] プロジェクトA 開発
* 12:00
* 13:00 [P03] プロジェクトB MTG(延長)
* 16:00 [P02] プロジェクトA 開発
* 19:00

## [TODO]

- [ ] [P01] !!! 重要なタスク @2025-01-10
- [*] [P01] !! 進行中のタスク
- [x] [P02] 完了したタスク
- [-] [P02] 保留中のタスク

## [NOTE]

本日のメモや振り返りをここに記載。

タイムライン記法

* HH:MM [プロジェクトコード] タスク内容
* HH:MM                              ← 終了時刻のみ(空き時間の終わり)
  • [PLAN] セクション: 予定
  • [RESULT] セクション: 実績

TODOの書き方

- [{status}] [{project}] {priority}{task} @{deadline}

ステータス

マーク 意味
[ ] 未着手
[*] 進行中
[x] 完了
[-] 保留

優先度と期日

- [ ] [P01] !!! 優先度:高
- [ ] [P01] !! 優先度:中
- [ ] [P01] ! 優先度:低
- [ ] [P01] タスク @2025-01-10        ← 期日付き
- [ ] [P01] !!! 緊急タスク @2025-01-10 ← 期日+優先度

🔗 外部連携

Git連携

日報ディレクトリがGitリポジトリの場合、ダッシュボードの保存ボタンから直接commit/pushできます。

# 日報ディレクトリをGitリポジトリ化
cd my-journal
git init
git remote add origin <your-repo-url>

Slack連携

日報をSlackチャンネルに投稿できます。Slack Block Kit を使用したリッチなフォーマットで、時刻やプロジェクトコードが code 形式で見やすく表示されます。

# mdjournal.config.yaml に追加
slack:
  enabled: true
  webhookUrl: "https://hooks.slack.com/services/..."  # 直接指定
  # webhookUrl: ${SLACK_WEBHOOK_URL}                  # または環境変数から取得
  channel: "#daily_report"
  username: "日報"
  iconEmoji: ":memo:"

  # 投稿するセクション(true: 投稿する / false: 省略する)
  sections:
    plan: false           # PLAN を省略
    result: true          # RESULT のみ投稿
    todo: true
    note: true

  # TODOステータスアイコン(Slack shortcode形式でカスタマイズ可能)
  todoIcons:
    pending: ":black_square_button:"        # 未着手   - [ ]
    inProgress: ":arrow_forward:"           # 進行中   - [*]
    onHold: ":double_vertical_bar:"         # 保留中   - [-]
    completed: ":white_check_mark:"         # 完了     - [x]

環境変数でWebhook URLを設定する場合:

export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."

Slack投稿の表示例

投稿は Slack Block Kit で構造化され、以下のようにフォーマットされます:

  • タイムライン項目: • \09:00` `P01` タスク確認・朝会`
  • TODO項目: :black_square_button: \P01` 重要なタスク @2025-01-10`
  • セクション間は区切り線で分離
  • PLAN/RESULTの片方のみ有効な場合、セクションヘッダーは自動で省略

保存ダイアログ

保存ボタンから開くダイアログで、保存範囲を選択できます:

  1. 保存のみ - ローカルファイルに保存
  2. Commitまで - 保存 + Git commit
  3. Pushまで - 保存 + commit + push
  4. Slack投稿 - 上記 + Slackに投稿(Slack連携が有効な場合のみ表示)

🛠️ CLIコマンド

# サーバー起動
npx mdjournal [config.yaml]

# 日報ファイルのバリデーション
npx mdjournal validate ./data
npx mdjournal validate ./data --verbose  # 詳細表示
npx mdjournal validate ./data --strict   # 厳格モード

# 統計情報の再集計(frontmatter更新)
npx mdjournal stats ./data
npx mdjournal stats ./data --dry-run     # プレビューのみ

# 設定ファイルの検証
npx mdjournal config ./mdjournal.config.yaml

⚙️ 設定リファレンス

タイムライン設定

timeline:
  hourHeight: 60          # 1時間あたりの高さ(px)
  maxHours: 36            # 最大表示時間
  defaultStartHour: 8     # デフォルト開始時刻
  defaultEndHour: 20      # デフォルト終了時刻
  snapMinutes: 15         # スナップ単位(分)

プロジェクト定義

# config/projects.yaml
projects:
  - code: P01             # タイムラインで使用するコード
    name: 社内業務         # 表示名
    fullName: 社内管理・雑務  # フルネーム(オプション)
    color: "#52c41a"      # 表示色
    category: internal    # カテゴリID(オプション)
    active: true          # アクティブフラグ(デフォルト: true)

categories:               # カテゴリ定義(オプション)
  - id: internal
    name: 社内業務
    color: "#52c41a"

ルーチン定義

# config/routines.yaml
routines:
  # 週次ルーチン
  weekly:
    monday:
      - time: "09:00"
        project: P01
        task: 週次定例

  # 月次ルーチン
  monthly:
    start_of_month:       # 月初
      - project: P01
        task: 経費精算
    end_of_month:         # 月末
      - project: P01
        task: 月次レポート

  # 四半期ルーチン
  quarterly:
    - months: [3, 6, 9, 12]
      tasks:
        - project: P01
          task: 四半期レビュー

Slack連携設定

slack:
  enabled: true                              # Slack連携を有効化
  webhookUrl: "https://hooks.slack.com/..."   # Webhook URL(環境変数 SLACK_WEBHOOK_URL でも可)
  channel: "#daily_report"                    # 投稿先チャンネル
  username: "日報"                             # 投稿者名
  iconEmoji: ":memo:"                         # 投稿者アイコン

  sections:                # 投稿するセクション
    plan: true             #   計画
    result: true           #   実績
    todo: true             #   TODO
    note: true             #   メモ

  todoIcons:               # TODOアイコン(Slack shortcode形式)
    pending: ":black_square_button:"       # 未着手   - [ ]
    inProgress: ":arrow_forward:"          # 進行中   - [*]
    onHold: ":double_vertical_bar:"        # 保留中   - [-]
    completed: ":white_check_mark:"        # 完了     - [x]

📄 ライセンス

MIT License


mdJournal - Markdownで日報をもっと便利に

About

Markdown日報を視覚的に管理するダッシュボードアプリケーション

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors