Skip to content

はじめに#

View Markdown

Ox Content は 4 つの層から導入できます。

ドキュメントサイトを作るなら Vite プラグインから始めてください。 Node.js から Rust コアを呼ぶなら、次に N-API パッケージです。 ブラウザやサンドボックスでの実行が必要なら、次に WebAssembly パッケージです。 パーサとレンダラを Rust から直接使うなら、最後に Rust crate です。

コントリビュータ向けのセットアップとソースビルドは別ページです。開発環境 を見てください。

入口を選ぶ#

やりたいこと ここから
ドキュメントサイトやコンテンツパイプラインを作る Vite プラグイン
Node.js からパーサとレンダラを呼ぶ N-API
ブラウザや別の WebAssembly ホストで Ox Content を動かす WebAssembly パッケージ
Rust プロジェクトに Ox Content を直接埋め込む Rust crate
Ox Content 自体を触る 開発環境

要件#

経路 要件
Vite プラグイン Node.js 24+ と Vite または Vite+ プロジェクト
N-API Node.js 24+
WebAssembly npm パッケージを入れ、ESM から .wasm を読める JS ツールチェーン
Rust crate Rust 1.95+

1. Vite プラグインから#

ほとんどの利用者向けの既定の入口です。

Vite プラグインは Ox Content パイプライン一式を渡します。Markdown 変換、静的サイト生成、テーマ、検索、OG 画像、生成 API ドキュメントです。必要なネイティブランタイムはすでに同梱されるので、Vite 経路では @ox-content/napi を別途入れる必要はありません。よく使う Markdown の挙動は既定でオン、絵文字ショートコード、コード注釈、パッケージマネージャタブ、SNS 埋め込みといった非標準の執筆機能はオプトインです。選ぶときは 組み込み機能 を見てください。

3.0 はいま alpha です。npm の latest は 2.90.0 のままなので、alpha ディストタグから入れてください。この系統の他の @ox-content/*@alpha です。

インストール#

vp install @ox-content/vite-plugin@alpha

最小設定#

// vite.config.ts
import { defineConfig } from "vite-plus";
import { oxContent } from "@ox-content/vite-plugin";

export default defineConfig({
  plugins: [
    oxContent({
      srcDir: "content",
      outDir: "dist/docs",
      highlight: true,
      ogImage: true,
      docs: {
        enabled: true,
        src: ["./src"],
        out: "content/api",
      },
    }),
  ],
});

Markdown のエントリページを作ります。

<!-- content/index.md -->

# Hello Ox Content

This site is generated from Markdown.

それから docs アプリを起動します。

vp dev

日本語ページを同じサイトに置くときは、i18n を有効にして content/ja/ に翻訳を置き、ssg.localeSwitcher: true を付けます。既定ロケールはプレフィックスなし、日本語は /ja/ です。詳細は 国際化ロケールスイッチャー を見てください。

フレームワーク連携#

Markdown の中にコンポーネント island を置きたいときは、公式連携のどれかを足します。

# Vue
vp install @ox-content/vite-plugin-vue@alpha vue @vitejs/plugin-vue

# React
vp install @ox-content/vite-plugin-react@alpha react react-dom @vitejs/plugin-react

# Svelte
vp install @ox-content/vite-plugin-svelte@alpha svelte @sveltejs/vite-plugin-svelte

# Solid
vp install @ox-content/vite-plugin-solid@alpha solid-js@next @solidjs/web@next @solidjs/vite-plugin

続き:

2. N-API 経由の Node.js API#

Node.js のツール、スクリプト、独自 docs ワークフローの中で、Ox Content を速い Markdown エンジンとして使いたいときは @ox-content/napi です。

インストール#

vp install @ox-content/napi@alpha

パースと描画#

import { parseAndRender } from "@ox-content/napi";

const markdown = `
# Welcome

- Fast parser
- Rust core
- HTML output
`;

const result = parseAndRender(markdown, {
  gfm: true,
  tables: true,
  taskLists: true,
});

console.log(result.html);

AST へパース#

import { parseMarkdown } from "@ox-content/napi";

const ast = parseMarkdown("# Hello\n\nThis is **bold**.", {
  gfm: true,
});

console.log(JSON.stringify(ast, null, 2));

続き:

3. WebAssembly(@ox-content/wasm)#

ブラウザ、Web Worker、または別の WebAssembly ホストで Ox Content が必要なら @ox-content/wasm です。

インストール#

vp install @ox-content/wasm

JavaScript から使う#

import init, { parseAndRender, WasmParserOptions } from "@ox-content/wasm";

await init();

const options = new WasmParserOptions();
options.gfm = true;
options.tables = true;
options.taskLists = true;

const result = parseAndRender("# Hello from WASM", options);
console.log(result.html);

既定の init() はパッケージエントリからの相対で ox_content_wasm_bg.wasm を読むので、バンドラや、ESM から .wasm アセットを扱える環境でよく動きます。

このリポジトリからローカルでビルドして公開する#

Ox Content 自体を保守しているなら、リポジトリが公開用 npm パッケージを作れます。

vp run build:wasm
cd crates/ox_content_wasm/pkg
vp exec -- npm pack --dry-run

このスコープ付きパッケージを初めてローカル公開するときは、必要ならレジストリに認証し、public として公開します。

cd crates/ox_content_wasm/pkg
vp exec -- npm whoami || vp exec -- npm login
vp exec -- npm publish --access public

crates/ox_content_wasm/pkg から公開するほうが、ワークスペースルートから公開するより安全です。生成パッケージだけを対象にするからです。

意図して広いワークスペース公開フローにしたいとき以外は、ここでワークスペースルートから公開しないでください。

npm アカウントが公開に 2FA を求めていると、npm publish のあいだにワンタイムコードを聞かれます。

いまの WASM 面は crates/ox_content_wasm/src/lib.rs から parseAndRendertransformversionWasmParserOptions を出します。

4. Rust crate#

いちばん低い層の部品を直接使いたいときは Rust crate です。

依存を足す#

[dependencies]
ox_content_allocator = "3.0.0-alpha.1"
ox_content_ast = "3.0.0-alpha.1"
ox_content_parser = "3.0.0-alpha.1"
ox_content_renderer = "3.0.0-alpha.1"

Rust でパースして描画する#

use ox_content_allocator::Allocator;
use ox_content_parser::{Parser, ParserOptions};
use ox_content_renderer::HtmlRenderer;

fn main() {
    let allocator = Allocator::new();
    let markdown = "# Hello from Rust\n\n- Fast\n- Reusable\n- Markdown";

    let parser = Parser::with_options(&allocator, markdown, ParserOptions::gfm());
    let document = parser.parse().expect("failed to parse markdown");

    let mut renderer = HtmlRenderer::new();
    let html = renderer.render(&document);

    println!("{}", html);
}

より深い内部が必要なら、crate 単位の API は Rust ワークスペースにあり、アーキテクチャ でも説明しています。

Ox Content 自体をビルドする必要があるとき#

リポジトリをクローンする、docs テーマを触る、N-API バインディングをローカルでビルドする、テスト一式を走らせる、といったときは、このページではなく 開発環境 を使ってください。

Last updated: