Groovy言語とAspectJの人気が今ひとつな本当の理由

先日DevLOVEの主催するぐるぐるGroovyという勉強会に参加してきました。
1月24日 DevLOVE ぐるぐるGroovy -Easy Going Groovy-(東京都)
Groovy言語については、構文がJava言語に非常に近い上に、Javaの既存ライブラリーとの相互運用性も高く、さらに、Java言語に比べて非常に簡潔にプログラムが書けるという特徴があります。動的言語のRubyのような柔軟性とJavaプログラマーにとっての学習のしやすさをいう面を兼ね備えた軽量言語であり、私としてはSI業界でもきっと流行るはずに違いない思いと数年前から注目していました。

Groovyイン・アクション

Groovyイン・アクション

同じJVMを対象にした言語として、最近Scalaに注目が集まっているようですが、
  • Javaの配列は[ ]だがScalaは()
  • Javaの総称パラメーターは<>だがScalaは[ ]
  • Scalaでは関数型のパラダイムが取り入れられている
  • 型推論やトレイトなどJavaにはない概念を理解する必要がある

ということがあり、一般のJavaプログラマーが理解して使いこなすには相当敷居が高いところがあります。対してGroovyの場合は、一部の例外を除きJavaの構文のままでも正しいGroovyなのであり、セミコロンをはずすなど段階的にGroovyらしいコードに移行していくことができます。現実問題として多くの職業プログラマーのスキルが低いといわれているのですから、学習曲線のなだらかさは無視できないポイントであると思います。
もちろん、私はGroovy対Scalaのような議論はナンセンスだと思いますし、そもそも両者ではターゲットとするものが違うのであると思っています。Scalaは型安全性や関数型による並行プログラミングの容易性などの特徴から、システム寄りのプログラミングやフレームワークの構築に適した言語であるのに対して、Groovyは気軽に業務ロジックを書いたり、テストクラスを書いたり、ツールを作ったりするのに向いています。要するに使い分けなのですが、どちらかというとGroovyはエンタープライズ開発をメインターゲットにした言語なのであると理解しています。だから、対象となるプログラマーの人数も多いはずなのです。その証拠に現在ではSpringが中心になってGroovyの開発を進めていますし、欧米ではエンタープライズ開発を中心にかなりメジャーな言語として使われているという話も聞きます。一方、対照的に日本ではかなりマイナーな言語*1というか、名前すら聞いたことのないJavaプログラマーも結構いたりするのでしょうか?
同様に、今のところAspectJもエンタープライズ開発の現場ではあまり活用されていないようですね。AspectJは一見業務開発とは無縁な特殊な技術のように思われる方もおられるかもしれませんが、Springでも積極的に取り入れられているように実は業務システムの開発とは非常に相性がよいものだと思います。先日書いた、AJDTを使って規約違反のコードを検出する方法のような機能は、SIer脳的発想のSEやマネージャーに対しても受けがよいはずですし、アスペクト指向によって難しい技術的なコーディングを局所化することで、偶発的複雑性を極力排除し、普通のプログラマーは業務ロジックの記述に集中できるようになります。
先日、エンタープライズ開発者が負け組として軽蔑される日本のSI業界ってという記事を書いたのですが、Groovy言語やAspectJといった本来エンタープライズ系でもっと積極的に使われるべき技術の人気がどれも今ひとつなのは、技術面で世界の進歩から相当の遅れをとっている日本のSI業界(特に軽蔑・軽視される下流工程のプログラミング関連技術)を象徴しているからなのだろうかと思えますね。つまり、本来の技術自体がダメなのではなく、新しい技術を積極的に使おうとしない業界の体質によるものではないかと思います。そして、我が国ではたまたま運悪く生産性や品質が軽視される領域とメインターゲットが重なってしまっているということです。*2
私はこのような技術の有用性が日本のSI業界で見直され、もっと活用されるようになれば生産性や品質の向上に確実に寄与すると思います。
(追記)
ちなみに、この記事ではAspectJとGroovyについて書きましたが、必ずしも両者の相性が良いということではありませんのでご注意ください。併用する場合は注意が必要だと思います。将来的にはAspectGなるものが出てくるのかもしれませんが。
http://jira.codehaus.org/browse/GROOVY-4249

*1:実案件での適用例はまだまだ少ないですが、日本でもユーザーグループで積極的に活動が行われています。JGGUG

*2:別の意味ではScalaなどバリバリ使いこなすハイスキルのプログラマーと一般の職業プログラマーとの間でスキルが極端に二極化しているということであり、中間的なスキルのプログラマーがいないということもいえるかもしれません。