Metabaseというオープンソースのソフトウェアが、PythonからClojureへ移行した際に、Clojureを言語として選定した理由が 記述されていました。要約して紹介します
Pythonで書かれたものから移行した理由
Metabaseの前進となった社内ソフトウェアは、PythonとDjango/Angularを用いた物だったそうです。
しかし、
- WSGIのリクエストモデルが、MetabaseのAPIのモデルと合わない
- MySQL、Postgresqlのドライバが要コンパイルだったためデプロイ・サポートが面倒
- ソフトウェア全体を構成する部品が多く、いろんなところが不安定だった。具体的には、Docker + nginx + uWSGI + Django + compiled drivers + search indexing (whoosh) processes + Celeryd + Celery workers + Redisのような構成だった
新しい言語への要請と候補
新しい言語(と構成)に求められることは、
- 非同期Webリクエストへの安定したモデル
- 簡単で早いデプロイ
- 生産性
- データベースドライバが多くて成熟していること
- クエリ言語のコンパイルを簡単にするため、強力な関数型の機能があること
でした。これらの要請に対し、候補は
・Java ・Scala ・Clojure ・Javascript/Node ・Go ・Python(twisted) ・Python(tornado)
まずPythonはそもそも外され、Go/Javascriptは指示する声はあったもののデータベスドライバが未成熟、Javaは好きではなく、残るはScalaとClojureでした。
Scalaをテストした後にClojureへ
最初は、世間の流行や開発者の多さからScalaを選んだそうです。しかし、Scalaのデータベースアクセスは厳密な型チェックを要求するため、動的にクエリ言語をSQLにコンパイルするMetabaseでは使いにくい部分があったそうです。
こうしてClojureが選ばれました。
Clojureを採用したメリット
当初想定していた要求に加え、Clojureの採用には思わぬメリットもありました。単一Jarによるデプロイは、Elastic Beanstalkと組み合わせることによってでぷろいが劇的に簡単になりトラブルも減ったそうです。さらに、デスクトップアプリケーションへの展開も容易となりました。これはPython+Redisのような構成では容易には出来なかったことです。
オープンソースソフトウェアであるMetabaseの開発者たちがClojureを採用した経緯についての記事を紹介しました。
Clojure Applied: From Practice to Practitioner
- 作者: Ben Vandgrift,Alex Miller
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2015/09/06
- メディア: ペーパーバック
- この商品を含むブログを見る