react-quillとEditor.jsを中心に、テキストエディタライブラリの特徴・利点・懸念点を比較。選定のポイントを詳しく解説!

以前、ノート共有型SNSの投稿フォーム実装についてご紹介という記事でreact-quillのことについて紹介させていただきました。今回は、Reactに対応している複数のテキストエディタライブラリがあった中で、どのように比較検討しQuillを選定することになったのか書いていきたいと思います。

比較したテキストエディタライブラリ

比較項目

  • データ構造
    • 編集前と編集後の差分を保持出来る形式であるか
  • 利点
  • 懸念点

データ構造

  • Deltaという独自のデータ構造

Delta形式

{
  ops: [
    { insert: 'Gandalf', attributes: { bold: true } },
    { insert: ' the ' },
    { insert: 'Grey', attributes: { color: '#cccccc' } }
  ]
}

利点

  • 日々メンテナンスが行われていて、開発が活発 2020/08/23時点
  • Toolbarのメニューは自由にカスタマイズ可能
  • 入力された情報を都度検知出来る
  • 選択された文字の色・背景色を変更することが可能
  • 写真・URLでビデオが入れられる
  • moduleを使うことでカスタマイズが容易

懸念点

  • 閲覧者モード(Read only mode)は提供されている機能として備わっていない
    • 閲覧者モードとは、プレビューのみで編集は出来ないモードを指します。Qiitaでいうプレビューモードです。
    • Toolbarの位置を変更しUIを調整する & 閲覧者モードでは不要のイベントハンドラを無効にすることで対応可能

Editor.js

データ構造

  • JSON形式

BlockInlineという概念があり、Block単位でオブジェクトが管理される。

{
   "time": 1550476186479,
   "blocks": [
      {
         "type": "header",
         "data": {
            "text": "Editor.js",
            "level": 2
         }
      },
      {
         "type": "paragraph",
         "data": {
            "text": "Hey. Meet the new Editor. On this page you can see it in action — try to edit this text. Source code of the page contains the example of connection and configuration."
         }
      },
      {
         "type": "header",
         "data": {
            "text": "Key features",
            "level": 3
         }
      },
      {
         "type": "list",
         "data": {
            "style": "unordered",
            "items": [
               "It is a block-styled editor",
               "It returns clean data output in JSON",
               "Designed to be extendable and pluggable with a simple API"
            ]
         }
      }
   ],
   "version": "2.8.1"
}

太字やハイパーリンク,文字の色・背景色はInlineで定義され、HTMLタグで表現される。

{
    "type" : "list",
    "data" : {
    "style" : "unordered",
    "items" : [
    "Hey. <b>Meet</b> the new Editor. On this page you can see it in action — try to edit this text."
        ]
    }
}

対応形式

公式で用意されているスタイルは以下の通りです。自作したスタイルを設定することも可能。

Block

  • Header(h1, h2, ...)
  • Image
  • List
  • Link
  • Code
  • Quote
  • Delimiter
  • Table
  • Raw HTML

Inline

  • Bold
  • Italic
  • Link
  • InlineCode
  • Maker

利点

  • 選択文字列の色・背景色を変える機能が用意されている
  • ショートカットが定義可能
定義したショートカットのアシスト表示
定義したショートカットのアシスト表示
  • Blockから他のBlockへの変換ができる(h1->h2, text->List, etc...)
Blockから他のBlockへの変換
Blockから他のBlockへの変換
  • Blockの入れ替えが出来る
Blockの入れ替え
Blockの入れ替え

懸念点

  • 閲覧者モード(Read only mode)は実装中2020/08/23時点
    • 現段階で実現するのであれば、Block,Inlineツールの閲覧者バージョンを実装する必要があると考えられる。
    • Blockの並び替え機能とBlockの新規追加を無効にできれば、閲覧者モードとして使えそうだが、本家のJSをオーバーライドする必要が生まれるかもしれない。私たちの結論としては、自分たちでカスタマイズするには実装コストが大きい。

その2へ

AIを仕事の仕組みに変えたい20代へ

AIを使うだけでなく、1業務をチームの仕組みへ

社会人1〜3年目が身近な1業務を選び、人とAIの役割を分け、7日で試し、成果を共有する5ステップをまとめました。

若手社員のAI業務改善5ステップを見る
カフェ・オンライン30分の日時を見る