word press plugin開発にオートロードを使ってみた話

45
WordPress Plugin 開開開 開開開開開開開開開開開開開 2016/12/11 Tomoyuki Sugita

Upload: tomoyuki-sugita

Post on 13-Apr-2017

111 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Word press plugin開発にオートロードを使ってみた話

WordPress Plugin 開発にオートロードを使ってみた話2016/12/11 Tomoyuki Sugita

Page 2: Word press plugin開発にオートロードを使ってみた話

杉田 知至@tomotomobile

クックビズ株式会社開発部マネージャProject ManagerWP Campaign Manager作者

自己紹介

Page 3: Word press plugin開発にオートロードを使ってみた話

“ 趣味で”WordPress プラグインを開発して公開しています

Page 4: Word press plugin開発にオートロードを使ってみた話

キャンペーン管理が驚くほどカンタンにhttps://wordpress.org/plugins-wp/wp-campaign-manager/

Page 5: Word press plugin開発にオートロードを使ってみた話

記事の途中に唐突に出てくるバナーを管理するためのプラグインです。アフィリエイターさん必見!

Page 6: Word press plugin開発にオートロードを使ってみた話

バナーはショートコードで管理しているため、元のコードを修正すれば、サイト内の全バナーを差し替えできます。

Page 7: Word press plugin開発にオートロードを使ってみた話

キャンペーンを非公開にすれば、記事内のバナーも非表示になります。バナーの予約投稿も可。

Page 8: Word press plugin開発にオートロードを使ってみた話

実際に自分で使ってみて不便だと思ったこと

Page 9: Word press plugin開発にオートロードを使ってみた話

アフィリエイトの支払い条件とか、キャンペーン期間が分からないので、詳細 URLが欲しい。

Page 10: Word press plugin開発にオートロードを使ってみた話

こういう枠を管理画面に追加するとコード量が一気に増える。

Page 11: Word press plugin開発にオートロードを使ってみた話

管理画面の機能、ショートコードの機能などを別のファイル(クラス)に分けたくなる。

Page 12: Word press plugin開発にオートロードを使ってみた話

Require 地獄は嫌だ!

require_once __DIR__ . 'src/AdminTheme.php';require_once __DIR__ . 'src/ShortCode.php';

Page 13: Word press plugin開発にオートロードを使ってみた話

オートロード使いたい!

use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;

Page 14: Word press plugin開発にオートロードを使ってみた話

PHP のオートロードの紹介わかり易さ優先で雑に解説

Page 15: Word press plugin開発にオートロードを使ってみた話

PHP で別ファイルにあるクラスを使いたいとき# wp-campaign-mager.phpで、 src/ShortCode.phpを使いたいときrequire_once 'src/ShortCode.php';

# src/AdminTheme.phpで、 src/ShortCode.phpを使いたいときrequire_once './ShortCode.php';

※分かりやすくするため、変な書き方してます

Page 16: Word press plugin開発にオートロードを使ってみた話

require いっぱい使うと面倒くさい!実行速度も遅くなる!

Page 17: Word press plugin開発にオートロードを使ってみた話

そこで使うのが PHP5.3 から登場したオートロード

Page 18: Word press plugin開発にオートロードを使ってみた話

PHP で別ファイルにあるクラスを使いたいとき# wp-campaign-mager.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;

# src/AdminTheme.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;

※分かりやすくするため、変な書き方してます

Page 19: Word press plugin開発にオートロードを使ってみた話

さっきの書き方# wp-campaign-mager.phpで、 src/ShortCode.phpを使いたいときrequire_once 'src/ShortCode.php';

# src/AdminTheme.phpで、 src/ShortCode.phpを使いたいときrequire_once './ShortCode.php';

※分かりやすくするため、変な書き方してます

Page 20: Word press plugin開発にオートロードを使ってみた話

オートロード使ったときの書き方# wp-campaign-mager.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;

# src/AdminTheme.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;

※分かりやすくするため、変な書き方してます

Page 21: Word press plugin開発にオートロードを使ってみた話

注意点require_once 'src/ShortCode.php';  ↓use src\ShortCode;

スラッシュ (/)がバックスラッシュ (\)に変わりました。.phpが無くなりました。

Page 22: Word press plugin開発にオートロードを使ってみた話

src/ShortCode.php を少し改造<?phpnamespace src;

class ShortCode {

※ファイルの先頭に一行追加

Page 23: Word press plugin開発にオートロードを使ってみた話

ネームスペースといいますuse src\ShortCode;

て書いたら、 src/ShortCode.phpのクラスを呼び出します。

Page 24: Word press plugin開発にオートロードを使ってみた話

ネームスペースは何でも OK

<?phpnamespace tomotomobile\WPCampaignManager;

class ShortCode {

※PSR-4のルールですが説明は省略

Page 25: Word press plugin開発にオートロードを使ってみた話

use の後ろはネームスペースuse tomotomobile\WPCampaignManager\ShortCode;

て書いたら、 src/ShortCode.phpのクラスを呼び出します。

Page 26: Word press plugin開発にオートロードを使ってみた話

さっきのuse src\ShortCode;

て書いたら、 src/ShortCode.phpのクラスを呼び出します。

Page 27: Word press plugin開発にオートロードを使ってみた話

今回のuse tomotomobile\WPCampaignManager\ShortCode;

て書いたら、 src/ShortCode.phpのクラスを呼び出します。

Page 28: Word press plugin開発にオートロードを使ってみた話

利点• いっぱい requireしなくて良い• requireの速度が早くなる(たいてい)• クラス名が短くて済む

Page 29: Word press plugin開発にオートロードを使ってみた話

余談終わり!

Page 30: Word press plugin開発にオートロードを使ってみた話

解決策 1Composer 使えばいいじゃん

Page 31: Word press plugin開発にオートロードを使ってみた話
Page 32: Word press plugin開発にオートロードを使ってみた話

確かにできる!require_once __DIR__ . '/vendor/autoload.php';

use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;

$instance = new WPCampaignManager();$instance->execute();

Page 33: Word press plugin開発にオートロードを使ってみた話

composer.pharって 1.7MBもあるんだぜ。オートロード使いたいだけなのに、はっきり言ってオーバースペック。

Page 34: Word press plugin開発にオートロードを使ってみた話

解決策 2Autoloader 自分で作っちゃえ

Page 35: Word press plugin開発にオートロードを使ってみた話

できちゃった!require_once __DIR__ . '/autoloader.php';

use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;

$instance = new WPCampaignManager();$instance->execute();

Page 36: Word press plugin開発にオートロードを使ってみた話

さっきのrequire_once __DIR__ . '/vendor/autoload.php';

use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;

$instance = new WPCampaignManager();$instance->execute();

Page 37: Word press plugin開発にオートロードを使ってみた話

今回のrequire_once __DIR__ . '/autoloader.php';

use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;

$instance = new WPCampaignManager();$instance->execute();

Page 39: Word press plugin開発にオートロードを使ってみた話

元のコード

Page 40: Word press plugin開発にオートロードを使ってみた話

作った (?)コード

Page 41: Word press plugin開発にオートロードを使ってみた話

変更点$prefix = 'Foo\\Bar\\';  ↓$prefix = 'tomotomobile\\WPCampaignManager\\';

自分で決めたネームスペースを書くだけ。バックスラッシュ (\)は 2回書きます。

Page 42: Word press plugin開発にオートロードを使ってみた話

まとめレガシーコードの集合体WordPressにも、オートロードを実装できることが分かりました!

Page 43: Word press plugin開発にオートロードを使ってみた話

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

Page 44: Word press plugin開発にオートロードを使ってみた話

Appendix

Page 45: Word press plugin開発にオートロードを使ってみた話

参考サイト• Example Implementations of PSR-4

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

• PHPでクラスの includeを自動化する autoloadの速度を測ってみた。http://blog.katty.in/1942

• Composerhttps://getcomposer.org/