テーマに機能を含めちゃダメなんて誰が決めた!
テーマをモリモリにカスタマイズする
WordBench東京2016/02
(C)2016 高橋文樹
おまえ誰?
• 高橋文樹といいます。小説家で
す。
• WordCamp Tokyo 2016の副実
行委員長です。
• 公式プラグインを6個ぐらい公開
しています。
• 僕のプラグインを3回以上インス
トールした人は僕のKindle本を
全部買ってください。子供が飢
えています。
免責事項
この発表はWordPressを使ってサイトを作るにあたり、
どれだけやれるのかということを主題にしています。
もしあなたがWordPressによる受託開発を行っており、
コーポレートサイトやらなんやらをたくさん作ることで
生計を立てているのであれば、
全然役に立たない発表になってしまいますので、
その点ご了承ください。
よくある誤解
• 「テーマは見栄えでプラグインは機能」なの?
• コード的にはどっちも大して変わらない。違うのは
エントリーポイント(WordPressのどこで一番最初
に実行されるか)ぐらい。
• 実現可能かどうかと、特定の誰か(WordPress.org)
がそうしてほしいかどうかは別問題。
公式リポジトリの規約
• Use WordPress functionality and features first, if available.
• Don t include admin/feature pointers.
• No pay wall restricting any WordPress feature.
• No disabling of the admin tool bar.
• Use get_template_directory() rather than TEMPLATEPATH to return the template path.
• Use get_stylesheet_directory() rather than STYLESHEETPATH to return the stylesheet path.
• Avoid hard coding to modify content. Instead, use function parameters, filters and action hooks where appropriate.
For example wp_title should be modified using a filter.
• Able to have child themes made from them. (Child theme ready)
• Include comments_template().
• The theme tags and description must match the what the theme actually does in respect to functionality and design.
• Use template tags and action/filter hooks properly.
https://make.wordpress.org/themes/handbook/review/
required/#core-functionality-and-features
そうなんだ!
でも公式テーマじゃないから!
解決
プラグインとテーマの
違わなさ
wp-settings.phpの
251行目か364行目か
唯一の違い
• テーマはプラグインより後に読み込まれるので、プラグイン
がテーマを変更することはできるが、テーマがプラグインを
変えることはできない。
• テーマは定数で読み込まれるので、UserAgentでテーマを切
り替えるようなことをテーマ自身は基本的にできない(テー
マスイッチ系プラグイン)
• initやadmin_menuなどのクリティカルなフックは全部
after_setup_themeフック以降なので、違いは大してない。
管理画面を追加したりすることはテーマにもできる。
ところで
Terminology
【プラグイン】
語義: コンセントのように差したり抜いたりできる
もの
【テーマ】
語義:主題
デモ
WordPressは
プラグインがなくても動くが、
テーマがないと動かない!
人生で重要なのは……
 主題 > コンセント
テーマ > プラグイン
破滅派のテーマ
• 後ろ向きのまま前へ進め!
• パブリッシング・プラットフォーム
• DIY(Do It Yourself)
やってみよう!
テーマから色々やるよ
composer
まず、テーマにcomposerを含め
ます。
読み込みます
vendor/autoload.phpを読みこめば、require地獄から解放!
WPametuとは?
WPametuのここがすごい!
• 設定ファイルを置いておくとデータベースを勝手に作ってくれる
• なんちゃってORマッパーがある!
• HTMLメルマガに欠かせない外部CSSをインラインCSSに展開す
る機能がある!
• コントローラーがある! クラスを置くだけでリライトルール追
加
• if( $_POST[ hoge ] ){}とか書かない! if($this->input-
>post( hoge ){}でno warning!
昨今のPHPフレームワークは
• CakePHPとかは特定のフォルダに特定のクラスを継承し
たクラスを置いておくだけで、RESTfullな作りになる。
• たとえば、http://exaple.jp/post/create/ にアクセスす
ると投稿が作れるとか、そういうの。これを理解してい
なくて、ルートにわけわかんないフォルダいっぱい作っ
てるヤツを死ぬほど見てきた。
• WordPressのリライトルールは少し複雑なので、ここで
苦労しているプログラマも多い。
WPametuなら……
というわけで
テーマで色々できる
アンチパターン
• 神(ゴッド)オブジェクトを作らない。

$myapp->post->custom->event_limit とかダメ!
• シンタックスシュガーを多用しない

$this->i18n->_( hogehoge ) = __( hogehoge , hametuha )
• Well Documentedは正義! コメント最高!
とはいえ……
• プラグインで機能を細かくわけた方が効率がいいの
では? という疑問が必ず来る。
汎用性と開発効率は
トレードオフ
たとえば、匿名掲示板
破滅派の場合
プラグインにした場合
13kb < 177kb
13,312文字 < 181,248文字
桁が違う!
あと、こうなる
プラグインにする条件は?
• その機能が汎用的であること
• みんなが使うであろうユース
ケースをきちんとカバーして
おり、それに意味があること
• 管理画面以外にUIを伴わない
こと
• お金儲けしたい
タイトル ブラックジャックによろしく

著作者名 佐藤秀峰

サイト名 漫画 on web
プラグインのつらみ
• WordPressはテーマに異常な裁量を置いており、テー
マ作者は好きなUIを作ることができる。
• となると、プラグイン側で困るのはUIを作ること。た
とえば、Twitter BootstrapでUIを作ることが決まって
いれば、プラグインから好きなようにUIを作れる。
• 結果、プラグインからクソのようなCSSが大量に読み
込まれ、どうしようもない結果になる。
デモ
今日の学び
• テーマの方がプラグインよりずっと大事! 人生の
テーマはあるけど、人生のプラグインはない!
• なんだってやろうと思えばできる!
• WordPressのTheme RequirementsにCSSフレームワー
クを含めろ! BootstrapでもBourbonでも
Foundationでもなんでもいいよ、ないよりマシだ
よ!
‒マルクス・アウレリス・アントニヌス
“なにもしなかったということは、
悪いことをしなかったということではない”
ご静聴
ありがとうございました

テーマに機能を含めちゃダメなんて誰が決めた! テーマをモリモリにカスタマイズする