pagemeta2md
v1.2.5
Published
A powerful Node.js CLI tool that provides bidirectional conversion between CSV and Markdown files with frontmatter support
Maintainers
Readme
pagemeta2md
CSVファイルとMarkdownファイル間の双方向変換を行う強力なNode.js CLIツールです。CSVデータからフロントマター付きMarkdownファイルの生成と、既存のMarkdownファイル構造からCSVファイルの生成の両方に対応。ドキュメントサイト、ブログ、またはメタデータを使用するMarkdownファイルベースのコンテンツ管理システムの作成・管理に最適です。
機能
順方向変換(CSV → Markdown)
- 🚀 CSV to Markdown: CSVデータをフロントマター付きの構造化されたMarkdownファイルに変換
- 📁 階層構造: 親子関係に基づいてディレクトリ構造を自動作成
- 🔄 スマートアップデート: コンテンツを保持しながら既存ファイルを更新、フロントマターのみを変更
- 🎨 テンプレートサポート: カスタムテンプレートまたは組み込みデフォルトを使用してファイル生成
逆方向変換(Markdown → CSV)
- 🔄 Markdown to CSV: 既存のMarkdownファイル構造をCSVファイルに変換
- 📊 順序保持: 既存CSVファイルの行順序を維持した差分更新
- 🔍 自動階層解析: ファイルパスとフロントマターから親子関係を自動検出
- 🎯 フィルタリング: include/excludeパターンでファイル選択
- ⚡ 差分検出: frontmatter更新、ファイル追加・削除を効率的に検出
共通機能
- ⚡ インタラクティブモード: ファイル上書き時の確認プロンプトとフォースオプション
- 📊 詳細ログ: 包括的な進捗追跡とエラーレポート
- 🛡️ エラーハンドリング: 堅牢なバリデーションとエラー回復
- 🔗 循環参照検出: 階層構造の整合性チェック
インストール
グローバルインストール(推奨)
npm install -g pagemeta2mdpnpmを使用
pnpm add -g pagemeta2mdyarnを使用
yarn global add pagemeta2mdクイックスタート
- 階層データを含むCSVファイルを準備:
sidebar_position,slug,parent,title,status,post_type,seo_title,seo_keywords,seo_description,handson_overview
1,getting-started,,Getting Started,published,pages,Getting Started Guide,tutorial guide,Learn how to get started,Introduction to the platform
2,installation,getting-started,Installation,published,pages,Installation Guide,install setup,Step-by-step installation,How to install the software
3,configuration,getting-started,Configuration,draft,pages,Configuration Guide,config setup,Configuration options,Setting up your environment- コマンドを実行:
pagemeta2md data.csv- 生成される構造:
contents/
├── getting-started/
│ ├── index.md
│ ├── installation.md
│ └── configuration.md使用方法
コマンド概要
# ヘルプを表示
pagemeta2md --help
# CSV → Markdown変換
pagemeta2md csv2md <csvFile>
# Markdown → CSV変換
pagemeta2md md2csv <inputDir> <outputCsv>
# 後方互換性(従来の使用方法)
pagemeta2md <csvFile>CSV → Markdown変換
pagemeta2md csv2md [options] <csvFile>
オプション:
-o, --output <dir> 出力ディレクトリ (デフォルト: "./contents")
-t, --template <file> Markdownファイル生成用のカスタムテンプレートファイル
-f, --force 確認なしで既存ファイルを上書き
-v, --verbose 詳細ログを有効化Markdown → CSV変換
pagemeta2md md2csv [options] <inputDir> <outputCsv>
オプション:
--update-mode 既存CSVファイルの順序を保持した差分更新
--base-csv <file> 差分更新のベースとなる既存CSVファイル
--columns <list> 出力するCSV列(カンマ区切り)
--include <pattern> 含めるファイルパターン(glob)(デフォルト: "**/*.md")
--exclude <pattern> 除外するファイルパターン(カンマ区切り)
--sort <field> ソートフィールド(update-mode時は無効)
--encoding <type> 出力エンコーディング (デフォルト: "utf8")
--delimiter <char> CSV区切り文字 (デフォルト: ",")
--handle-deleted <action> 削除ファイルの処理(warn/remove/ignore)
-v, --verbose 詳細ログを有効化例
CSV → Markdown変換の例
例1: 基本的な生成
# デフォルトの./contentsディレクトリにファイルを生成
pagemeta2md csv2md pages.csv例2: カスタム出力ディレクトリ
# カスタムディレクトリにファイルを生成
pagemeta2md csv2md pages.csv --output ./docs例3: カスタムテンプレートの使用
# ファイル生成にカスタムテンプレートを使用
pagemeta2md csv2md pages.csv --template ./templates/custom.md例4: 詳細ログ付きでの強制上書き
# 既存ファイルを上書きし、詳細ログを表示
pagemeta2md csv2md pages.csv --force --verboseMarkdown → CSV変換の例
例1: 新規CSV生成
# contentsディレクトリのMarkdownファイルから新しいCSVを生成
pagemeta2md md2csv contents output.csv例2: 既存CSVの差分更新(順序保持)
# 既存CSVファイルの順序を保持しながら更新
pagemeta2md md2csv contents updated.csv --update-mode --base-csv existing.csv例3: フィルタリングを使用した変換
# 特定のパターンのファイルのみを変換
pagemeta2md md2csv contents docs.csv \
--include "docs/**/*.md" \
--exclude "drafts/**,temp/**"例4: カスタム列選択
# 特定の列のみを含むCSVを生成
pagemeta2md md2csv contents minimal.csv \
--columns "slug,title,parent,status"例5: 詳細ログと削除ファイル処理
# 詳細ログを表示し、削除されたファイルをCSVからも削除
pagemeta2md md2csv contents output.csv \
--update-mode \
--base-csv existing.csv \
--handle-deleted remove \
--verboseCSVフォーマット
CSVファイルには以下の列を含める必要があります:
必須列
slug: ファイル/ページのURL対応識別子title: ページの表示タイトル
オプション列
parent: 階層構造の親スラッグ(ルートアイテムの場合は空)status: 公開ステータス(draft、publishedなど)filepath: 生成されるMarkdownファイルのカスタムファイルパスpost_type: コンテンツの種類(pages、postsなど)target: コンテンツの対象読者またはコンテキストgoal: コンテンツの目的または目標seo_title: SEO最適化されたタイトルseo_description: SEO用のメタディスクリプションseo_keywords: SEO用のキーワードhandson_overview: 追加のメタデータフィールド
CSVサンプル構造
sidebar_position,slug,parent,title,status,filepath,post_type,target,goal,seo_title,seo_keywords,seo_description,handson_overview
1,introduction,,Introduction,published,,pages,developers,getting-started,Introduction to Our Platform,intro guide,Welcome to our comprehensive guide,Getting started overview
2,basics,introduction,Basic Concepts,published,,pages,beginners,learn-fundamentals,Basic Concepts Guide,basics fundamentals,Learn the fundamental concepts,Core concepts explanation
3,advanced,introduction,Advanced Topics,draft,,pages,experienced-users,master-features,Advanced Guide,advanced topics,Deep dive into advanced features,Advanced usage patterns
4,api,,API Reference,published,docs/api/index.md,pages,developers,api-integration,API Documentation,api reference,Complete API documentation,API usage guide
5,authentication,api,Authentication,published,,pages,developers,secure-access,API Authentication,auth api,Authentication methods,How to authenticateテンプレート
デフォルトテンプレート
テンプレートが指定されていない場合、pagemeta2mdは組み込みテンプレートを使用します:
---
title: "{{title}}"
slug: "{{slug}}"
parent: "{{parent}}"
status: "{{status}}"
filepath: "{{filepath}}"
post_type: "{{post_type}}"
target: "{{target}}"
goal: "{{goal}}"
seo_title: "{{seo_title}}"
seo_description: "{{seo_description}}"
seo_keywords: "{{seo_keywords}}"
handson_overview: "{{handson_overview}}"
---
<!-- コンテンツをここに記述 -->カスタムテンプレート
{{column_name}}プレースホルダーを使用して独自のテンプレートを作成できます:
---
title: "{{title}}"
description: "{{seo_description}}"
keywords: [{{seo_keywords}}]
draft: {{#if status === 'draft'}}true{{else}}false{{/if}}
---
# {{title}}
{{#if handson_overview}}
> {{handson_overview}}
> {{/if}}
<!-- ここにコンテンツを記述 -->ファイル処理動作
新規ファイル
- CSVデータからフロントマターを含む新しいMarkdownファイルを作成
- テンプレートコンテンツをファイル本文に使用
既存ファイル
- ファイル本文の既存コンテンツを保持
- フロントマターのみを新しいCSVデータで更新
--forceが使用されない限り確認プロンプトを表示
ディレクトリ構造
parent関係に基づいてネストされたディレクトリを自動作成- 親アイテムには
index.mdファイルを生成 - リーフアイテムには個別の
.mdファイルを作成
エラーハンドリング
このツールは包括的なエラーハンドリングを提供します:
- ファイル検証: CSVファイルとテンプレートファイルの存在確認
- CSV検証: 必須列とデータフォーマットの検証
- 循環参照検出: 親子関係での無限ループを防止
- 権限チェック: 出力ディレクトリの書き込み権限を検証
- 詳細なエラーメッセージ: 行番号と具体的なエラー詳細を表示
開発
このプロジェクトはパッケージ管理にpnpmを使用しています。
セットアップ
# リポジトリをクローン
git clone https://github.com/username/pagemeta2md.git
cd pagemeta2md
# 依存関係をインストール
pnpm install利用可能なスクリプト
# テストを実行
pnpm test
# カバレッジ付きでテストを実行
pnpm test:coverage
# コードをリント
pnpm lint
# コードをフォーマット
pnpm format
# プロダクション用にビルド
pnpm build
# 開発モードで実行
pnpm devテスト
# すべてのテストを実行
pnpm test
# 特定のテストファイルを実行
pnpm test csvParser.test.js
# ウォッチモードでテストを実行
pnpm test:watch
# カバレッジレポートを生成
pnpm test:coverage貢献
貢献を歓迎します!詳細については貢献ガイドをご覧ください。
開発ワークフロー
- リポジトリをフォーク
- 機能ブランチを作成:
git checkout -b feature/amazing-feature - 変更を加えてテストを追加
- テストを実行:
pnpm test - 変更をコミット:
git commit -m 'Add amazing feature' - ブランチにプッシュ:
git push origin feature/amazing-feature - プルリクエストを開く
変更履歴
変更の詳細履歴についてはCHANGELOG.mdをご覧ください。
ライセンス
このプロジェクトはMITライセンスの下でライセンスされています - 詳細についてはLICENSEファイルをご覧ください。
サポート
関連プロジェクト
- gray-matter - 文字列またはファイルからフロントマターを解析
- csv-parser - ストリーミングCSVパーサー
- commander.js - Node.jsコマンドラインインターフェース
pagemeta2mdチームが❤️を込めて作成
