ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
CKEditor とは
CKEditor は CKSource 社が開発する OSS の WYSIWYG リッチテキストエディタ。WordPress、GitLab、SAP 等で採用。現行バージョンは CKEditor 5(CKEditor 4 はサポート終了済み)。
| ビルド | 特徴 | 用途 |
|---|---|---|
| Classic | 固定ツールバー + 編集領域 | CMS / フォーム / ブログ投稿 |
| Inline | 編集領域そのものに直接編集 | インライン編集 / Wiki |
| Balloon | 選択時にツールバーが浮かぶ | ミニマルな UI |
| Document | Word 風の見た目 | 長文ドキュメント編集 |
CDN で最速導入
<!DOCTYPE html>
<html>
<body>
<textarea id="editor">
<p>初期値の HTML</p>
</textarea>
<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>
npm でカスタムビルド
npm install @ckeditor/ckeditor5-build-classic
# またはより細かく
npm install @ckeditor/ckeditor5-editor-classic \
@ckeditor/ckeditor5-essentials \
@ckeditor/ckeditor5-paragraph \
@ckeditor/ckeditor5-basic-styles \
@ckeditor/ckeditor5-link \
@ckeditor/ckeditor5-list \
@ckeditor/ckeditor5-imageimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';
ClassicEditor
.create(document.querySelector('#editor'), {
toolbar: [
'heading', '|',
'bold', 'italic', 'underline', '|',
'link', 'bulletedList', 'numberedList', '|',
'imageUpload', 'blockQuote', 'insertTable', '|',
'undo', 'redo'
],
image: {
toolbar: ['imageTextAlternative', 'imageStyle:full', 'imageStyle:side']
},
table: {
contentToolbar: ['tableColumn', 'tableRow', 'mergeTableCells']
},
language: 'ja',
})
.then(editor => {
console.log('Editor was initialized', editor);
})
.catch(error => console.error(error));
主要 API
// HTML を取得
const html = editor.getData();
// '<p>編集された内容</p>'
// HTML をセット
editor.setData('<p>差し替える内容</p>');
// 編集領域を破棄
editor.destroy();
// イベント
editor.model.document.on('change:data', () => {
console.log('変更検知:', editor.getData());
});
// 読み取り専用
editor.enableReadOnlyMode('lockId');
editor.disableReadOnlyMode('lockId');
// フォーカス
editor.focus();
画像アップロード: SimpleUploadAdapter
標準で組み込まれている最も簡単な方法。サーバ側に POST し、JSON で URL を返すだけ:
ClassicEditor.create(document.querySelector('#editor'), {
simpleUpload: {
uploadUrl: '/api/upload-image',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
Authorization: 'Bearer ' + token,
}
}
});
サーバ側(Laravel 例):
<?php
// routes/api.php
Route::post('/upload-image', [UploadController::class, 'image']);
// app/Http/Controllers/UploadController.php
public function image(Request $request) {
$request->validate([
'upload' => 'required|image|max:5120', // CKEditor は 'upload' フィールドで送る
]);
$path = $request->file('upload')->store('uploads', 'public');
$url = asset('storage/' . $path);
// CKEditor が期待するレスポンス形式
return response()->json([
'url' => $url,
]);
}
Django 統合
# pip install django-ckeditor-5
# settings.py
INSTALLED_APPS = [
# ...
'django_ckeditor_5',
]
CKEDITOR_5_CONFIGS = {
'default': {
'toolbar': ['heading', '|', 'bold', 'italic', 'link',
'bulletedList', 'numberedList', 'blockQuote', 'imageUpload'],
},
}
# models.py
from django_ckeditor_5.fields import CKEditor5Field
class Article(models.Model):
body = CKEditor5Field('Body', config_name='default')
# urls.py
urlpatterns = [
path('ckeditor5/', include('django_ckeditor_5.urls')),
]
CKEditor 4 との違い
| 項目 | CKEditor 4 | CKEditor 5 |
|---|---|---|
| 初期化 | CKEDITOR.replace('id') | ClassicEditor.create(el) |
| API | グローバル CKEDITOR | モジュラー / ES6 |
| データモデル | DOM 直接 | 独自仮想 DOM |
| 取得 | editor.getData() | editor.getData() |
| プラグイン | 多数あり | 選り抜き(リライト中) |
| 共同編集 | 非対応 | 対応(商用機能) |
| サポート | 2023 EOL | 現行 |
セキュリティ(XSS 対策)
CKEditor で入力した HTML を表示するときは、サーバ側で必ずサニタイズ:
<?php
// Laravel + HTMLPurifier
$purifier = new HTMLPurifier();
$clean = $purifier->purify($request->input('content'));
// または自前で許可タグだけ残す
$clean = strip_tags(
$request->input('content'),
'<p><br><strong><em><u><a><ul><ol><li><h2><h3><img>'
);
FAQ
Q: 日本語化したい
A: 設定で language: 'ja'。CDN ビルドには日本語訳も同梱されています。
Q: 文字数カウントを表示したい
A: WordCount プラグインを追加。toolbar ではなく editor.plugins.get('WordCount').wordCountContainer でカウンタ要素を取得して挿入します。
Q: 完全に無料で使えるか
A: 基本機能は GPL/MIT 系で無料。共同編集 / 高度な変更履歴 / コメント機能は商用ライセンス(CKEditor Premium)が必要です。
📸 参考画像
※ 旧バージョンから引き継いだ参考画像です。手順・図解の補助としてご覧ください。

ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページ
- CKEditor
- vi
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- UE5のEvent Tickノードの使い方|毎フレーム処理とDelta Seconds 2026-06-13 13:26:37
- UE5のレベルブループリントでキャラクターをスポーンさせる方法 2026-06-13 13:26:37
- UE5のビューポートの使い方|視点操作・ビューモード・投影の基本 2026-06-13 13:26:36
- Reactのよくあるエラーと対処まとめ|環境構築・npm関連 2026-06-13 13:26:36
- UE5でAI Move ToがBlockedで失敗する原因と対処方法|NavMesh確認 2026-06-13 13:26:36
- UE5のWorld Compositionとは|サブレベルによる大規模ワールドと非推奨化 2026-06-13 13:26:35
- C++のコンパイルと実行方法|g++の使い方とオプション 2026-06-13 13:26:35
- .protoのgo_packageオプションとは|Goコード生成時のパッケージ指定 2026-06-13 13:26:34
- C++の開発環境構築|コンパイラとIDEの選び方・Hello World 2026-06-13 13:26:34
- gRPCクイックスタート|.proto定義からサーバ・クライアント実装まで 2026-06-13 13:26:33
- C++の関数まとめ|標準入出力(printf・cout・cin)と関数の基本 2026-06-13 13:26:33
- C#・Visual Studioのよくあるエラーと対処まとめ 2026-06-13 13:26:33
- UE5のアウトライナーとは|アクターの一覧・整理・親子付け 2026-06-13 13:26:32
- UE5でSet Input Mode UI Onlyを解除する方法|Game Onlyに戻す 2026-06-13 13:26:32
- UE5エディタの自動保存の頻度を変更する方法|Auto Save設定 2026-06-13 13:26:31
コメントを削除してもよろしいでしょうか?