インストールと基本的な使い方
Univer はプラグイン志向の設計で、柔軟で拡張可能なドキュメントアプリ基盤を提供します。プラグイン構成により機能モジュールを容易に統合できますが、初めて触れる開発者にとっては複雑に感じることがあります。
そのため Univer では プラグインモード と プリセットモード の 2 つを用意し、素早く導入できるようにしています。プリセットは事前に構成されたプラグインの組み合わせで、複雑な拡張をしない限り両者の機能は同等です。
注意事項
- 依存バージョンの一致:プリセット/プラグインどちらの方法でも、依存関係のバージョンは揃える必要があります。
- プリセットとプラグインの併用に注意:プリセットに含まれるプラグインを重複して読み込むと、衝突や不具合の原因になります。
プリセットモードとプラグインモードの違い:
| プラグインモード | プリセットモード |
|---|---|
| 対応する facade パッケージを手動で読み込む必要がある | facade パッケージの手動読み込みは不要 |
| 同種の機能プラグインの登録順に注意が必要 | プリセット内の機能は登録順を気にしなくてよい |
| 必要に応じた遅延読み込みが可能 | 設定したプリセットは初期化時に同期的に読み込まれる |
Univer にはプリセットモードとプラグインモードの 2 つの導入方法があります。プリセットモードは構成済みのプラグインをまとめて読み込むため、簡単に導入できます。高度なカスタマイズや拡張が必要な場合は、プラグインを個別に組み合わせて設定できるプラグインモードを推奨します。
プラグインモードでのセットアップ
Univer はプラグインとして機能を提供します。必須のコアプラグインに加えて、必要に応じて他のプラグインを選択できます。ここでは最小構成の Univer Docs を例に、手動でプラグインを組み合わせる方法を紹介します。
プリセットモードと異なり、プラグインモードには Facade API1 がデフォルトでは含まれません。以下の例では Facade API を使用するため、API インスタンスを作成する前に対応する facade パッケージを読み込んでください。
パッケージマネージャーの使用
インストール
Univer は UI に React、データストリームに RxJS を使用し、Vue や Angular アプリにも組み込めます。peer dependencies2 の react、react-dom、rxjs がインストールされていることを確認してください。以下の Yarn コマンドにはこれらを明示的に含めています。
すべての @univerjs/* と @univerjs-pro/* パッケージのバージョンを揃えてください。
pnpm add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/uinpm install @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/uiyarn add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/ui react react-dom rxjsbun add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/ui使い方
Univer の初期化前にコンテナーを作成し、高さを指定してください:
<div id="app" style="height: 600px"></div>FUniver.newAPI(univer) を呼び出す前に、以下の例で使用する facade エントリーをインポートしてください。CSS は @univerjs/design、@univerjs/ui、製品 CSS の順にインポートします。
注意事項
- すべてのプラグインに facade パッケージ、言語パック、スタイルファイルがあるわけではありません。各機能のドキュメントで案内します。
- スタイルの読み込み順が重要です。
@univerjs/designと@univerjs/uiの CSS を先に読み込み、その後に他プラグインの CSS を読み込んでください。
プロジェクトで Univer のスタイル、言語パック、必要なプラグインを読み込みます。
TypeScriptimport { LocaleType, mergeLocales, Univer } from '@univerjs/core'import { FUniver } from '@univerjs/core/facade'import DesignJaJP from '@univerjs/design/locale/ja-JP'import { UniverDocsPlugin } from '@univerjs/docs'import { UniverDocsUIPlugin } from '@univerjs/docs-ui'import DocsUIJaJP from '@univerjs/docs-ui/locale/ja-JP'import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'import { UniverRenderEnginePlugin } from '@univerjs/engine-render'import { UniverUIPlugin } from '@univerjs/ui'import UIJaJP from '@univerjs/ui/locale/ja-JP'import '@univerjs/design/lib/index.css'import '@univerjs/ui/lib/index.css'import '@univerjs/docs-ui/lib/index.css'例で使用する facade パッケージを読み込みます。
TypeScriptimport '@univerjs/engine-formula/facade'import '@univerjs/ui/facade'import '@univerjs/docs/facade'import '@univerjs/docs-ui/facade'Univer インスタンスを作成し、プラグインを登録します。
TypeScriptconst univer = new Univer({ locale: LocaleType.JA_JP, locales: { [LocaleType.JA_JP]: mergeLocales( DesignJaJP, UIJaJP, DocsUIJaJP, ), },})univer.registerPlugin(UniverRenderEnginePlugin)univer.registerPlugin(UniverFormulaEnginePlugin)univer.registerPlugin(UniverUIPlugin, { container: 'app',})univer.registerPlugin(UniverDocsPlugin)univer.registerPlugin(UniverDocsUIPlugin)const univerAPI = FUniver.newAPI(univer)univerAPI.createDocument({})
univer.registerPlugin と univer.registerPlugins メソッド
univer.registerPlugin メソッドは、Univer インスタンスにプラグインを登録するために使用されます。Univer インスタンスを作成した後、このメソッドを呼び出してプラグインを登録できます。
univer.registerPlugin(Plugin, options) メソッドを使用してプラグインを登録できます。ここで Plugin は登録するプラグイン、options はオプションの設定項目で、各プラグインは異なる設定項目を持つ場合があります。
univer.registerPlugins に配列を渡して複数のプラグインを一度に登録することも可能です。これは、プラグインを一元管理する必要があるシナリオで便利です。
univer.registerPlugins([ UniverRenderEnginePlugin, UniverFormulaEnginePlugin, [UniverUIPlugin, { container: 'app', }], UniverDocsPlugin, UniverDocsUIPlugin,])一部プラグインの遅延読み込み
プラグインモードの利点は、プラグインの読み込みタイミングを柔軟に制御できる点です。代表的な方法として、初期化時に必須プラグインのみ読み込み、初回レンダリング後に一部プラグインを読み込む方法があります。
// ...const univerAPI = FUniver.newAPI(univer)univerAPI.createDocument({})import('@univerjs/watermark').then(({ UniverWatermarkPlugin }) => { univer.registerPlugin(UniverWatermarkPlugin, { textWatermarkSettings: { content: 'Hello, Univer!', fontSize: 36, }, })})CDN で Univer を使う
パッケージマネージャーを使わずに試したい場合は CDN で読み込めます。詳細は CDN で Univer を利用 を参照してください。
モバイル対応
以下のモバイルプラグインをエクスポートする SDK パッケージが必要です。すべての @univerjs/* と @univerjs-pro/* の依存関係を同じバージョンに揃えてください。
1.0.0-rc.0 は UniverDocsMobileUIPlugin をエクスポートしません。このモバイルエントリーを含むビルドで以下の例を使用してください。
Univer Docs のタッチ操作にはモバイル UI プラグインを使用します。3 エディターを作成する前に UI モードを選択してください。
上のプラグインモードの例で、次の UI のインポートと登録を createUnit() の前に置き換えます。初期化済みのデスクトップエディターに追加しないでください。モデル、エンジン、言語ファイル、CSS、Facade のインポートは維持します。両クラスは同じパッケージの入口からの名前付きエクスポートです。
import { UniverDocsMobileUIPlugin } from '@univerjs/docs-ui'import { UniverMobileUIPlugin } from '@univerjs/ui'univer.registerPlugin(UniverMobileUIPlugin, { container: 'app' })univer.registerPlugin(UniverDocsMobileUIPlugin)現在の UniverSheetsCorePreset と UniverDocsCorePreset はデスクトップ UI を登録し、mobile: true オプションを持ちません。モバイルではプラグインを明示的に組み合わせます。デスクトッププリセットの後にモバイルプラグインを追加しても UI は置き換わりません。
プラグイン対応表
必要な機能だけを登録し、モデルプラグインと依存関係は維持してください。モバイル UI の提供は、両方の操作画面が同一であることを意味しません。Pro 機能には引き続きライセンスが必要です。バックエンドが必要な機能は、アプリに Univer Server SDK で対応する機能を組み込んでください。
| パッケージ | デスクトップの登録 | モバイルの登録 |
|---|---|---|
@univerjs/ui | UniverUIPlugin | UniverMobileUIPlugin |
@univerjs/docs-ui | UniverDocsUIPlugin | UniverDocsMobileUIPlugin |
@univerjs/drawing-ui | UniverDrawingUIPlugin | UniverDrawingMobileUIPlugin |
@univerjs/thread-comment-ui | UniverThreadCommentUIPlugin | UniverThreadCommentMobileUIPlugin |
@univerjs-pro/shape-editor-ui | UniverShapeEditorUIPlugin | UniverShapeEditorMobileUIPlugin |
@univerjs-pro/chart-ui | UniverChartUIPlugin | UniverChartMobileUIPlugin |
@univerjs-pro/exchange-client | UniverExchangeClientPlugin | UniverExchangeClientMobileUIPlugin |
@univerjs/docs-drawing-ui | UniverDocsDrawingUIPlugin | UniverDocsDrawingMobileUIPlugin |
@univerjs/docs-hyper-link-ui | UniverDocsHyperLinkUIPlugin | UniverDocsHyperLinkMobileUIPlugin |
@univerjs/docs-thread-comment-ui | UniverDocsThreadCommentUIPlugin | UniverDocsThreadCommentMobileUIPlugin |
@univerjs-pro/docs-callout-ui | UniverDocsCalloutUIPlugin | UniverDocsCalloutMobileUIPlugin |
@univerjs-pro/docs-chart-ui | UniverDocsChartUIPlugin | UniverDocsChartMobileUIPlugin |
@univerjs-pro/docs-code-ui | UniverDocsCodeUIPlugin | UniverDocsCodeMobileUIPlugin |
@univerjs-pro/docs-column-ui | UniverDocsColumnUIPlugin | UniverDocsColumnMobileUIPlugin |
@univerjs-pro/docs-formula-ui | UniverDocsFormulaUIPlugin | UniverDocsFormulaMobileUIPlugin |
@univerjs-pro/docs-latex-ui | UniverDocsLatexUIPlugin | UniverDocsLatexMobileUIPlugin |
@univerjs-pro/docs-list-ui | UniverDocsListUIPlugin | UniverDocsListMobileUIPlugin |
@univerjs-pro/docs-quote-ui | UniverDocsQuoteUIPlugin | UniverDocsQuoteMobileUIPlugin |
@univerjs-pro/docs-shape-ui | UniverDocsShapeUIPlugin | UniverDocsShapeMobileUIPlugin |
@univerjs-pro/docs-table-ui | UniverDocsTableUIPlugin | UniverDocsTableMobileUIPlugin |
コンテナーとタッチ操作
コンテナーの高さを明示し、ページの viewport を設定してください。100dvh は動的なビューポートの高さに追従します。対象のモバイルブラウザーでスクロール、ピンチ操作、文字選択、クリップボード、ソフトキーボード表示時の配置を確認してください。幅を狭めるだけではモバイルプラグインに切り替わりません。
UniverMobileUIPlugin の既定値は disableAutoFocus: true で、初期化時にエディターが自動でフォーカスを取得することを防ぎます。
<meta name="viewport" content="width=device-width, initial-scale=1" /><div id="app" style="height: 100dvh"></div>プリセットモードで作成
ここでは 20 行未満のコードで Univer Docs アプリを作成する方法を紹介します。
パッケージマネージャーを使う
プロジェクトにモダンなフロントエンド開発環境があれば、Univer の導入は簡単です。ES Modules に対応したビルドツール(Vite、esbuild、Webpack 5 など)を推奨します。Webpack 4 などを使う場合は追加設定が必要になることがあります。
インストール
使用しているパッケージマネージャーで @univerjs/presets をインストールします。
pnpm add @univerjs/presets @univerjs/preset-docs-corenpm install @univerjs/presets @univerjs/preset-docs-coreyarn add @univerjs/presets @univerjs/preset-docs-corebun add @univerjs/presets @univerjs/preset-docs-core使い方
ビルドツールが package.json の exports をサポートしていない場合(例:Webpack 4)、マッピングされたパスを実際のパスに変更する必要があります。
次のコードで Univer Docs アプリを作成できます。
<div id="app" style="height: 600px"></div>import { UniverDocsCorePreset } from '@univerjs/preset-docs-core'import UniverPresetDocsCoreJaJP from '@univerjs/preset-docs-core/locales/ja-JP'import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'import '@univerjs/preset-docs-core/lib/index.css'const { univer, univerAPI } = createUniver({ locale: LocaleType.JA_JP, locales: { [LocaleType.JA_JP]: mergeLocales( UniverPresetDocsCoreJaJP, ), }, presets: [ UniverDocsCorePreset({ container: 'app', }), ],})univerAPI.createDocument({})ここで返される univerAPI は Univer の Facade API で、Univer の機能を呼び出すために使用します。
@univerjs/presets/preset-docs-core から UniverDocsCorePreset を読み込むこともできますが、exports に対応したビルドツールが必要です。
createUniver メソッド
createUniver は言語、テーマ、プラグインなどを含む設定オブジェクトを受け取り、Univer インスタンスと Facade API インスタンスを返します。
設定オブジェクトの主な項目:
locale:言語環境。LocaleTypeの列挙値。locales:言語パック。キーが言語環境、値が言語パック。theme:テーマ(任意)。presets:登録するプリセット配列(例:UniverDocsCorePreset)。plugins:追加で登録するプラグイン配列。
プリセットに含まれないプラグインや独自プラグインを使う場合は plugins に登録します。Univer インスタンスを取得した後に univer.registerPlugin で登録することもできます。
createUniver の詳細は API Reference / createUniver を参照してください。
CDN で Univer を使う
パッケージマネージャーを使わずに試したい場合は CDN で読み込めます。詳細は CDN で Univer を利用 を参照してください。
その他のリリース
安定版リリースに加えて、Univer は alpha/beta および nightly チャンネルも提供しています。これらのバージョンでは、まだ正式にリリースされていない最新機能に早期にアクセスできます。ただし、機能が多いということはリスクも多いということを覚えておいてください。これらのバージョンにはバグ、不完全な機能、または不安定な機能が含まれている可能性があります。可能な限り、本番環境でのこれらのバージョンの使用は避けてください。
Alpha/Beta リリース
Univer 開発チームが新機能や重要な変更を完了すると、alpha または beta チャンネルにプレリリースすることがあります。以下のコマンドを使用して Univer パッケージの alpha/beta バージョンをインストールできます:
pnpm add @univerjs/<package-name>@alpha # Alpha バージョン
pnpm add @univerjs/<package-name>@beta # Beta バージョンnpm install @univerjs/<package-name>@alpha # Alpha バージョン
npm install @univerjs/<package-name>@beta # Beta バージョンyarn add @univerjs/<package-name>@alpha # Alpha バージョン
yarn add @univerjs/<package-name>@beta # Beta バージョンbun add @univerjs/<package-name>@alpha # Alpha バージョン
bun add @univerjs/<package-name>@beta # Beta バージョンalpha/beta バージョンを使用中に問題が発生したり、フィードバックがある場合は、GitHub Issues から Univer 開発チームに報告してください。
これらの早期リリースについてのフィードバックを歓迎します。
次のステップ
Footnotes
-
Facade は、登録済みプラグインの機能をアプリケーションから操作する API です。Facade のエントリをインポートすると API メソッドが追加されますが、機能プラグイン自体は登録されません。 ↩
-
peerDependenciesは、ホストアプリケーションが互換性のあるバージョンを用意する依存パッケージです。Univer とアプリケーションが React などのライブラリを共有できます。 ↩ -
モバイル UI プラグインは初期化時にタッチ用の部品とサービスを選択します。端末の自動判定や、ウィンドウサイズ変更による既存インスタンスの切り替えは行いません。モードを変更する場合は文書の状態を保存し、旧インスタンスを破棄してから選択したプラグインで初期化します。 ↩
このガイドはいかがですか?