2017年4月11日
このインタビューは、ユニバーシティ・ヘルス・ネットワーク(UHN)におけるDmitri Sotnikov氏のClojureとClojureScriptの使用に関する議論です。
ClojureとClojureScriptを使い始めてからどれくらいになりますか?
私のチームは約6年前にClojureを使い始め、昨年の最新プロジェクトでClojureScriptをスタックに統合しました。
ClojureまたはClojureScriptを使用しているチームの規模は?
約30人の開発者チームがいますが、一部はClojureを使用し、他の人はJavaやC#などの他の言語を使用しています。Clojureの利点が明らかになるにつれて、Clojureを使用する人の数は着実に増加しています。私の直属のチームは、Clojureを専門とする8人の開発者で構成されています。
どのような製品やサービスを開発していますか?
ユニバーシティ・ヘルス・ネットワーク(UHN)の臨床医は、患者ケアの多くの側面が複数の専門分野間で連携される必要のある複雑な医療環境で業務を行っています。私たちのチームは、臨床医がワークフローを合理化するのに役立つ製品を開発しています。
そのようなワークフローの例として、肥満患者が減量手術の評価を必要とする肥満治療クリニックで見られるものがあります。私たちが直面した問題と、それにどのように対処したかを見てみましょう。
評価は、5つの専門分野の専門家によって行われます。評価は、看護師の相談から始まり、続いてソーシャルワーカー、次に栄養士、そして心理チームの訪問へと進みます。最後に、患者は外科医の面談を予約します。外科医は、他の専門分野によって収集された情報を要約された形で持っている必要があります。
評価は特定の順序で完了する必要があり、各評価は前の評価の結果に依存します。
このタスクは、すべての評価が共通のデータセットを使用するという事実によってさらに複雑になります。各専門分野は、データのサブセットを参照する必要があり、データ要素を参照するときに異なる用語を使用します。
データの一部が変更されると、ユーザーが作業しているビューの一部ではないものも含め、データモデルの更新がトリガーされる場合があります。複数のユーザーが評価の異なる部分を同時に作業している可能性があるため、アプリケーション内でデータ整合性を確保するために特別な注意を払う必要があります。
プロジェクトは、ユーザーに新しい種類のワークフローを提供することを目的としており、これはユーザーからのフィードバックを受け続けるにつれて要件が進化することを意味していました。
プロジェクトチームは、より柔軟性を高めるためにアジャイル開発アプローチを選択しました。ワークフローは、各専門分野のモジュールに分割されました。各モジュールが完成次第展開し、さらにモジュールを開発するにつれて、ユーザーフィードバックをシステムの設計に統合しました。
チームは、アプリケーションの画面とビジネスロジックを記述するためのClojure DSLを作成しました。これらの定義はデータベースに保存され、実行時にビューを生成するために使用されます。
このモデルにより、クライアントまたはサーバーのアプリケーション部分を再デプロイすることなく、評価のあらゆる側面を変更できるようになります。
ClojureまたはClojureScriptを使用することは、ビジネスにとってなぜ価値があるのですか?
Clojureにより、ユーザーに可能な限り最高のワークフローを提供する革新的な製品を提供することができました。私たちのアプリケーションは、最終的に2016 ITAC Ingenious Awardを受賞しました。
アプリケーションの使用を通じて、クリニックは患者の待ち時間を128日から63日に大幅に短縮しました。臨床医が使用する口述時間は80%減少し、これまでの総節約額は240,000ドルになりました。
ClojureとClojureScriptを使用することで、最も価値を得られるのはどのような点ですか?
私たちはJVMでの作業が本当に好きで、プロジェクトでこのプラットフォームを引き続き活用したいと考えています。しかし、迅速な開発とプロトタイピングを促進すると同時に、堅牢で保守可能なアプリケーションを生成できる言語の必要性も認識していました。
Javaプロジェクトでの以前の経験から、それがこれらの要件には不向きであることがわかりました。一方、Clojureはさまざまな理由から強力なテクノロジーの選択肢として際立っていました。
この言語を使用すると、既存のJavaライブラリとツールをプロジェクトでシームレスに使用できます。これにより、レガシースタックからClojureに基づいた最新のスタックへの移行が円滑になりました。
Clojureを使用すると、システムをインタラクティブに開発し、プロジェクトの変化するニーズに迅速に対応できます。チームは、コード品質を犠牲にすることなく、ソリューションを迅速にプロトタイプ化できます。この言語の動的な性質により、Javaで利用できたものよりも安価で迅速な開発プロセスが可能になります。
REPL駆動開発により、問題空間をインタラクティブに調査し、実験を通じて最適なソリューションを見つけることができます。REPLワークフローは、ユニットテストよりも優れたフィードバックループをもたらすことがわかりました。
Clojureベースのソリューションは、以前にJavaで構築した同程度の規模のプロジェクトで見られるコードのほんの一部しかありません。それだけでなく、Clojureを使用すると、コードの意図を実装の詳細から分離するのがはるかに簡単になります。何をするかということを、どのようにするかということから分離できることで、保守がはるかに簡単なコードになります。
Clojureの不変性に焦点を当てることで、アプリケーションの各部分間の自然な疎結合が容易になります。共有グローバル状態がない場合、アプリケーションの部分を分離して作業することが可能になります。その結果、関数は純粋でアプリケーション全体の状態に依存しないため、必要なテストが少なくなります。
Clojureは小さく焦点を絞った言語であるため、新しい開発者が生産的になるようにトレーニングするのが簡単になりました。私たちのパートナーであるCyLogixは、請負業者に短期間でClojureを使用するようにトレーニングすることができました。
マクロにより、ドメイン固有の抽象化を作成することができました。これにより、そのドメインのセマンティクスを使用してドメイン固有のロジックを表現できます。
最後に、Clojureは安定した信頼性の高いプラットフォームであることが証明されました。開発サイクル全体を通して、言語の新しいバージョンにプロジェクトを一切変更せずにアップグレードすることができました。
スタックは何ですか?
プロジェクトのベースとしてLuminusスタックを使用しています。特に言及したいライブラリのいくつかは次のとおりです。
Clojureの事例を共有したい場合は、このフォームに記入してください。