Crystal

詳細情報

タイトル Crystal
URL https://crystal-lang.org/
バージョン ver 1.21.1
更新日 2026/09/27
追加日 2016/02/08
種別 フリーソフト
説明 Ruby風のシンタックス&静的な型を持つプログラミング言語

レビュー

概要

Crystalは、Rubyに着想を得た構文を持ちながらコンパイル型言語の高いパフォーマンスを実現する、汎用オブジェクト指向プログラミング言語です。「A language for humans and computers」をスローガンに掲げ、人間にとっての書きやすさ・読みやすさと、機械にとっての実行効率の両立を目指して設計されています。

Crystalは2011年頃にAry Borenszweig(Manas Technology Solutions)らによって開発が始まり、2014年にオープンソースとして公開されました。RubyのようなシンプルなDSLフレンドリーな構文を維持しつつ、LLVM(Low Level Virtual Machine)をバックエンドに採用し、C/C++に匹敵する実行速度を実現しています。最新バージョンは1.19.1(2026年1月リリース)です。

主要な特徴・機能

  • Rubyライクな構文: Rubyに慣れた開発者がすぐに習得できる直感的な構文を採用
  • 静的型付けと型推論: コンパイル時に型チェックを行い、バグを早期発見。高度な型推論により型注釈をほとんど書かずに済む
  • 高速な実行速度: LLVMコンパイラインフラを使用し、ネイティブコードにコンパイルして高いパフォーマンスを発揮
  • ヌルポインタ安全: コンパイル時にnilチェックを強制し、ヌルポインタによる実行時エラーを防止
  • ファイバーと並行処理: CSP(通信順序プロセス)モデルとチャネルを用いた安全な並行プログラミング
  • Cバインディング: 既存のCライブラリを直接呼び出せる相互運用性
  • 強力なマクロシステム: コンパイル時のメタプログラミングによりAST操作や型検査が可能
  • Shardsパッケージマネージャー: Git リポジトリをベースにした分散型の依存関係管理ツールを標準搭載

対象ユーザー

  • Rubyに慣れているが、より高パフォーマンスな言語を求める開発者
  • Webアプリケーション・CLIツール・システムプログラムを高い生産性で開発したいエンジニア
  • 静的型付けの安全性と動的型付け言語の書きやすさを両立したい開発者

ライセンス情報

CrystalはオープンソースソフトウェアとしてApache License 2.0のもとで公開されています。ソースコードはGitHub(github.com/crystal-lang/crystal)で管理されており、コミュニティによる活発な開発・貢献が行われています。商用・非商用を問わず無料で使用できます。

スクリーンショット

スクリーンショットはありません。

更新グラフ

バージョン履歴

1.21.1

Choose a tag to compare

Sorry, something went wrong.

Loading
(省略されました)
1.21.0

Choose a tag to compare

Sorry, something went wrong.

Loading
(省略されました)
1.20.3

Choose a tag to compare

Sorry, something went wrong.

Loading
(省略されました)
1.20.2

Bugfixes

stdlib

  • (concurrency) [regression] Simplify Sync::Mutex#synchronize proc type constraints (#16904, #16937, thanks @ysbaddaden)
  • (runtime) Range#sample eventually loses randomness (#16909, thanks @ysbaddaden)

Infrastructure

  • Changelog for 1.20.2 (#16945, thanks @straight-shoota)
1.20.1

Bugfixes

stdlib

  • (crypto) Fix issues in OpenSSL Kernel TLS (#16888, thanks @ysbaddaden)
  • (crypto) OpenSSL Kernel TLS support should be opt-in (#16897, thanks @ysbaddaden)
  • (networking) [regression] Add HTTP::Headers#to_json and #to_yaml (#16890, thanks @straight-shoota)
  • (runtime) [regression] Range#sample eventually loses randomness (#16853, thanks @ysbaddaden)
  • (runtime) don't parse debug sections from bare threads (#16877, thanks @ysbaddaden)

compiler

  • (parser) [regression]
(省略されました)
1.19.2

Security

stdlib

  • (networking) HTTP::Server is no longer vulnerable to request smuggling (#16862, thanks @ysbaddaden)

Bugfixes

stdlib

  • [regression] Range#sample eventually loses randomness (#16866, thanks @straight-shoota, @ysbaddaden)

Infrastructure

  • Changelog for 1.19.2 (#16893, thanks @ysbaddaden)
  • (ci) Drop update: true from msys2/setup-msys (#16868, thanks @straight-shoota)
1.20.0

Security

stdlib

  • (networking) Fix HTTP::Server is no longer vulnerable to request smuggling (GHSA-wqh5-7w63-pm68)

Features

lang

  • (macros) Add #select and #reject to HashLiteral and NamedTupleLiteral (#16558, thanks @Blacksmoke16)
  • (macros) Refine error message for unsupported named arguments in macros (#16576, thanks @hahwul)

stdlib

  • (cli) Add short option bundling for OptionParser (#16770, thanks @Qard)
  • (crypto) Add Kernel TLS support to custom OpenSSL::BIO (
(省略されました)
1.19.1

Bugfixes

stdlib

  • (concurrency) [regression] Fix kqueue timer duration calculation (#16581, thanks @skuznetsov)
  • (concurrency) [regression] time calculations in IOCP and Monitor thread (#16583, thanks @ysbaddaden)

Infrastructure

  • Changelog for 1.19.1 (#16590, thanks @ysbaddaden)
1.19.0

Breaking changes

stdlib

  • (crypto) Require OpenSSL 1.1.1+ or LibreSSL 3+ (#16480, thanks @ysbaddaden)

Features

lang

  • (macros) [breaking] Add compiler flag values (#16310, thanks @straight-shoota)
  • (macros) Add yielding variant of StringLiteral#gsub (#16378, thanks @Blacksmoke16)
  • (macros) Support StringLiteral#split(RegexLiteral) (#16423, thanks @HertzDevil)
  • (macros) Add StringLiteral#match (#16464, thanks @HertzDevil)
  • (macros) Make all overloads of ArrayLiteral#[]
(省略されました)
1.18.2

Bugfixes

stdlib

  • (files) [regression] Revert type restriction for IO#read_bytes (#16231, thanks @straight-shoota)
  • (runtime) Fix Fiber::ExecutionContext.default_workers_count to avoid taking into account unsupported values (#16227, thanks @Sija)

Infrastructure

  • Changelog for 1.18.2 (#16243, thanks @matiasgarciaisaia)
1.18.1

Bugfixes

stdlib

  • (networking) [regression] Revert adding type restrictions on HTTP::WebSocket#send etc. (#16218, thanks @straight-shoota)

compiler

  • (parser) [regression] Fix allow space after base type in enum def (#16217, thanks @straight-shoota)

Infrastructure

  • Changelog for 1.18.1 (#16224, thanks @matiasgarciaisaia)