レ点腫瘍学ノート

Toppukiwikiカスタマイズ箇所2025

Pukiwikiの下書き機能実装

pukiwiki pukiwiki_draft

31fe03fea5.png

PukiWiki 1.5.4に下書き機能を追加してみた

PukiWikiで記事を編集していると、編集の途中で中断しなければならないことがあります。編集画面を閉じてしまうと、書きかけの内容が失われてしまうのは不便です。このような困りごとを解決するため、PukiWiki 1.5.4に下書き機能を実装してみました。編集中の内容を一時保存して、後で続きから編集を再開できる仕組みです。今回は、この下書き機能の使い方や特徴を紹介します。

GitHub - m0370/pukiwiki_draft: Mirror repository for pukiwiki_draft
Mirror repository for pukiwiki_draft. Contribute to m0370/pukiwiki_draft development by creating an account on GitHub.
https://github.com/m0370/pukiwiki_draft

Pukiwikiの下書き機能とは何か

下書き機能は、ページ編集中の内容を一時保存できる機能です。本文を更新せずに、編集途中の状態を保持しておけます。長い記事を書いている途中で別の仕事が入ったとき、編集内容を下書きとして保存しておけば、後でその続きから再開できるわけです。

下書き機能の使い方

編集画面に「下書き保存」ボタンが追加されており、ここから編集内容を下書きとして保存します。下書きがあるページを開くと、「下書きが保存されています」という通知と「下書きから復帰」ボタンが表示されるので、以前の下書きを簡単に読み込めます。また、`?cmd=draft`で全ページの下書きを一覧表示して、個別に編集・公開・削除できます。既存のPukiWikiの編集機能には影響しないため、下書きを使わなければ従来通りの動作です。

下書きとして編集内容を保存する

「更新」ボタンの隣に「下書き保存」ボタンが追加されています。編集内容を入力してこのボタンをクリックすれば、本文を更新せずに編集途中の状態だけを保存できます。

下書きから編集を再開する

下書きがあるページの編集画面を開くと、「下書きが保存されています」という通知と「下書きから復帰」ボタンが表示されます。このボタンをクリックすれば、下書きの内容がテキストエリアに読み込まれて、続きから編集を再開できます。下書きから読み込んだ内容を編集して公開すれば、下書きは自動的に削除されます。

全ページの下書きを管理する

URLに `?cmd=draft` を指定すると、保存されているすべての下書きが一覧表示されます。各下書きにはページ名と保存日時が表示されるので、どの下書きがいつ保存されたのかすぐに分かります。一覧画面から「編集」「公開」「削除」といった操作ができます。

下書きを公開する場合は、「公開」ボタンをクリックします。確認ダイアログで内容を確認してから実行すれば、下書きが本文として公開されて、下書きファイルは削除されます。

下書き機能の仕組み

下書きデータは `draft/` ディレクトリに保存されます。ページ名を16進数でエンコードしたファイル名で保存するため、複数ページの下書きが干渉せずに独立管理できます。ファイル形式は、保存日時をISO8601形式で記録した後に編集内容を本文として保存する構成です。

実装は `lib/draft.php` に下書きの基本操作(存在確認、読み込み、保存、削除、一覧取得)を行う関数群を配置し、`plugin/draft.inc.php` で管理画面を提供しています。既存の編集プラグイン(`plugin/edit.inc.php`)には下書き保存・読み込み処理を追加し、編集UI(`lib/html.php`)も修正して下書きボタンを表示するようにしました。設定ファイル(`pukiwiki.ini.php`)には下書きディレクトリの定義を追加し、初期化時(`lib/init.php`)にディレクトリの存在確認とパーミッション設定を行います。

ファイルロック機能は既存のPukiWikiの仕組みを活用していますが、複数ユーザーの同時アクセスについては十分にテストできていません。権限管理はページ編集権限と連動しており、編集権限のないユーザーは下書き操作もできません。

下書き機能の活用シーン

長い記事を書くとき、編集作業を複数回に分けて進めることがよくあります。下書き機能を使えば各段階の編集内容を保存して、別の日に続きから再開できます。複数の編集案を検討している場合は、各案を下書きとして保存しておいて、後で比較するという使い方もできるでしょう。

下書き機能の導入方法

導入には、`draft/` ディレクトリを作成して書き込み可能なパーミッション(777など)に設定します。`lib/draft.php` と `plugin/draft.inc.php` をそれぞれ対応するディレクトリに配置し、既存の `plugin/edit.inc.php`、`lib/html.php`、`lib/init.php`、`pukiwiki.ini.php` を修正します。

導入前には既存のPukiWikiをバックアップしてください。バージョン管理システムを使っている場合は、コミット前に動作確認を十分に行います。導入後は実際の編集画面で下書き機能が正常に動作しているか確認してください。

追加情報

実装コードはGitHubのリポジトリ(m0370/pukiwiki_draft)で公開しており、すべての実装ファイルと詳細なドキュメントが含まれています。ライセンスはGPL v2です。

なお、この下書き機能にはVS code上のClaude Code Sonnet 4.5およびHaiku 4.5を使用しました。実は自分の手ではPHPは一つもコードを打っていませんし、コーディングからPHPファイル作成から最終的なGitHubへのコミットプッシュも全てClaude Codeにやってもらいました。

さらにいうと、このページのブログ記事もそのときについでにClaude Code Sonnet 4.5を使いました(最初にHaiku 4.5に書いてもらっていたのですが、どうしても生成AI臭が強いのでSonnet 4.5にかえるとかなりましになりました)。多少PHPの本を買って昔に自習した程度で、特にコーディングについて誰かに教わったわけでもないのに(そして仕事に使っているわけでもなく遊びで触っているだけなのに)、グングンとプログラムを書いてゆけてしまうとは、生成AIの進歩は本当にすごいですね。

この記事に対するコメント

このページには、まだコメントはありません。

お名前:


更新日:2025-11-16 閲覧数:400 views.