NeuraLegionとCrystal
これはNeuraLegionチームからのゲスト投稿で、本番環境でのCrystalの活用事例を紹介しています。彼らの経験を共有していただいたことに感謝するとともに、本番環境でCrystalを使用している他の企業や個人の方々にも、ぜひご自身の経験を共有していただければと思います。共有をご希望の場合は、ご連絡ください!
NeuraLegionでは、しばらくの間Crystalを使用しています。この記事では、Crystalを発見した経緯、Crystalに魅了された理由、そしてCrystalを選択した理由について、簡単に説明します。
私たちについて
Crystalについての話に入る前に、まずは自己紹介をさせていただきます。私たちは、機械学習とAIを通じて世界をより良い場所にすることに情熱を注いでいる、新しいスタートアップ企業です。現在、私たちは日常生活でますます重要性を増しているサイバーセキュリティの世界に焦点を当てています。
私たちの最初の製品であるNexPloit(近日リリース予定)は、AIの力を活用してソフトウェア侵入テストを再定義します。
なぜCrystalなのか?
壮大な話はさておき、最初の製品の開発に着手したとき、私たちはすでにRubyの熱烈なファンでした。私たちはRubyが好きです。なぜなら、Rubyはデフォルトでオブジェクト指向であり、使いやすく、汎用性が高く、コミュニティによって開発された豊富なライブラリがあるからです。さらに、私たちはRubyを美しく、成熟したプログラミング言語だと考えています。
しかし、NexPloitの開発に着手したとき、Rubyのいくつかの固有の特性が私たちの特定のニーズを満たしていませんでした。いくつかの例を挙げると、
- Rubyは明示的な型を提供していません。これには、データ型の推論、パフォーマンスとサイズのペナルティ、データが通過する必要がある不要な操作など、いくつかの影響があります。私たちの目的において、効率性は非常に重要な問題でした。
- 前の問題を解決するために、C言語のバインディングがよく使用されます。しかし、それらを実装するのは非常に難しい場合があります。すでに述べたように、Rubyには明示的な型がありません。一方、C言語は厳密に型付けされた言語ですが、常にどの型を渡せばよいかを意識することは少し大変で、動作させるまでに数回の試行錯誤が必要になる場合があります。
undefined method for nil:NilClass
。Rubyを使ったことがある人なら、ここでは説明は不要でしょう。そうでない場合は、コンパイル時(または他の評価段階)にチェックが実行されない場合、ランタイムでプログラムを完全にデバッグする必要があるため、オブジェクトになると思っていたものにメソッドを呼び出そうとしたときに、ランタイムで何らかの理由でnil
になった場合に、このエラーが発生することがあります。他の動的でコンパイルされない言語でも、このエラーが発生することがあります。- Rubyで書かれたプログラムを実行すると、パフォーマンスはかなり制限されていました。
これらの理由やその他の理由から、私たちはRubyのすべての利点を備えつつ、欠点のないプログラミング言語を必要としていました。そこでCrystalを発見し、ほぼ瞬時に恋に落ちました❤️。Crystalの洗練されたコーディング体験、低レベルライブラリのバインディングの容易さ、プログラムを実行することなくコンパイル時に型安全性を確保できること、そして最後に超高速のランタイムパフォーマンスは、私たちが本当にキーボードに火をつけるために必要なものを与えてくれました!Crystalは、NexPloitをアイデアから現実へとエレガントかつ効率的に実現するためのツールを提供してくれたと、正直に言えます。
Crystalをさらに良くする方法
さて、公平に言って、私たちはCrystalが大好きですが、常に改善の余地があります。Crystalで直面した課題の1つは、機械学習と科学ツールのためのシャード(Crystalの「gem」)の不足でした。しかし、他の人にシャードを追加することを期待するのは不公平なので、私たちはCrystal-FANNのシャードを私たちのニーズの基盤として作成することにしました(そして、それを必要とする人のために、私たちのGithubページで利用できるようにしました)。今のところ、Crystal-FANNは私たちのニーズを満たしているようですが、FANNだけでは不十分だと判断した場合、TorchまたはTensorFlowの追加も検討しています。
まとめ
Crystalを試してみるべきでしょうか?もちろんです!Crystalは素晴らしい言語で、本当に使いやすく、素晴らしい結果を生み出します。私たちはCrystalを絶対にお勧めします。試してみてください。きっと気に入るはずです!
CrystalとRuby - 免責事項
この記事は、Crystalを選んだ理由に関する私たちの個人的な経験と意見のみであることを指摘しておきます。私たちは今でもRubyを愛しており、私たちとは異なるニーズを持つ人にはRubyを強くお勧めします。Rubyは確立された言語であり、素晴らしいサポートコミュニティがあります。これは特にプログラミング初心者にとって役立ちます。そして、Rubyには 앞으로 も多くの素晴らしいことがあると信じています。
私たちにとって重要だったパラメータのいくつかを比較してみましょう。
Ruby | Crystal |
---|---|
動的型付け | 静的型付け |
ランタイム時のNil参照エラー | コンパイル時のNil参照エラーチェック |
既存のライブラリが豊富 | 既存のライブラリが比較的少ない |
ランタイムパフォーマンスが制限されている | ランタイムパフォーマンスが高速 |
仮想マシンで実行される | ネイティブコードにコンパイルされる |