ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
CKEditor 5 とは
CKEditor 5 は、Web ページ内に組み込めるリッチテキストエディタ(WYSIWYG)。ブログ・CMS・コメント欄・問い合わせフォーム等で使われ、Markdown より直感的にユーザが装飾入力できます。
主要なビルド:
- Classic: ツールバー固定、最も標準的
- Inline: テキスト周辺にフローティングツールバー
- Balloon: 選択範囲にバルーン表示
- Document: ページ全体エディタ風
方法 1: CDN(最速)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CKEditor 5 サンプル</title>
</head>
<body>
<div id="editor">
<p>ここに入力できます。</p>
</div>
<script src="https://cdn.ckeditor.com/ckeditor5/41.4.2/classic/ckeditor.js"></script>
<script>
ClassicEditor
.create(document.querySelector("#editor"))
.then(editor => {
window.editor = editor;
})
.catch(error => {
console.error(error);
});
</script>
</body>
</html>
方法 2: npm
# インストール
$ npm install --save @ckeditor/ckeditor5-build-classic
# JavaScript
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
ClassicEditor
.create(document.querySelector("#editor"))
.then(editor => console.log(editor))
.catch(err => console.error(err));
Vue.js で使う
# 公式コンポーネント
$ npm install --save @ckeditor/ckeditor5-vue @ckeditor/ckeditor5-build-classic
<!-- App.vue -->
<template>
<ckeditor
:editor="editor"
v-model="editorData"
:config="editorConfig"
/>
</template>
<script>
import CKEditor from "@ckeditor/ckeditor5-vue";
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
export default {
components: {
ckeditor: CKEditor.component
},
data() {
return {
editor: ClassicEditor,
editorData: "<p>初期値の HTML</p>",
editorConfig: {
toolbar: ["heading", "|", "bold", "italic", "link", "bulletedList", "numberedList"]
}
};
}
};
</script>
React で使う
# インストール
$ npm install --save @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic
import { CKEditor } from "@ckeditor/ckeditor5-react";
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
function MyEditor() {
return (
<CKEditor
editor={ClassicEditor}
data="<p>初期 HTML</p>"
onChange={(event, editor) => {
const data = editor.getData();
console.log(data);
}}
/>
);
}
主要 API
// 値の取得
const html = editor.getData();
// → "<p>入力した <strong>太字</strong> テキスト</p>"
// 値の設定
editor.setData("<p>新しい初期値</p>");
// 編集を無効化(リードオンリー)
editor.enableReadOnlyMode("my-lock");
editor.disableReadOnlyMode("my-lock");
// 破棄
await editor.destroy();
// イベント
editor.model.document.on("change:data", () => {
console.log("内容が変更されました:", editor.getData());
});
editor.editing.view.document.on("focus", () => console.log("フォーカス"));
editor.editing.view.document.on("blur", () => console.log("ブラー"));
ツールバーのカスタマイズ
ClassicEditor
.create(document.querySelector("#editor"), {
toolbar: {
items: [
"heading", "|",
"bold", "italic", "link", "|",
"bulletedList", "numberedList", "|",
"blockQuote", "insertTable", "|",
"undo", "redo"
]
},
heading: {
options: [
{ model: "paragraph", title: "段落", class: "ck-heading_paragraph" },
{ model: "heading1", view: "h1", title: "見出し 1", class: "ck-heading_heading1" },
{ model: "heading2", view: "h2", title: "見出し 2", class: "ck-heading_heading2" }
]
},
language: "ja", // 日本語化
link: {
addTargetToExternalLinks: true,
defaultProtocol: "https://"
}
});
画像アップロード
標準ビルドは画像アップロード機能が含まれません。サーバー連携が必要:
// 簡易アップロードアダプタ
class MyUploadAdapter {
constructor(loader) { this.loader = loader; }
upload() {
return this.loader.file.then(file => new Promise((resolve, reject) => {
const data = new FormData();
data.append("upload", file);
fetch("/api/upload", { method: "POST", body: data })
.then(r => r.json())
.then(result => resolve({ default: result.url }))
.catch(reject);
}));
}
abort() {}
}
ClassicEditor.create(document.querySelector("#editor"))
.then(editor => {
editor.plugins.get("FileRepository").createUploadAdapter = (loader) => new MyUploadAdapter(loader);
});
日本語化
多言語ビルドではないため、日本語パッケージのインストールが必要:
# 日本語版 (npm)
$ npm install --save @ckeditor/ckeditor5-build-classic
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
import "@ckeditor/ckeditor5-build-classic/build/translations/ja";
ClassicEditor.create(document.querySelector("#editor"), {
language: "ja"
});
セキュリティ注意
- HTML サニタイズ: ユーザ入力をそのまま保存・表示すると XSS の温床。サーバ側で sanitize(DOMPurify 等)必須
- 画像 URL のホワイトリスト:
imageUploadUrlは信頼できるエンドポイントのみ - iframe / script タグ無効化: 危険なタグは config の
htmlSupportで除外
カスタムビルド
機能を絞った軽量ビルドを作りたい場合:
- Online Builder: 公式ビルダーで必要なプラグインを選択 → 自分専用ビルドをダウンロード
- npm + Webpack: 自前のプロジェクトで個別パッケージを組み合わせ
関連記事
📸 参考画像
※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。


ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?