WordPressエンジニアになるための究極の原理原則

Web

WordPressエンジニアになるために聞いたことを整理して書いていきます。
究極の原理原則です!

前提

WordPressのエンジニアは、あまり自分で書かないのが特徴です。
WordPressが予め用意してくれている関数やフックなどを利用して開発をすすめていく。そこに処理を差し込んで、コードを書いていくという特徴がある。
→ スクラッチで作れるエンジニアがWordPressに行くと、難しい。
→ WordPressから始めてしまうと、他のスクラッチやフレームワークに応用が効きにくい。

【究極の原理】WordPressのコアファイルを読んだ時間がWordPressエンジニアのレベルに比例する

WordPressのコアファイルを読んだ時間 = WordPressのコアファイルのソースコードレベルの理解度の高さです。

WordPressエンジニアとして優れているかどうかの客観的かつ確実な指標はこれに尽きます。
これ以外では判断できません。

いくらWordPressエンジニア歴が長くても、このコアファイルの理解ができていない人は質が高いとは言えないということになります。

仕事でもなんでも開発している際に見たことのない関数があったら、まずはコアファイルを見て処理を確認する。
その関数がコードレベルでどういった処理をしているのかがわからなかったら、
どこのファイルで、どういう関数でどういうメソッドで呼ばれているのかをイメージできるようにする。

grep 力

どこに関数の処理が書いてあるかは、grepを使って調べる。
WordPressでは、コアファイルの様々な関数などが定義されているディテクトリであるwp-includesを見ます。

カレントディレクトリがwp-includesの場合 例えば、「have_posts」が分からなかった場合、
grep -r have_posts ./* | grep function

すると、以下のようにgrepの結果が出てくる。

./class-wp-query.php:	public function have_posts() {
./query.php:function have_posts() {

どちらかを見るのですが、まずは query.php を見る。

861 function have_posts() {
862     global $wp_query;
return $wp_query->have_posts();

すると、上記のようになっているので、
global $wp_queryという変数から、have_posts(); が実行されていることがわかった。

そこで次は、 class-wp-query.php を見ると、以下のように定義されている。
後はこの調査を再帰的に繰り返すのみ。

3103     /**
3104      * Determines whether there are more posts available in the loop.
3105      *
3106      * Calls the {@see 'loop_end'} action when the loop is complete.
3107      *
3108      * @since 1.5.0
3109      *
3110      * @return bool True if posts are available, false if end of loop.
3111      */
3112     public function have_posts() {
3113         if ( $this->current_post + 1 < $this->post_count ) {
3114             return true;
3115         } elseif ( $this->current_post + 1 == $this->post_count && $this->post_count > 0 ) {
3116             /**
3117              * Fires once the loop has ended.
3118              *
3119              * @since 2.0.0
3120              *
3121              * @param WP_Query $this The WP_Query instance (passed by reference).
3122              */
3123             do_action_ref_array( 'loop_end', array( &$this ) );
3124             // Do some cleaning up after the loop
3125             $this->rewind_posts();
3126         } elseif ( 0 === $this->post_count ) {
3127             /**
3128              * Fires if no results are found in a post query.
3129              *
3130              * @since 4.9.0
3131              *
3132              * @param WP_Query $this The WP_Query instance.
3133              */
3134             do_action( 'loop_no_results', $this );
3135         }
3136
3137         $this->in_the_loop = false;
3138         return false;
3139     }

WordPressの開発時には、コアファイルをどれだけ知っているかのみが重要で、コアファイルを知っていると機能や動作が可能かどうかの判断が瞬時につけられる。

さらに、WordPressの管理画面の方はURLとファイルが対応しているので、どこのファイルが影響しているのかを特定しやすい。

わからなかったら、遠慮なくvar_dump(); をして処理の流れを確認していく。

もしくは、
grep -irn ‘function have_posts’ *
を使うこと。
利用しているオプションの意味は、

  • i:大文字と小文字の区別をなくす。
  • r:再帰的に検索をかける。
  • n:該当箇所が何行目にあるのかを表示する。

【原理2】プラグインは使わない

使っていいプラグインは、
自分で作ったとしても同じものを作ることになるだろうというプラグインのみです。

公開されているプラグインは、汎用的に作られているためそのサイト特有の機能ややりたいことを実現できないor部分的にしか再現できないという自体に陥ってしまう。

機能については、プラグイン化したほうがいい場合は自分で作ってしまうのが一番いい。
自分で作ったものは自分でいかようにも制御できる。既存のプラグインだと、アップデートの問題も出てくるため。

【究極の原則】にも被るが、プラグインを使う場合についても、WordPress同様にプラグインファイルを確認してから利用する習慣をつける。

【原則3】gitでソースコードの管理をするのは当たり前

ソースコードをgitで管理しないのは、もはや開発者ではありません。

こまめにpushしていくことが大事です。

【原則4】2行以上かつ、2度以上実行する可能性があるコマンドはシェルスクリプトで自動化させる

2行以上かつ、2度以上実行する可能性があるコマンドはシェルスクリプトにしてください

コマンドを打ちそこねることもあるし、その際の問題の切り分けもそのシェルスクリプトのみ
を実行したことが明らかなのでシェルスクリプトを活用すること。

【原則5】コメントを書く

定義した関数やメソッドがなんの目的で利用されるためにあるのかをコメントで書いておかないと、別のエンジニアが見た際にコードから推測しないといけなくなってしまう。

コメントがあれば、「この関数は、こういう目的で定義されているんだ」という最終的にやりたいことがはっきりするので、望ましい。

コメントにはせめて、この処理によって実現したいことを書きましょう。

【原則6】思い込まない

過去の経験に縛られて思い込むと、普段今まで紹介した原理原則で考えられていたとしても
まったくうまく行かなくなります。全ての思い込みを捨ててください。
うまくいってないと思ったら、そもそものレベルから一から考え直してください。

その他

関数ではなく、classでかく。

処理をそこに書く必要があるように制約を作って、
classのconstructerに書いてしまう。→ファイルを行ったり来たりしなくていい。
グローバルに変数を持ちたい場合にも、class内の変数にプロパティをもたせればいい。
※関数は分散されがちなため。
※関数は落書きだ。

最後に

WordPressは他のフレームワークやスクラッチでアプリケーションを作る場合に比べ、かなり癖があるため、しっかりとこの原則を踏襲してやることが大事だと思います。

守・破・離 の守をまず徹底させる必要があります。
自分もしっかり守ってやっていきたいと思っておりますが、

この考えが皆さんのお役にも立っていただけたら幸いです。

コメント

タイトルとURLをコピーしました