Word press plugin開発にオートロードを使ってみた話
-
Upload
tomoyuki-sugita -
Category
Engineering
-
view
120 -
download
3
Transcript of Word press plugin開発にオートロードを使ってみた話
![Page 1: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/1.jpg)
WordPress Plugin 開発にオートロードを使ってみた話2016/12/11 Tomoyuki Sugita
![Page 2: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/2.jpg)
杉田 知至@tomotomobile
クックビズ株式会社開発部マネージャProject ManagerWP Campaign Manager作者
自己紹介
![Page 3: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/3.jpg)
“ 趣味で”WordPress プラグインを開発して公開しています
![Page 4: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/4.jpg)
キャンペーン管理が驚くほどカンタンにhttps://wordpress.org/plugins-wp/wp-campaign-manager/
![Page 5: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/5.jpg)
記事の途中に唐突に出てくるバナーを管理するためのプラグインです。アフィリエイターさん必見!
![Page 6: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/6.jpg)
バナーはショートコードで管理しているため、元のコードを修正すれば、サイト内の全バナーを差し替えできます。
![Page 7: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/7.jpg)
キャンペーンを非公開にすれば、記事内のバナーも非表示になります。バナーの予約投稿も可。
![Page 8: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/8.jpg)
実際に自分で使ってみて不便だと思ったこと
![Page 9: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/9.jpg)
アフィリエイトの支払い条件とか、キャンペーン期間が分からないので、詳細 URLが欲しい。
![Page 10: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/10.jpg)
こういう枠を管理画面に追加するとコード量が一気に増える。
![Page 11: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/11.jpg)
管理画面の機能、ショートコードの機能などを別のファイル(クラス)に分けたくなる。
![Page 12: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/12.jpg)
Require 地獄は嫌だ!
require_once __DIR__ . 'src/AdminTheme.php';require_once __DIR__ . 'src/ShortCode.php';
![Page 13: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/13.jpg)
オートロード使いたい!
use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;
![Page 14: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/14.jpg)
PHP のオートロードの紹介わかり易さ優先で雑に解説
![Page 15: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/15.jpg)
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開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/16.jpg)
require いっぱい使うと面倒くさい!実行速度も遅くなる!
![Page 17: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/17.jpg)
そこで使うのが PHP5.3 から登場したオートロード
![Page 18: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/18.jpg)
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開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/19.jpg)
さっきの書き方# 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開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/20.jpg)
オートロード使ったときの書き方# wp-campaign-mager.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;
# src/AdminTheme.phpで、 src/ShortCode.phpを使いたいときuse src\ShortCode;
※分かりやすくするため、変な書き方してます
![Page 21: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/21.jpg)
注意点require_once 'src/ShortCode.php'; ↓use src\ShortCode;
スラッシュ (/)がバックスラッシュ (\)に変わりました。.phpが無くなりました。
![Page 22: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/22.jpg)
src/ShortCode.php を少し改造<?phpnamespace src;
class ShortCode {
※ファイルの先頭に一行追加
![Page 23: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/23.jpg)
ネームスペースといいますuse src\ShortCode;
て書いたら、 src/ShortCode.phpのクラスを呼び出します。
![Page 24: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/24.jpg)
ネームスペースは何でも OK
<?phpnamespace tomotomobile\WPCampaignManager;
class ShortCode {
※PSR-4のルールですが説明は省略
![Page 25: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/25.jpg)
use の後ろはネームスペースuse tomotomobile\WPCampaignManager\ShortCode;
て書いたら、 src/ShortCode.phpのクラスを呼び出します。
![Page 26: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/26.jpg)
さっきのuse src\ShortCode;
て書いたら、 src/ShortCode.phpのクラスを呼び出します。
![Page 27: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/27.jpg)
今回のuse tomotomobile\WPCampaignManager\ShortCode;
て書いたら、 src/ShortCode.phpのクラスを呼び出します。
![Page 28: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/28.jpg)
利点• いっぱい requireしなくて良い• requireの速度が早くなる(たいてい)• クラス名が短くて済む
![Page 29: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/29.jpg)
余談終わり!
![Page 30: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/30.jpg)
解決策 1Composer 使えばいいじゃん
![Page 31: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/31.jpg)
![Page 32: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/32.jpg)
確かにできる!require_once __DIR__ . '/vendor/autoload.php';
use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;
$instance = new WPCampaignManager();$instance->execute();
![Page 33: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/33.jpg)
composer.pharって 1.7MBもあるんだぜ。オートロード使いたいだけなのに、はっきり言ってオーバースペック。
![Page 34: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/34.jpg)
解決策 2Autoloader 自分で作っちゃえ
![Page 35: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/35.jpg)
できちゃった!require_once __DIR__ . '/autoloader.php';
use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;
$instance = new WPCampaignManager();$instance->execute();
![Page 36: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/36.jpg)
さっきのrequire_once __DIR__ . '/vendor/autoload.php';
use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;
$instance = new WPCampaignManager();$instance->execute();
![Page 37: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/37.jpg)
今回のrequire_once __DIR__ . '/autoloader.php';
use tomotomobile\WPCampaignManager\AdminTheme;use tomotomobile\WPCampaignManager\ShortCode;
$instance = new WPCampaignManager();$instance->execute();
![Page 38: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/38.jpg)
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.mdほぼサンプルコードのコピペで作れました。
![Page 39: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/39.jpg)
元のコード
![Page 40: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/40.jpg)
作った (?)コード
![Page 41: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/41.jpg)
変更点$prefix = 'Foo\\Bar\\'; ↓$prefix = 'tomotomobile\\WPCampaignManager\\';
自分で決めたネームスペースを書くだけ。バックスラッシュ (\)は 2回書きます。
![Page 42: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/42.jpg)
まとめレガシーコードの集合体WordPressにも、オートロードを実装できることが分かりました!
![Page 43: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/43.jpg)
ご清聴ありがとうございました
![Page 44: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/44.jpg)
Appendix
![Page 45: Word press plugin開発にオートロードを使ってみた話](https://reader031.fdocuments.net/reader031/viewer/2022012923/58ef72a61a28ab7a0e8b45bb/html5/thumbnails/45.jpg)
参考サイト• 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/