Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ jobs:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Update version from tag
run: |
VERSION="${GITHUB_REF_NAME#v}"
sed -i "s/\.version = \"[^\"]*\",/.version = \"${VERSION}\",/" build.zig.zon
echo "Updated build.zig.zon to version ${VERSION}"
grep '\.version' build.zig.zon

- name: Setup Zig
uses: mlugg/setup-zig@e7d1537c378b83b8049f65dda471d87a2f7b2df2 # v2.2.0
with:
Expand Down
233 changes: 233 additions & 0 deletions README.ja.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
<p align="right"><a href="https://github.com/linyows/draft/blob/main/README.md">English</a> | 日本語</p>

<br><br><br><br><br><br>

<p align="center">
<img alt="draft" src="https://github.com/linyows/draft/blob/main/misc/draft.svg?raw=true" width="200">
<br><br>
Markdown テンプレートジェネレーター
</p>

<br><br><br><br>

<p align="center">
<a href="https://github.com/linyows/draft/actions/workflows/test.yml">
<img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/linyows/draft/test.yml?branch=main&style=for-the-badge&labelColor=666666">
</a>
<a href="https://github.com/linyows/draft/releases">
<img src="http://img.shields.io/github/release/linyows/draft.svg?style=for-the-badge&labelColor=666666&color=DDDDDD" alt="GitHub Release">
</a>
</p>

## 特徴

- テンプレートからMarkdownドキュメントを生成
- ドキュメントIDの自動採番
- ドキュメント一覧付きのインデックスファイル生成
- ADRとDesign Docのテンプレートを内蔵
- カスタムテンプレートのサポート

## インストール

macOSまたはLinuxでHomebrewを使用してインストール:

```bash
$ brew tap linyows/draft
$ brew install linyows/draft/draft
```

### ソースからビルド

Zig 0.15.2以降が必要です。

```bash
$ git clone https://github.com/linyows/draft.git
$ cd draft
$ zig build --release=fast
```

バイナリは `./zig-out/bin/draft` に生成されます。

## 使い方

### 初期化

デフォルトの設定とテンプレートを含む `.draft` ディレクトリを作成:

```bash
draft init
```

以下が作成されます:
```
.draft/
├── config.json
└── templates/
├── adr.md
├── adr-index.md
├── design.md
└── design-index.md
```

### ドキュメントの生成

```bash
draft <template> "<title>"
```

例:
```bash
draft adr "Authentication System Design"
draft design "API Design"
```

### インデックスの生成

```bash
draft <template> index
```

例:

```bash
draft adr index
```

出力ディレクトリに全ドキュメントの一覧表を含む `README.md` を生成します。

## 設定

`.draft/config.json`:

```json
{
"templates_dir": ".draft/templates",
"output_dir": "docs",
"filename_format": "{{@id}}-{{@title}}.md"
}
```

| キー | 説明 | デフォルト |
|-----|-------------|---------|
| `templates_dir` | テンプレートファイルのディレクトリ | `.draft/templates` |
| `output_dir` | 生成ファイルの出力ディレクトリ | `docs` |
| `filename_format` | 出力ファイル名のパターン | `{{@title}}.md` |
| `templates` | テンプレートごとの設定オーバーライド | `null` |

### テンプレートごとの設定

特定のテンプレートに対して `output_dir` と `filename_format` をオーバーライドできます:

```json
{
"templates_dir": ".draft/templates",
"output_dir": "docs",
"filename_format": "{{@title}}.md",
"templates": {
"adr": {
"output_dir": "docs/adrs",
"filename_format": "{{@id{4}}}-{{@title}}.md"
},
"design": {
"output_dir": "docs/design",
"filename_format": "{{@date}}-{{@title}}.md"
}
}
}
```

この設定では:
- `draft adr "My ADR"` → `docs/adrs/0001-My ADR.md` を作成
- `draft design "My Design"` → `docs/design/2024-01-01-My Design.md` を作成
- 他のテンプレートはグローバルの `output_dir` と `filename_format` を使用

## テンプレート変数

| 変数 | 説明 |
|----------|-------------|
| `{{@title}}` | 引数で指定したタイトル |
| `{{@today}}` | 今日の日付 (YYYY-MM-DD) |
| `{{@date}}` | 今日の日付 (YYYY-MM-DD) |
| `{{@name}}` | 現在のユーザー名 |
| `{{@id}}` | 自動採番ID (001, 002, ...) |
| `{{@id{N}}}` | N桁の自動採番ID (例: `{{@id{4}}}` -> 0001) |

## インデックス変数

| 変数 | 説明 |
|----------|-------------|
| `{{@index}}` | ドキュメント一覧表 (デフォルト列: Title, Date, Author) |
| `{{@index{@id\|@title\|@status}}}` | 指定した列でカスタム形式の表 |
| `{{@index{@id\|@title,asc:@id}}}` | ソート指定付きのカスタム形式 |
| `{{@index{@id\|@title\|@date,desc:@date}}}` | 日付降順でソート |

利用可能な列: `@id`, `@title`, `@date`, `@name`, `@status`

### インデックスのソート

列指定の後に `,asc:@field` または `,desc:@field` 構文でソート順を指定できます。

**デフォルトのソート動作** (ソート指定がない場合):
- ドキュメントに `@id` がある場合: `@id` の昇順
- ドキュメントに `@date` がある場合: `@date` の降順
- それ以外: ファイル更新日時の降順

**例:**
```markdown
{{@index{@id|@title|@author,asc:@id}}} <!-- Sort by ID ascending -->
{{@index{@title|@date,desc:@date}}} <!-- Sort by date descending -->
```

## カスタムテンプレート

`.draft/templates/` に独自のテンプレートを作成:

**`.draft/templates/rfc.md`**:
```markdown
# {{@title}}

- ID: {{@id{4}}}
- Date: {{@date}}
- Author: {{@name}}
- Status: Draft

## Summary

## Motivation

## Detailed Design

## Alternatives

## Unresolved Questions
```

**`.draft/templates/rfc-index.md`**:
```markdown
# RFC Index

{{@index{@id|@title|@status}}}
```

使用方法:
```bash
draft rfc "My RFC Title"
draft rfc index
```

## 開発

```bash
# テスト実行
zig build test

# ビルド
zig build

# 実行
zig build run -- help
```

## Author

[linyows](https://github.com/linyows)
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# Draft
<p align="right">English | <a href="https://github.com/linyows/draft/blob/main/README.ja.md">日本語</a></p>

A markdown template generator.
<br><br><br><br><br><br>

<p align="center">
<img alt="draft" src="https://github.com/linyows/draft/blob/main/misc/draft.svg?raw=true" width="200">
<br><br>
Markdown template generator
</p>

<br><br><br><br>

<p align="center">
<a href="https://github.com/linyows/draft/actions/workflows/test.yml">
Expand Down
6 changes: 6 additions & 0 deletions build.zig
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
const std = @import("std");
const build_zon = @import("build.zig.zon");

pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

const options = b.addOptions();
options.addOption([]const u8, "version", build_zon.version);

const exe = b.addExecutable(.{
.name = "draft",
.root_module = b.createModule(.{
Expand All @@ -13,6 +17,8 @@ pub fn build(b: *std.Build) void {
}),
});

exe.root_module.addOptions("build_options", options);

b.installArtifact(exe);

const run_cmd = b.addRunArtifact(exe);
Expand Down
3 changes: 2 additions & 1 deletion build.zig.zon
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
.{
.name = .draft,
.version = "0.1.0",
// This version is replaced with the git tag during release workflow
.version = "0.0.0-dev",
.fingerprint = 0x467c969413062c0c,
.minimum_zig_version = "0.15.2",
.paths = .{
Expand Down
17 changes: 17 additions & 0 deletions misc/draft.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 42 additions & 0 deletions src/assets/usage.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

_
| | |
__| ,_ __, | |_|_
/ | | | / | |/ |
\_/|_/ |_/\_/|_/|__/|_/
|\
|/

Markdown template generator

Usage:
draft init Initialize .draft directory with config and templates
draft <template> <title> Generate a markdown file from template
draft <template> index Generate index file (e.g., README.md)
draft help Show this help message
draft version Show version

Examples:
draft init
draft adr "Authentication System Design"
draft design "API Design"
draft adr index

Template Variables:
{{@title}} - Title specified as argument
{{@today}} - Today's date (YYYY-MM-DD)
{{@date}} - Today's date (YYYY-MM-DD)
{{@name}} - Current user name
{{@id}} - Incremental ID (001, 002, ...)
{{@id{N}}} - Incremental ID with N digits (e.g., {{@id{4}}} -> 0001)

Index Variables:
{{@index}} - Document list table (default: @title|@date|@name)
{{@index{@id|@title|@status}}} - Custom format table
{{@index{@id|@title,asc:@id}}} - Custom format with sort specification
{{@index{@id|@title|@date,desc:@date}}} - Sort by date descending

Index Sort (default behavior):
- If documents have @id: sort by @id ascending
- Else if documents have @date: sort by @date descending
- Else: sort by file modification time descending
Loading