Eclipse vs Visual Studio


JavaScriptの入門書(http://d.hatena.ne.jp/yaneurao/20081202)の記事のコメント欄で、次のような意見を頂戴した。

WebApp屋 2008/12/05 00:25
まさか、ASP.NETを推されるとは思いませんでした。
なにゆえ??
言語はともかく、ほかのすべてがJavaの後追いしてるだけでは?


yaneurao 2008/12/05 02:11
ASP.NETの利点はVisualStudioが使えるという一言に尽きると思いますが。


WebApp屋 2008/12/05 09:38
なるほど。
ビジネス環境の違いを理解しました。
業務アプリ屋にはそこはデメリットに感じます。
VisualStuidoの生産性はともかく、過去バージョンの保守でインストール等の手間が発生するので。当然ライセンスの管理等も含みます。
#Java系のIDEは固めておいて、展開すればOK
開発環境全仮想化するにしても、どんどん必要スペックがあがっているので、今のところ現実解ではないと感じております。

趣味レベルの話になってしまいますが、業務アプリ開発用としてのIDEは圧倒的にEclipseの方が優れていると感じています。最近ではEclipseのためにJavaをチョイスしております。

私は、Webアプリを専門でやっているわけではないので、上の人に対する正確で客観性のある回答を出来そうにない。そこで、専門で開発に従事されている人の意見をお聞きしたい。コメント欄でフォロー or trackbackをいただけるとありがたい。


一応、私の考えていることを以下に長々と書いておくが、比較的Microsoft側に偏った意見であることも事前に申し上げておく。


■ ライセンス料の問題


Visual Web DeveloperのExpress Editionは無料。
サーバーとして使う、Windows Server 2003 Web Editionは42,000円。


よほど小規模のサイトだと、これらのライセンス料が問題になることがあるかも知れないが、業務系のWebアプリの場合、開発するための人件費に何百万円もかかるのが普通であって、開発ツールやOSにかかる費用なんて無視できるほど小さいと思う。


※ ただし、私は、Microsoft MVPで、Visual Studio Team Systemを無料で使わせてもらっている立場なので、Visual Web DeveloperのExpress EditionがWeb開発に十分なのかどうかは使っていないので知らない。


■ 大規模なWebサイトの開発


大規模なWebサイトの開発に関わっているような人は、国内でもごく少数だと思うので、大半の人のは関係ないのかも知れないが、一応思っていることを書いておく。


大規模Webサイトの場合、パソコンを何十台〜何百台も用意して、かつ、冗長化してホスティングするのが現在のところ一般的であり(→[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用)、その場合、OSなどのライセンス料が問題になる。こういう場合は、Windowsサーバーでホスティングするのはあまり現実的ではないと思う。


それ以前に、大規模WebサイトをWindows Serverでホスティングする場合、DBの冗長性をどうやって持たせるのかだとか、DBサーバーやWebサーバー、ロードバランサーなどの役割を動的に変更するようなシステムをどうやって構築するのかだとかそういったことを考え出すと、Windows Serverでの運営は一筋縄ではいかない。そのへんまでAll In OneでWindows Serverが面倒を見て欲しい気はするのだが…。


■ VB.NET / C#でのWebサイトの開発


いまや、Windows用のビジネスアプリの開発はC++,VBから、C#VB.NETでの開発に移行しているのが普通だと思う。私がここ数年で請け負った仕事はすべてC#だった。


Windowsプログラマにとって、C#VB.NETはいまや必修の言語となっていると言っても過言ではない。


ASP.NETでの開発言語には、C#VB.NET , C++/CLIが使える。(C++/CLIで開発しようと言う人がいるとはあまり思えないが)


あらたに別の言語(Perl,PHP,Java,etc…)を習得する必要がない。.NETプログラマにとって、Web開発のときに.NET Frameworkのすべてが使えるというのはとても大きな魅力だろう。また、ビジネスアプリのために書いたコードを流用することだって出来る。



■ LINQ to Entities


DBアプリケーションにおいて、一番面倒なのは、DBの設計と、DBへのアクセスである。
LINQ to Entitiesならば、テーブル定義をGUIから編集すればあとはO/Rマッピングされて自動的にテーブルへアクセスするクラスが使える。


JavaO/Rマッピングするなら、よく使われるのはHibernateだろうけど、LINQのように言語に統合されているわけではないので、Hibernateを使うほうのコードは冗長な気は少しする。


またLINQ to Entitiesの場合、クエリ式は式木(Expression Tree)に変換され、サーバーサイドでその式木が実行され、クエリの結果だけ返すことが許されるが、Hibernateはこのような仕組みがないのでクエリの書き方によってはずいぶんパフォーマンス的に違いが出ると思う。


※ ただし、LINQ自体がそんなに早くない。(→「DataTable.Select vs LINQhttp://d.hatena.ne.jp/akiramei/20081120/1227195768 )


※ Visual Studio2008のテーブルデザイナはまだ作りかけという感じがしなくもない。このへんは次期Visual Studioに期待というところか…。


※ Hibernate、O/Rするまでの設定が面倒。マッピングファイルとか何で手でXMLを書かなきゃならんのか…と思った記憶が。


■ インストールの手間

VisualStuidoの生産性はともかく、過去バージョンの保守でインストール等の手間が発生するので。当然ライセンスの管理等も含みます。
#Java系のIDEは固めておいて、展開すればOK

この部分、気になっているのだけど、私と認識が違いすぎる。


Eclipse
JDK
Hibernate
Apache
MySQL / PostgreSQL


少なくとも上記のソフトの最新版を拾ってきてインストールする必要はあるんじゃないかと思うのだけど。むしろ、インストールはVisual Studioのほうが楽。


※ また、Windowsプログラマなら、Visual Studioはすでにインストールされているのが普通だろうから、それならプロジェクトファイルをダブルクリックすればVisual Studioが起動して、F6でビルドすればすぐにテストできる。Apacheの設定やらMySQLの設定やらしなくて済むのでプロジェクトをdeployする手間は比較にならないと思うのだけど。


また、上記のソフトをインストールするときに、MySQL 4.1を使って開発してたら、もうMySQL6に移行していて、MySQL 4.1はバグありのまま開発終了してるのでMySQL6用に移行しないといけないだとかなったら、ソースの書き換えが発生すると思う。


あと、Hibernateの開発が終了してたらどうなるのだろう?5年後や10年後もHibernateの開発は続いている保証がどこにあるのだろう?


※ そもそも、Hibernateはいまも存続してるプロジェクトなのかな?公式サイト(http://www.hibernate.org/ )を見ようと思ったら、繋がらないのだけど…。


※ Open Sourceのプロジェクトって、いつ無くなってもおかしくないのが最大のリスクだと思う。最新版をこまめにチェックするのも手間だし、何か既知の脆弱性をかかえたままプロジェクトが終了になれば、そのプロジェクトは利用できないも同然になる。


※ Visual Studioなら、いま仮に初代ASP.NETのプロジェクトファイルを持ってきてもプロジェクト変換ウィザードで変換すればたいていそのまま動く(私はそのまま動かなかった経験がない)。5年や10年後のVisual StudioでもいまASP.NETで書いているアプリは動き続けると思う。例えば、LINQ to SQLはdisconになったけど、10年後でもおそらく使うことは出来るだろうし、今後もたぶんbug fixぐらいはされると思う。


■ IDEとしてどちらが優れているか


EclipseVisual StudioとではIDEとしてどちらが優れているのか?


私は、正直Visual Studioの環境もカスタマイズはほとんどせずに使っているのでどちらが優れているかという比較は出来そうにない。


Visual Studioはカスタマイズせずとも、十分な機能を兼ね備えているし、Visual Studioのバージョンが上がるごとにカスタマイズしなおすのが手間だというのもある。


※ Eclipseのほうはpluginをいろいろ入れれば相当使いやすくなるらしく、Visual Studioにも、もっと拡張性が欲しいとは思う。


※ Visual Studio 2008のリファクタリング機能やUMLで設計する機能は、まだまだ作りかけという気がしなくもない。


デバッガの機能に限って言えば、Visual Studioのほうが優れていると思う。例えば、マルチスレッド関係のデバッグEclipseのほうはいろいろ問題があった気がするのだけど、私はEclipseは最近触っていないので事情はよく知らない。


あとは、私がよく利用する「インスタンス単位でブレークポイントを指定する」(→http://d.hatena.ne.jp/NyaRuRu/20070614)ようなことは、Eclipseでは出来ない。これはEclipseの問題ではなく、JDKの問題のような気もする。


■ まとめ


そんなわけであまり公平なジャッジが出来ているとは自分でも思えないのでコメント欄でフォロー頼んます。