2018年1月24日
ClojureまたはClojureScriptでの開発経験はどのくらいですか?
Swing Educationは、2015年初頭の創業以来、ClojureとClojureScriptを使用しています。私個人としては、2013年後半からClojureを使用しています。
ClojureまたはClojureScriptを使用しているチームの規模はどのくらいですか?
現在、私たちのエンジニアリングチームは3人のフルタイムエンジニアで構成されています。私たちのコードベースは実質的に100% Clojureです。2018年の第1四半期に積極的に採用活動を行っており、チームをエンジニア5人と、デザイナー/UI-UX寄りの1人に増員したいと考えていますが、その方も最終的にはClojureを使用することになるでしょう。
ClojureまたはClojureScriptを使用してどのような製品またはサービスを構築していますか?
私たちの主力製品は、学校が代理教師の依頼を発行するためのオンラインマーケットプレイスです。私たちは、学校がより多くの代理教師にアクセスできるように支援し、代理教師のプール(募集、選考、給与など)の管理に伴う面倒な作業をソフトウェアによって自動化しようと努めています。私たちのネットワークは、代理教師に経験を積み、専門的なネットワークを構築するための幅広い就業機会を提供します。
最も気に入っているClojureまたはClojureScriptライブラリは何ですか?
厳密に言えばライブラリではないかもしれませんが、Datomicは非常に楽しく使えています。主な利点の一部をご紹介します。
データベースを値として扱うことができるため、コードの大部分が非常に決定論的になり、「実行中にこの値が変更された」ことによる潜在的なエラーの多くの種類がなくなります。データベースの値は一貫しているためです。
d/transactはトランザクション後の結果のデータベース値を返すため、リードレプリカを使用した書き込み後の読み取りで従来発生していた問題がなくなります。
tx-dataが単純なベクトルとマップとして表現されるため、トランザクションをエレガントに構成でき、複数のエンティティを一度に作成または変更するコードをプログラムで生成することがはるかに容易になります。
トランザクションリスナーキューは、トランザクションが実行されたポイントに緊密に結合することなく、通知をトリガーする必要があるデータ変更をリッスンするための洗練された方法です。通知プロセスをシャットダウンまたは再起動する必要がある場合、d/tx-logを使用して、最後に認識された通知ポイントからログを(遅延なく!)再び確認できます。
d/as-ofとd/sinceは、特定の時間にユーザーが見ていたもの、またはシステムが実行時に見ていたものを理解するために時間を遡るのに役立ちます。データベースを引数として想定するコードと組み合わせて使用すると、本番環境でバグと正しい動作の両方がこのように確認されています。
トランザクションメタデータを使用すると、誰がいつどのように、そしてなぜ何をしたかを簡単に記録し、それに対してクエリを実行するだけでなく、対応するtx-logエンティティをd/as-ofおよびd/sinceの引数として使用して、システムで何が起こったかを理解できます。
d/withを介した投機的トランザクションとインメモリデータベースにより、テストと開発者のセットアップが大幅に簡素化され、管理またはセットアップする外部プロセスが不要になります。
d/filterを介したデータベースフィルタリングは、クエリを再利用するための洗練された方法を提供します。たとえば、システム全体の活動を報告するクエリがあり、まったく同じクエリを再利用しますが、地理的地域ごとの内訳にデータベースフィルターを適用するか、時間によってスコープを設定します(過去7日間、過去1か月以内に作成されたリクエストなど)。
これは、単一パス中に地域ごとに集計を実行する別の関数を作成するよりもいくぶん効率が低いことに注意してください。しかし、私たちにとって、データセット全体はまだかなり小さいので、CPU処理時間は関係ありません。クエリからデータを柔軟にフィルタリングできることがより重要であり、実装の容易さは他に類を見ません…
db値に基づくd/datomsとd/index-rangeを介した遅延反復! 私たちのデータ処理のほとんどは、一度にデータの小さなサブセットで動作するか、最小限の集計状態のみを必要とします。
従来のSQLベースのシステムでこれを行うのは困難です。Clojure関数を作成してLIMIT / OFFSET呼び出しの遅延シーケンスを生成できますが、世界のビューは一貫していないためです。
ClojureまたはClojureScriptを使用することで、どのような価値が最も得られますか?
私たちにとって最も価値のある特性は、どこでも使用されるプログラミング言語が1つだけであり、データベース(トランザクタクラスパスにロードされたjarまたはトランザクション関数を介して)、Webサーバー、およびクライアント間でコードを共有できることです。
ClojureまたはClojureScriptのお気に入りの機能は何ですか?
おそらくホストの相互運用性でしょう。必要に応じて、相互運用性を通じて両方のエコシステムの既存のライブラリを活用できるため、Clojure / Scriptはこれらの巨大なエコシステムを土台として活用しながら、さらに付加価値を提供できます。
ビジネスにとってClojureまたはClojureScriptを使用することの価値は何ですか?
Clojureを使用すると、REPL駆動型開発によってコードをより迅速に開発できます。結果のコードは、すべてが不変であり、関数が再入可能であるため、通常はバグが発生しにくく、テストもはるかに簡単になります。マクロによってボイラープレートを削減するための機能とデータの重視により、再利用性が向上し、コードの重複が少なくなり、高階プログラミングが可能になります。
私たちのコードは、コア言語とより広範なClojureオープンソースコミュニティの両方からのシンプルさと安定性の重視により、かなり保守が容易になっています。
スタック構成は何ですか?
サーバー側では、基盤となるストレージとしてDynamoDBを備えたDatomicを使用しています。私たちのWebサーバーはhttp-kitを実行しています。ルーティングにはCompojureを、リアルタイム通信にはSenteを使用しています。
クライアント側では、WebクライアントにDataScriptとReagentを使用しており、iOS向けにはReact Native上にClojureScriptで実装されたモバイルアプリもあります。
あなたのClojureストーリーを共有したい場合は、このフォームにご記入ください。