リッチなフロントエンドを開発しているとGraphQLを使いたくなるときがあり、さらにそのバックエンドをPerlで実装したくなるときもあるでしょう。
このエントリではPerlでGraphQL開発をしたい時に使える2023/02/24現在のPerlのGraphQL周りのライブラリ事情についてまとめます。
GraphQLフレームワーク
graphql-perl
PerlでCPANモジュールを使ってGraphQLバックエンドを実装したいとなった場合に現状コレ一択。
PerlCareersの支援で資金援助を受けて実装されている。
世界観としてはThis module is a port of the GraphQL reference implementation, graphql-js, to Perl 5.と言っているが、graphql-jsの忠実な移植ではなく、限りなく処理を独自実装しているのが特徴。
MooやType::TinyなどのモダンPerl的なライブラリをふんだんに使っていたり、GraphQLのパースをPegex::Parserを使い正規表現を用いて行っている。
やや実装に難がありパフォーマンスに問題が発生しがちな傾向にある。
khrt/graphql-perl
graphql-jsの忠実な移植プロダクト。 残念ながら開発が途中で止まっていそう。
stevan/p5-Graph-QL
khrt/graphql-perl
と同様にgraphql-jsの忠実な移植。
開発が5年で止まって入るが、比較的実装されている。
パーサーライブラリ
GraphQL::Language::Parser
前述のgraphql-perlの一部分
Parser::GraphQL::XS
graphql公式のリポジトリにあるC++で実装されたGraphQLパーサー( https://github.com/graphql/libgraphqlparser )のXSバインダ。
ただしParser::GraphQL::XSにはlibgraphqlparserをインストールするみたいなおもてなしが無いことから、このモジュールをインストールする際は自前でlibgraphqlparserをインストールする必要がある。
DataLoader
GraphQLでクエリに対するSQLをいい感じにまとめる時に使われる機能であるDataLoaderの参考実装。 Mojoliciousが動いていることが前提となっているため、Mojoliciousを使っていないwebアプリケーションには直接組み込めない
というわけで基本graphql-perlを使えば良いのだけど、graphql-jsの素朴な移植もほしいですね。。。