WordPressフックとGraphQLディレクティブの類似点
WordPressアプリケーションは、プラグインおよびフック(アクションとフィルター)を活用することで高い拡張性を持ちます。フックは、WordPressコア・テーマ・プラグインのコードの動作を変更するためのものです。フックはシンプルなコードの断片で、トリガーされるたびに値を上書きしたり、アクションを実行したりすることができます。
次の例では、フィルター block_categories を使ってWordPressエディターで有効なブロックカテゴリーを変更しています。
\add_filter(
'block_categories',
function(array $categories): array
{
return [
...$categories,
[
'slug' => 'graphql-api-access-control',
'title' => __('Access Control for GraphQL', 'graphql-api'),
],
];
}
);フックはシンプルで汎用性が高く、強力です。使い方を誤ることもありますが、適切に実装すれば、開発者があらかじめ計画していなかった方法でアプリケーションを大きく拡張できます。
GraphQLディレクティブをフックとして使う
ディレクティブは、WordPressにおけるフックのGraphQL版と見なすことができます。
WordPressのフックと同様に、ディレクティブはフィールドの値を変更してほかの機能を拡張する関数です。その対応物と同じく、シンプルで汎用性が高く、強力です。
たとえば、次のクエリで投稿タイトルの一覧を取得するとします。
query {
posts {
title
}
}これらの結果は英語です。フランス語に翻訳するにはどうすればよいでしょうか?フィールド title にディレクティブ @strTranslate を適用することで実現できます。このディレクティブはフィールドの値を入力として受け取り、Google Translate APIを呼び出して翻訳し、その結果を返します。次のクエリをご覧ください。
query {
posts {
title @strTranslate(from: "en", to: "fr")
}
}拡張性のユースケースは明確です。フィールド title の値が与えられると、ディレクティブを通じて任意の方法で変更できます。この例では @strTranslate によるフランス語への翻訳ですが、@strUpperCase や @strLowerCase による大文字・小文字変換など、ほかの変換も可能です。