👆 v1.5.1 パフォーマンス強化版リリース →

Excelライブラリ 詳細機能比較 & 実測ベンチマーク

最終更新日: 2026/10/17

Apache POI、openpyxl、PhpSpreadsheet、ExcelJSと osbxl の詳細機能対比、および日常帳票(200行)から中規模(10,000行)・大規模(50,000行)までの実測検証データ

🚀 最新実測レポート公開中

macOS (Apple M4) / Linux (GCP C3・C4) / Windows 3OS総合負荷テスト

macOS (Apple Silicon M4)・Linux (GCP C3 / x86_64, GCP C4 / x86_64)・Windows (x64) で実測した
500行 〜 50,000行(20万セル)の全言語詳細データ、アーキテクチャ考察、OOM回避メカニズムを公開中

📄 GitHubで詳細レポートを読む →
📑 目次(Contents)
⚡

1. 実務標準サイズ「200行(800セル)」3OS 実測比較

業務システムで日常的にエクスポートされる売上明細(200行 × 4列 = 計800セル+SUM計算)を、macOS (Apple Silicon M4)・Linux (GCP C4 / x86_64)・Windows (x64) の同一条件下 で計測しました。

🍎 macOS (Apple Silicon M4 / 16GB 統一メモリ) 全言語で 0.004秒〜0.064秒 の超即時応答
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
☕ Java 1.8 Apache POI: 0.310s 0.064s (14.0KB) 0.066s 4.84倍 高速
🐘 PHP 8.5 PhpSpreadsheet: 0.018s 0.007s (14.0KB) 0.012s 2.52倍 高速
🟢 Node.js 24 ExcelJS: 0.005s 0.004s (12.5KB) 0.008s 1.30倍 高速
🐍 Python 3.14 openpyxl: 0.005s 0.004s (12.5KB) 0.008s 1.37倍 高速
🐧 Linux (GCP C4 / Ubuntu 24.04 x86_64 サーバー環境) 全言語で 0.007秒〜0.110秒 の超高速スループット
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
☕ Java 1.8 Apache POI: 0.542s 0.110s (14.0KB) 0.122s 4.93倍 高速
🐘 PHP 8.5 PhpSpreadsheet: 0.017s 0.007s (14.0KB) 0.012s 2.43倍 高速
🟢 Node.js 24 ExcelJS: 0.011s 0.008s (12.8KB) 0.011s 1.32倍 高速
🐍 Python 3.14 openpyxl: 0.011s 0.007s (12.8KB) 0.011s 1.71倍 高速
🪟 Windows (Microsoft Windows x64) Java / PHP で確実な優位性を実証
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
☕ Java 1.8 Apache POI: 0.666s 0.526s (14.0KB) 0.527s 1.27倍 高速
🐘 PHP 8.5 PhpSpreadsheet: 0.099s 0.051s (12.5KB) 0.088s 1.92倍 高速
🟢 Node.js 24 ExcelJS: 0.041s 0.052s (12.5KB) 0.087s 0.79倍 (ExcelJSの方が高速 / 0.011秒差)
🐍 Python 3.14 openpyxl: 0.027s 0.051s (12.5KB) 0.092s 0.53倍 (openpyxlの方が高速 / 0.024秒差)
💡 setOnlyMode(高速書き込みモード)とは?
・概要: 値を設定するだけで、サーバー側での数式計算は行わないモードです。
・なぜ速いか: 通常モードの内蔵エンジン(約500関数)による関数計算を一切行わないため、通常比で 約2〜3.4倍 高速に書き出せます。
・Microsoft Office での互換性: 生成されたファイルを実際の Excel で開いた際に、Excel 自身の自動計算機能によって正確な計算値が入るため、ダウンロード用帳票として完全な互換性を保ちます。(※「開くまで計算結果がわからない」ため、サーバー側で合計値を参照したい場合は通常モードをご利用ください。)
📈

2. 中規模業務データ「10,000行(40,000セル)」3OS 実測比較

月次取引明細や商品マスターなど、実務のWebシステムで最も頻繁に出力される 10,000 行(40,000 セル + SUM計算) での測定結果です。
既存ライブラリが 0.3 秒〜 2 秒以上を要して「ユーザー待たされ感」が生じ始める中、osbxl は全環境で 0.09 〜 0.2 秒台(GCP C4 では全言語 0.1 秒〜 0.2 秒台)の圧倒的なレスポンス を記録します。

🐧 Linux (GCP C4 / Intel Emerald Rapids Xeon 8581C 4vCPU) Node.js 0.1秒切り・PHP 7.48倍高速
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
🐘 PHP 8.5 PhpSpreadsheet: 0.753s 0.101s (300.0KB) 0.228s 7.48倍 高速 ⚡
🟢 Node.js 24 ExcelJS: 0.230s 0.099s (278.3KB) 0.226s 2.33倍 高速 ⚡
🐍 Python 3.14 openpyxl: 0.310s 0.105s (300.0KB) 0.232s 2.95倍 高速
☕ Java (JDK 24) Apache POI: 1.142s 0.272s (300.0KB) 0.428s 4.20倍 高速
🍎 macOS (Apple Silicon M4 mini / 10コア / 16GB 統一メモリ) PHP 4.5倍・全言語 0.1秒台
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
🐘 PHP 8.5 PhpSpreadsheet: 0.862s 0.191s (300.0KB) 0.425s 4.50倍 高速 ⚡
🟢 Node.js 24 ExcelJS: 0.098s 0.116s (278.3KB) 0.380s 0.84倍 (ExcelJSの方が高速 / 0.018秒差)
🐍 Python 3.14 openpyxl: 0.169s 0.126s (300.0KB) 0.420s 1.34倍 高速
☕ Java (JDK 24) Apache POI: 0.778s 0.428s (300.0KB) 0.587s 1.82倍 高速
🪟 Windows (Microsoft Windows x64) PHP 約11倍高速・全言語で圧倒
言語系統 相手方ライブラリ osbxl (setOnly=True) osbxl (通常モード) 対相手方 高速化
🐘 PHP 8.5 PhpSpreadsheet: 2.333s 0.213s (300.0KB) 0.591s 10.98倍 高速 ⚡
🟢 Node.js 22 ExcelJS: 0.320s 0.210s (300.0KB) 0.621s 1.52倍 高速
🐍 Python 3.14 openpyxl: 0.406s 0.216s (300.0KB) 0.659s 1.88倍 高速
☕ Java 1.8 Apache POI: 1.427s 0.636s (300.0KB) 1.016s 2.24倍 高速
💡 実務における 10,000 件データ(中規模)の決定的な意義:
・PHP / Java サーバーのタイムアウト・遅延を解消: PhpSpreadsheet や Apache POI では 1〜2 秒以上かかり、同時アクセスが集中すると Web ワーカープロセスが詰まる原因になりますが、osbxl ならわずか 0.1〜0.2 秒で処理を完了し即座にワーカーを解放します。
・Node.js での 0.1 秒切り(99ms): シングルスレッドイベントループのブロック時間を 0.1 秒未満に抑えるため、大量の API リクエストを捌くマイクロサービスにも安心して組み込めます。
💥

3. 大規模データ限界負荷テスト(50,000行 / 200,000セル)

明細行数を 50,000 行(200,000 セル + SUM計算) まで増やした際、既存ライブラリが直面するメモリ枯渇の瞬間と osbxl の完走データです。
全 OS において、PhpSpreadsheet と Apache POI はメモリ上限で例外なく OOM(メモリ不足)強制終了 しますが、osbxl は最小ヒープのまま全環境で安全に完走します。

❌ PhpSpreadsheet (PHP 8.5 / Linux & Windows)
Fatal error: Allowed memory size of 268435456 bytes exhausted
→ 256MBのPHPメモリ上限を突破し、セルオブジェクト展開中にプロセス強制終了。
❌ Apache POI (Java 1.8 / Linux & Windows)
java.lang.OutOfMemoryError: Java heap space
→ -Xmx256m ヒープ上限に達し異常終了。制約の多い SXSSF への書換が不可避。
OS プラットフォーム PHP 8.5 (50k行) Python 3.14 (50k行) Node.js 24 (50k行) Java 1.8 (50k行)
🍎 macOS
Apple M4 mini (16GB)
1.085 秒
メモリ 63MB (相手方OOM発生)
0.621 秒
openpyxl比 1.39倍 高速
0.575 秒
0.5秒台の超高速完走
1.946 秒
POI OOM発生の中、1秒台完走
🐧 Linux
GCP C4 (Xeon 8581C 4vCPU)
0.696 秒
メモリ 32MB (相手方OOM発生)
0.721 秒
openpyxl比 2.21倍 高速
0.679 秒
ExcelJS比 1.40倍 高速
0.972 秒
POI OOM発生の中、0.9秒台完走
🪟 Windows
Windows 11 (x64)
1.011 秒
メモリ 32MB (相手方OOM発生)
0.996 秒
openpyxl比 2.03倍 高速
0.987 秒
ExcelJS比 1.18倍 高速
1.410 秒
POI OOM発生の中、1秒台完走
💡 なぜ osbxl はメモリ枯渇(OOM)を起こさないのか?:
・既存 OSS の構造: セル 1 つひとつ(20 万個)を言語ランタイムのヒープオブジェクトとして確保するため、巨大な GC 停止を招いた挙句、ヒープ上限超過で異常終了(クラッシュ)します。
・osbxl の構造: 2次元配列を渡した瞬間に C++ ネイティブコアへダイレクト転送し、ストリーム指向の内部バッファで OpenXML を直接構築するため、言語側のヒープをまったく汚しません。PHP では 32MB、Node.js でも 95MB の極小メモリのまま安全に完走します。
⭕ osbxl の検証結果: 3 OS すべてにおいて、PHP / Java の相手方ライブラリがクラッシュする極限環境下でも、一切のメモリ枯渇を起こさず完全完走を実証。
📋

4. 詳細機能比較マトリクス(osbxl 基準)

オートフィルター、新旧コメント、ピボットテーブル、暗号化などの詳細な機能対応状況一覧です。

分類 機能項目 osbxl (5言語) Apache POI openpyxl PhpSpreadsheet ExcelJS / SheetJS
基本入出力 .xlsx 新規作成・読み込み・保存 ◎ ◎ ◎ ◎ ◎
大容量データ時のメモリ安定性 ◎ 省メモリ完走 ✕ (5万行OOM発生) △ (遅延大・2.5s超) ✕ (5万行OOM発生) △ (V8ヒープ枠制約)
2次元配列一括投入 (setRangeData / setRangeFormulas) ◎ C++直接転送(数ms) ✕ (1セルずつ生成必須) △ (内部でセル全生成) ✕ (fromArrayでOOM) △ (V8オブジェクト肥大)
数式計算 サーバーサイド数式評価 (Excel非インストール環境での値計算) ◎ 約500関数 ◯ 約300〜400 ✕ (常にNone) △ (一部のみ・低速) ✕ (無償版不可)
構造化参照数式 (例: SUM(Table[小計])) ◎ 完全対応・計算可 △ (保存のみ) ✕ (計算不可) ✕ (計算不可) ✕ (計算不可)
動的配列数式・SPILL (スピル) 対応 ◎ 完全対応・展開計算 ✕ (未対応) ✕ (計算不可) ✕ (未対応) ✕ (未対応)
テーブル テーブル作成 (ListObject) ◎ ◯ (低レイヤ) ◯ ◯ ◯
ビルトイン・テーブルスタイル適用 ◎ △ (XML直書き) △ (不完全) △ (限定的) ◯
集計行 (TotalsRow) とカスタム関数 ◎ ◯ △ △ △
フィルター オートフィルター・条件抽出判定 ◎ (C++高速判定・行非表示) ✕ (範囲枠のみ・判定なし) ✕ (範囲枠のみ・判定なし) ✕ (範囲枠のみ・判定なし) ✕ (範囲指定のみ)
複数キーによる並べ替え (Sort) ◎ (C++ネイティブソート) ✕ (自前実装要) ✕ (自前実装要) ✕ (自前実装要) ✕ (自前実装要)
コメント 新式スレッドコメント (返信スレッド対応) ◎ (スレッド・返信完全対応) △ (低レイヤXMLのみ) ✕ (旧式メモのみ) ✕ (旧式メモのみ) ✕ (未対応)
旧式メモ (黄色い吹き出し・フォント装飾) ◎ ◯ ◯ ◯ ◯
高度機能 ピボットテーブル作成 ◎ 動的作成対応 △ (手動XML操作要) ✕ (新規作成非対応) ✕ (未実装) ✕ (未対応)
グラフ・チャート生成 (2D/3D多数) ◎ ◯ (XDDF) ◯ △ (描画制約) △ (限定的)
セキュリティ パスワード付きExcel書き出し (暗号化) ◎ 標準対応 ◯ (標準搭載) ✕ (別ツール要) ✕ (別ツール要) ✕
暗号化Excelのパスワード解除読み込み ◎ 標準対応 ◯ (標準搭載) ✕ ✕ ✕
開発性・環境 WebAssembly (ブラウザ・エッジ完結動作) ◎ 公式対応 (Wasm 3.0) ✕ △ (巨大ランタイム要) ✕ ◯ (クライアントJS)
5言語100%共通API設計 ◎ (Java/Python/Node/PHP/Wasm) ✕ (Java専用) ✕ (Python専用) ✕ (PHP専用) ✕ (JS専用)
公式AI Skill同梱 (ハルシネーション完全排除) ◎ (Cursor/Copilot等) ✕ (AI誤答率高) ✕ (AI誤答率高) ✕ (AI誤答率高) ✕ (AI誤答率高)
❓

よくある質問(FAQ): 既存ライブラリからの代替・移行

Q. PhpSpreadsheet や Apache POI の代替として osbxl を導入する最大のメリットは何ですか?

最大の強みは「メモリ消費の劇的な削減」と「処理速度の向上」です。PhpSpreadsheet や Apache POI は言語ランタイム上に大量のセルオブジェクトを展開するため、万単位のデータで OOM(Allowed memory size exhausted / Java heap space)によるプロセス強制終了が発生しがちです。osbxl は C++ ネイティブコアがストリーム処理を行うため、メモリ消費を最大90%削減し、50,000行(20万セル)でも 0.6〜0.9 秒台で安全に完走します。

Q. openpyxl や ExcelJS の代替・移行で、数式計算はどう変わりますか?

openpyxl や ExcelJS にはサーバー側で数式を計算するエンジンが搭載されていないため、生成されたファイルを Excel で開くまで値が None や空になってしまいます。osbxl は約500種類の Excel 計算関数エンジンを内蔵しているため、Linux クラウドサーバー等の Excel 非インストール環境でも XLOOKUP、SUM、VLOOKUP などの計算結果をリアルタイムに評価・取得できます。

Q. setOnlyMode(高速書き込みモード)とは何ですか? 通常モードとどう使い分けますか?

setOnlyMode = True は、サーバー側での数式再計算をスキップし、値の設定と高速なファイル出力に特化するモードです。生成された .xlsx は、利用者が Excel で開いた瞬間に自動的に再計算されるため完全な互換性を保ちます。「サーバー側で計算結果を読む必要がなく、ダウンロード速度を最優先したい」日常の帳票出力では、通常比約2〜3.4倍の高速化が可能です。

Q. 5言語(Python / Node.js / PHP / Java / WebAssembly)間で移行コストはかかりますか?

osbxl はすべての言語で 100% 同一の API 設計を採用しています。例えば Python(pyosbxl)で書いた処理ロジックは、Node.js(nodeosbxl)や PHP(phposbxl)へもメソッド名や作法を変えずにそのまま移植可能です。また、Cursor や GitHub Copilot に対応した公式 AI Skill が同梱されているため、コードの自動生成・移行もスムーズに行えます。

手元の環境で osbxl の圧倒的パフォーマンスを体験

全言語(Python / Node.js / PHP / Java / WebAssembly)対応の無料デモ版と公式AI Skill(Cursor / Copilot対応)を今すぐご利用いただけます。