Ceylonとは?

Ceylonは、RedHat社が開発しているJavaVM上で動作する新しいプログラミング言語だ。静的型付けのコンパイル言語だが、Javaにはない様々な機能を搭載している。Ceylonはまだ開発中の言語だが、2011年12月20日にはM1 "Newton"というバージョンが、さらに2012年1月10日にはこのバージョンに対応したEclipseプラグイン「Ceylon IDE」がリリースされている。今回はこのCeylon IDEを用いてCeylonに触れてみたい。

図1 : CeylonのWebサイト

Ceylon IDEは、以下の更新サイトからインストールできる。Ceylonのコンパイラも含まれているため、別途Ceylonの実行環境を用意する必要はない。
http://ceylon-lang.org/eclipse/updatesite/

Ceylon IDEを使ってみる

実際にCeylon IDEを使用し、簡単なプログラムの作成と実行をしてみよう。

Ceylon IDEをインストールするとCeylonパースペクティブが使用できるようになる。Ceylonパースペクティブでは、[File]メニューから[New]-[Ceylon Project]でCeylon用のプロジェクトを作成することができる。プロジェクトを作成後、sourceディレクトリを右クリックし[New]-[Ceylon Unit]で新しいユニットを作成するとソースファイルが作成され、エディタが開く。コンテキストメニューにはこのほかにモジュール、パッケージを作成するためのウィザードが用意されている。

図2 : ユニットの作成

エディタではコード補完や定義部へのジャンプ、参照元の検索など様々なナビゲーション機能などが利用できる。また、入力したプログラムに問題があると即座にエラーを報告してくれる。このあたりは最近のIDEではもはや当たり前の機能といえるかもしれない。

図3 : エディタではコード補完などが可能

ここでは例として以下の内容で「hello.ceylon」というユニットを作成した。

void hello() {
 print("Hello, World!");
}

作成したユニットを右クリックし、[Run As]-[Ceylon Application]を選択すると、このプログラムを実行することができる。Consoleビューに以下のように表示されるはずだ。[Debug As]-[Ceylon Application]でデバッグを行うことも可能だ。

図4 : hello.ceylonの実行結果

図5 : Ceylonプログラムのデバッグ

Ceylon IDEでは、変数やクラス名などのリネームや選択範囲をメソッドとして抽出するといったリファクタリング機能も、JDTと比べると種類は少ないものの利用可能だ。ただし、ソースコードのフォーマットやインポート文の自動編成といった機能はまだ実装されていないようだ。細部の使い勝手に大きく影響する機能なので、今後の改善に期待したい。

また、型の検索を行うダイアログは[CTRL]+[SHIFT]+[C]、未使用のインポート文の削除は[ALT]+[C]で行うなどJDTとはキーバインドが異なる操作もあるので注意が必要だ。エディタのコンテキストメニューを確認してどのような操作が可能なのかを確認するといいだろう。

まとめ

JavaVM上で動作する静的型付けのプログラミング言語には、Ceylon以外にも、以前からJavaの次世代言語として注目を集めているScalaや、IntelliJ IDEAでお馴染みのJetBrains社が開発しているKotlin、Eclipse Foundationで開発されているXtendなどがある。

Javaのプログラミング言語としての記述能力に関する柔軟性のなさ、互換性を重視するあまり新機能に対する消極的なスタンスは以前から批判の的になることがあり、一時期JavaVM上で動作するスクリプト言語が注目を集めた時期があった。しかし、ここにきて静的型付けのメリットを活かしつつシンプルな記述が可能な新言語が多数登場してきている。これらの言語はソースコードの静的解析によって型情報を取得できるため、ツールによる強力なサポートが可能というメリットがある。

JavaにおけるEclipseの存在を見てもわかるように、静的な型付けの言語は優れたツールのサポートによってその実力を発揮すると言えるだろう。たとえば、Scalaは言語自体への評価は高かったものの、実用的なツールが存在しないことが普及を妨げる原因のひとつと言われてきた。Ceylonは処理系と並行して開発ツールの開発が進められており、その完成度も高い。Javaの次世代言語として有力な選択肢の1つとなるのではないだろうか。