WordPressプラグインを公式プラグインディレクトリへ追加する方法


投稿日:2015年9月25日
  • 4
  • 0



作成したプラグインを公式プラグインディレクトリで公開しよう

wordpress-plugin_05

WordPressプラグインの解説」第5弾。

さて、プラグインが完成したら、とうとうWordPressの公式ページヘプラグインをアップロードします。
WordPressではSVNというシステムを採用しています。このページでは初めてSVNを使う方でもわかるように解説します。


目次


WordPress.orgでアカウント登録をする

まずは「WordPress.org」でアカウントを取得します。

更新情報なんかも送られてくるので、Mailing Listsをチェックします。

Username、Emailが必須です。webサイトもある場合は登録しときましょう。

CAPTCHAをチェックしてRegisterボタンで登録。

wordpress-plugin23

登録したメールアドレスにユーザーネームと、パスワードが送られてくるので、ログインします。


READMEファイルの作成

まずはプラグインのREADMEファイルを作成します。
これはただの解説用ファイルではなく、公式のプラグインページを作成するためのものです。基本はMarkdown記法ですが、わりと書式が厳密でややこしいので、READMEジェネレーターを利用して作成するのをお勧めします。

WordPress.org Readme Generator

それぞれ項目は以下のようになっています。

項目 意味 入力例
Plugin name プラグイン名 Step by Step Social Count Cache
Contributors 製作者 WordPress.orgで登録したユーザー名 oxynotes
Donate link 寄付用のリンク
Tags プラグインに関連したタグ cache, count, sns, social
Requires at least 少なくても必要なWordPressのバージョン 4.2.4
Tested up to 動作テストしたWordPressの最新バージョン 4.3.1
Stable tag プラグインのバージョン 1.0
License ライセンス GPLv2 or later
License URI ライセンスの詳細を記載したURL 今回の例ではGPL2のURL http://www.gnu.org/licenses/gpl-2.0.html
Short description 短い解説 (プラグイン名の下に表示される短い解説)
Description 詳しい解説 (Descriptionタブの本文)
Installation インストール方法 (Installationタブの本文)
Frequently asked questions よくある質問 (FAQタブの本文)
Screenshots スクリーンショット 1. Option page.
Changelog 更新履歴 1.0
Initial working version.
Upgrade notice アップグレードの概要

実際の解説ページに当てはめると以下のようになります。

wordpress-plugin24

Screenshotsの項目に複数の写真を掲載する場合は、指定のファイル名で画像をアップし、解説をリスト形式で1.○○、2.○○といった具合に記述します。

書き方に迷ったら既にアップロードされているプラグインを参考にしましょう。


プラグインをwordpress.orgへ申請

プラグインをアップロードする前に、どんなプラグインを作成したのかwordpress.orgへ申請する必要があります。

ログインした状態でwordpress.orgのグローバルメニューのPluginから「Developers > Add Your Plugin」と進みます。

wordpress-plugin25
wordpress-plugin26

すると以下のように○個のプラグインを審査が審査待ちで、○個審査中という表示がでます。

wordpress-plugin27

プラグインを審査するにあたって必要な項目を入力します。項目はすべて必須です。

Plugin Name (required)

プラグイン名。これは一意である必要があります。(入力例:Step by Step Social Count Cache)

Plugin Description (required)

プラグインの解説。英語で簡単に解説する。(入力例:Step by Step Social Count Cache is, by the post_modified, you can set…)

Plugin URL (required; must be a link to a ZIP file of the working plugin that includes a completed readme.txt)

プラグインをzipで固めたもの。説明にある通り、リードミーファイルも必要になる。先ほど作ったリードミーファイルをreadme.txtという名前でルートディレクトリに保存してzipで圧縮して適当な場所にアップロードします。そのファイルへのパスを書きます。
(入力例:http://example.com/uploads/sbs-social-count-cache.zip)

Send Post >」をクリックして審査に送ります。

審査が通ったらメールで送るよ。迷惑メールに入るかもしれないからホワイトリストに入れておいてね」というメッセージと以下の様なリンクが表示されます。

step-by-step-social-count-cache from oxynotes [plugin] - 2015-8-11 - show

まだ審査待ちの状態ですが、リンクをクリックすると既にプラグインページが作成されています。

wordpress-plugin28

ちなみにまだ正式に作成されたわけではないので、ログインしていないと表示されないので注意してください。

プラグインページが作成される

認証は遅いと1週間くらいかかると言われていますが、私の場合は1日で返信がきました。
認証されると以下の様なメールが送られてきます。

oxynotes,

Your plugin hosting request has been approved.

Within one hour, you will have access to your SVN repository at

http://plugins.svn.wordpress.org/step-by-step-social-count-cache/

with your WordPress.org username and password (the same one you use on the forums).

Here's some handy links to help you get started.

Using Subversion with the WordPress Plugins Directory https://wordpress.org/plugins/about/svn/

FAQ about the WordPress Plugins Directory https://wordpress.org/plugins/about/faq/

WordPress Plugins Directory readme.txt standard https://wordpress.org/plugins/about/readme.txt

readme.txt validator:
https://wordpress.org/plugins/about/validator/

Enjoy!

ざっくり翻訳すると「貴方のプラグイン専用のSVNリポジトリ作ったよ。Subversion使ってアップロードしてね。使い方わからない場合はリンクを見てね」とのことです。


TortoiseSVNのインストールと初期設定

まずはApache Subversion(アパッチ・サブバージョン; SVN)のクライアントをインストールします。
クライアントは様々ありますが、WindowsではTortoiseSVNが使いやすく評判が良いです。

TortoiseSVNのダウンロードページ
32bitか64bitのどちらかをダウンロードします。

wordpress-plugin29

Language packsも用意されているのでJapaneseのファイルをダウンロード。

wordpress-plugin30

インストーラーはデフォルトのままでインストール。日本語化ファイルもインストーラー形式なので何もせず次へでインストール完了します。

すると右クリックから「TortoiseSVN > setting」が追加されるのでクリック。

開いたら「General」のメニューが開いてると思います。

Language」で「日本語」にして「OK」ボタンをクリック。

wordpress-plugin31

これで日本語化は完了です。

まずは使えるようにするために設定を行います。右クリックから「SVN チェックアウト」をクリック。チェックアウトについては後述します。

wordpress-plugin32

リポジトリのURLに「メールに記載されたリポジトリのURL」を入力。
例)http://plugins.svn.wordpress.org/step-by-step-social-count-cache/

チェックアウト先のディレクトリに、デスクトップに適当にフォルダを作って指定
例)C:\Users\owner\Desktop\sbs-social-count-cache

wordpress-plugin33

そして「OK」ボタンをクリック。

するとディレクトリが同期され、同期マークが表示される。(わかりやすく大アイコンの例)

wordpress-plugin34

これで、WordPressの公開ディレクトリと、ローカルのフォルダがひも付けされて、同期する準備ができました。
このフォルダがローカルの開発環境になります。


SVNの仕組みと、TortoiseSVNの使い方

まずはSVN(Apache Subversion:アパッチサブバージョン)の使い方を理解しておきましょう。
プラグインのアップロードに必要な操作を覚えるだけなら、5分もあれば十分です。

SVNは簡単に言えばバージョン管理システムです。
専用の場所に保存したコードを、ユーザーのローカルファイルと同期させることができます。
名前が示す通りバージョンごとにファイルを管理したり、ログから古いバージョンに戻したりということもできます。他にも細かな機能はたくさんありますが、要は離れた場所にいる複数人での開発をしやすくするためのシステムです。

最近では同じバージョン管理システムでGitも有名です。それの兄弟みたいなもんです。

今回はWordPressで利用するための知識に限定して解説します。用語の解説をしつつ、プラグインに必要なファイルなんかも作成していきます。
SVCについてさらに詳しく知りたい方は「TortoiseSVN」をご覧ください。

リポジトリとは

リポジトリとはLinux等を利用している方には馴染みのある言葉ですが、ファイル置き場のことです。
WordPressのプラグインの場合は認証時に送られてくるメールにプラグイン専用のリポジトリが記載されています。

リポジトリブラウザー

右クリックからリポジトリブラウザーを立ち上げると登録したリポジトリのファイル構成を見ることができます。(回線の状況によって立ち上がるまで数分かかります)

wordpress-plugin35

見ていただければわかるように、他のプラグインのファイル構成も見ることができるので、どのような構成になっているか見ると参考になります。

チェックアウト

リポジトリのコードを開発環境(自分の環境)にもってきて、紐付けすること。

チャックアウトに使用するフォルダに制限はありませんが、中身は完全にリポジトリ側のものに置き換えられます。中にファイルを置いておくと消えてしまうので注意。

1度ひも付けされたフォルダは保存場所を移動しても開発環境として動作します。

ファイル構成

チェックアウトすると以下の様なファイル構成になります。

trunk(トランク)

ソースコードを保存するメインのディレクトリ。
プラグインファイルは「trunk」に保存します。
また、スクリーンショットもここに保存します。スクリーンショットの名前は決められていて複数ある場合は「screenshot-1.jpg」「screenshot-2.jpg」という連番にします。1文字でも変更するとスクリーンショットとして認識しないので注意してください。※

※2017/9/13 追記

WordPress公式のPlugin HandbookのHow Your Plugin Assets Workというページによると、スクリーンショットは後述するassetsディレクトリへ保存する方法が推奨になったようです。現状はtrunkに保存しても動作しますが、新しくプラグインを作る際はassetsディレクトリへ保存してください。(assetsへ保存した際の動作は確認していません。)

branches(ブランチズ)

枝分かれした別のバージョンなどを保存する。ベータ版やイレギュラーの対応をした場合などに利用する。(特定のプラグインと相性問題で一時的にアップロードなど)
WordPressのプラグインではあまり利用しないはず。

tags(タグズ)

ソースコードのスナップショットを保存する。正式リリースに合わせて過去のバージョンを保存する。

assets(アセッツ)

WordPress独自のディレクトリ。
プラグインページのアイキャッチ用画像を保存する。2つのファイルサイズに対応しており、「banner-772x250.jpg」と「banner-1544x500.jpg」の二種類。
また、アイコンもここに保存する。アイコンはプラグインを検索した時に表示される。ファイル名は「icon-128x128.png」と「icon-256x256.png」。
どちらも名前を変更すると機能しないので注意。
また、アイキャッチ画像とアイコンのデザインが異なるとユーザーは同じプラグインなのか迷う原因になるので、可能な限り似通ったデザインにするべきです。

リビジョン

リビジョンは更新履歴です。一意のナンバーが割り振られ、0から始まり、更新する毎に1ずつ数字が増えていきます。
リビジョンには誰が更新したのか、ファイルのどの部分を変更したのかなどの情報が保存されます。

コミット

ローカルの開発環境のコードをリポジトリにアップロードして反映することです。

新しいファイルを作成・追加

必要な知識は解説したので、テスト用のファイルを作って追加してみましょう。

まずチェクアウトした開発環境にある「trunkフォルダ」に適当なファイルを作ってください。この解説では「new_test.txt」としました。

new_test.txt」上で右クリックから「TortoiseSVN > 追加」でアップロードの準備をする。

wordpress-plugin36

すると「new_test.txt」のアイコンにエクスクラメーション・マークが付きます。

wordpress-plugin37

続いて「trunkフォルダ」を右クリックして「SVN コミット」でアップロードできます。

この時に追加用のメッセージを入力しないとエラーが出てコミットできません。メッセージには変更点や修正内容を書いておきます。

wordpress-plugin38

追加していないファイルは「バージョン管理外」という扱いになりコミットされませんが、このウィンドウで変更した項目にチェックすればコミットすることができます。(しかし基本は追加してください)

初回にコミットをするとパスワードとユーザーIDを求められます。これはWordPressのDeveloper登録で使ったIDをとパスワードです。

正常にコミットされると「完了: リビジョン 1219119 になりました」等と表示されます。「new_test.txt」も緑のチェックマークになっていることを確認してください。

このリビジョンのナンバーはWordPressのプラグイン全体で管理しているます。つまりWordPressのプラグインのリポジトリは約120万回更新されたということですね。

コミットされると登録したメールに通知がきます。

大体5分位で反映されるようです。

今回は「SVN コミット」でコミットしましたが、ディレクトリを選択し「SVN 更新」をクリックすれば、リポジトリのものが開発環境にダウンロードされます。

新規フォルダの扱いに関する注意

開発環境で新規フォルダを作成して、そのフォルダにファイルを作成した場合、「trunkフォルダ」を選択してコミットしても反映されません。
フォルダ自体をコミットしていない場合、フォルダ以下のファイルはリストにも表示されません。面倒でも新しく作成したフォルダを選択して「追加」をした後にコミットを行うようにしてください。

私はこれを知らず「後で全体をコミットするから平気だろ」と踏んでいたら、利用者からファイルがないとエラーが出るという指摘をいただきました。

ファイルを更新する方法

作成した「new_test.txt」を編集して保存してください。
すると「trunkフォルダ」の表示がチェックマークから、エクスクラメーション・マークに変化します。このように前回リポジトリからデータを取得した状態から変化があるとアイコンが変化します。

この状態で「trunkフォルダ」を選択してコミットすればリポジトリのファイルも更新されます。

ファイルを移動する方法

trunkフォルダ」のファイルを「assetsフォルダ」へ移動してみてください。
その状態で全体をコミットすると以下のようになります。

wordpress-plugin39

片方が紛失、もう片方が新しいファイルなのでバージョン管理外になっています。
紛失にチェックを入れるとリポジトリの「trunkフォルダ」のものが削除され、バージョン管理外にチェックを入れるとリポジトリの「assetsフォルダ」へファイルが作られます。

ファイル名を変更する方法

ファイル名の変更はTortoiseSVNの右クリックからのメニューで変更する。
反映にはコミットが必要。

wordpress-plugin40
wordpress-plugin41

ファイル名を「newtext2.txt」にしてみました。

コミット時には以下のように、削除と、追加(+)となる。

wordpress-plugin42

ファイルを削除する方法

削除も右クリックのメニューから実行します。

wordpress-plugin43

削除時は以下のように表示される。

wordpress-plugin44

ログを表示する方法

開発環境のフォルダを右クリックしてTortoiseSVNから「ログを表示」をクリック。
すると以下のようにファイルを削除したり、追加した履歴を閲覧することができる。

wordpress-plugin45

tagsにスナップショットを保存する

スナップショットとは古いバージョンを保存することです。
過去のバージョンを残しておきたい場合に利用します。
まず「trunkフォルダ」を右クリックしてTortoiseSVNから「ブランチ/タグの作成」をクリック。

wordpress-plugin46

宛先パスは選択したフォルダになっているので「/プラグイン名/trunk」となっています。
これを「/プラグイン名/tags/1.0」とtagsフォルダを指定して、バージョンのフォルダ名を付けます。
ログを残すのもメッセージがないとエラーになるので、適当にバージョン数でも入れておきます。
WordPressのリポジトリは常に新しいリビジョンをつけるので「リポジトリ内の最新リビジョン(HEAD)」にチェックを入れて「OK」ボタンをクリックします。

ログを保存してもリポジトリ側に保存されただけで、開発環境には保存されていません。ローカルにも反映させるには「tagsフォルダ」を右クリックして「SVN 更新」をクリックします。

すると保存したバージョンのフォルダが作成されます。


以上の解説でプラグインのアップロードは問題なく出来るはずです。

これでWordPressプラグインの作り方の解説は終了です。
私がプラグインを作成するにあたって必要になった知識を中心に解説しました。
本来なら翻訳ファイルの解説もあったほうが良いかもしれませんが、私のプラグインは純日本製と割りきって翻訳ファイルを作成していないので解説は控えます。以下のサイトで丁寧に解説されています。

プラグイン 日本語化 に挑戦! | パソコン教室Pasonal(作り方はこちら)
WordPressの翻訳用のファイルがどうやって読み込まれているのかを調べてみた | Shinichi Nishikawa(仕組みはこちら)

カスタマイズのしやすいWordPressですが「オリジナルの設定を実装したり、セキュリティに配慮したものを作ろうとすると一気にハードルが高くなるな(難易度ではなく、面倒な設定が増える)」というのが実感です。
この解説をプラグインを作成時に参考にしていただけたら幸いです。

この解説でもセキュリティには配慮したつもりですが、プラグインを公開する前に、以下のサイトを一読することをお勧めします。プラグインのセキュリティについて詳しく解説されています。

プラグイン作者必読!実例に学ぶ脆弱なWordPressプラグインの作り方、又はwp-adminを守る理由 | ゆっくりと…


現在のページを共有する



現在のページに関連する記事

WordPressプラグインを公式プラグインディレクトリへ追加する方法 本気で作りたい人向け、WordPressプラグインの作成方法
WordPressプラグインを公式プラグインディレクトリへ追加する方法 WordPress Popular Postsでページビューがカウントされない場合に試す4つのこと
WordPressプラグインを公式プラグインディレクトリへ追加する方法 fluentdのFilter Pluginsを使ってイベントを自在に操る方法
WordPressプラグインを公式プラグインディレクトリへ追加する方法 WordPressの予約投稿が失敗した時に試す4つの解決策
WordPressプラグインを公式プラグインディレクトリへ追加する方法 Step by Step Social Count CacheでTwitterのカウントができるようになりました
WordPressプラグインを公式プラグインディレクトリへ追加する方法 W3 Total Cacheの設定を通して学ぶ、WordPressを高速化するキャッシュの仕組み
WordPressプラグインを公式プラグインディレクトリへ追加する方法 SNSのカウントをキャッシュするWordPressのプラグインを作成しました

おすすめの記事

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法

fluentdとNorikraでDoS攻撃を遮断し、メールで通知する方法

ImageMagickをWindowsのXAMPPに導入する方法

ImageMagickをWindowsのXAMPPに導入する方法

Excelでセルとセルの間をダブルクリックすると移動する機能を停止する方法

Excelでセルとセルの間をダブルクリックすると移動する機能を停…

Web制作の仕組みを根底から覆すかもしれないWix ADIの人工知能

Web制作の仕組みを根底から覆すかもしれないWix ADIの人工知能

lazysizesの使い方を通して学ぶ、画像の遅延読み込みとレスポンシブイメージの基本

lazysizesの使い方を通して学ぶ、画像の遅延読み込みとレスポン…

WordPressでアイキャッチ画像をサムネイルとして一覧ページに表示する方法

WordPressでアイキャッチ画像をサムネイルとして一覧ページに表…

PukiWikiで5段階評価を付けるプラグインを作成しました

PukiWikiで5段階評価を付けるプラグインを作成しました

最新のXAMPPをインストールし、安全・高速に運用する方法

最新のXAMPPをインストールし、安全・高速に運用する方法


いただいたコメントなど

  1. ピンバック: 公式プラグインディレクトリに登録してみた(ふたたび) | ぽぽづれ。

  2. nori のコメント:

    初めまして。
    沢山ある中でこちらの記事が一番参考になりました。
    ありがとうございます。

    そこでもし返答が頂けるのでしたら、1点だけ教えて頂けないでしょうか。
    WordPress公式プラグインの公開までは行きました。
    まだ不慣れ等も有り、不具合も発見したので修正をしてバージョンアップをしようとしています。
    PHPソースやReadMe.txtの更新、そしてそのファイルへのSVNの操作は分かりました。
    しかし、どうしても大きな疑問が有ります。
    初期バージョンのダウンロードファイルは xxx_1.0.1.zip だったので修正版は xxx_1.0.2.zip にしたいと思います。
    xxx_1.0.2.zip を準備したら、この xxx_1.0.2.zip に関するSVN等の操作はどうしたらよろしいでしょうか?
    それともこれはWordPress側で初期のダウンロードファイルを元に自動作成で xxx_1.0.2.zip になるのでしょうか?
    面倒と思われますので、返答になるような別の解説しているURL(英語サイトもOK)を教えて頂いても結構です。

    本来はWP本家への質問をするべきでしょうが。
    こちらの記事の解説が一番だったので、コメントを残させて頂きます。
    お手数を掛けます。

    • oxy のコメント:

      参考にしていただきありがとうございます。
      バージョンアップは開発環境のtrunkフォルダに新しいファイルを用意します。
      そしてtrunkフォルダをコミットすれば、更新されたファイルが自動で選択されます。そのままアップロードすれば自動で1.0.2へ更新されます。
      プラグインファイルの本体とREADMEファイルのバージョンを1.0.2に更新するのを忘れないようにしてください。

      1.0.1のバックアップを残したい場合はこのページの「tagsにスナップショットを保存する」の項目を実行してから更新作業をしてください。

      ちなみに1点確認なのですが、開発環境のファイルをzip形式にする必要はありません。
      trunkフォルダにPHPファイルやJPGファイルを入れておき、コミットすることでサーバにアップロードされ、サーバー側でzipファイルが生成されます。

  3. nori のコメント:

    oxy 様
    返答ありがとうございます。
    今、再々々度のチェックをしてコミットしました。
    無事にバージョンアップがWordPress公式プラグインにも反映されました。

    しかし本当に、コチラにコメントを入れて良かったです。
    PHP本体のバージョン「Version:」の更新が完全に視野に無かったです。(冷汗
    また、判っていたつもりが再度こちらの記事を最初から読み直して、半分以上理解してなかった事に驚きました。まだ全然TortoiseSVNに慣れてないです。

    >サーバー側でzipファイルが生成されます。

    ↑ これが知りたかった事の1番です。
    ZIPで検索してもどこにも書いてなかったんです。
    ただ、今回で自動生成されたZIPファイルは初期バージョン1.0.1(xxx_1.0.1.zip)から変わって「xxx.zip」になりました。「_1.0.2」を期待しましたが、後ろの「_1.0.1」のバージョン番号は消えました。この部分は特に大きな問題では無いのですが、時間が出来たら次回バージョンアップ時に「xxx_1.0.3.zip」になるようにしたいと考えています。

    それと苦労した部分の情報提供です。
    「WordPress.orgのアカウント登録」でパスワードに「/?#”:,’」記号のどれかを含めると、TortoiseSVN側ではエラーになりました。これも調査しましたが、どの記号が駄目なのかは判っていません。パスワードの変更でログイン出来るようになりました。

    せっかく丁寧なお返事を頂いたので、・・お恥ずかしいですが。
    以下が初めて公開したプラグインです。
    https://ja.wordpress.org/plugins/samurai/
    自分用に4年前に作ったプラグインです。せっかくなので今回公開しました。
    笑わないでください。結構、一生懸命作って、3度の修正をWP公式から指摘され、なんとか承認・公開にたどり着いた苦労物です。

    以上、ありがとうございました。m(_._)m

    • oxy のコメント:

      プラグインの公開おめでとうございます。
      共に利用者にとって有用なプラグインを作っていきましょう。

  4. kosuke のコメント:

    初めまして。
    このサイトを参考に自作プラグインを作成しました。ありがとうございました。
    一つだけ指摘をさせてください。
    こちらのページではスクリーンショットはtrunkフォルダに格納することになっているのですが、公式ではassetsフォルダに格納することを推奨されています。trunkフォルダでも一応反映はされますが、公式としてはassetsフォルダのようです。
    こちらのページが作成されたのが2年前のようなので、それ以降で変更があったのかもしれませんが、一応指摘させていただきます。

    • oxy のコメント:

      はじめまして。ご指摘ありがとうございます。
      確かにWordPress公式のPlugin Handbookにはassetsディレクトリへ保存するように記載されていました。仕様が変更になったのかもしれませんね。(私がこのページを作成している時点ではPlugin Handbookなるページもありませんでした…)

      リポジトリブラウザでいくつかのプラグインを調べてみましたが、どちらか片方、もしくは両方にスクリーンショットを保存しているといった状況で、なんとも混沌としていましたw

      追記する形で修正させていただきました。
      ありがとうございます。

  5. フク郎 のコメント:

    大変参考になる情報ありがとうございます。
    このページのおかげで不慣れながらも初めてのプラグインが公開できました。

    ただ一点、説明に問題のある部分を発見したので報告
    以下のsvnについての説明部分でアイコンとバナーのファイル名が「x」ではなく「×」になっています。
    ===============================================
    WordPress独自のディレクトリ。
    プラグインページのアイキャッチ用画像を保存する。2つのファイルサイズに対応しており、「banner-772×250.jpg」と「banner-1544×500.jpg」の二種類。
    また、アイコンもここに保存する。アイコンはプラグインを検索した時に表示される。ファイル名は「icon-128×128.png」と「icon-256×256.png」。
    ==============================================
    私も少し戸惑ってしまったのでこの部分は修正された方がいいと思います。

    とても説明が丁寧で初心者にとって分かりやすい解説でした。
    ありがとうございますm(__)m

    • oxy のコメント:

      参考にしていただき恐縮です。
      上記の「x」と「×」の件、失礼しました。早速修正しました。
      私の環境だけかもしれませんが、数字に挟まれたxを入力すると自動で×に変換されてしまうようです。
      とりあえずxをエンティティ化して対応しました。
      ご指摘ありがとうございます。

kosuke へ返信する コメントをキャンセル

コメントは認証制のため、すぐには反映されません。

プログラミングに関する質問は「日本語でプログラミングの悩みを解決するQ&Aサイト sukegra」をご利用ください。