2018年
平成30年 昭和93年
350日経過 残り15日
16
休業日
12月 日曜日
Dec 師走 Sun 友引
December Sunday
今月営業日
009 / 019 日
今月休業日
006 / 012 日
今年営業日
000 / 241 日
お知らせNo.339. SSLはじめました。 2017/12/18
お知らせNo.305. ユーザー様整理いたします 2017/09/28
お知らせNo.223. Firefoxのパスワード記憶について 2017/03/23
お知らせNo.218. プラグイン機能の説明を作成しました。 2017/03/22
お知らせNo.211. LINEを公開しました。 2017/03/17




USER:
PASS:
新規登録
  • BBSみしお より
  • BBSみしお より
  • BBSみしお より
3人の会員

1
Unique
Visitors
Powered By Google Analytics
インフォトップ公告表示プラグインの実演です。

フックのはなし

担当@みしお 開始日:2017年11月20日

ワードプレスにはフックと称される作法がありフィルターやアクションを規定動作に含めるものを示しています。
フックとは、プログラマをしている人にとってはおなじみであり、プログラマになりはじめた人にとっては憧れの機能であったりもします。

ワードプレスのフックとは異なるのですが、プログラミングやソフトウエアにおけるフック動作をまず紹介してみたいと思います。
フックとはいわゆる割り込み動作のことで、キーボードフックというものなどは有名かと思います。
キーボード操作からOSがそれを受け取りフォーカスのあるアプリケーションにそれを流すのですが、まずキーボード入力を取得した時点からアプリケーションに伝達する間にわりこみをしてそれを取得したり取得した後無効にしたりします。
これはアプリケーションに入力された情報を取得するでも構わないのですが、そのためには対象のアプリケーションごとに動作のたびに返事をくれと問い合わせをかける必要があったり変換された後のデータを受け取る形になったりただ煩雑になるだけの動作を簡略化するものになっています。
ですがキーボード入力を阻害したり入れ替えたりすることができるため責任も重大になります。なのでそう簡単なものではないものでもあります。
ほかに漢字変換プログラムのところで取得するとか、アプリケーションが常駐して監視するなどの方法もありますが、目的は同じく「現在フォーカスのあるアプリケーションとインターフェイスの間の作業にわりこむ」ことです。
とりいそぎ今なにを考えてもおなじ説明文を繰り返すだけになりそうなのでここまでにしますが、ようするに上流で動作を仕切る仕組みがあるということです。

この上流とか下流とか高級とか低級といった表現は相対的であったり感覚的であったりするのでいまいち説明に向いてないのですが「動作を始めてから終わるまでの間」を時系列にして早いものから順位最後のほうまであって、その最初のほうに割り込む部類だということです。
まだ人の手を介さない段階のコンピュータの動作について既定値以外の要望を加えることの類になります。

ほかにもブラウザーがネットから取得するデータをフックするだとか、特定のアプリケーションの動作を外部から操作したりするなどのフックもあります。

ようするにAPIなわけですが、このAPIという概念とフックが似ているためウェブアプリでもフックと呼ばれる処理の分類がなされ、ワードプレスにおいてはその構造の近い部分がフックと呼ばれています。

UIのない部分や他のアプリケーション、PHPでいうローカルルーチンやストラクチャの部分に干渉するようなものがフックと呼ばれるようですがこれはさすがに上記のプログラムを理解した上でないと名前の由来がわかりにくそうです。

ちょっと話はとびますが、フックのメリットは先の「出先全部に網を張ってつかまえるより出元でつかまえたほうが確実便利簡単軽量」であるというところです。
源泉徴収的な感じです。もちろん起算点によるのでUI単位で言うとなのですが、アプリケーション単位でももちろんあります。規模に差はあれユーザー以上に割り込む段階は多々あります。
メリットはなんといっても元データに触れることができるタイミング、インフラとして準備しているところや別の完成した機能からデータをおすそ分けしてもらえると、その結果処理などしなくてもよいし取得許可も作成しなくて済みます。
ウェブでいうとOauthを使った認証があるとして、それを使ったユーザー一覧を取得するのと、ログインし終わったブラウザから表示される一覧データを持ってくるのとではプログラムの作成量がかわります。
アカウント、パスワードを保持して認証、リクエスト送信、受信、解析、整形して表示という動作が、取得、表示、だけで済むわけです。
厳密には割り込み動作のフックプログラムがいるわけですがそれを抜きにして、また動作的にも軽量化が図れます。
ユーザー名とパスワードの変数は時限的に破棄されているか、リクエストのセッションは内部で起こしているか、などの安全性やガベージコレクトなどといっためんどうな動作をしている他のものに干渉してデータをどうにかしてもらえます。
デメリットとしては作成した式は前の式やデータ、アプリケーションや動作がなければ動作しないものなのでニーズの低いところであれば「ずっと動作待ち」だけしているフックもあるかもしれません。
ワードプレスにおいてはその便乗処理が便利であるため、不要になったデータの後処理をせずとも完了してくれているわけでその時発生したデータはグローバル変数に代入でもしない限り後始末されます。
$PASSなどの変数にパスワードが保持されたままのプログラムとかいやですよね。同じように抽出された表データのもとがそのままとか最終段階でも読み出されるのはこまります。
なのでいちいち全部読み出し定義、読み込んだ後、後始末をつくらなくても前後はワードプレスに任せて読み込んだ後動作だけに追加で機能をふやすことができる構造がワードプレスのフックです。

UIのないところに作業を含ませることをフックという、ということになりますがそこがフックではなく「何であっても2者間があり、コンピュータや人にかかわらずその両者にかかわらないプログラムが仲介データをわけてもらう」のがフックであることからワードプレスも「動作的にこれはフックと呼べるのではないか」というところからフックという名称になっていると思います。

まあ簡単にいうとインターフェイスにほぼ直結した「API」のUIなしだといえばそういうものかと思います。
なので元のデータ、データ形式や出元と渡す先の仕様、これらがかみ合わなければフィルターとしては機能しません。
それとは関係なくデータの参照もべつになく、ただ動作をさせたい「ただいま読み込み中」とか「現在70%」といった表示のために任意の段階に返事がほしい単独動作がほしいときにはアクションフックがつかえます。
その時点においてフィルターではなく、結果を内部に返さず動作だけ、外部に出して終わるタイプをアクションと呼びこれも中間にはさむことができます。

たとえばパソコンで「こぴぺ」という動作がありますが、コピーした元にコピーデータがあるわけでもなく、貼り付け先が「コピーもとに複製データを要求している」わけでもありません。
キーボード動作の一番近くに「クリップボード」というアプリケーションが動作しており、キー操作によって現在フォーカスのあるデータを、そのアプリケーションから自分のアプリケーション内部に複製しているのです。
貼り付けは、自分のアプリケーション内に複製したデータを、対象のアプリケーション内部に書き込み動作を行っています。
関係性からいうとAPIである、ともいえるのを逆説的に「ワードプレスの内部処理するAPIのことをフックとしよう」ということです。

おおまかにUI以前の話なので「画面がでてくる前に処理したい作業、画面がでた時点でおわっていてほしい作業」を担う部分に人の手を加えるのがフックなので、ワードプレス的にいえばヘッダーが生成される前にする作業にあるのがフックです。

規定の動作順序を変えたり、規定の動作に変更を加えたりするところに役立つと思います。

表示されたあとで割り込みをかけるのにはJavascriptでしょう。正確には割り込みではないですがUIの動作の人の手にさらに動作追加して便利を求める「割り込み」に似た動作ができたりAjaxでCGIの「サーバーに問い合わせるためには画面の更新が必要」のデメリットを小さくしたりさまざまに補助をして対話動作の簡略化を図ることができます。

そんなに使うことは多くないと思いますが、ここ一番というところで必要にもなってくると思うので必要な動作についてだけ徹底的に研究して使いまわしていくのもいいと思います。


このページはログインするとコメントを記入できます。
先頭に戻る