Webサービスにリッチテキストエディタの機能をつける時、自分でフルスクラッチで書くのは大変です。 Draft.jsを筆頭にOSSで使えるものはいくつかあり、私はSlateを使っています。そんなSlateの現状について、使用者の一人としてざっとまとめていきたいと思います。
なお、2020年11月1日現在の話であり、あなたがこれを見ている時には状況が変わってる部分も多くあると思います。
私がSlateを使い始めた理由
2018年頃、当初はFacebook製のDraft.jsを利用していました。 しかしながらDraft.jsを使って複雑なプラグインを書くのが大変だったのと、何よりDraft.jsで共同編集の実装に必要なノウハウをインターネット上で発見できなかったので、代わりを探し始めました。 これはDraft.jsで共同編集の実装が不可能であるというわけではなく、当時の自分にガイドなく実装できるだけの知識がなかったというだけです。もしDraft.jsで共同編集を実装したい人はGithubのIssueを覗いてみると良いかもしれません。
さて、当時から(今も)SlateはBeta版です。プロダクションでの利用は推奨されていませんでしたが、共同編集へのサポートとプラグインの書きやすさ(内部状態の可読性とAPIの扱いやすさ)から移行を決定しました。 Slateへの移行で共同編集を含む様々なプラグインを実装でき、当時はSlateに満足していました。
現在のSlateの状況
しかしながら2020年末現在、Slateは少し雲行きの怪しい状況にあります。 もちろん悪いニュースだけでなく良いニュースもあるのでそれも含めて紹介していきたいと思います。
作者不在
まず、作者であるIanは2020年になってほとんどSlateに参加していません。Slackはもちろん、GithubのIssueやPull Request(以下PR)にも出てきません。 READMEには作者から「改善が必要な場合は(報告するだけでなく)自分でコントリビュートしてください」というような、まぁ至極当然ではあるのですが、そういう記載が加えられました。
作者はもともと関与している時期とそうでない時期の差が大きかった気がしますが、今年は本当に全然参加していないので、Slateは数人のメンテナが保守的にPRをマージしています。 しかしAPIの変更を伴うような”判断”が必要な議論はあまり進んでおらず、コミュニティ全体の活動が低下しています。バグフィックスのPRでさえ全ては処理できない状況です。
Slackでは「最悪、リポジトリをフォークして使うのが良いよ」というアドバイスが飛び交っております。来年は状況変わるんでしょうか。
日本語入力のサポートはまだ厳しい
以前より良くなっていますが、日本語入力のサポートはまだ厳しい状況が続いています。 厳密に言えば日本語というよりもIMEを使っての入力がよくバグります。例えばSafariではIMEを使って入力すると、常にカーソルが行頭に飛ぶなどの致命的なバグがあります。
バグ自体は良いのですが、問題は修正PRが全くマージされないことです。このPRとかこのPRとか。 Slackでも何度も話題に上がってますが、アクティブなメンテナの中にIMEを使っている人がいないみたいなので致し方ないです。変えたければ自分がメンテナになれって話なので。 何人かはリポジトリをフォークしてIME関連のパッチを当てて使ってるようです。
どうなるAndroidサポート
モバイル対応ですが、iOSはともかくAndroidは現時点で動きません。ちなみにネイティブの話ではなくモバイルのブラウザの話で、ネイティブはターゲット外です。
Androidで動かすためには複雑なハックが必要なようです。そのようなハックを作者Ianが前のバージョンアップ時に全部消しちゃったので、Androidは動かなくなりました。
そこで再度入れようという話になったのですが、Androidサポートは元々Ianではなく別のメンテナが担当していて、その人が金銭的な寄付を求めるという事態になり、コミュニティが若干ざわつきます。 個人的には「お金を払えば作ってもらえるなら最高じゃん」と考えているので、このプロジェクトに寄付しました。
お金は無事集まって完成に向かって走っているようですが、今後どれぐらいメンテされるんでしょうか。
プラグインは超前進
プラグインに関してはとても良いニュースがありました。 SlateはAPIが秀逸でプラグインが作りやすいのですが、Slateに残ってるバグを踏むこともままあり、それなりに詳しくないと品質の高いプラグインは作れません。 そんななか、今年活発に開発されているプラグイン集のslate-pluginsは質と量ともに大変素晴らしいです。
Slateで何ができるかはslate-pluginsのStorybookを見たら分かるといっても過言じゃないぐらいのプラグインの見本市です。 コードも綺麗なのでちょっとソースコードを見れば自分でも拡張できます。 私は自分で書いていたプラグインのほとんど(共同編集など以外)をslate-pluginsにリプレースしました。
slate-pluginsでは今のところGithubでIssueやPRを投げたら反応早いですし、Slackでのチャンネルも活発です。
私のこれから
slate-pluginsは素晴らしいものの、本体の開発状況を考えると雲行きは怪しいと言わざるをえません。申し訳ないですがメンテナになるほどの気力はなく、移行を考えています。
移行先として考えているのはProseMirrorですね。IMEがちゃんと動いてくれて、プラグインが満足に組めればそれで良いので、そこだけ祈ってます。 共同編集については別で書きたいと思うのですが、自分で作らなくてもProseMirrorにはy-prosemirrorというCRDTで動くプラグインがあるので良さそうです。 一応Slateにも似たようなものはありますが、今のところ自分でほとんど書き直すぐらいの気力が必要です。私は実際書き直しました。