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

Ghost の Amazon リンクカードをなおす(1)

このブログは Ghost (Pro)というホスティングサービスを使っている。Ghost 自体はオープンソースのブログシステムで、それをフルマネージドで使えるサービスが Ghost (Pro) だ。 Ghost: The best open source blog & newsletter platformBeautiful, modern publishing with email newsletters and paid subscriptions built-in. Used by Platformer, 404Media, Lever News, Tangle, The Browser, and thousands more.Ghost - The Professional Publishing PlatformGitHub - TryGhost/Ghost: Independent

『ヒルビリー・エレジー』、『教養としての金利』、『正しい家計管理』

いくつか本を読んだので感想を書いておく。 ヒルビリー・エレジー(J・D・ヴァンス著) Amazon.co.jp: ヒルビリー・エレジー~アメリカの繁栄から取り残された白人たち~ (光文社未来ライブラリー) eBook : J・D・ヴァンス, 関根 光宏, 山田 文: KindleストアAmazon.co.jp: ヒルビリー・エレジー~アメリカの繁栄から取り残された白人たち~ (光文社未来ライブラリー) eBook : J・D・ヴァンス, 関根 光宏, 山田 文: Kindleストアフォロー J・D・ヴァンスというアメリカ人が自分の生い立ちについて語った回想記。彼の故郷がアメリカの「ラストベルト」だったことが話題となり「アメリカの実情をかたる本」としてベストセラーとなった。その後は彼は上院議員になり、今やアメリカ合衆国の副大統領となった。 彼は高校を卒業し海兵隊に行き、州立大学を卒業後にイェール大学のロースクールを修了している。その後、

小学生の子供に Apple Watch を持たせて感じたこと

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

Apple Watch で au ウォッチナンバープランを契約する

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