$30 off During Our Annual Pro Sale. View Details »

SPACE フレームワークで振り返るモニクル GraphQL リプレース

SPACE フレームワークで振り返るモニクル GraphQL リプレース

2023-11-16 tsukiji.graphql #2 @オンライン でお話したスライドです。
イベントページ: https://tsukiji-graphql.connpass.com/event/298830/

Shoya Tsukada

November 16, 2023
Tweet

More Decks by Shoya Tsukada

Other Decks in Programming

Transcript

  1. 自己紹介 ・塚田 翔也 / TSUKADA Shoya / @gabu ・札幌から来ました! ・名古屋出身、札幌に移住して3年目

    現在は、お金の診断・相談サービス「マネイロ」を開発している 株式会社モニクルで CTO をやっています。 4年前に1人目エンジニアとして入社して、事業の成長に合わせて エンジニア採用も進め、現在エンジニア12名の開発組織となっております。 いわゆるスタートアップのシリーズBぐらいの会社です。
  2. あらかじめご了承ください まだモニクル社として SPACE フレームワークを導入して開発生産性を継続的に 計測している訳では無いので、今回は 「GraphQL 移行が SPACE フレームワークの各項目にどんな影響があるか考え てみた」

    的な発表になります。 本当は既に導入済みで、before/after こんな変化がありました〜という発表がで きれば良かったのですが、申し訳ありません󰢛󰢛󰢛
  3. Activity(アクティビティ) 例)設計とコーディング。設計文書や仕様書、作業項目、プルリクエスト、コ ミット、コードレビューの量や数。 => GraphQL 化の影響を単体で考えるのは難しいですが、REST よりも決まって いることが多いので「逸脱した設計や実装が減る => 手戻りが減る

    => 開発効率 アップ => 結果的に各指標がプラスになる」ということはあるかもしれない。 例えば、REST って純粋なリソースではない独自のエンドポイント、例えば /api/v1/mypage とか(mypage ならまだかわいいですが...これが乱立する と...)を割りとシュッと作れちゃうと思うのですが、一方で GraphQL はリソー スドリブンでスキーマを定義して、クライアントサイドでは欲しいリソースをま とめてフェッチできるので、そういう「まとめ API」が減る性質はありそう。
  4. Communication and collaboration(コミュニケーションとコラボレーション) 例)文書や専門知識の発見しやすさ。 => REST 時代に OpenAPI(Swagger) までは使ってなかったので、API ドキュメ

    ントの整備が面倒&実装と乖離することがありました。そこまで API が多くな かったので OpenAPI 化してなかったというのもありますが... GraphQL に移行した結果、GraphQL ではコードファーストでもスキーマファー ストでも成果物としてスキーマが定義され、そのスキーマとコメントがそのまま ドキュメントにもなるので一石二鳥でした。※もちろん OpenAPI でも同様にス キーマを定義してそれがドキュメントになると思うので、その点ではどちらでも 良かったかもしれないです。
  5. Efficiency and flow(効率とフロー) => 一方で REST 時代は OpenAPI を使わずに自前で社内用の npm

    パッケージ (独自の API クライアントライブラリ)を介してフロントエンドから通信してい たので、GraphQL 化移行はそのパッケージを準備したり、フロントエンド側で パッケージのバージョンを上げたりせずに、graphql-codegen で一気にフロン トエンドのコードを自動生成できるようになったので、その点は開発効率が格段 にアップしました。※もちろん OpenAPI でも同様のことができたと思います。
  6. まとめ S P A C E Satisfaction and well-being(満足度と幸福度) 自分たちが使いたいツールを使っているので満足度や幸福度は高い。より良くしていこう、もっと

    活用しようというモチベーションを持ちやすい。 Performance(パフォーマンス) 「開発効率アップ => リリースが速くなる => ビジネスにプラス」という効果はありそうなもの の、大きなインパクトとまでは言えなさそう。でも開発スピードは確実に上がった。 Activity(アクティビティ) GraphQL の仕様に準拠することになり「設計や実装で迷いや手戻りが減る => 開発効率アップ」と いうことで、アクティビティにはかなりプラスになっていそう。 Communication and collaboration(コミュニケーションとコラボレーション) API に関してのコミュニケーションやコラボレーションを全て GraphQL を拠り所にして行えるよう になったのが最高。Rails のようなレール味を感じる。 Efficiency and flow(効率とフロー) もともとフロー効率の良い開発プロセスを取っていたが、バックエンドとフロントエンドのやりと りをより効率よく開発できるようになって嬉しい。