本当は怖いHPC

HPC屋の外部記憶装置。メモ書き。ちゃんとしたものは別のところに書く予定です

Clojure記事紹介百日修行(1):「MetabaseがPythonからClojureに移行した理由」

medium.com

Metabaseというオープンソースのソフトウェアが、PythonからClojureへ移行した際に、Clojureを言語として選定した理由が 記述されていました。要約して紹介します

Pythonで書かれたものから移行した理由

Metabaseの前進となった社内ソフトウェアは、PythonDjango/Angularを用いた物だったそうです。

しかし、

  • WSGIのリクエストモデルが、MetabaseのAPIのモデルと合わない
  • MySQLPostgresqlのドライバが要コンパイルだったためデプロイ・サポートが面倒
  • ソフトウェア全体を構成する部品が多く、いろんなところが不安定だった。具体的には、Docker + nginx + uWSGI + Django + compiled drivers + search indexing (whoosh) processes + Celeryd + Celery workers + Redisのような構成だった

新しい言語への要請と候補

新しい言語(と構成)に求められることは、

  • 非同期Webリクエストへの安定したモデル
  • 簡単で早いデプロイ
  • 生産性
  • データベースドライバが多くて成熟していること
  • クエリ言語のコンパイルを簡単にするため、強力な関数型の機能があること

でした。これらの要請に対し、候補は

JavaScalaClojureJavascript/Node ・Go ・Python(twisted) ・Python(tornado)

まずPythonはそもそも外され、Go/Javascriptは指示する声はあったもののデータベスドライバが未成熟、Javaは好きではなく、残るはScalaClojureでした。

Scalaをテストした後にClojure

最初は、世間の流行や開発者の多さからScalaを選んだそうです。しかし、Scalaのデータベースアクセスは厳密な型チェックを要求するため、動的にクエリ言語をSQLコンパイルするMetabaseでは使いにくい部分があったそうです。

こうしてClojureが選ばれました。

Clojureを採用したメリット

当初想定していた要求に加え、Clojureの採用には思わぬメリットもありました。単一Jarによるデプロイは、Elastic Beanstalkと組み合わせることによってでぷろいが劇的に簡単になりトラブルも減ったそうです。さらに、デスクトップアプリケーションへの展開も容易となりました。これはPython+Redisのような構成では容易には出来なかったことです。

オープンソースソフトウェアであるMetabaseの開発者たちがClojureを採用した経緯についての記事を紹介しました。

Clojure Applied: From Practice to Practitioner

Clojure Applied: From Practice to Practitioner