CKEditor で Source Editing プラグインを使うとき

サイドプロジェクトで JavaScript の WYSWIG エディタの CKEditor というのを触る機会があった。

CKEditor 5 | Powerful Framework with Modular Architecture
Easy to customize RichText Editor with a powerful framework, a modular architecture, and modern features like Collaborative Editing.

これにはいろいろなプラグインがあり、HTML を直接編集するプラグインを使いたかったのだけどちょっと苦労したのでメモしておく。ちなみに CKEditor のバージョンは 5 です。

CKEditor プラグイン

CKEditor でプラグインを使うためには、基本的には自分でプラグイン取り込んで配布ファイルを自前でビルドする必要がある。github からクローンして手元でビルドしても大丈夫だけど、さすがに大変なのでオンラインビルドツールが用意されている。

CKEditor 5 Builder
Create and customize your online editor with CKEditor 5 Builder. Choose features, set up your editor, and see changes in real-time.

ここで任意のプラグインを選択しビルドされたファイルをサーバーにアップロードして script src で読み込めば良い。あとは、利用するプラグインに応じで config を設定する必要がある。

ちなみに <script> タグでビルドされたプラグインを読みこむだけでは使えないので注意。公式サイトにも書いてある。


ただ、この方法だと自分で配布環境を用意しないといけないのでめんどくさい。そこで便利な方法として公式プラグインが全部入った配布ファイルが用意されている。

Predefined builds | Legacy CKEditor 5 documentation
Learn how to install, integrate, configure, and develop CKEditor 5. Get to know the CKEditor 5 Framework. Browse through the API documentation and online samples.

これを使うが非常に楽で今回はこのビルドを使った。ただ、デメリットもあるので考慮したほうがよい。

  • 不要なプラグインも全て入るので読み込みが遅くなる。
  • 不要なプラグインを明示的に除去しないとだめ。
    • ここに詳しく書いてある

ちなみに、Source Editing はデフォルトではセキュリティのために編集できるタグの種類がかなり制限されている。それを緩和するには下記の設定をいれる。

htmlSupport: {
    allow: [
        {
            name: /.*/,
            attributes: true,
            classes: true,
            styles: true
        }
    ]
}

このようにすべて許可するのが楽だが誰でも投稿できるところでこれをすると脆弱性となるので注意する。管理者しか使えないような場面では大丈夫だと思うが。

Source Editing のバグ

Source Editing で inline 要素の中に <br> で改行をいれると要素が2つに分かれてしまうというバグがあった。github で issue になっているがなかなかなおらなさそうだった。

Should `br` break inline elements? · Issue #1068 · ckeditor/ckeditor5
At this moment if you press Shift + Enter inside an inline element, <br> element won’t be inserted as a chidren of the inline element. The <br> will break the inline element: I’m not sure how it sh…

暫定対応としては schema に下記の対応をいれた。CKEditor の内部編集モデルを理解していないため、これでなおる理屈はよく分かっていない。とりあえずは解決したので紹介しておく。

editor.model.schema.extend('softBreak', {
  allowAttributesOf: '$text'
});

Read more

小学生の子供に Apple Watch を持たせた

小学生の子供との連絡用に Apple Watch SE2 持たせるようにしました、という話。 みまもり GPS 小学校に入学してからみまもりのために GPS を持たせていた。使っていたのはみてねのみまもりサービス。月額500円くらい。 【公式】みてねみまもりGPS-CMで話題!子どもを見守るGPS2023年新規利用者数No.1。みてねの子供向けGPS端末。長持ちバッテリー搭載で最大2ヶ月充電不要。最高水準の位置情報精度で登下校の移動履歴、出発到着の通知をスマホで簡単に見守り。簡単操作のお知らせボタン付き(第3世代)で緊急時も安心安全。未就学児から小学生の子供まで持ち運びしやすい小型で精度の高いGPSトラッカー「みてねみまもりGPS」家族アルバム みてね これはなかなか使い勝手がよくてアプリの出来や位置の精度含めて不満はなかった。ただ、子供が高学年にさしかかってきて習い事や塾、友達と遊びに行くという機会が増えてきたので、通話したりメッセージをやりとりしたくなってきた。というわけで、うちもそろそろスマホかケータイか何か持たせた方がいいかなと思って検討を始めた。 スマートウォッ

ブログ移行した(再び)

ブログを Wordpress から Ghost に移行しました。 ちょうど 1 年前にはてなブログから Wordpress に移行したけど書く頻度がけっこう下がってしまっていた。やっぱり Wordpress って全体的に too much な感じで自分の好みとあまりマッチしなかった。フルマネージドの Wordpress.com を使ったけど、シンプルにブログだけ書きたい自分の方向性とあってなかった。個人で EC したりとかそういう向けかな。使いたいテーマが Premium しかなくて年額15,000円くらい払ったけど、テーマの満足度も低くていまいちだった。 ブログホスティングサービスどれがいいんだろうと思っていろいろ探したが、ばっちり自分と合うようなものはなかなか見つけられなかった。Substack がいいのかな?と思ったりしたけど、ニュースレターという感じでもないし SEO が低そうだと思って候補から外した。それこそ Next.js で自作したり、Github Page でホスティングするほうが自分でいくらでもシンプルにできるよなーとは思ったけど、絶対続かなくなるからそれはやめた

『三体III 死神永生』(劉慈欣著)を読んだ

ついに読み終わった。三体Ⅲ。 Amazon.co.jp: 三体3 死神永生 上 (ハヤカワ文庫SF) eBook : 劉 慈欣, 大森 望, 光吉 さくら, ワン チャイ, 泊 功: 本Amazon.co.jp: 三体3 死神永生 上 (ハヤカワ文庫SF) eBook : 劉 慈欣, 大森 望, 光吉 さくら, ワン チャイ, 泊 功: 本フォローAmazon.co.jp: 三体3 死神永生 下 (ハヤカワ文庫SF) eBook : 劉 慈欣, 大森 望,

2024年上半期に読んだ本

上半期にいくつか本を読んだので簡単に記録しておく。 『確率思考 不確かな未来から利益を生みだす』 アニー・デューク著 Amazon.co.jp: 確率思考 不確かな未来から利益を生みだす eBook : アニー・デューク, 長尾 莉紗: KindleストアAmazon.co.jp: 確率思考 不確かな未来から利益を生みだす eBook : アニー・デューク, 長尾 莉紗: Kindleストアフォロー プロのポーカープレイヤーが意思決定のプロセスについて書いた本。確率な思考によって意思決定の質があがるという話。現実世界はポーカーや麻雀のように不完全情報ゲームに近く、そのような環境でどうやって意思決定をするべきか、どうやって結果から意思決定を評価するかについて書いている。 こういう系の本は好きでよく読むけど、振り返ってみるとやっぱり結果を「成功」「失敗」の二値で考えていたような気がする。また、確率的に考えることによってたとえ結果が失敗でも自分を許せるようになる、というのはその通りだなと思った。 『欲望の見つけ方』 ルーク・バージス著 Amazon.co.jp: 確率思考 不