コラム · について

なぜMEA Toolsのライブラリは他人のライブラリを使わずゼロから構築されたのか?

インターネット上のPDFツールやドキュメント変換ツールの多くは、実際には同じオープンソースライブラリの上に美しいインターフェースを被せただけのものです——pdf-lib、pdf.js、mammothなどがあちこちで使い回されています。MEA Toolsはより長い道を選びました。パーサー、コンバーター、暗号関数を自前でゼロから書くという道です。その理由と、そしてすべてが自前というわけではないという例外もあります——それは意図的な決断です。

ゼロから書かれたものは本当に「ゼロから」

MEA ToolsにあるほぼすべてのPDF系ツール——PDF結合、PDF分割、PDF→Word変換、PDFフォーム入力、暗号化や透かしまで——の核となっているpdf-libフォルダを例に挙げます。このフォルダには合計1万行以上、約37個のJavaScriptファイルが含まれており、そのすべてがゼロから書かれています——生のPDFオブジェクトをパースする処理、トークナイザー、コンテンツストリームのインタープリター、xref構造の再構築、ページを画像としてレンダリングするラスタライザーまで。

つまり、MEA Toolsが1つのPDFファイルを「読む」とき、それは誰かのライブラリをそのまま呼び出しているのではありません——PDF仕様に従ってバイト単位でファイル構造を実際に解析するコードが、このツールの要件に合わせて専用に書かれています。他のフォルダでも同様です。画像圧縮のロジック、色変換、QRコード生成、ハッシュ関数まで——すべて自前のコードであり、import一つで済むnpmパッケージを貼り付けたものではありません。

なぜわざわざ自分で書くのか?

これは単なる技術的なこだわりではなく、いくつかの具体的な理由があります。

ただし、すべてが自前というわけではない——それも意図的

この記事を宣伝だけでなく正直なものにするために:MEA Toolsの一部には実際にサードパーティのライブラリやモデルを使っている箇所があり、それは意識的な決断であって見落としではありません。

興味深い部分はコード自体の中にあります。他に意図的に手書きでゼロから書かれなかった唯一の部分は、PDF暗号化用のAES関数です——これはブラウザ標準搭載のWeb Crypto APIを利用しており、自前のAES実装ではありません。その理由はコードのコメントにはっきり書かれています。AESは本当の意味でのセキュリティ(PDFの内容を他者から守る)のために使われており、ブラウザ標準搭載のAES実装はすでに厳格な監査を受けており、タイミング攻撃にも耐性があります——これはセキュリティ監査の保証なしに手動で書き直すには非常にリスクが高い部分です。

比較として、同じツール内のMD5やRC4のハッシュ関数は実際に手動でゼロから書かれています——そこではMD5/RC4は古いPDFデータ形式の要件のために使われているのであって(データの機密性を守る目的ではない)、センシティブなセキュリティ目的ではないためです。

原則

意味があるなら自前で書き、セキュリティに関わるなら実証済みのものを使う

MEA Toolsの哲学は「どんなリスクを冒してもすべて自前で」ではなく——完全にコントロールする意味がある部分は自前で書き、実際のデータセキュリティに関わる部分は監査済みの実装に委ねる、というものです。

すべてのツールを見る →

これはユーザーであるあなたにとってなぜ重要なのか?

裏側の技術的な詳細に過ぎないように聞こえるかもしれません。しかし影響は直接感じられます。自分の要件専用に書かれたツールは、実行時の負荷が軽く、読み込みが速く、動作がより予測可能になる傾向があります——実際には使われない汎用コードの重さを背負っていないためです。そして、PDF暗号化のようにデータセキュリティにとって本当に重要な部分では、すべてを一貫性のためだけに手動で書くよりも、実証済みの実装を使う選択の方がむしろ安全です。

まだ発展途上

もう一つ認識しておくべき重要な点があります。「ゼロから書く」というアプローチは、既製のライブラリをインストールするだけの場合に比べ、新機能の実装により時間がかかるということです。例えばPDF関連だけを見ても、この自前のpdf-libはPDFファイルに対してできることのうちまだ一部しかカバーしていません——PDFフォーマットの世界は広く、MEA Toolsはまだこの地点で止まってはいません。MEA Tools全体として現在も開発・拡張が続けられているため、今ある機能の範囲は最終版ではなく、今後も時間とともに増えていきます。