統合開発環境（IDE）はどれを使えば善いか？（独断と偏見の遥か彼方）

# 追記
多くの方が目を通してくれているのでIDE情勢が変化し次第、内容を随時更新することにした。
特に最近、C#周りがホットになってきている気がするのでその辺も含めて少し情報を変更、追加した。
マイクロソフトの独壇場なイメージがあったC#は今では様々な分野、プラットフォームで利用されており、大変有用な言語となっている。

# IDEってどれがいいの？
結論から言うとJetBrains社が出してるIDE使っておけばもっといいのがあるよって異論を言われるはずがない。

もちろんこれまで長くコーディングを嗜んできた人やポリシーがある人はそれで構わないしVimとかいう前世紀の賜物を使いこなせる人はそれでいいと思う。俺には使えないが。

# 比較対象
とりあえずこれまである程度使ったものだけで比較する。
Eclipse, Xcode, JetBrainsのIDE(AppCode, Android Studio, IntelliJ IDEA), MonoDevelop, Visual Studioを比較してみる。
NetBeansは使っていない。存在感が冴えないしEclipseと雰囲気が変わらないのでわざわざ試してみたいという好奇心が湧かなかったからだ。
AtomやSublimetextみたいにIDEなのか怪しいものは置いておく。（あまりオススメしない。理由は後述。）

# 比較
それぞれの特徴を説明しておく。しかしどうせJetBrainsがいいって話をするだけに決まっているのだからその他のIDE達に関してかなりおろそかな説明をする。

まず良いIDEというのは良い補完をしてくれるものだし、コーディング以外においても様々な気の利いたサポートをしてくれるものだ。あとはIDEは機械なので故障することもある。IDE自体に関してのトラブルシューティング機能も大切。

IDEの仕事はプロダクトのコンパイルやビルドなどのサポートももちろん含まれる。そのために多くのプラグインも存在するのだ。
AtomやSublimetextはコーディングは少しはできるがその辺のサポートはしない。
コーディング時もLive Template的な機能やスニペッドは使えても文脈を理解したような深い提案はしてくれない。

ちなみに俺のいうインテリジェンスな補完とは、例えばまだ触ったことのないフレームワークや言語、APIやライブラリでもドキュメントを読まずになんとなく自然に書けるようなサポートをしてくれることだ。

ドキュメントを読めという時代は確かにあったが、俺はドキュメントを読むのは時間の無駄だと思っている。便利なものは日進月歩で出てくるわけで日々新しいものを当たり前のように使える必要がある。
得意な言語やフレームワークを守備範囲と名乗ってその方面のプロフェッショナルを名乗るのはナンセンスだし、それに固執することで便利なもの（最初からほぼ出来上がっちゃってるもの）を使わないのは損でしかないのだ。

今は足し算でなく引き算でものを作る時代なので、自分でプログラムを組むよりも、その方面を得意とする言語やフレームワークを使いコーディングにより制約で縛ることでプロダクトを仕上げる時代なのだ。
もちろん懸命に足し算をして今の時代の便利なものを作ってくれた先人に感謝をすることはやぶさかではない。

極論を言えば良いIDEがあれば、新しい言語、フレームワーク、API、ライブラリの勉強は要らず書きながらレベルを上げていけばいいのだ。

もちろん、言語によっては良い意味で一癖あるものもある。ほかの言語にはない便利な構文や機能を使いこなせなくては勿体ないのでIDEが自然にそれを教えてくれてそのままリファクタリング出来るのが理想だ。そうすれば次からは自分でそれを使うことができる。

また、コーディング規約や命名規則がなっていないのもダメだ。
それに関してもきちんと教えてくれるIDEでなければならない。（もちろんそのままリファクタリングを提案してくれるべき。）

ハチロクが良いドライバーを育てるように、良いIDEは良いプログラマーを育てるのだ。
だから有償のIDEでもせいぜい数万。授業料込みとなると安すぎるので金を惜しんではいけない。

それでは比べていく。

## Eclipse
やたらとプラグインが多いため、かなり自分色に染められる。自由度が高い。

プラグインがかなりたくさん出回っているので、Objective-C/SwiftとC#（つまりApple語とMS語）以外ならほぼ全ての言語に対応できる。

まあJavaを書くには申し分ない。。。と思っていたが俺みたいな面倒くさがりにはもう少し気の利いたインテリジェンスな補完や提案をしてほしい。

もちろんこれに関しても良いプラグインが出てきているのかもしれないが、自分がメインで使っていた頃にはまだなかった。

俺の知っているeclipseではfindViewByIdというアンドロイドのメソッドを補完で出すのにfVBIとかfiVとかfindとか打ち始めれば出てきたがidでは出てこなかったはずだ。

これが大切なのは前述に書いたことと繋がってくる。
UIを伴うアプリケーションを作る場合、レイアウトファイルの中のどれかの値でUIパーツのインスタンスをコード側から見つけ出す関数は何かしら用意されていると考えるもの。
となるとドキュメントを読まずに取り掛かる場合、メソッド名にidかtagがつくものを使えばいいとヤマを張るもの。
そこでidやtagと入力した段階で先ほどのfindViewByIdがすぐに出てこないようではダメダメなのだ。

あとEclipseは壊れやすい。
たくさんあるプラグインは干渉を起こしやすい。エクリプス本体のバージョンと相性が悪くてもインストールできる。ここまでは仕方のないことだ。
だが、起動時にプラグインを読み込むわけだが、そのときにプラグインが正常に読み込めなかった場合エクリプスが起動できずフリーズすることがしばしばある。

こうなるとそれを修復するノウハウを得るのにも時間が掛かる。
隠しファイル内をごにょごにょすれば起動できるようになったりするが、どのプラグインが悪さをしているのか特定するには難航する場合がある。原因を取り除かねば何度でも再発する可能性がある。
このあたりの自己修復機能がないし最低限起動できなければプラグインをマネージメントできないため手動でヤマを張りながらファイルを削除したりしなければならない。そしていびつで汚い環境が出来上がっていくのだ。

これ以上ディスるとコメント欄が炎上するので次に行く。
だがしかし俺にもこれを愛用していた時期が何年かあったわけだから世話になったことは確かである。

良い言い方をすると玄人向きである。

## Xcode, Visual Studio (Windows)
これらは独特であるため、目的によっては好き嫌いにかかわらず使わざるを得ないだろう。
Xcodeは主にアップルの製品（iOSやOSXを搭載する）向けのソフトウェアを、Visual Studioは主にMicrosoftの製品向けのソフトウェアを開発するためにある。
もちろんそれ以外のコーディングにも使えなくはない。

どの言語に対応できるかというよりも用途が結構あからさま。
XcodeはAppleのために、Visual StudioはMSのためにという感はある。

Xcodeに関してもIDEとしては未熟でObjective-Cに対する補完の強さはEclipseのJavaに対するそれ以下だ。
良い補完について付け加えると、入力した文字に対してどのようにマッチングしてくれるかに加え、ある程度文脈を理解してくれてそれを補完や問題解決に反映してくれる。

はっきり言っておくとXcodeはコードを書くものではない。
Cocoa系アプリのインターフェイスを設計したり、アプリをコンパイルしたり、AppStoreにアップロードするためのただの窓口だ。

もしXcodeをコーディングで使うならプラグインによる機能追加は必須だ。Alcatrasというプラグインマネージャーは必ず入れるべし。
そしてCocoapodsのサポートプラグインとコードフォーマッターは入れておいたほうが良いが、フォーマッターの設定ファイルを書くのは5回死ぬほど面倒くさいので後述するJetBrains社のAppCodeを大人しく使うべしとしか言いようがない。

Visual Studioに関しては無難だと思うし、Windowsは物を創造する機械でないだとか子供のおもちゃ(ピコ)と区別がつかないなんていうと炎上して怖いのであまり論じないことにする。

## MonoDevelop, Xamarin Studio, Visual Studio (Mac)
流行りのUnityについてくるアレ。
~~本家Xamarin Studioも使ってみたけど両方とも糞だというのは人類共通の感想だと思う。
だが使っている。~~

~~なぜJetBrainsを全力で褒めたい俺がReSharperを使わないか。
それは俺の初代リティナMacBook Proフルカスタマイズモデルのマシンパワーを持ってしても、Unityを起動しながらFusionでWindows7を立ち上げVisual Studio(ReSharperで強化済み)を起動するとUnityが頻繁にクラッシュするからだ。~~

~~おまけにマシン本体のGPUダイオードが75度まで上昇する。
ノートブック本体のキーボードで1日作業すると指が低温火傷して翌日皮膚が剥けて水虫のようになってしまう。~~

~~MonoDevelopを止むを得ず使うのはそれが理由だ。
チンケなIDEだがその分重くはない。
気持ちよくディスれるのはどうせ愛用者などいないからだ。いたらごめん。~~

~~ちなみにUnityのコードを書く目的の人は、本家Xamarin Studioより気持ちだけ軽い気がするし、C#を書く分には機能はどっこいどっこいなのでUnity付属のを使用するのをお勧めする。~~

対応できる言語はC#, F#, D, Lua, Haxeとマイナーな言語が多いためもしかしたら持っていて損はないかもしれない。

~~ただしどの言語もコード補完はお粗末なので、よく勉強した人でないと多分書けない。
（何度も言うが、俺の思う良いIDEとは言語やその構文について、またIDE自体についても予備知識や下調べなしでいきなり自然にコードを書き始められるものである。）~~

~~コードフォーマッターがかな〜りバギーなので気をつけるべし。~~

Xamarin Studioはそこそこ使えるようになってきた気がするし安定もするようになってきた。
まだbetaリリースだがXamarin Studio 6は悪くなかった。
エンジニアはみんな大好きダークインターフェイスにも対応。目にも優しい。

おまけにXamarinはMicrosoftに買収されてから無料でアンドロイド、iOSアプリのマルチプラットフォーム開発ができるようになった。
Formsにも期待だが、まだまだ足りないところや痒いところに手が届かない感はある。
まだbetaチャンネルだが、XAML（XMLをベースにしたマークアップ言語）で両スマホアプリのUIが作れるのは良いと思うし、あとはビジュアルエディタが備われば言うことなしだと思う。

そうなるとC#ができるエンジニアはゲームやARなどUIがリッチなものを作るにはUnityを使えば良いし、ユーティリティ系などの通常のアプリ開発にはXamarinを使えば良いということになりC#は学習のコスパが良い言語となる。
コマンドラインツールやサーバーサイドの開発も可能だ。

Xamarin Studioはnugetもサポートしているので開発は一層捗るだろう。

### 追記
最近Visual Studio for Macなるものがマイクロソフトよりベータ版だが一般公開された。
Visual Studio Code（Atomの劣化版っぽいIDEでない単純なコードエディタ）が出没してからXamarin買収の流れでこういったものが出てくるのは予想していた。
そして実際にダウンロードして使って見たが、思った通りXamarin Studioを拡張したようなものになっていた。（ベータ版の現在ではほぼ同等。Xamarin StudioはVisual Studio for Macとなり姿を消すと思われる。マイクロソフトはもちろん今回のためにこれを買収したのだろう。）
これまでWindows向けにガッツリ開発されてきた本家Visual StudioをMac向けに（部分的にもほぼ）移植できそうにないのでこのfor MacというエディションはXamarin Studioをベースに組んでいくということだろう。
もちろんベースがそれなのでUnityのコードも編集できる。自分は似たような環境を複数持つのを嫌うので、Xamarin Studioをアンインストールし、Visual Studio for Macを現在Unity開発で使用している。
Xamarin Studioがダークインターフェイスに対応しているのでもちろんこれに関しても利用可能だ。
ちなみにMacにおいてMonodevelopとXamarin StudioとVisual Studioのコードフォーマット、キーバインド、スニペッドを含む設定フォルダは~/Library以下にあるのでコピーやリネームで使いまわせる。
自分もUnity付属のMonodevelopの設定ファイルをXamarin Studioに引き継ぎ、今回Visual Studioに引き継いだ。問題なく動いている。

## JetBrainsのIDE

こんなに気持ちよくコードが書けるIDEが他にあっただろうか。いや、ない。
これに関してはもう論じる必要もない。
なぜなら前述のIDE達の悪いところは逆にJetBrainsは全てカバーしている。これで完璧ではないか。

JetBrains社はIntelliJ IDEAというIDEをベースに様々なエディションを出している。
どれもインターフェイスが統一されているため一つ使うと他の製品もすぐに自然に使えるようになる。

有償のIDEと言えば無償の物より必ず良いに決まっている。
責任を持って作ってくれているし、責任を持ってサポートしてくれているからだ。
Visual Studioだって有償だからこそ叩かれるほどの落ち度もない。（俺は大嫌いだが。MSが。.NETが。）

今一度重要なことを述べると、IDEはプログラミング言語の記述を最大限にサポートするだけでなく、プログラミングの作業上で発生する様々な仕事を幅広くサポートするためのものだ。

筆者自身のセールスポイントはほぼ全ての言語、またフレームワークが扱えるというものだ。

これは善いIDEから受けた恩恵である。
善いIDEはときにインスピレーションを与えてくれるような感覚に落ちることがあるが、実際は本来自然に湧き出るはずのインスピレーションを、プログラミングというたかだか文章表現上の文法の違いだとかそういった煩わしさが妨げないようにしてくれているのだ。

筆者はJetBrainsのIDEを使用しコードを書いている最中に、とりあえず何がしたいかわからなくなったりしたらスマート補完キーなどを叩いている。出てくる候補の中から選んで適当に組み合わせていけば、それが未知の言語だったとしても、なんとなくプログラムを組んでいくことだって可能だ。

細かいところを言えば、例えば1行で書けるif文から括弧を外したり、ifとswitch文をチェンジしたり、forとforeachをチェンジしたり、if, else文を三項演算子に置き換えたりなども気が利いている。
コメントや変数名もスペルミスがあれば教えてくれてそのままレファクタリング機能のrenameが使える。その際、コメント内の文章にもリファクタリングを有効にできる。
不要な代入も教えてくれて安全に削除できる。
もちろんincludeやimportも自動最適化できるしソーティングもしてくれる。
コードフォーマッターも非常にルールが編集しやすい。

### iOS開発向け
AppCodeではこういった機能をObjective-Cに対して使用出来る。
Objective-Cなんて言語をこれだけ強力に扱えるIDEは他にはない。
ブロック構文（Objective-Cのクロージャ）は一癖あって覚えにくいがAppCodeと触れ合っているうちに自然と使えるようになった。
この前、C/C++/Objective-C/Objective-C++が混ざったプロジェクトを扱ったがストレスなく対応できた。

CocoaPodsの対応も非常に良い。XcodeではCocoaPodsをプロジェクトで初めて使うと、一度Xcodeを終了しPods.xcodeprojというXcodeプロジェクトとアプリ本体のプロジェクトを内包したXcodeワークスペースでプロジェクトを開きなおす必要があり初めての開発の場合の落とし穴となる。
AppCodeの現行版では、その際に自動でXcodeワークスペースとして読み込まれる。

~~ただしStoryBoardなどのインターフェイスの開発には向かない。AppCodeにもインターフェイスデザインが機能としては備わっているが、アップルがすぐに仕様変更するためか対応が追いつかずあまりきめ細やかではない。
ここに関してはXcodeを併用したほうが無難。~~

最新のAppCodeではStoryBoardなどUIのビジュアルエディターが使用できなくなっていた。
おそらくアグレッシブに変更されるApple側の仕様変更や追加などに追いつけなくなったのだろう。
だからここはおとなしくXcodeを使うほかないのかも知れない。

他社製のRevealというiOSアプリのUIをデバッグするためのアプリがあるが、AppCodeは標準でこれとの連携をサポートしている。
利用する場合、別途購入が必要だ。期限付きで無料試用可能である。

### Android開発向け
Android StudioはGoogleのオフィシャルから配布されているが、これもJetBrainsのIntelliJ IDEAのコミュニティエディションにアンドロイド開発に必要なプラグインを最初から乗せたものだ。
もちろんコミュニティエディションを使用することも可能。そうなるとIntelliJ IDEA Ulitimateでも出来るということになるが、機能が多いよりもアンドロイド開発をするときは機能を絞ってあるほうがシンプルに使えるのでUlitimateと両方とも愛用している。

### エディション比較

#### IntelliJ IDEA Ultimate
~~全部入り。（ただしObjective-Cは除く）~~
Php, Ruby, Pythonは同梱ではなくプラグインとして無償で追加インストールする権利が与えられている。

#### IntelliJ IDEA Community
無償だがIntelliJ IDEA UltimateのJavaだけ残してくれてる感じ。
以下ほとんどの製品の基盤になっている。

#### WebStorm
IntelliJ IDEA CommunityにWebプラグイン同梱

#### PhpStorm
WebStormに更にPhpプラグイン同梱

#### RubyMine
IntelliJ IDEA CommunityにRubyプラグイン同梱

#### PyCharm
IntelliJ IDEA CommunityにPythonプラグイン同梱

#### Android Studio
IntelliJ IDEA CommunityにAndroidプラグイン同梱
ただしIntelliJ IDEA Communityでもプラグインで同じことをできる。

#### AppCode
これは独特。
IntelliJ IDEA CommunityをベースにしているわけではないのでJava開発はできない。
そしてIntelliJ IDEA Ultimateを持ってしてもAppCodeを互換することはできない。
C/C++/Objective-C/Objective-C++/Swiftを扱えるが、C/C++といってもiOS開発上必要なものであり一般的なC/C++開発に向かない。

#### Clion
~~これも独特。まだEAP版（β版）につき無償。~
IntelliJ IDEA CommunityをベースにしているわけではないのでJava開発はできない。
そしてIntelliJ IDEA Ultimateを持ってしても（今のところ）Clionを互換することはできない。
C/C++を扱える。Makefileもストレスなく連携できる。（というかセミオートな感じ）

#### MPS
これは特殊。プログラミング言語をプログラミングするためのもの。
情報があまりないため、勉強しづらいのが特徴。勉強しないのが吉とは言ってきたがこれに関しては少しお勉強が必要だと思っている。

#### ReSharper
これはVisual Studioのプラグイン・・？
というよりプラグインにしてはIDE一個分の影響力があるので合体的な感じになる。
特にC#開発時、JetBrains特有の手厚く心強い補完やリファクタを受けられるようになる。
Windowsがメインの人はUnity開発も捗ると思う。
~~.NETをやらなくてもUnity周りのC#を書きたい人は大勢いると思うのでUnity向けC#を書けるIDEをJetBrainsからMacでも動くようにスタンドアローンで出して欲しい。~~

#### Rider (EAP)
待ちに待ったJetBrains社のスタンドアロンのC#開発環境だ。
触ってみたがかなり期待できそうだ。
しばらく使ってるとslnファイルの読み込みに成功しなくなり、生成したばかりの新規プロジェクトすらロードに失敗するようになったが、まだEAP(Early Access Program)なので期待して公式リリースを待つことにする。
ちなみに設定画面を見るとC#, ASP.NET, C++, CSS, HTML, IL, JavaScript, JSON, Razor, TypeScript, XMLをサポートしようとしているのがわかった。

### GoLand
Go言語を対象にした新しいJetBrainsのIDE, 期待の新星である。
しかし現在のところ、Go言語が実践導入されるケースも決して多くはないため、もし全てのIDEを利用できるプランを契約しているなら、使ってみては？といったところだ。

# 導入のスゝメ
Ultimateを買えばObjective-C, C/C++, C#以外のことは全て出来てしまうが、例えばUltimate + Ruby PluginよりもRubyMineのほうがRubyだけをするには細かいところまで機転がきいてくれることがあった。PhpStormやPyCharmにも同じことが言える。
なので全部入りのサブクリプションプランが最強ではないかと思う。

# 〆
というわけでJetBrainsを褒めて終わってしまって申し訳ない。比較とかいう話じゃなくなった。
愛用のIDEをディスられて不快な思いをした人もかなりたくさんいそうだが、口と性格が悪いのは治らないから仕方がない。
だが食わず嫌いをしたわけではないことだけは解って欲しい。

### 追記
しかしながら最近はXamarin Studio、およびVisual Studio for Macの発展にも期待している。

自社ではこれらJetBrains社のIDEを活用しスマートフォンアプリやウェブサービス、VR、ARなどの開発も行なっているので、詳しくは[ZYXW.jp](http://zyxw.jp)をチェック！