WordPressプラグインを作ってみたいけれど、何から始めればいいのか分からない──
そんな方に向けて、生成AIを活用したプラグイン開発を体験できるブログです。
ここでは、PDFファイルをプレビュー表示するシンプルなプラグインを実際に作りながら、プラグインの開発方法を解説します。
1. この解説を通じて作れるもの
PDFプレビュープラグイン
この記事では、アップロードされたPDFファイルをプレビュー表示できる、実用的なWordPressプラグインを実際に作成していきます。
完成したプラグインには、以下の機能が含まれます。
- 固定ページや投稿ページの任意の場所に、ショートコードでPDFを表示
- PDFの1ページ目を、プレビュー画像として表示
- タイトルと説明文のカスタマイズが可能
- 「PDFを表示」ボタンと「ダウンロード」ボタンを表示

アジェンダ
生成AIを使って、PDFファイルをプレビュープラグインを実際に作りながら、プラグインの開発方法を解説します。
完成イメージ:PDFプレビュープラグインの表示例
プログラミングの経験があまりなくても、生成AIの力を借りれば、コピー&ペーストで完成させることができます。
3. 実践編:PDFプレビュープラグインを作る
この章では、PDFプレビュー機能を持つシンプルなWordPressプラグインを、生成AIを活用して実際に作成していきます。
Step1
プラグインの仕様を理解する
今回作るプラグインは、ショートコードを使ってPDFファイルを表示する仕組みです。
使用例(ショートコード)
[pdf_preview filename=”sample.pdf” title=”資料タイトル”]
このショートコードをページ内に設置すると、次のような要素が表示されます
- PDFの1ページ目のプレビュー画像
- 指定したタイトルと説明文(任意)
- 「PDFを表示」ボタン
- 「ダウンロード」ボタン
Step2
生成AIでコードを作成する
プロンプトをClaude(または他の生成AI)に入力すると、必要なコードが自動生成されます。
自動生成されたコードと解説を確認しながら、何度かプロンプトを調整して、プラグイン仕様を洗練させていきます。
プロンプト入力1回目
下記の要件を満たすWordPress用のプラグインを作成してください。
機能概要:
各ページにおいて、PDFの内容をプレビュー画像で表示し、
「内容表示」ボタンと「ダウンロード」ボタンを配置する。
WordPress用のPDFプレビュープラグインを作成しました。このプラグインの主な機能と使用方法をご説明します。
主な機能
- PDFプレビュー表示: PDFの最初のページを画像として表示
- 内容表示ボタン: クリックでモーダルウィンドウでPDF全体を表示
- ダウンロードボタン: PDFファイルを直接ダウンロード
- レスポンシブデザイン: 様々な画面サイズに対応
使用方法
ショートコードで表示
[url="https://example.com/sample.pdf" title="サンプルPDF" width="300" height="400"]
パラメータ
url
(必須): PDFファイルのURLtitle
(オプション): 表示するタイトル(デフォルト: “PDF文書”)width
(オプション): プレビュー画像の幅(デフォルト: 300px)height
(オプション): プレビュー画像の高さ(デフォルト: 400px)
使用例
[pdf_preview url="/wp-content/uploads/2024/company-profile.pdf" title="会社案内" width="250" height="350"]
技術的特徴
- PDF.js: Mozilla開発のPDFレンダリングライブラリを使用
- Ajax対応: 非同期でPDF情報を取得
- セキュリティ: WordPressのnonce機能でセキュリティを確保
- モーダル表示: ユーザーフレンドリーなPDF閲覧体験
必要な環境
- WordPress 4.0以上
- モダンブラウザ(PDF.js対応)
- インターネット接続(PDF.js CDN使用)
このプラグインをそのまま使用するか、必要に応じてカスタマイズしてください。追加機能や修正が必要でしたらお知らせください。
- 1ファイルにPHP,JS、CSSが含まれるソースコードに違和感(保守性懸念)
- プラグインファイル構成案をプロンプトに追加
- PDF.jsはクライアント(ブラウザ側)にPDFファイルを全て読み込むため、ファイルサイズの大きいPDFを並べて表示する場合など性能懸念あり
- JavaScriptを使用せず、PHPとCSSのみで構成するようプロンプトを修正
- URL指定が面倒
- メディアライブラリ中のファイル名で指定等、ショートコード仕様をプロンプトに追加
下記の要件を満たすWordPress用のプラグインをPHPとCSSで作成してください(JSは利用しない)。
機能概要:
各ページにおいて、PDFの内容をプレビュー画像で表示し、
「内容表示」ボタンと「ダウンロード」ボタンを配置する。
対象PDF:
メディアライブラリフォルダに保存されているPDF
ページでの指定方法:
ショートコードにおいて、ファイル名(filename)で指定する
なお、任意でタイトル(title)と説明文(description)も指定可能とする
ファイル構成:
pdf-preview-plugin/
├── pdf-preview-plugin.php # メインファイル
├── pdf-preview-style.css # スタイル
├── images/ # 画像フォルダ
│ └── pdf-icon.png # アイコン (自動生成)
└── README.md # 説明書
WordPress用のPDFプレビュープラグインを作成いたしました。以下の4つのファイルで構成されています:
ファイル構成
- pdf-preview-plugin.php – メインファイル
- pdf-preview-style.css – スタイルファイル
- README.md – プラグインの説明書
主な機能
- PDFプレビュー表示: WordPressの標準機能でPDFのサムネイル生成
- ショートコード対応:
[pdf_preview filename="example.pdf"]
- モーダル表示: 内容表示ボタンでPDFをモーダル表示
- ダウンロード機能: 直接ダウンロードボタン
- レスポンシブデザイン: モバイル対応
- アクセシビリティ: キーボードナビゲーション対応
- ダークモード対応: 自動的にダークモードに対応
使用方法
基本的な使用法
[pdf_preview filename="document.pdf"]
完全な設定例
[pdf_preview filename="manual.pdf" title="ユーザーマニュアル" description="製品の使い方を説明したガイドです。"]
特徴
- JavaScript最小限: モーダル機能のみに限定
- 自動アイコン生成: PDFアイコンを自動生成
- セキュリティ対応: 直接アクセス防止、入力値検証
- WordPressネイティブ: 標準のメディアライブラリ機能を活用
インストール手順
pdf-preview-plugin
フォルダをwp-content/plugins/
にアップロード- WordPress管理画面でプラグインを有効化
- メディアライブラリにPDFファイルをアップロード
- 投稿・固定ページでショートコードを使用
このプラグインは要件を満たしつつ、WordPressの標準に準拠した実装となっています。
- 最小限のJavaScriptは残るのは致し方ないとしてもPDFをモーダル表示に<iframe>を利用しておりモバイルでは使いづらい。
- 「内容表示」ボタン押下時は、別タブで表示させる様にプロンプトに追加
- 下記の特徴は継続させるためにプロプトに追加
- 自動アイコン生成: PDFアイコンを自動生成
- WordPressネイティブ: 標準のメディアライブラリ機能を活用
- 生成されたコードがクラスベース
- 、関数ベースでの実装とするようプロンプトを調整
下記の要件を満たすWordPress用のプラグインをPHPとCSSで作成してください(JSは利用しない)。
機能概要:
各ページにおいて、対象PDFの1ページ目をプレビュー画像として表示し、
「内容表示」ボタンと「ダウンロード」ボタンを配置する。
※「内容表示」ボタンは、PDFを別タブで開く動作とする
対象PDF:
メディアライブラリフォルダに保存されているPDF
ページでの指定方法:
ショートコードにおいて、ファイル名(filename)で指定する
なお、任意でタイトル(title)と説明文(description)も指定可能とする
ファイル構成:
pdf-preview-plugin/
├── pdf-preview-plugin.php # メインファイル
├── pdf-preview-style.css # スタイル
├── images/ # 画像フォルダ
│ └── pdf-icon.png # アイコン (自動生成)
└── README.md # 説明書
留意事項:
・PDFアイコンはプラグインアクティブ時に自動作成
・PHPはクラス化コーデイングしないこと
・可能な限りWordPressの標準関数・APIを活用すること
・HTMLコード出力時で複数行で長くなる場合は、ヒアドキュメントを利用する
WordPress用のPDFプレビュープラグインを作成いたしました。以下が各ファイルの内容です:
作成したファイル
- pdf-preview-plugin.php – メインプラグインファイル
- pdf-preview-style.css – スタイルシート
- README.md – 使用方法・技術仕様
主な機能
- PDFプレビュー表示: Imagickを使用してPDFの1ページ目をJPEG画像に変換
- フォールバック機能: Imagickが利用できない場合は自動生成されたPDFアイコンを表示
- ショートコード対応:
[pdf_preview filename="sample.pdf"]
で簡単に実装 - レスポンシブデザイン: モバイル端末でも適切に表示
- セキュリティ対策: 直接アクセス防止、入力値のサニタイズ
使用方法
基本的な使用法
[pdf_preview filename="sample.pdf"]
完全な設定例
[pdf_preview filename="sample.pdf" title="重要な文書" description="この文書には重要な情報が含まれています。"]
インストール手順
pdf-preview-plugin
フォルダを作成- 上記3つのファイルを配置
/wp-content/plugins/pdf-preview-plugin/
にアップロード- WordPress管理画面でプラグインを有効化
技術的な特徴
- WordPress標準関数を活用:
get_posts()
,wp_get_attachment_url()
,wp_enqueue_style()
等を使用 - クラス化なし: 要件に従い関数ベースで実装
- 自動画像生成: プラグインアクティベーション時にPDFアイコンを自動生成
- ヒアドキュメント使用: 複数行HTMLの出力に使用
プラグインをアクティベート後、メディアライブラリにPDFファイルをアップロードしてショートコードを使用できます。
ほぼ思い通りに機能が実装されたので、スリム化(余剰機能の削減)を検討
- Imagick は直接利用しない
- 画面を構成する一部品
- レスポンシブ対応は不要
下記の要件を満たすWordPress用のプラグインをPHPとCSSで作成してください(JSは利用しない)。
機能概要:
各ページにおいて、対象PDFの1ページ目をプレビュー画像として表示し、
「内容表示」ボタンと「ダウンロード」ボタンを配置する。
※「内容表示」ボタンは、PDFを別タブで開く動作とする
対象PDF:
メディアライブラリフォルダに保存されているPDF
ページでの指定方法:
ショートコードにおいて、ファイル名(filename)で指定する
なお、任意でタイトル(title)と説明文(description)も指定可能とする
ファイル構成:
pdf-preview-plugin/
├── pdf-preview-plugin.php # メインファイル
├── pdf-preview-style.css # スタイル
├── images/ # 画像フォルダ
│ └── pdf-icon.png # アイコン (自動生成)
└── README.md # 説明書
留意事項:
・PDFアイコンはプラグインアクティブ時に自動作成
・PHPはクラス化コーデイングしないこと
・可能な限りWordPressの標準機能および関数・APIを活用すること
Imagick を直接利用しない
・HTMLコード出力時で複数行で長くなる場合は、ヒアドキュメントを利用する
・レスポンシブ対応は不要
WordPressプラグインを作成します。要件に従って、クラス化せずに関数ベースで実装し、WordPressの標準機能を最大限活用します。
:
WordPressプラグインが完成しました。要件に従って以下の機能を実装しています:
実装内容
主要機能
- PDFプレビュー表示: WordPressの標準機能でPDFの1ページ目サムネイルを表示
- ショートコード対応:
[pdf_preview filename="example.pdf"]
で簡単設置 - ボタン機能: 「内容表示」(別タブでPDF表示)と「ダウンロード」ボタン
- 自動アイコン生成: プラグイン有効化時にGDライブラリでPDFアイコンを作成
技術的特徴
- クラス化なし: 要件通り関数ベースで実装
- WordPress標準機能活用:
wp_get_attachment_image()
,wp_get_attachment_url()
等を使用 - セキュリティ対策: XSS防止、直接アクセス防止、入力値検証を実装
- ヒアドキュメント: 長いHTML出力で使用
ファイル構成
pdf-preview-plugin/
├── pdf-preview-plugin.php # メイン機能(374行)
├── pdf-preview-style.css # スタイリング
├── images/ # プラグイン有効化時に自動作成
│ └── pdf-icon.png # GDライブラリで自動生成
└── README.md # 詳細な使用方法とトラブルシューティング
使用方法
- インストール:
pdf-preview-plugin
フォルダを/wp-content/plugins/
にアップロード - 有効化: WordPress管理画面でプラグインを有効化
- PDFアップロード: メディアライブラリにPDFファイルをアップロード
- ショートコード使用: 投稿・固定ページで以下を記述
[pdf_preview filename="manual.pdf"]
[pdf_preview filename="catalog.pdf" title="製品カタログ" description="最新の製品情報をご覧ください"]
注意事項
- PDFサムネイル: サーバーにImageMagickまたはGhostscriptが必要
- ファイル検索: ファイル名でメディアライブラリから検索(大文字小文字区別なし)
- エラーハンドリング: ファイルが見つからない場合は適切なエラーメッセージを表示
プラグインは即座に使用可能で、WordPressの標準機能を最大限活用した堅実な実装となっています。
プロンプトの内容次第で、生成結果の品質や構造が大きく変わるため、AIとの対話を通じた仕様の具体化・実装最適化が非常に有効です。
Step3
ファイル構成の作成
生成されたコードを、以下の構成でフォルダにまとめます。
pdf-preview-plugin/
├── pdf-preview-plugin.php # メインファイル
├── pdf-preview-style.css # スタイル
├── images/ # 画像フォルダ
│ └── pdf-icon.png # アイコン
└── README.md # 説明書
手順:
- VS Codeなどのエディタで新しいフォルダを作成
- 生成AIが出力したコードを、それぞれのファイルにコピー&ペースト
- WordPressにプラグインとしてアップロード
生成AIがコードを自動生成してくれるので、構成の基本さえ理解していれば、貼り付けるだけでPDFプレビュー機能付きのプラグインを作ることができます。
5. インストール・テスト編
1
プラグインのパッケージ化
作成した pdf-preview-plugin フォルダ全体を選択し、右クリックで「圧縮」または「ZIP形式で圧縮」を選択します。
pdf-preview-plugin.zip という圧縮ファイルが作成されます。
2
WordPressへのインストール
WordPress の管理画面にログインし、「プラグイン」→「プラグインを追加」→「プラグインのアップロード」を開きます。
手順
- 作成した ZIP ファイルを選択
- 「今すぐインストール」をクリック
- インストール完了後、「有効化」をクリック
3
動作テスト
まず、「メディア」→「メディアファイルの追加」から、任意のPDFファイルをアップロードします。
次に、投稿または固定ページの本文内に以下のショートコードを記述します
[pdf_preview filename="your-pdf-file.pdf" title="資料タイトル"]
プレビューで確認します。
プレビュー表示で以下の項目を確認してください
- PDFの1ページ目が正しくプレビュー表示されているか
- タイトルと説明文が指定どおりに表示されているか
- 「ダウンロード」ボタンからPDFファイルが正しくダウンロードできるか
- CSSスタイルが適用され、見た目が整っているか
- スマートフォンなどでの表示が崩れていないか(レスポンシブ対応)
トラブル時のポイント
表示がうまくいかない場合は、以下をチェックしてみてください。
- PDFファイル名(filename属性)が正確に指定されているか
→ メディアライブラリでPDFを選び、URLからファイル名をコピーすると確実です。 - ファイルの配置先やスタイルシートの読み込みパスに間違いがないか
その他の問題があれば、トラブルシューティングとまとめの方法を試してみてください。
6. カスタマイズ編
プラグインをもっと便利に
基本機能に加えて、見た目や機能をカスタマイズすることで、プラグインをより実用的に仕上げることができます。
1
デザインを調整する
- pdf-preview-style.css を編集して、配色や余白、フォントサイズなどを調整
- 生成AIに「もっとモダンな見た目にしたい」「ボタンを角丸にしたい」などの要望を伝える
- サイト全体のデザインに合わせて、カラースキームやフォントを統一
プロンプト例
- 「このボタンの色をサイトのメインカラーに変更してください」
- 「添付のスクリーンショットのようなレイアウトにしてください」
- 言葉で説明するより、画像1枚の方が正確に伝わることもあります。
2
機能を追加する
- PDFファイルサイズの表示
- ダウンロード数のカウント
- ツールチップでタイトル表示
プロンプト例
- 「このプラグインに、PDFファイルサイズを表示する機能を追加してください。表示位置はタイトルの下にしてください」
- 「ダウンロード数を保存し、画面に表示するようにしてください」
アップロードした画像のような画面デザインにしてください。
また、CSSの読み込みは、このショートコードを利用しているページのみに限定してください。

アップロードした画像
アップロードされた画像を参考に、縦並びのカードスタイルデザインに修正し、CSSの読み込みをショートコード使用ページのみに限定します。
:
アップロードされた画像のデザインに合わせて、WordPressプラグインを以下のように修正しました:
🎨 主な変更点
- カードスタイルデザインに変更
- 横並びレイアウトから縦並びのカードスタイルに変更
- 上部に大きなPDFサムネイル表示
- 白背景のカードに影付きデザイン
- ファイル情報の自動表示
- アップロード日時:
2025年07月15日
形式で表示 - ファイルサイズ:
280 KB
形式で自動計算・表示 - ファイル名: PDFファイル名を表示
- アップロード日時:
- ボタンデザインの改善
- 「PDFを表示」ボタン:青色 (
#5a67d8
) - 「ダウンロード」ボタン:オレンジ色 (
#ed8936
) - ホバー効果とアニメーション追加
- 「PDFを表示」ボタン:青色 (
- CSS読み込み最適化
- ショートコードが使用されているページでのみCSSを読み込み
- パフォーマンス向上とページ速度改善
🔧 使用方法(変更なし)
[pdf_preview filename="develop_WordPress-plugin_using_AI.pdf" title="アジェンダ" description="生成AIを使って、PDFファイルをプレビュープラグインを実際に作りながら、プラグインの開発方法を解説します。"]
🚀 新機能
- 自動ファイル情報取得: アップロード日時とファイルサイズを自動表示
- パフォーマンス最適化: 必要な時のみCSS読み込み
- 美しいカードデザイン: 画像と同じ洗練されたUIデザイン
- アクセシビリティ向上: 適切なalt属性とフォーカス管理
このデザイン変更により、より現代的で使いやすいPDFプレビュー機能を提供できます。画像のデザインに忠実に再現し、同時にWordPressのベストプラクティスに従った実装を維持しています。
生成AIへのカスタマイズ依頼のコツ
「見た目を良くして」、「いい感じにして」などの曖昧な依頼は、AIが意図と異なるコードを生成してしまう原因になります。生成AIに依頼する際は以下のように具体的かつ簡潔に伝えるのがポイントです。
プロンプト例
- 「既存のコードを維持しつつ、○○の部分だけ変更してください」
- 「管理画面からも設定できるようにしてください」
- 「セキュリティ対策(サニタイズ、権限チェック)も含めてください」
カスタマイズ後のセキュリティチェックも忘れずに
新しく機能を追加した場合、それに伴う新たなセキュリティリスクが生じる可能性があります。
以下の点を重点的にチェックしてください。
- 入力値の検証とサニタイズが適切か
- HTML出力に や などが使われているか
- ファイルアクセス制限や権限チェックが導入されているか
必要に応じて、再度生成AIに「セキュリティの観点で見直して」と依頼してください。
再度生成したWordPressプラグインコードをセキュリティの観点でチェックしてください。特に以下の点も含め、該当しない場合はその理由を示してください。
– データの無害化
– 出力時のエスケープ
– ワンタイムトークン(Nonces)の使用
– 権限チェック
– ファイルアクセス制限
– 直接アクセスを防止
– データベース操作
– ファイル操作
– オプションや設定
– エラーハンドリング
問題がある場合は、修正コードも提示してください。但し、現在は該当しない項目でありながら、将来に備えた過剰となりかねない実装は不要です。
修正されたWordPressプラグインコードのセキュリティチェックを実施しました。デザイン変更と新機能追加により、複数の新しいセキュリティ問題を発見しました。
:
📋 最終評価結果
項目 | 評価 | 修正の必要性 | 修正内容 |
---|---|---|---|
データの無害化 | 🔴 → 🟢 | 🟢 強化完了 | ファイル情報取得時の厳密な検証を追加 |
出力時のエスケープ | 🟢 | 🟢 維持 | 全HTML出力で適切なエスケープ処理 |
ワンタイムトークン | 🟢 | 🟢 該当なし | フォーム送信・データ変更処理なし |
権限チェック | 🟢 | 🟢 維持 | 管理画面で適切な権限確認 |
ファイルアクセス制限 | 🟢 | 🟢 強化 | WordPressアップロードディレクトリ内制限 |
直接アクセス防止 | 🟢 | 🟢 維持 | ABSPATH チェック実装済み |
データベース操作 | 🟢 | 🟢 維持 | SQLインジェクション対策完備 |
ファイル操作 | 🔴 → 🟢 | 🟢 完全修正 | パストラバーサル攻撃対策実装 |
オプションや設定 | 🟢 | 🟢 該当なし | 設定保存機能なし |
エラーハンドリング | 🟢 | 強化 | セキュアなログ出力追加 |
🛡️ 追加されたセキュリティ機能
- ファイルパス制限: WordPressアップロードディレクトリ外のファイルアクセスを完全遮断
- リアルパス解決:
realpath()
によるパス正規化でシンボリックリンク攻撃を防御 - ファイル存在性検証: ファイルの存在・読み取り権限を事前チェック
- セキュリティログ: 不正アクセス試行をログに記録
- 配列キー存在チェック:
isset()
による未定義キーエラー防止
⚠️ セキュリティ上の注意点
本修正により防御される攻撃:
- パストラバーサル攻撃:
../../../etc/passwd
などのパス操作 - ファイルインクルージョン攻撃: 意図しないファイルへのアクセス
- ディレクトリリスティング: アップロードディレクトリ外の探索
- 権限昇格: 不正なファイルアクセスによる情報漏洩
🚀 運用上の改善点
- エラーログ監視: サーバーログで不正アクセス試行を監視可能
- デバッグ支援: 問題発生時の詳細な情報取得が可能
- パフォーマンス: 不正なリクエストの早期判断で処理効率向上