コンセプト、アイデア、戦略
コンセプト、アイデア、戦略WordPressフックとGraphQLディレクティブの類似点

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 による大文字・小文字変換など、ほかの変換も可能です。