LibreOffice coreをWebAssemblyへビルドする際の実務上の境界
プロジェクト概要:読み取り専用の LibreOffice コア リポジトリ - プル リクエストなし (代わりに gerrit を使用 - zip をダウンロードせず、代わりに使用してください)。
ひと目でわかる
- これは何?
- LibreOfficeの読み取り専用コアリポジトリについて、Qt5とEmscriptenのビルド、UNO連携、制限、開発条件を整理します。
- 誰に向いている?
- LibreOffice/coreは、LibreOffice TechnologyをWebAssemblyへ組み込みたい開発者が、Qt5 GUI付きのWriter向けビルドと、UIを持たないヘッドレスコアを分けて調べるための出発点です。Qt 5.15.2、Emscriptenの版、Cross-Origin分離ヘッダー、pthread、メモリ制限、UNOバインディングの未実装部分を先に確認してください。
- 商用利用できる?
- 条件付きでできます。GPL-3.0 はコピーレフトのライセンスで、これを含むソフトウェアを配布する場合、そのソフトウェアのソースコードを同じライセンスで公開する必要があります。配布せず社内で使うだけなら、この義務は生じません。
- 今もメンテナンスされている?
- されています。直近 1 日以内に新しいコミットがあります。
- 何の言語で書かれている?
- 主に C++ です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
読み取り専用コアリポジトリの意味
LibreOffice/coreは、LibreOfficeのコアコードを保持する読み取り専用のGitHubリポジトリです。リポジトリの説明は、プルリクエストを使わずGerritへ変更を送ること、zipを直接ダウンロードせず公式のバンドルを使うことを明記しています。ライセンスはGPL-3.0で、LibreOfficeはコピーレフトのライセンスに基づく統合オフィススイートとREADMEは説明しています。
素材時点のGitHub情報ではstarsは4,281、forksは926、open issuesは0で、既定ブランチはmasterです。スターやforkの数は関心の規模を示すだけで、WASMビルドの成功や保守契約を表しません。コードへの変更を考える場合は、読み取り用ミラーとGerritでの開発経路を最初に分けて理解します。
Qt5 GUIとヘッドレスコアの二つの道
READMEはWebAssembly向けの目的を二つに分けています。一つはQt5 GUIを持つLibreOfficeのWASMビルドで、例としてWriter専用の構成とqt_soffice.html、qt_vcldemo.htmlをemrunで実行する流れが示されています。もう一つはUIを含めず、LibreOffice Technologyのコアを他のソフトウェアから利用できるようにコンパイルするヘッドレスビルドです。
ヘッドレス構成ではQtが不要で、通常のLibreOfficeビルドで取得とコンパイルを行う依存物以外を必要としないとREADMEは説明しています。autogen.inputには--disable-guiや--with-wasm-module=writerの例があります。自分の目的がブラウザ画面なのか、文書処理コアの組み込みなのかを先に決めると、調べる依存物と出力ファイルが変わります。
QtとEmscriptenの版を固定する理由
QtベースのビルドはQt 5.15.2とEmscripten 4.0.10を使う構成としてREADMEに記載されています。Emscriptenは開発が速く、別の版では問題が起きることが多いという注意もあります。emsdkで4.0.10を導入するコマンドが示され、Qt 5.15 LTSは公開メンテナンスがなく、Qt WASMにも多数のバグがあるためallotropiaの保守版が勧められています。
READMEは、-fwasm-exceptionsとsimulate_infinite_loopの組み合わせ、desktop/source/app/sofficemain.cxxの変更、pthreadとイベントループの関係にも触れています。ヘッドレスビルドではEmscripten 3.1.30、過去のLOとQt5の作業では2.0.31が使われてきたとされます。版を混ぜると原因の切り分けが難しくなるため、ツールチェーンとコミットを記録します。
出力配置とブラウザの分離条件
Qtビルドでは--with-package-format=emscriptenを指定すると、workdir/installation/LibreOffice/emscriptenへinstdirの関連ファイルがコピーされるとREADMEは説明しています。autogen.shはemconfigureを使うように修正され、推奨のディストリビューション設定は--with-distro=LibreOfficeWASM32です。出力にはsoffice.*とqt*が含まれ、それらをtarでまとめる手順が案内されています。
ブラウザから実行するサーバーは、Cross-Origin-Opener-Policy: same-originとCross-Origin-Embedder-Policy: require-corpを送る必要があります。これはファイルを生成しただけでは満たされない条件です。READMEはemsdkの導入が時間とともに安定しないため、lodeのイメージを使ったDockerクロスビルドも説明しています。実際の配信環境でヘッダーとファイル配置を確認してください。
UNOバインディングとJavaScriptの位置
Embindを使ったUNOバインディングは初期実装で、多くの部分が未実装であり、メモリリークの可能性があるとREADMEは明記しています。JavaScriptの例では、Writer文書の先頭へ文字列を挿入する処理と、各段落の色を変更する処理が示されています。どちらもModule.uno_init.thenで初期化してからUNO APIを呼び出します。
ビルドが-sPROXY_TO_PTHREADを使うため、例はLibreOfficeのメインスレッドである最初のWeb Workerのコンソールで実行する必要があります。スクリプトをqt_soffice.htmlの隣に置き、ビルド中にModule.uno_scriptsで読み込む方法もあります。動作例はAPIの接続点を示しますが、UNO全体が完成していることや、長時間実行でのメモリ挙動を示すものではありません。
EmscriptenとQtの既知の制約
READMEは、Emscriptenのモジュールとスレッドを同時に使えないこと、MAIN_MODULEとSIDE_MODULEの実行時シンボル解決に問題があることを記録しています。pthreadのエミュレーションでは、JavaScriptのメインスレッドがイベントループへすぐ応答する必要がありますが、Qt5のイベントループもそこで動くため、-sPTHREAD_POOL_SIZEによるワーカーの事前生成が必要になります。
LibreOfficeは通常、ダイアログでネストしたイベントループを使います。しかしブラウザのイベントループを同じ方法で駆動できず、Application::Executeを捨てる必要があるとREADMEは説明しています。Qtの既定メモリ制限は1GBで、4GBまで増やせるとされます。ICUのバグや、wasm64がまだ32ビットポインタを使う点も挙げられています。これらは実装上の制約として、アプリの要件と照らして評価します。
診断、開発手続き、採用判断
リンクエラーの調査では、ranlibのインデックスに基づくアーカイブのシンボル一覧をnm -sで確認する方法がREADMEにあります。ChromeでLLVMがWASMへ埋め込むDWARF情報を使うデバッグ方法も示され、実験的機能と拡張機能が必要です。デバッグビルドではDWARFが.debug.wasmへ分割されます。
コアのモジュールにはREADMEがあり、docs.libreoffice.orgにまとめられています。sal、tools、vcl、framework、sfx2、svx、desktop、sw、sc、sdといった主要モジュールの役割もREADMEから確認できます。開発環境の要件は、一般のLibreOfficeビルド条件とWASM固有条件を分けて確認してください。QtとEmscriptenの固定、ブラウザヘッダー、UNOの未実装範囲、GPLの配布条件を試験記録に残せる場合に、具体的な組み込み計画へ進みます。
ビルド結果を読むための記録
WASMビルドを試すときは、LibreOfficeのコミット、QtとEmscriptenの版、emsdkの状態、Dockerまたはlodeのイメージ、autogen.inputを保存します。生成されたsofficeとqtのファイル、soffice.data、ブラウザへ送るヘッダーを同じ記録へ結び付けてください。JavaScriptからUNOを呼ぶ試験では、どのWorkerのコンソールを使ったか、文書への変更が保存されたか、長時間実行後にメモリが増え続けないかを確認します。READMEに記載された制限を回避した場合は、その変更を標準仕様と混同せず、独自パッチとして管理します。
編集部の結論
LibreOffice/coreは、LibreOffice TechnologyをWebAssemblyへ組み込みたい開発者が、Qt5 GUI付きのWriter向けビルドと、UIを持たないヘッドレスコアを分けて調べるための出発点です。Qt 5.15.2、Emscriptenの版、Cross-Origin分離ヘッダー、pthread、メモリ制限、UNOバインディングの未実装部分を先に確認してください。READMEは具体的なビルド経路と既知の制約を示しますが、完成したWeb製品、性能、メモリ安全性を保証しません。読み取り専用ミラーとGerritの開発経路も踏まえ、必要な変更を小さなビルドで検証してから採用範囲を決めるべきです。
コミュニティノート