WordPressのfunctions.phpを書きまくってる人はプラグインにして公開すると幸せかもしれません。

先日 Word Camp Tokyo 2011 で、宮内隆行さんのWordPress プラグインを作って世界と交流しようぜ!というセッションがありました。

セッションのUSTREAMです。
また、スライドはこちら:WordCamp Tokyo 2011でしゃべって来ました。

WordPressでのサイト制作で使ったコードをブラッシュアップして後々自分で使えるようにプラグイン化してあったのですが、いっちょやるかー!って一念発起して、Custom Post Type Permalinksを公式ディレクトリにアップロードしました。そのときにやったこと、セッションを聴いた上で自分でやってみて色々躓いたこと、その後のこと、思ったことなどをつらつらと書き連ねていきます。

  1. wordpress.orgにログイン
  2. プラグインの登録
  3. Subversionの設定
  4. プラグインの公開準備 ※2012-01-04:多言語対応について追記しました。
  5. tagsの作成、公開
  6. フィードバックへの対応

WordPess.orgにログイン

WordPress.orgにアカウントを作ります。コレが日本語フォーラムでも、使われるので、ちゃんとした名前をつけて下さい。
登録はこのページでできます。:http://wordpress.org/support/register.php

プラグインの登録

WordPress.orgにログインしたら、Plugin Directoryの左上のメニューからDeveloper Center→Add Your Pluginにアクセス。登録処理ができます。
入力項目は3つ

  • Plugin Name (required) :プラグイン名 *必須
  • Plugin Description (required) :プラグインの説明 *必須
  • Plugin URL :プラグインのサイト *入れなくても良い

です。Plugin Name以外はちゃんとして無くても大丈夫です。宮内さんも仰っていましたけど、Plugin Description には、プラグイン名を入れました。
しばらくすると(半日くらい)WordPress.orgからメールが来ます。ここにSubversionのリポジトリなども載ってます。

Subversionの設定

普段Windowsで作業しているので、TortoiseSVNを導入します。ダウンロード:http://sourceforge.jp/projects/tortoisesvn/
TortoiseSVNの導入や、使い方はこちらが詳しいです。なんちゃってTortoiseSVN(Subversion)の使い方シリーズ [SVNマニュアル擬き]

プラグインの公開準備

公開準備で主に頑張るコトは、

  • ライセンスの記述
  • 多言語対応
  • readme.txtの作成
  • デバッグモードでのチェック

ですね。

ライセンスの記述

公式ディレクトリに公開する場合、ライセンスはGPLにしないといけないようです。なので、ライセンスの明示をしなくてはいけません。僕の場合はコードに
[php]
/*
Copyright 2011 Toro_Unit (email : [email protected])
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

[/php]
こんな感じで記述しています。

多言語対応

コレは、管理画面があったりするようなプラグインとかだと発生する作業です。やっぱり海外の人も普通に使ってくれます。何件かフィードバックも頂きました。そんなわけで、コレも必須の作業になってきます。

翻訳には、moファイルというファイルが必要なのですが、詳しい作成手順があったので、こちらを参照。poEdit で翻訳ファイルを作る « iDeasilo(Contact Form 7の作者さんのサイトです。)

また、翻訳の手順は、翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Goを参照。

ただし、 load_plugin_textdomain()の仕様が2.7から変わっていて、第2引数は非推奨になったので、
[php]
load_plugin_textdomain($domain,false,プラグインのwp-content/pluginsからの相対パス);
[/php]
とします。第3引数は省略すると、wp-content/pluginsに置かれてるファイルをさがします。

2012-01-04追記
プラグインの説明も日本語化できるようです。wokamotoさんに教えて頂きました。
WordPress Plugin 作者に覚えておいて欲しいこと

プラグインのヘッダーのコメントにText DomainとDomain Pathの2行追加します。
[php]
/*

Text Domain: 多言語化ファイルのドメイン
Domain Path: プラグインのwp-content/pluginsからの相対パス
*/
[/php]
こうすると、Descriptionの項目が日本語化されます。WordPressでのプラグインの一覧や、検索のときに日本語化されて表示されます。意外に盲点なのでこれはやっておきたいです!

readme.txtの作成

プラグインを公式ディレクトリに上げるときには意外に重要なreadme.txt。サンプルがhttp://wordpress.org/extend/plugins/about/readme.txtに載っているのでとりあえず、コピペ。この内容が、プラグインのページにそっくりそのまま反映されます。何度かStable tagの項目を書き換え忘れて新しいのは上がっているのに、推奨バージョンが変わらないとかいうことが結構ありました。なので要注意。細かい事は、readme.txtのサンプルを読めばだいたい解ります。英語で大変ですが、どうせ英語で書くはめになるので、頑張って読んでみましょう。

デバッグモードでの検証

つってもやることはたいしたことじゃないです。wp-config.php定数を
[php]
define(‘WP_DEBUG’, true);
[/php]
に書き換えるだけです。そうすると今まで表示されてなかったエラーがじゃんじゃん出てきます。コレはバグの温床になったり、環境や他のプラグインの影響などで不具合を起こすことがあるので、頑張ってつぶします。エラーが起こってる箇所がプラグインファイルじゃないとしても、アクションフックなどの影響で場所が変わっているだけで、確実にそのエラーはプラグインのせいで起きてます。頑張ってつぶしましょう。

tagsの作成、公開

いよいよ公開です。tagsにコミットします。プラグインディレクトリを右クリックしてtortoiseSVN→ブランチ/タグの作成から、タグを作成します。バージョン番号でtagの作成をするのですが、バージョン番号はなるべくシンプルに、また数字と.だけでつけた方が良いと思います。この数字を比較してプラグインのアップデートがあったかどうかを確認しているようです。
コミットして10分くらいすると、ちゃんと”Download Version”のボタンが出て来ます。たまに、更新日時が変わらない場合もありますが、僕の場合はほおって置いたら3日くらいでなおってました。

これで、Plugin Developerデビューです。おめでとうございます。この瞬間はなんだかんだで嬉しかったです。

フィードバックへの対応など、その後

ただ、公開はゴールじゃないんです。むしろやっとスタートラインに立ったということなのです。
プラグインの規模にもよりますが、ここから、1週間くらい僕は、バグ報告、要望などのメールが結構来ました。

「これからが本当の地獄だ・・・」と脳内でベジータ様がつぶやき出したりしますが、ここがいちばん公開してよかったなぁ。と思うことでした。

ただ、要望を出すだけじゃなくて、お忙しいなか、時間を割いて、プラグインのテストに付き合ってもらえたり、「ここのコードこうした方がいいよー」というかんじでコードを送ってくれたり。
もっとちゃんとデバッグしてから公開しろとか若干怒られるかと思ってたり結構内心ビクビクしていたのですが、そんなことは無く、ホント、メールやTwitterの向こう側にいる方々に大変助けられました。ていうか正直そんなにレスポンスあるのかよ!ってびっくりしました。

公開してからの方が、遙かに開発速度は上がりました。バグも自分で探しきれないことは多々あるので、本当に助かります。また、要望なども僕みたいな一人きりで作っている人間からしたら有り難いことです。実装するか、できるかはともかく。。。。
また、フォーラムの方でもいくつかトピックスが上がっていました。しかし、こちらは全部英語で現在解読に四苦八苦状態です。誰か助けて下さい(涙)

あと、公開して良かったなと思うことは、ブログなどで取り上げてもらったりしたことですかね。

やっぱり誰かにこれいいよって言ってもらえるのは嬉しいですよね。

かちびと.netさんの記事から抜粋しますが、

フィードバックも開発に必要不可欠なのですから、使って感想や問題を開発者に伝えるだけでも、あなたも開発者の一員と言えるわけです。

はまったく持ってその通りだと思いました。「フィードバックしたらうざいとか思われるかな・・・」とか思っていたこともありましたが、作り手になるとフィードバックというのは本当に有り難いです。趣味半分仕事半分みたいな感じで作っているものなので結構モチベーションの維持は結構大変なのですが、感想をブログに書いてもらうとかでもかなりモチベーションの維持になります。

まぁ、長々と書いてきましたが、プラグインそのものの作成自体はそこまで難しいものではありません。基本的にはfunctions.phpに書くのと変わりません。
自分用にプラグイン化して公開するでもいいと思います。メンテナンスが楽になるので。僕も最初はそんな気持ちで始めました。そしたら、初めて行ったWordCampで「プラグイン作ってたりするよね?」と言ってもらえて話のネタになったり、先ほども書きましたが、フィードバックを色々頂けたりで嬉しくなったり、誰かの役には立ってるんだなとか思えたり。サイトのアクセスが増えたり。とささやかな幸せをいくつか味わうことができました。

『プラグインがないから、しょうがない、functions.phpで頑張るか。』って経験をお持ちの方って結構多いって思うんです。そんな人は是非プラグイン化してみることをおすすめします。GPLなんだから、元から有るプラグインをフォークしても良いと思うし、似たようなプラグインがあっても日本人が作っているってだけで、結構違うものです。

きっとささやかな幸せを味わうことができますよ。その積み重ねがWordPressなりオープンソースのソフトウェアなり、コミュニティをより良いものにしていくと思うし、そうやって盛り上がれば最終的に自分自身にも恩恵はあると思います。

あ、今更ですが、公開中のプラグインです。

フィードバック、ご意見ご感想、お仕事のご依頼などは@Toro_Unitか、Contactに頂けたら嬉しいです。また、英語のフォーラムを解読してくれる方などいましたら、ご協力頂ければ幸いです。m(_ _)m

“WordPressのfunctions.phpを書きまくってる人はプラグインにして公開すると幸せかもしれません。” への3件のフィードバック

  1. はじめまして、失礼します。
    全く関係ないキーワードから流れ着きましたが、
    このお話は必ずいつかは通る道になると思っています。
    その際には是非参考にさせて頂きます。

    貴重な情報をありがとうございます。

  2. ども、wokamoto です。フィードバック嬉しいっすよね。

    WordPress プラグイン公式ディレクトリですが、バナー画像入れられるようになりました。
    http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/

    あと、実は Description: も翻訳ファイルに含めることができます。
    こちらも、翻訳ファイルに入れてやってください!
    http://dogmap.jp/2011/07/01/wordpress-plugin-description-translation/

    1. 読んで頂いてありがとうございます。
      Descriptionの日本語化、Head Cleanerでやっているのを見て、どうやっているんだろうってずーっと思っていたので、助かります!ありがとうございます。
      近日中に実装します!

      バナーも作らねば・・・・