86472


「クックパッド」 では、サーバサイドの開発に

プログラミング言語 | Ruby, Go, Python, Java, Rust  
---|---  
  
フレームワーク | Ruby on Rails, Spring Boot  
---|---  
  
を採用しているそうなのですが、なぜ複数の言語（フレームワーク）を使用しているのでしょうか？

一つの言語（フレームワーク）で事足りないのでしょうか？


CC BY-SA 4.0
2022-02-19T13:30:28.867
86457
2022-02-21T00:58:10.480
49254
question
ruby-on-rails spring-boot framework
Webサービスにサーバサイド言語を複数使うのはなぜですか？


おことわり：私はこの回答の最初の投稿時点においてクックパッド株式会社で働いています。ただしあくまでいち開発者に過ぎず、この回答も個人の見解として投稿しています。この回答は会社の意見ではありません。

まず、クックパッドに限らない一般的な話をします。

ひとつのサービスを開発・運用するときに、そのサービスを構成するサーバー側のアプリケーションが複数になることがあります。典型的な例としてマイクロサービス・アーキテクチャを採用している場合が考えられます。

このとき、複数存在するアプリケーションをすべて同じプログラミング言語で書くのか、異なるプログラミング言語で書くことを許すのかには選択の余地があります。たとえば殆どのアプリケーションを
Ruby で書きつつも、機械学習を使っている API アプリケーションは開発の都合で Python
で書きたい、といった要望が生まれることは想像しやすいでしょう。他にも、殆どは Node.js で賄えるが、一部の処理が重いところを Rust
で処理する、のような状況も考えられます。

ライブラリの潤沢さ、得意な処理、開発速度、サービスの成長段階、などなど、様々な事情に応じて様々な選定理由がありえます。もちろん全てのアプリケーションの実装言語をひとつに統一するという選択肢もありますが、それがいつも最適であるとは限らないということです。

このような事情から、あるサービスに使われているプログラミング言語やフレームワーク全体を見渡したときに、複数存在することがありえるのです。

続いて、理解を深めるためにクックパッドに限った具体的な話を書いてみます。いわゆるレシピ投稿プラットフォームの「クックパッド」は、実際に複数のアプリケーションが協調して動いています。それらのアプリケーションたちの多くは
Ruby で実装されている一方で、一部のアプリケーションは別の言語で実装されています。たとえば 2019 年時点で Backends for
Frontends (BFF) パターンのためのアプリケーションが Java を使って実装されており、ブログ記事
<https://techlife.cookpad.com/entry/2019-orcha-bff>
に当時の選定理由が書かれています。大雑把に要約すると非同期 I/O をがっつり利用するためです。

また、本筋とは離れる少しややこしい事情として、クックパッド株式会社は[「クックパッド」以外にもサービスを展開している](https://info.cookpad.com/service_product/japan)ため、場合によってはそれらに使われている技術も一緒に載っていることがあります。質問者さんが閲覧されたページに載っていたものがどれを指しているのかは、このコピペを見るだけだと判断できませんでした。

という訳でまとめると、あるサービスを提供するときにそれを構成するアプリケーション群をいくつかのプログラミング言語で実装することはでき、また状況に応じてそうしたくなる理由もある、ということでした。

以下、参考記事です。

  * Java を使ったアプリについての記事です：[モダンBFFを活用した既存APIサーバーの再構築](https://techlife.cookpad.com/entry/2019-orcha-bff) (2019-06-21)
  * マイクロサービス・アーキテクチャについて、2021 年夏時点での議論です：[Cookpad Lounge #7 世界最大級のモノリスcookpad_allどうする会議](https://www.youtube.com/watch?v=c_yBVmq-VcA) (2021/07/20)
  * 翻ってこちらは昔の議論です：[クックパッドとマイクロサービス](https://techlife.cookpad.com/entry/2014/09/08/093000) (2014/09/08)


CC BY-SA 4.0
2022-02-20T09:53:12.403
86472
2022-02-21T00:58:10.480
2022-02-21T00:58:10.480
19110
19110
86457
answer