テーマに機能を含めちゃダメなんて誰が決めた!...

Post on 12-Jan-2017

10.845 views 0 download

Transcript of テーマに機能を含めちゃダメなんて誰が決めた!...

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

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でもなんでもいいよ、ないよりマシだよ!

‒マルクス・アウレリス・アントニヌス

“なにもしなかったということは、 悪いことをしなかったということではない”

ご静聴 ありがとうございました