Clojure/conj 2017に見るClojure界のトレンドとこれから

# はじめに

Clojure/conjは、Clojureの生みの親であるRich Hickeyも所属している[Cognitect](https://cognitect.com)が主催している、Clojure界では最大のカンファレンスです。毎年アメリカのどこかで開催されており、今年はメリーランド州ボルチモアで行われました。今年はClojureが初めてリリースされてから10周年で、記念すべき回となっていたようです。

![Clojure10周年記念ケーキ](https://qiita-image-store.s3.amazonaws.com/0/24168/292e3636-dbd5-0e07-4489-11313c0dc717.jpeg)

今年の[Clojure/conj 2017](http://2017.clojure-conj.org)では、私も念願の初参加かつ初発表をしてきました。アメリカは遠いですからね…ずっと行ってみたかったのですが、なかなか気軽に見に行くことはできません。今回はトークがacceptされたということで（一昨年はrejectされました）、満を持して参加してきました。

本稿では、Clojure/conjの様子や講演内容をまとめ、2017年現在のトレンドとこれからのClojureに思慮を巡らせて、[Clojure Advent Calendar 2017](https://qiita.com/advent-calendar/2017/clojure)を締めくくりたいと思います。

# Clojure/conj 2017

Clojure/conj 2017は、ボルチモアのホテルHilton Baltimoreで、10月12〜14日に開催されました。

今年のClojure/conjは、正確にはわからないのですが、400〜500人くらい参加していたように思います。そのうち約半数が初参加だったようです。JavaOneなどと比べると小規模ですが、前日にボードゲームパーティーが開かれるなど、フレンドリーなカンファレンスでした。

以下に各講演を2, 3行で短くまとめてみました。講演はパラレルで進められていて、現地で聴けていない講演もあるため、よく理解できていないものもあるかもしれませんがご了承ください。ほとんどの講演はYouTubeにアップロードされているので、興味のあるものがあれば[Clojure TV](https://www.youtube.com/user/ClojureTV)からフルの動画を見ることができます。

## 1日目

### [Effective Programs – 10 Years of Clojure](http://2017.clojure-conj.org/rich-hickey/) (基調講演)

Clojureの作者Rich HickeyによるKeynote。Richがどんな仕事をしてきて、何を考え、Clojureを作るに至ったかがわかる。何のために "Effective" であるのか。なかなか刺激的な内容で、Clojure以外のプログラマーにも一見の価値がある。<sup>[[YouTube](https://www.youtube.com/watch?v=2V1FtfBDsLU)]</sup>

### [Inspiring a Future Clojure Editor with Forgotten Lisp UX](http://2017.clojure-conj.org/inspiring-a-future/)

Lispのエディタの歴史を50年前から辿り、Lisp開発のためにどのような革新的な機能が提案されてきたのかを話す。そして、講演者の開発するエディタ[Parinfer](https://shaunlebron.github.io/parinfer/)につながる。Parinferは、S式で囲まれたコードブロックのインデントを上手く扱うことを特徴としており、新たにS式を追加・削除・コメントしたりした際にもコードを破壊することなく、シームレスに整形できる。<sup>[[YouTube](https://www.youtube.com/watch?v=K0Tsa3smr1w)]</sup>

(**Editor**)

### [Designing in Clojure – An Experience Report](http://2017.clojure-conj.org/designing-in-clojure/)

講演者はアーティストであり、デザイナーであり、エンジニアでもある。一時期Cognitectで仕事をしていた。デザインの仕事の中でClojureを使った経験について話すという異色の内容。<sup>[[YouTube](https://www.youtube.com/watch?v=L8DKD_PshFM)]</sup>

(**Design**)

### [Homoiconicity: It Is What It Is](http://2017.clojure-conj.org/homoiconicity/)

[Component](https://github.com/stuartsierra/component)等で有名なStuart Sierraの講演。同図像性（Homoiconicity）について、歴史的な経緯から語っており、勉強になる。発表慣れしてる感がすごい。<sup>[[YouTube](https://www.youtube.com/watch?v=o7zyGMcav3c)]</sup>

(**Core**)

### [Learning Clojure and ClojureScript by Playing a Card Game](http://2017.clojure-conj.org/learning-clojure-and-clojurescript/)

講演者はカードゲームを作りながらClojureとClojureScriptを学んだらしい。バックエンドにDatomicやLiberator、フロントエンドにClojureScriptを使って、ジン・ラミーというカードゲームの対戦システムを構築している。プログラミングを学ぶ最良の方法は何かを作ってみることだ。<sup>[[YouTube](https://www.youtube.com/watch?v=B_ubbbm9cRg)]</sup>

(**Education**)

### [All I needed for FP I learned in High School Algebra](http://2017.clojure-conj.org/all-i-needed-for-fp/)

関数型プログラミングを学ぶには、高校レベルの代数学を学べば良い。関数型プログラミングのコンセプトやテクニックを、交換法則等の基礎的な数学法則と結びつけて理解できるようにしている。<sup>[[YouTube](https://www.youtube.com/watch?v=epT1xgxSpFU)]</sup>

(**Education**)

### [Bayesian Data Analysis of Nonparametric Models in Clojure](http://2017.clojure-conj.org/bayesian-data-analysis/)

ベイズ分析にClojureを利用しているというデューク大学の研究チームの人の講演。講演者は確率分布を扱うClojureライブラリ[Distributions](https://michaellindon.github.io/software/distributions/)を開発している。<sup>[[YouTube](https://www.youtube.com/watch?v=76dhEBGuyLY)]</sup>

(**Data Analysis**)

### [Building Machine Learning Models with Clojure and Cortex](http://2017.clojure-conj.org/building-machine-learning/)

Clojureで書かれたDeep Learningライブラリ[Cortex](https://github.com/thinktopic/cortex)の話。機械学習の初歩的な説明から始まり、なぜClojureを使うのが良いのかを話す。曰く、関数合成（Function Composition）がニューラルネットの記述と相性が良く、遅延シーケンスやデータ構造がデータ処理に適しているとのこと。個人的にも、Cortexは良くできているし、有望だと思う。<sup>[[YouTube](https://www.youtube.com/watch?v=0m6wz2vClQI)]</sup>

(**AI**; Deep Learning)

### [Poetry of Programming](http://2017.clojure-conj.org/poetry-of-programming/)

講演者は秋田県にある国際教養大学の数学の准教授。プログラミングの授業で、初心者の生徒に対してプログラミングを教えるためにClojureを用いたらしい。どのように生徒に教えたのかを詳細に説明している。Clojureは最初のハードルが比較的高い気がするので、Clojureを教える際に参考になるかもしれない。<sup>[[YouTube](https://www.youtube.com/watch?v=XRjPnuPv6xo)]</sup>

(**Education**)

### [Building test.check Generators](http://2017.clojure-conj.org/building-test-check-generators/)

[test.check](https://github.com/clojure/test.check)のgeneratorの作り方の話。本格的にtest.checkを利用しようとすると、予め用意されているprimitiveなgeneratorだけでは不十分なケースが多々ある。講演では実例を混じえて説明されているので、test.checkのadvancedなチュートリアルとして有用かもしれない。<sup>[[YouTube](https://www.youtube.com/watch?v=F4VZPxLZUdA)]</sup>

(**Testing**; test.check)

### [Clojure: Scaling the Event Stream](http://2017.clojure-conj.org/clojure-scaling-the-event-stream/)

大規模なリアルタイムシステムの構築にJavaを使っていたが、Clojureを使うと楽になったという話。<sup>[[YouTube](https://www.youtube.com/watch?v=FMyk0Db9rQc)]</sup>

(**Web**)

### [Datomic Made Easy: Datomic in the Cloud](http://2017.clojure-conj.org/datomic-in-cloud/)

斬新なアーキテクチャで「10年先を行く」とも言われるデータベース[Datomic](http://www.datomic.com/)をAWS上で簡単に構築できるようにするという発表。近いうち（2017年Q4）にAWS Marketplaceで公開されると話しているが、現時点ではまだ公開されていない。<sup>[[YouTube](https://www.youtube.com/watch?v=Ljvhjei3tWU)]</sup>

(**Database**)

## 2日目

### [2017 in ClojureScript: Web Perf & JS Ecosystem Integration](http://2017.clojure-conj.org/2017-in-clojurescript/)

2017年のClojureScriptのアップデートについて。主な変更はモジュールの取り扱い方に関するもので、[Enhanced Code Splitting](https://clojurescript.org/news/2017-07-10-code-splitting)と[NPMモジュールとのintegration](https://clojurescript.org/news/2017-07-12-clojurescript-is-not-an-island-integrating-node-modules)。<sup>[[YouTube](https://www.youtube.com/watch?v=63K--ctvT-g)]</sup>

(**Core**; ClojureScript)

### [Clojure Compilation, Backwards](http://2017.clojure-conj.org/clojure-compilation-backwards/)

Clojureの逆コンパイラ[tools.decompiler](https://github.com/Bronsa/tools.decompiler)の話。AOTコンパイルされたクラスから元のClojureコードを生成できる。<sup>[[YouTube](https://www.youtube.com/watch?v=2SGFeegEt9E)]</sup>

(**Core**)

### [The Power of Lacinia & Hystrix in Production](http://2017.clojure-conj.org/the-power-of-lacinia-hystrix/)

Walmart LabsによるGraphQLのClojure実装である[Lacinia](https://github.com/walmartlabs/lacinia)と、NetflixによるCircuitBreakerライブラリ[Hystrix](https://github.com/Netflix/Hystrix/)を、productionで組み合わせて使った経験に関する話。GraphQL + Microservices Architectureは今後増えてきそうなので、先行者の報告は有用。<sup>[[YouTube](https://www.youtube.com/watch?v=uL9QavmAInw)]</sup>

(**Web**, GraphQL)

### [Yet & Datomic: Immutable Facts Mutated Our Stack](http://2017.clojure-conj.org/yet-datomic/)

Yet AnalyticsでDatomicを使った経験について話している。データベースとしてのDatomicの利用のみならず、DatomicのコンセプトにYet Analyticsのシステムが影響を受けているらしい。<sup>[[YouTube](https://www.youtube.com/watch?v=gcJmNYj4Mec)]</sup>

(**Web**, Database)

### [The Tensors Must Flow](http://2017.clojure-conj.org/the-tensors-must-flow/)

ClojureのTensorFlowライブラリ[Guildsman](https://github.com/bpiel/guildsman)の話。どのようにTensorFlowをラップしているのか、またGuildsmanの使い方を説明している。<sup>[[YouTube](https://www.youtube.com/watch?v=8_HOB62rpvw)]</sup>

(**AI**; Machine Learning)

### [The Dawn of Lisp, or: How to Write Eval and Apply in Clojure](http://2017.clojure-conj.org/the-dawn-of-lisp/)

Clojureを使ってLispインタプリタを作成することで、Lisp元来のアイデアがClojureや他のプログラミング言語にどう活かされているのかを伝える講演。講演者は7年前から授業でClojureを使っているらしい。<sup>[[YouTube](https://www.youtube.com/watch?v=2wPS_6oSD6k)]</sup>

(**Education**)

### [Datomic Auto Schemas](http://2017.clojure-conj.org/datomic-auto-schemas/)

Datomicではスキーマが予め定義されている必要があるが、たとえばJSONのようなフォーマットを保存しようとすると、JSONでは構造は事前には決まっていないため困ってしまう。そこで、JSONから自動的にDatomicのスキーマを生成可能にした。<sup>[[YouTube](https://www.youtube.com/watch?v=8jXEqvTnOTg)]</sup>

(**Database**)

### [Infinite State Machine: Poetry in, with, and by Clojure](http://2017.clojure-conj.org/infinite-state-machine/)

詩（Poem）を生成するClojureプログラムの話。RNNの構築にはDeeplearning4jを使っている。自動生成された詩が面白い。<sup>[[YouTube](https://www.youtube.com/watch?v=O-8-IpMzkBo)]</sup>

(**AI**)

### [It's Time for a New Old Language](http://2017.clojure-conj.org/guy-steele/) (招待講演)

Schemeの共同開発者であり、Sun MicrosystemsのJavaチームにもいたGuy Steeleによる招待講演。まさにClojureカンファレンスの招待講演にふさわしい人物。講演内容はメタ言語に関するもので、Computer Science Metanotation (CSM)について、歴史的経緯から問題点まで語っている。コンピュータサイエンス寄りでClojureに直接的には関係ないが、とても勉強になる。<sup>[[YouTube](https://www.youtube.com/watch?v=dCuZkaaou0Q)]</sup>

### [Lightning Talks](https://github.com/clojureconj/clojureconj2017/wiki/Lightning-Talks)

各5分程度でのライトニングトークのセッション。日本からは @223kazuki さんが[JobStreamer](https://github.com/job-streamer/)について発表していました。

* Datomic web GUI
* [How to Write a Fast, Reducible Collection](https://www.youtube.com/watch?v=FjKnlzQfAPc)
* [A few tips for writing macros](https://www.youtube.com/watch?v=VJEHtFNKSu8)
* [Activating a Clojure Community](https://www.youtube.com/watch?v=62qqvZa5HkY)
* [Forest: One Tree to Rule Them All](https://www.youtube.com/watch?v=RtavTnRr0oM)
* [Managing a Java Batch job with JobStreamer](https://www.youtube.com/watch?v=Vc6fqHl1g50)
* Clojure at Sky Road
* [Sometimes it's so obvious in hindsight](https://www.youtube.com/watch?v=lq_WEM461M0)
* [SVG in Custom PDF Templates](https://www.youtube.com/watch?v=X6rxaDtZMPg)

## 3日目

### [Watching a Language Grow](http://2017.clojure-conj.org/watching-a-language-grow/)

Clojureの成長の歴史をChris HouserとMichael Fogusが語る。これを観ればClojureの歴史がだいたいわかる。Clojureのファーストリリース以前の話もあってとても面白い。<sup>[[YouTube](https://www.youtube.com/watch?v=9N7xM40fio0)]</sup>

(**Core**; history)

### [Tool-Assisted spec Development](http://2017.clojure-conj.org/tool-assisted-spec-development/)

Clojureにオプショナルな型システムを付与する[core.typed](https://github.com/clojure/core.typed)の作者Ambrose Bonnaire-Sergeantの講演。既存のコードベースから自動的にspecを生成する手法の話。発表中、適当なClojureライブラリのソースコードをその場でcloneしてきて、spec推定するデモをしているのがcool。<sup>[[YouTube](https://www.youtube.com/watch?v=kcZVkvO1Dpo)]</sup>

(**spec**; core.typed)

### [Declarative Deep Learning In Clojure](http://2017.clojure-conj.org/declarative-deep-learning/)

JavaのDeep Learningライブラリ[Deeplearning4j](https://deeplearning4j.org/)、そのClojureポーティングである[dl4clj](https://github.com/yetanalytics/dl4clj)の中で、元はBuilderパターンが使われている部分を、Clojureで宣言的に記述できるようにラップしたという話。<sup>[[YouTube](https://www.youtube.com/watch?v=1JWcyMag1e4)]</sup>

(**AI**; Deep Learning)

### [Learning Clojure through Logo](http://2017.clojure-conj.org/learning-clojure-through-logo/)

教育用プログラミング言語LogoをClojureで実装した[clojure-turtle](https://github.com/google/clojure-turtle)の発表。おなじみのカメを動かしながらClojureを学ぶことができる。<sup>[[YouTube](https://www.youtube.com/watch?v=Y3-53JoGPE4)]</sup>

(**Education**; Logo)

### [Sequence and Concurrent Processing for Huge Genomic Data](http://2017.clojure-conj.org/sequence-and-concurrent/)

私の発表。しばしばClojureが遅いという話題が上るが、巨大なゲノムデータの解析にClojureを使う利点とは何か、パフォーマンスは実行速度だけで語られるべきでないことを話している。<sup>[[YouTube](https://www.youtube.com/watch?v=ipNru1QSeWc)]</sup>

(**Data Analysis**; Genomic Analysis)

### [Deep Learning Needs Clojure](http://2017.clojure-conj.org/deep-learning-needs-clojure/)

歴史を変えて人類を救うため、過去に送り込まれたエージェントHallowayは、Javaマグカップでコーヒーを飲むRich Hickeyと出会う…。Deep Learningが世界を席巻しているが、Lispは古くは人工知能分野で多く使われており、Clojureはspecなどの他の言語にない利点があることから、Deep Learningにおいて有望であるという話。冒頭の茶番が面白い。<sup>[[YouTube](https://www.youtube.com/watch?v=eLl6_k_fZn4)]</sup>

(**AI**; Deep Learning)

# トレンド

私個人の主観に基づいて講演を分類してみました。恣意的なので異論もあるかと思いますが、何となくの傾向が見れれば良いかと思います。なお基調講演、招待講演、LTは除外しました。

![講演カテゴリー](https://qiita-image-store.s3.amazonaws.com/0/24168/c71f0305-0cbf-1573-d5b9-9d585624db03.png)

AI関連、教育関連が多かったようです。AIについては、Deep LearningによるAIブームが続いているので、その影響でしょう。機械学習もデータ分析の一種とすれば、Data Analysisと合わせて28％にもなるため、データサイエンス系でClojureが盛り上がっていることがわかります。機械学習はPythonが非常に強いですが、Clojureも存在感を出していけるでしょうか。

教育については、大学の授業でClojureを採用している事例がいくつかあったり、Logoのようにもう少し初頭教育用にも使われるなど、新しい動きが出てきているようです。Schemeを採用したSICPのように、Clojureがプログラミングの教科書に使われるようになるのでしょうか。

Web系の講演はやはり多いのですが、GraphQLなどの通信に関するものが主で、フロントエンドに関する講演は見られませんでした。OmやReagentといったReactライブラリが落ち着き、re-frameは去年のClojure/conjで発表されたので、あまり目新しいものがなかったということでしょうか。

Databaseは全てDatomicに関する講演でした。Datomicはすごいのですがいまいち使い所が難しかったりと思っていたのですが、採用事例が続々と出てきたり、（もうすぐ）AWSで簡単に使えるようになるなど、かなりの盛り上がりを感じます。

一方、注目の新機能clojure.specに関する発表がほとんどなかったことは意外でした。test.checkとの組み合わせは期待されていますが、今年の[generatorsに関する講演](#building-testcheck-generators)では少し言及された程度でした。

# これから

今年のClojure/conjでは、Clojure 1.9の新機能（主にclojure.spec）に関する講演はあまりありませんでした。カンファレンスの時点ではまだ正式リリースされていなかったので、ある意味当たり前なのかもしれません。

specはClojureにとって非常に大きな変化であり、オプショナルであるとはいえ、ある種のパラダイムシフトをもたらす可能性のある機能だと思います。しかし、specをどういったケースでどのように使うのが良いのかというベストプラクティスはまだまだ模索段階です。今後1年で実際の活用事例が多くあらわれ、それらが来年のClojure/conjで報告されるのではないでしょうか。specを前提として積極的に利用するライブラリも増えてきそうです。

また、Clojureのカンファレンスやミートアップが急速に増えてきています。 @athos さんが初日に書かれているように[^1]、日本で今年多くの勉強会が開催されています。海外においても、[IN/Clojure](http://inclojure.org/)というインドでのClojureカンファレンスが新たに始まるようで、開催されればアジア地域では初のClojureカンファレンスとなりそうです。

Clojureコミュニティは、アメリカやヨーロッパでは以前から活発的でしたが、最近はアジア地域でも広がりを見せていると思います。もちろん日本においても、来年はさらなる飛躍が期待できるのではないでしょうか。

それではみなさま、良いお年を！

[^1]: [Clojure Language Update 2017 - 日本コミュニティの盛り上がり](https://qiita.com/athos/items/e01f08e3698bac02da07#%E6%97%A5%E6%9C%AC%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%AE%E7%9B%9B%E3%82%8A%E4%B8%8A%E3%81%8C%E3%82%8A)