タグ: WordCamp Kansai 2016

  • WordCamp Kansai 2016 で、プラグイン作成のハンズオンもしてきました。

    WordCamp Kansai 2016 で、プラグイン作成のハンズオンもしてきました。

    先日の WordCamp Kansai 2016登壇させて頂きましたが、それとは別に、WordPress プラグイン作成のハンズオン の世話役も担当させて頂きました。といっても内容はほとんど一緒に世話役をやった宮崎さんに丸投げしたような記憶があります。

    WordCamp Kansai 2016 プラグイン作成のハンズオンで進行役などをしてきました! | memocarilog

    当日の資料はこちら。wckansai2016/plugin-hands-on

    「この記事は○分で読めます」みたいなプラグインを作ると言うことで、自分は話のネタ用のプラグインを作りました。

    wckansai2016/plugin-hands-on-sample

    とりあえず、add_actionadd_filteradd_shortcode の3点セットの話が出来れば良いかなーということで作ったので結構ガバガバです。なのでおかしいところを発見したらプルリクエストくださいー。

    フォローアップというか補足みたいなもの

    プレフィックスについて

    三好さんも指摘していたことですが、WordPressのプラグインやテーマは普通に実行中に include されるので、一般的な名前を使うと関数名、アクションフック、フィルターフック等が衝突したりします。関数名の衝突が起こると、画面真っ白になりますしフックが衝突するとよからぬ挙動が発生します。

    なので、必ずプレフィックスをつけることをオススメします。今回のプラグインだったら、

    function plugin_hans_on_sample_func()
    

    みたいな感じですかね。すべての関数にこれを付けたりするのが面倒だという場合は、クラスを活用したりするという手があります。

    もしくは PHP 5.3 以前をサポートしないならば、名前空間を使うという手もありますが、WordPress 本体が PHP 5.2 を現状サポートしているので、使うならば、古い PHP の場合に白い画面にならない工夫や、エラーメッセージの表示など、気をつけないといけないことがいろいろ出てきます。

    管理画面に機能を追加する

    当日の質問で時間が足らずにお答え出来なかったのですが、この話をやり出すと時間が1時間以上かかってしまう気がするので、とりあえず サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル の8章あたりを読んでみるといいと思います。

    また、megumiteam/hatamoto を使って開発を始めるのもアリでしょう。シンプルな管理画面がはじめから付いているので、CSRF対策の具体的な方法を勉強するにはちょうど良いサンプルかなと。具体的な使い方は宮内さんの記事を参考にどうぞ。

    https://firegoby.jp/archives/5604

    あとこれとは別に、Settings API なんてものもあります。既存の管理画面に項目を追加したりする場合に用います。

    ちゃんと使うと値の保存とかバリデーションとかも出来るようですが、結構大変だったりします。使いこなすとめちゃくちゃ強力だと思いますが、まずは普通にプラグイン専用の管理画面を作れるようになれば十分かなと思ったりします。

    WordPressの管理画面に独自のオプション保存をするためのSettings APIの使い方 – Shinichi Nishikawa’s

    プラグインの国際化

    公式ディレクトリへの登録や配布などを考えたときにプラグインを翻訳を考える必要が出てきたりします。やっぱり公開するとフィードバックが欲しくなるもので、そうなると国際化ってとても大事なテーマかなと思います。

    今回のハンズオンでは取り扱いませんでしたが、Codex に詳しい資料があるので興味のある方は見てください。

    I18n for WordPress Developers – WordPress Codex 日本語版

    また、サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブルの13章にも詳しい解説があります。

    このプラグインの作りかた

    本題とずれまくるので今回は説明しなかったことをつらつらと。

    このプラグインは、WP-CLI 使ってプラグインのひな形を作成しています。

    $ wp scaffold plugin plugin-hans-on-sample
    

    地味ですがすっごい便利だったりします。そこから生成されたファイルにコードを書いてます。

    また、PHPUnit によるテストも書いています。

    ここら辺の環境構築をサクッと行いたい場合は、VCCW が便利です。

    まとめ

    プラグインそのものを作るのはホントに簡単です。コメントを書いたPHPを用意して、せいぜいreadme.txt を用意するだけでOKです。Hello Dolly や Nothing Much のような何もしないプラグイン、Hello Kushimoto といった完全にネタとしか思えないもの(実はそんなこと無いんですが・・・w)もあったりします。

    ですが、WordPress が用意している API も山ほどありますし、本当に出来ることも多いです。WooCommerce や、BuddyPress など WordPress サイトにかなり大幅な機能追加をするプラグインもあったりします。

    MySQL の知識や、高度な PHP や、JavaScript の知識が必要なカスタマイズなども様々です。

    とりあえず、バイブル や Codex を読みつつ、自由な発想でプラグインを作れば良いんじゃ無いかと思います。

    これを機会にプラグイン作ったよーってひとが居たらぜひぜひお声かけくださいませませ。

    プラグインとか作ると楽しいよーってセッションもしたのでこちらもどうぞ。

    Custom Post Type Permalinksを公式ディレクトリに公開しました。

     

  • WordCamp Kansai 2016 でオープンソースの楽しさみたいな話をしてきました。

    WordCamp Kansai 2016 でオープンソースの楽しさみたいな話をしてきました。

    先日行われた WordCamp Kansai 2016 に参加してきました。今年は初めて実行委員として、主にセッションチームの仕事を、またセッションとハンズオンをそれぞれスピーカーとして担当させて頂きました。

    懇親会で飲み過ぎて二日酔いだったり、そもそも移動の疲れや大阪の蒸し暑さで体力ゼロでした。そんな体が悲鳴を上げる中で、ワクワクしてセッションを聞きに行ったり、「裏番組のセッションとかハンズオンも絶対面白いじゃん!どうして体が2つ無いの!」って思いながら当日過ごして居たので、それはとても良かったのかなーと思う次第です。おかげさまで昨日は熱出して寝込みました。

    WordPress.tv に後日動画がアップロードされるので、ゆっくり見ようと思います。

    実行委員・スピーカー・そのほか支えてくれた皆様お疲れ様でした。ありがとうございました。

    実行委員としての話はながーくなるので、とりあえず、自分の担当セッションのフォローアップ的なものを。

    「WordPressのプラグイン作ったりコアコントリビューターになった話。 そして、その楽しさと意義。」

    自分のオープンソースへの取り組み、というと大げさですが、そういったことに関わったことでの個人的な感想・体験などを共有出来ればと思いました。

    オープンソースにすることやコントリビューションすることで発生するコミュニケーションってのは楽しいですし、また、いろんな人の小さなコントリビューションの積み重ねでいろんなものが便利になっていくってのは、とってもステキなんじゃ無いかと思ったりするわけです。

    今回だと、GitHub と Travis CI で WordPress テーマをテスト、ビルド、そして自動化 というテーマで今回登壇して頂いた羽野さんの amethyst というテーマにプルリクエストを送ったりしていたんですが、めちゃくちゃ勉強になりました。また、当日初対面だったのですが、その件でいろいろ話し込んだりすることが出来たのがすっごい楽しかったです。

    去年の WordCamp Kansai でも実は初対面だったキタジマさんと飲みに行ったり。

    初対面の人に話しかけたりすること等が苦手で、テレビとかに出てくるナンパ師みたいなコミュ力お化けみたいな人からは全力で逃げるタイプの人間ですが、そんな僕とってのコミュニケーションの方法がオープンソースなのかなと、終わってみて改めて気づいた今回の WordCamp Kansai でした。

     

    プラグインを公開したときの記事があったのでそちらもどうぞ。

    Custom Post Type Permalinksを公式ディレクトリに公開しました。