はじめに

fax送信サービスiamfax.comではDjango, 通信にはでgraphqlを使っています。

graphqlのライブラリとしてstrawberryを使っているのですが、今回はそれをどのように運用しているのか紹介していきたいと思います。

何故 strawberry を採用したのか

djangoではメジャーなgraphqlライブラリとしてgraphene-djangoが有ります。もう1つが strawberryです。

strawberryを採用したのですがその理由は

  • mutation, query の書き方がスッキリに見えること
  • 型ヒントや dataclass を積極的に利用して、GraphQL スキーマを定義できるため、コードが自然で直感的なこと
  • 型チェックが厳密でIDEの補完機能が充実しているため、開発効率が向上すること

Grapheneではスキーマ定義に特殊なクラス (ObjectType) を使用する必要があり、Pythonの型ヒントとの親和性が低かったです。

strawberryはFastAPIなどで使われているイメージもあるかと思いますが、djangoでも問題なく使えます。最近 2024年あたりからdjangoで扱いやすくするようにstrawberry-djangoという形でサポートしてきました。

iamfax.comでは不要なdjango integrationを多様せず、できるだけ素のstrawberryを使っています。(例えば @strawberry_django.fieldとかではく、通常のstrawberry_fieldを使うなど)

strawberry-djangoは便利な機能を提供しますが、必ずしも必要な機能ばかりではありません。できるだけ素の strawberry を使うことで、ライブラリへの依存度を下げ、コードの可読性を高めることができます。

strawberry + djangoの記事を書こうと思ったのはstrawberryを使った実践的な日本語の記事がなかったためです。(日本にdjango人口も少ない、graphqlを普段から扱う人も少ないので仕方ないのですが。。)

導入にあたって、testや認証方法など、皆が知りたいところを紹介していく予定です