Crystalによるスマートビルの自動化
PlaceOSによる統合環境の構築と管理方法

PlaceOSは、物理空間とデジタル空間のシームレスな統合を可能にするプラットフォームを提供しています。そして、それらをすべて自動化することで、従来保守的な施設管理分野において、最先端の統合エコシステムを構築しています。
Placeのエンジニアリングリード、Stephen Von Takach Dukai氏に、Crystalでの開発経験について話を聞きました。
現在、どのようなプロジェクトにCrystalを使用していますか?すべて本番環境で稼働していますか?クライアント向けですか、それとも内部ツールですか?
バックエンドに関しては、事実上Crystalオンリーです。ほとんどのサービスは本番環境で稼働しており、クライアント向けと内部ツールの両方をカバーしています。残りのRubyサービスは1つだけです。
また、オープンソースを強く支持しており、当社の成果物は以下で見つけることができます。
-
spider-gazelle - コミュニティに役立つと考える、再利用可能なシャード
-
PlaceOS - パートナー組織に主に役立つ、当社の基盤プラットフォーム
-
place-labs - 主にPlaceOSをサポートするシャード
また、プラットフォーム管理や課金ソフトウェアを含む、一部のSaaS/クラウドプラットフォームソフトウェアはクローズドソースですが、これもすべてCrystalで開発されています。
どのようにしてこの言語を知り、テクノロジースタックに選択するに至ったのでしょうか?どのような代替案を検討し、他にどのような言語を使用していますか?
Sidekiqの開発者であるMike PerhamがCrystalクライアントをリリースしたときに初めてCrystalに気づいたと思います。
以前はプラットフォームにRubyを使用していましたが、スケーラビリティの限界に達していました。当初、Rubyを選択したのは、非常に表現力豊かな言語であり、Railsの経験があったためです。しかし、必要なパフォーマンスを得るために、Libuvをベースにした独自のIOリアクタを構築する必要がありました。1996年にリリースされたRubyは、高性能IOのために2002年に登場したepollなどの機能が設計に反映されていないためです。
私たちのニーズを満たすのに近い言語はGo言語しかありませんでしたが、Rubyからの移行は、Crystalの方が開発者にとって容易だと感じました。実際、Go言語では成功できなかったと思います。マクロとジェネリックスといったCrystalの機能は、当初から成功の鍵となりました。
フロントエンドはAngularフレームワークを基盤としているため、TypeScriptも使用しています。
Crystalで開発することの利点と問題点は何でしたか?
Rubyから移行した私にとって、Crystalは新鮮な空気でした。以前は日常的に使用していた言語としてC++とC#からRubyに移行しましたが、当時と似たような感覚がありました。
Ruby on Railsでの生産性ははるかに高かったと感じました。迅速に作業を進め、よりクリエイティブになることができました。しかし、最近では、特にソリューションが大きくなり複雑になるにつれて、予期しないコードパスで予期しないオブジェクトによる再現困難なランダムなバグが開発者の時間を浪費していました。
Crystalは、Rubyで問題だと感じていた点をほとんど解決しました。型とコンパイラのスマートな機能がまず挙げられますが、Crystalに触れた後、より良いRubyコードを書くようになりました。しかし、Crystalのツールも優れており、フォーマッタ、Amebaのようなリンター、テストツール、LLVMの活用、最小限のDockerコンテナ、そしてコミュニティすべてが私たちを魅了しました。
最大の課題は、当時成熟したシャードが不足していたことでしょう。しかし、これは不足している部分を必要に応じて形作ることができ、Ruby Gemの移植も通常はそれほど問題にならないことを意味しました。率直に言って、Crystalコンパイラのおかげで、移植したすべてのGemで多くのバグを発見できたことは素晴らしいことです。
自社の運用とエンドカスタマーにとっての利点は何ですか?
私たちにとっての利点は、Rubyの開発生産性と、リリースするものの信頼性の向上、パフォーマンスへの注力軽減です。これは、顧客向けのより高品質なアプリケーションと、よりクリーンなコードベースにつながります。
その一例として、私たちが構築したWebフレームワークSpider-Gazelleがあります。元々はRailsクローンとして構築されましたが、現在はCrystalの魔法を活用してOpenAPIドキュメントを生成し、Railsよりも便利で高速になっています。
APIドキュメントは開発者にとって時間のかかる作業でしたが、これにより開発生産性が向上し、ドキュメントの精度が向上し(多くの場合、ドキュメントが作成されるようになりました)、Rubyと比較してコンピューティングコストも削減されました。
Crystalはどのような問題を最もうまく解決すると言えますか?
優れたユースケースの1つは、移植可能なLinux実行ファイルです。クライアントの建物内のネットワークスイッチなど、エッジに展開できるサービスを開発しました。このエッジプロセッサは、静的にリンクされたドライバ(musl libcを使用してビルドされたCrystal実行ファイル)をダウンロードします。
私たちにとってCrystalは完璧なWebサービスプラットフォームであり、それ以外にRuby、Python、またはGo言語を使用する可能性のあるほとんどのタスクに適しています。Dockerとk8sのデプロイメントでx86_64とARM64の両方をサポートする、あらゆる形状とサイズのマイクロサービスの開発に使用しています。
より多くの開発者がこの言語を使用し始め、シャードが構築されるにつれて、CrystalはRubyとPythonの両方を凌駕する主要言語になるだろうと想像できます。Go言語とRubyの利点を1つのパッケージにまとめたものであり、これは非常に強力な相乗効果です。

Place エンジニアリングリード Stephen von Takach Dukai