Visual Studio のどのエディションを使えばいいか迷ったらコレ!

チーム開発Windows, Visual Studio, ツール

この記事の所要時間: 24

はじめに

SNS を徘徊していると、「Visual Studio ってエディションがたくさんあってどれ使っていいかわからない」とか、「Express で十分だよね」とか、「Community でたからもうこれでいいよね」とか、「Ultimate/Enterprise はリーダークラスがもっていればいいよね」とか、「モデリングやらないから、Ultimate/Enterprise いらないよね」とかとか、いろいろ見たりします。

さぁ、そこで、さらっとエディションがどんなのがあって、どんな違いがあるのか、どれを使えばいいのかを見てみましょう。

 

Visual Studio のエディション

Visual Studio 2012 / 2013 でのエディション:

  • Visual Studio Community / Express
  • Visual Studio Professional
  • Visual Studio Test Professional
  • Visual Studio Premium
  • Visual Studio Ultimate

Visual Studio 2015 / 2017 でのエディション:

  • Visual Studio Community
  • Visual Studio Professional
  • Visual Studio Test Professional
  • Visual Studio Enterprise

※ これ以外にも、Visual Studio Code や Visual Studio for Mac がでているがこれらはいわゆる従来からの Visual Studio ではないため、今回は含めない。

上述もしていますが、2014年秋に、Visual Studio Community という新たなエディションが発表されました。

それに加えで、チーム開発基盤として、Team Foundation Server (TFS) があり、これらの SaaS 版である旧名称 Team Foundation Service を含む、Visual Studio Online というソリューションプラットフォームも提供しているという感じです。

現在は、Visual Studio Team Service (VSTS) という名称になっています。VSTS っていうと、Visual Studio Team System ブランドを思い出しますね。

以下は、Visual Studio のエディションで、分かりにくいポイントについて見ていきます。

 

Professional と Test Professional

Visual Studio Professional は、ざっくりいうと統合開発環境 (IDE) です。そう、いつものアレです。アレ以外のナニモノでもありません。単体テストとかコード分析とか、結構高度な支援機能が搭載されています。Visual Studio で単体テストというと、独自フレームワークである MSTest を連想するかもしれませんが、Visual Studio 2012 からテストアダプターさえあれば、あらゆるテスティングフレームワークを分け隔てなく実行/結果の把握ができます。例えば、NUnit や xUnit.net, QUnit, Google Test, Boost Test, などなどいろいろなテスティングフレームワークが使えるようになってます。

ちなみに、Visual Studio Community は、この Visual Studio Professional 相当の機能を利用制限下のもので、無償提供するエディションといっていいでしょう。

では、Visual Studio Test Professional とはなにか?と思われるでしょう。これは、テスターさん(テストアーキテクト、テストエンジニアからテストオペレータさんまで)のための専用ツールです。IDE が開発者の専門ツールなら、Test Professional は、テスターの専門ツール、テスターの「統合テスト環境」ということができます。

「あー、Test Professionalって、Microsoft Test Manager ネ!」っと連想した方、ほぼ正解ですが、惜しいです。Test Professional には、PowerPoint ストーリーボーディングや、フィードバッククライアントなどのうれしい機能も付いています。実は、Test Professional は、テスターだけでなく、プロジェクトマネージャーさんなどにとって最適なツールセットを有しているのです。ちなみに、Test Professional では、IDE もインストールされます。これは、Visual Studio Shell というものです。 TFS へアクセスするチームエクスプローラーがあるので、Microsoft Project やみんな大好き Excel 連携がスムーズに行えてしまいます。注意点ですが、Test Professional のメインのある Microsoft Test Manager には、TFS が必須となります。TFS 以外の開発基盤を使っている場合にはこのツールはほぼ意味をなしません。

 

Professional と Premium, Ultimate (Enterprise)

たぶん、次に気になるのが、Professional と Enterprise (Premium または、Ultimate、以下、Enterprise と呼ぶ) の違いでしょう。簡単にいうと、Enterprise には、Professional で提供される全機能に加え、上述の Test Professional の全機能が含まれます。便利ですね。ちなみに、Visual Studio 2010 のときは、Test Professional の機能は、Ultimate には含まれていましたが、Premium には含まれていませんでした。実は、Premium がかなーり強力で、心強い武器になっていることがわかります。

もちろん、Enterprise は、Professional より強力な武器が含まれています。まぁ、その辺は、後でさらっと書きます。

なお、これらのエディションによる機能差については、公式サイトのリストを見るとよいでしょう:

# うーん、英語ですね。日本語もしっかり用意してほしいな

 

このご時世から考えるエディション選択

明示的な、設計~開発~テストといった工程がはっきりとリリースまでのサイクルでわかれないもしく、繰り返す状況ではそれぞれの成果や結果を次に活かすことが前提となってきます。その世界観では、モデリング機能は、設計フェーズでのみ使うとか、テスト機能はテストフェーズで使うということではなくなってきています。例えば、モデルは書いて終わりではなく、実装コード上で、アーキテクチャ検証を行い、問題ないかを継続的に見続けることができることがより重要になってきますし、モデルを陳腐化させない意味でも、常に更新かかり、かい離がなくする必要があります。同様に、アーキテクチャに基づいたテストの実施やカバレッジなども重要になります。

って考えると、ツールの原則に立ち返って、エンジニアのスキルの補完と効率化でツールを活用するとみていくと、行わなければならないことが不変だとして、それをどれだけツールやプラクティスでカバーできるのかをみていけば見通しがつきやすくなるわけです。

ここで、Visual Studio の各エディションにマップしてみましょう。

各エディションと能力の補完(Visual Studio 2013 時点のエディションにて表記)
各エディションと能力の補完(Visual Studio 2013 時点のエディションにて表記)

はい。このように、コードの品質や、アーキテクチャにアラインしたコードがかけたり、レガシーコードの依存関係や、リファクタリングなどが自力で行えるだけのスキルや経験(場合によって才能)を有しているか、それをおこなうために十分な時間がかけられるならば、Professional の機能があれば、十分と考えることができます。そうでなければ、Premium や Utimate の機能を活用してカバーすればいいというわけです。今の継続的デリバリーの時代には、スキルと経験があっても本業に注力するにはツールのチカラをできるだけ借りた方が得策です。また、チームメンバーが均質であることはほとんどありませんから、自ずと揃えておきたいエディションはわかってきます。まさか、開発者の道具をケチって開発ビジネスも成功させたいなんて都合良く考えている現場はもうないですよね?

 

問題提起

Visual Studio を開発者のスキルや効率だけでエディション選定してよいのでしょうか?

これだけだと、「数人だけ Enterprise で」とまだ言いそうですね。ここで重要なのは、開発は一人ではおこなわれていないこと、開発の成果物は、どの粒度であっても共同所有であるべきだということ、これらの導出、すなわちトレーサビリティが取れていないと、品質や責務を果たしているといった説明責任がとれないこと、その負担を開発者、マネージャに強いることになることを常に考慮しなければなりません。そう、これらはただ使って便利なだけではダメなのですね。そこで、Team Foundation Server などを基盤として採用することをお勧めします。TFS は、Enterprise が持っている様々な有益な機能を活用した成果を共有し、つないでいくことができます。例えば、CI でレイヤー図で設定したアーキテクチャ検証をかけることで、ビルドエラーにならない、アーキテクチャ上の違反を CI で検出できます。ゲートチェックインにしておけば CI でビルドやテストで失敗した場合にごみがリポジトリに残らないことになりますので、常に本当の意味でクリーンなコードを共同所有することができるわけです。

Microsoft もこの辺りは非常によく考えていて、TFS や、Visual Studio Team Service の利用制限を緩和したり、価格体系を見直したりして時代にあった形で利用できるように調整しています。このあたりを追ってみるだけでも開発基盤のトレンドの勉強になりますよ。

さて、ここで開発基盤についてはもう一つ考えておかなければならないことがあります。今のご時世、すべての開発が Visual Studio でビルドできるとは限りません。また、開発基盤では自動ビルド (継続的インテグレーションなど) を行う必要もありますので、今、そして近い将来くらいを考えた上で最前な開発環境を整えておくことを考えましょう。

iOS や Android のアプリも作るし、RoR の案件もある、Herok へのデプロイもあるといった事情の中で、より開発者、開発チーム、そして、企画から運用に至るまでのコンセンサスをとるための開発基盤というのは考えるスコープも広げて検討する必要がでてきます。

例えば、一過性の単発プロジェクトであっても、適当に環境やツールを揃えればいいのではなく、その開発習慣が他のプロジェクトでも活かせるか?開発者にとって過度の負担を与えることにならないか?といったことを考えていかないと今の時代にもとまられる開発チームの資質を満たすことができなくなりつつあります。

また、今回の案件は、.NET / Windows プラットフォームだけだったからといって、安易に環境を選定してしまうと、他のプラットフォームでの案件をこなしているチームと整合性が取れなくなってきますし、人財の流動性にも影響を及ぼしてきます。

例えば、アトラシアンの製品は、ここに強力な支援を提供してくれますし、それらがつながる仕組みをすでに持っています。アトラシアン製品で以下を組み合わせれば、今、押さえておかなければならない開発技術とプラットフォームをほぼほぼカバーしているとってもいいでしょう。

  • JIRA: バックログ管理、タスクやバグ、プロジェクト運営上の課題の追跡と管理
  • Stash / Bitbucket: 分散バージョン管理の基盤。Stash はオンプレミス環境での Git の包括管理、Bitbucket は Git と Hg のホスティング環境
  • Bamboo: 自動ビルドと自動デプロイ、リリース管理。Windows, Mac OS X, Linux, Amazon EC2 に対応したビルドエージェントでビルドを実行できる。定義済みのタスクのくみ合わせでビルドワークフローを決定、遂行できる
  • IDE Connector: Visual Studio や Eclipse, IntelliJ IDEA に対応した JIRA と Bamboo のインターフェイス
  • SourceTree: Git, Hg の Windows, Mac OS X のクライアント

また、これらは、一つ一つとサードパーティでの接続にも柔軟に対応しているのが特徴です。例えば、デファクトとも言える、JIRA と GitHub を組み合わせてもいいですし、JIRA, Stash と、Jenkins を組み合わせてもいいです。これからの時代は、時代のニーズに合わせた開発環境を柔軟に構築できることも必要となってきます。Visual Studio のエディションだけではなく、開発基盤として何を持つべきか、開発チームの資質が問われています。

最近では、ライフサイクルを包括して運営できる開発環境もリーズナブルになってきています。一昔前までは高価でそれこそ予算が潤沢な現場でしか手に入らなかった環境が、あらゆる開発現場で導入できるほどになってきています。その事実を知らないことはもはや現場の資質として許されなくなりつつありますね。アトラシアンの製品は、10ユーザーが10ドルで使えるスタータープログラム(売り上げは全額チャリティーへ)を用意しています。無料で使える製品やサービスも豊富です。



あなたは、どんな開発環境を使いたいですか?あなたは、あなたの創ったソフトウェアを活かしてもらいたいですか?