
2026/02/10 1:33
「Show HN: JavaScript優先でオープンソース化されたWYSIWYG DOCXエディタ」
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
記事では、React用のオープンソースWYSIWYG DOCXエディタである @eigenpal/docx-js-editor を紹介しています。このエディタはブラウザ上だけで完結し、サーバーを必要としません。まずパッケージのインストール方法(
npm install @eigenpal/docx-js-editor)を示し、その後 useRef<DocxEditorRef> を使って save()、getDocument()、setZoom()、focus()、scrollToPage()、print() などのエディタメソッドを呼び出す最小限の関数コンポーネント例へと進みます。
コンポーネントのプロパティは詳細に説明されています。
- documentBuffer(ArrayBuffer)は必須であり、事前に解析された
をオプションで渡すこともできます。document - UIトグル(
、showToolbar
、showRuler
、showZoomControl
)はツールバーのどの部分を表示するかを制御します。showVariablePanel
は初期ズームレベルを設定し、initialZoom
が true の場合にはキャレットと選択UIが無効になります。readOnly- コールバックプロパティとして
、onChange
、onSave
があります。onError
クライアントサイドのみで動作するため、サーバーコードは不要です。また記事では Next.js のような SSR フレームワークとの互換性を保つために、コンポーネントをダイナミックインポートで遅延ロードする方法も解説しています。
プラグインシステム(
PluginHost)により開発者はカスタム機能を追加できます。例として templatePlugin は docxtemplater タグの構文ハイライトを提供し、docs/PLUGINS.md にドキュメント化されています。エディタは Microsoft Word と同等の完全性(テキスト・段落フォーマット・表・画像・ハイパーリンク・Undo/Redo・検索&置換・キーボードショートカット・印刷プレビュー)を備えています。
最後に、プロジェクトは MIT ライセンスです。将来的には機能セットの拡張と追加プラグインの導入を計画しており、開発者が従来のサーバーベースエディタをこの軽量なブラウザ内ソリューションに置き換えられるようにすることを目指しています。
本文
@eigenpal/docx-js-editor
React 用のオープンソース WYSIWYG DOCX エディタ。
.docx ファイルをブラウザ上だけで編集・保存でき、サーバーは不要です。ライブデモをお試しください。
インストール
npm install @eigenpal/docx-js-editor
クイックスタート
import { useRef } from 'react'; import { DocxEditor, type DocxEditorRef, } from '@eigenpal/docx-js-editor'; import '@eigenpal/docx-js-editor/styles.css'; function Editor({ file }: { file: ArrayBuffer }) { const editorRef = useRef<DocxEditorRef>(null); const handleSave = async () => { const buffer = await editorRef.current?.save(); if (buffer) { await fetch('/api/documents/1', { method: 'PUT', body: buffer, }); } }; return ( <> <button onClick={handleSave}>保存</button> <DocxEditor ref={editorRef} documentBuffer={file} onChange={() => {}} /> </> ); }
Next.js / SSR – エディタは DOM を必要とします。
サーバーサイドでのレンダリングを避けるために、動的インポートやの遅延読み込みを利用してください。useEffect
Props
| Prop | Type | Default | 説明 |
|---|---|---|---|
| | – | ロードする ファイルの内容 |
| | – | 事前に解析済みのドキュメント(バッファの代わり) |
| | | 読み取り専用プレビュー(カーソル・選択不可) |
| | | 書式ツールバーを表示 |
| | | 水平ルーラーを表示 |
| | | ズームコントロールを表示 |
| | | テンプレート変数パネルを表示 |
| | | 初期ズームレベル |
| | – | ドキュメントが変更されたときに呼び出される |
| | – | 保存時に呼び出される |
| | – | エラー発生時に呼び出される |
Ref メソッド
const ref = useRef<DocxEditorRef>(null); await ref.current.save(); // .docx の ArrayBuffer を取得 ref.current.getDocument(); // 現在の Document オブジェクトを取得 ref.current.setZoom(1.5); // ズームを 150% に設定 ref.current.focus(); // エディタにフォーカス ref.current.scrollToPage(3); // ページ 3 にスクロール ref.current.print(); // ドキュメントを印刷
読み取り専用プレビュー
<DocxEditor documentBuffer={file} readOnly />
編集機能、カーソル、選択 UI が無効になります。
プラグイン
エディタにプラグインシステムで拡張できます。
PluginHost で DocxEditor を包み、ProseMirror プラグインやサイドパネル、ドキュメントオーバーレイ、カスタム CSS を提供できるプラグインを渡します。
import { DocxEditor, PluginHost, templatePlugin, } from '@eigenpal/docx-js-editor'; function Editor({ file }: { file: ArrayBuffer }) { return ( <PluginHost plugins={[templatePlugin]}> <DocxEditor documentBuffer={file} /> </PluginHost> ); }
利用可能なプラグイン
| プラグイン | 説明 |
|---|---|
| docxtemplater タグの構文強調表示と注釈パネルを提供 |
詳細は
docs/PLUGINS.md を参照してください。ここには、パネルやオーバーレイ、ProseMirror 統合を持つカスタムプラグインの作成方法も記載されています。
主な機能
- Microsoft Word と同等のフル WYSIWYG 編集
- テキスト・段落書式(太字・斜体・フォント・色・配置・間隔)
- 表、画像、ハイパーリンク
- 拡張可能なプラグインアーキテクチャ
- アンドゥ/リドゥ、検索&置換、キーボードショートカット
- 印刷プレビュー
- サーバー不要
開発
ライセンス: MIT