日が経過しています。情報の鮮度にご注意ください
文中のすべての
https://prosemirror.xheldon.comリンクはhttps://prosemirror.netリンクに置き換えて、原文の参照を確認できます。
2年前、私はProseMirrorプロジェクトを開始しました。それは、[より良い](/tech/ProseMirror.html)WYSIWYG編集方法を試したいと思ったからです。今日、私はこのライブラリの1.0バージョンをリリースしました。プロジェクトのアーキテクチャと内部実装はそのライフサイクルの中で大きく変化しましたが、当初の目標は達成されたと感じています。
ProseMirrorはWeb UIライブラリですが、Webプラットフォームの強みと(特に)弱点に対処するいくつかの課題を解決するものであり、単なるTinyMCEの代替品とは見なさないでください。むしろ、それはより汎用的なリッチテキスト編集の方法であり、たまたまブラウザ上でJavaScriptで実装されています(つまり、このライブラリのロジックを他の言語バージョンのリッチテキストエディタ、例えばOCバージョンなどに翻訳できるという意味です—訳者注)。
Scheme制約に基づく編集
ProseMirrorで最も重要なのは、実際のドキュメントコンテンツに依存しないことです。これにより、過去には完全にカスタムなエディタ実装が必要だったアプリケーションを、このライブラリ上に構築することが可能になります。
私がドキュメントコンテンツに依存しないと言うとき、それはProseMirrorのScheme制約機能を指します。コアエディタはドキュメントの具体的な内容について何も要求せず、代わりに設定可能なデータ(scheme)を見て、どのような内容が許可され、どのような構造を構成するかを決定します。ProseMirrorは、正確にあなたが必要とするカスタムセマンティックドキュメントフォーマットと共に動作し、同時にユーザーが慣れ親しんだWYSIWYG編集スタイルを提供します。
例えば、科学論文執筆アプリケーションは、章、脚注、参考文献を含むschemeを使用できます—そのようなアプリケーションの2つ、SciFlowとFidus Writerは既にProseMirror上に構築されています。あるいは、ニュース組織はそのコンテンツモデルを反映したschemeを構築し、記者が執筆できるエディタを提供できます。例えば、ニューヨーク・タイムズはそのCMSでProseMirrorを使用しています。または、もしあなたの会社がいくつかの異なるコンテンツモデルのエディタを持っている場合、異なるschemeでProseMirrorを使用することで、エディタコードをより統一しやすくできます。Atlassianは、wikiからバグトラッカー、ソースコードホスティングまで、その製品群でProseMirrorを採用しています。
コラボレーション
[コラボレーション編集](/tech/Collaborative-Editing-in-ProseMirror.html)のサポートは、最初からProseMirrorの重点の一つでした。ドキュメント更新の表現方法や、元に戻す履歴モジュールの動作など、システムのいくつかの側面は、コラボレーション編集の要件に強く影響されています。私は、これは既存のエディタに後から拡張できる機能ではないと確信しています。
幸い、これらの制約は設計を不快な隅に追いやるのではなく、一般的に有益な方向に推進するのに役立ちました。変更の追跡や過去の変更をロールバックする能力など、他のいくつかの難しい機能は、コラボレーション編集に関連する設計決定によって実現されました。
トランザクショナルな状態更新
コラボレーション編集の要件と一方向データフローアーキテクチャを組み合わせようとする試みは、エディタが一方的にその状態を更新するのではなく、トランザクションを発行するという私たちの設計につながりました。トランザクションは新しい状態を計算するために使用でき、それを使ってエディタを更新します。
これは、もし望むならば、アプリケーションのデータフローサイクルにエディタをシームレスに統合することをほぼ可能にします。さらに、更新を第一級の値として扱うことで、外部状態をエディタと同期させることがより簡単になり、新しい強力な拡張タイプが可能になります。
まとめ
何年もの狂気の実験と変化を経て、1.0バージョンからは安定を目指しています。コアモジュールはできるだけ長く1.xにとどまり、新しいバージョンでコードを変更する必要がないようにします。RFCプロセスがあり、コミュニティから新機能に関するフィードバックを得るために使用します。
もしあなたがシンプルなプラグイン式のリッチテキストエディタコンポーネントを探しているなら、ProseMirrorはあなたが必要とするものではないかもしれません。(私たちは確かにそのようなコンポーネントがProseMirrorで構築されることを望んでいます)。このライブラリは、要求の厳しい、高度に統合されたユースケースのために最適化されており、シンプルさを犠牲にしています。しかし、もしあなたのアプリケーションがWYSIWYGエディタの限界に挑戦しているなら、試してみてください。
人生の重要な選択に直面したとき、最善の方法を誰かが教えてくれて、貴重な時間を無駄にせずに済めばと、私はよく願っています。だからこそ、自分の経験を踏まえて頻繁にブログを書き、広大なインターネットのこの小さな片隅に、私にとって一度きりの人生経験を記録し、助けを求める人々の力になれればと思っています。