開発環境としてのハードウェア、開発マシンについてのイロイロ

2016年8月18日(木)

はじめに

ソフトウェア開発環境として使われている、あるいはこれから使おうとしているコンピュータ。いろいろな種類があり、予算や配置場所などで選択の余地がないこともあるが、そもそも「どのような種類」があり、「どのような方針」で選ぶべきなのだろうか。

選択肢に幅があるものとして、ざっと紹介してみよう。

宅内環境の一例

昔から現在に至るまで、最も入手が容易で開発にも十分使えるコンピュータと言えば、いわゆるWindowsが動作するパソコン(PC)だろう。その種類は、大まかに「ノートブック」と「デスクトップ」に分けることができる(図1)。

図1:ノートブックとデスクトップ。写真のデスクトップ機は退役したもの

近年では、これらに加えてNUC(Next Unit of Computing)のように小サイズのPC(図2)や、タブレットのようにキーボード操作を前提としないPCも出てきている。

図2:GIGABYTEのNUC「BRIX」。展示デモなどで活躍している

一般的な例とは言えないかもしれないが、筆者の開発環境では複数台のPCを使用しており、有線あるいは無線LANを用いて相互の通信を可能としている。本稿執筆時点での筆者の開発環境を含む宅内機器の概略図を図3に示す。

図3:筆者の宅内環境。実は図に書かれていない機器がいくつも存在する。電気代のことは見なかったことにする

また、筆者が個人で購入・利用している開発環境のメインマシンは、自作のデスクトップPCだ(図4)。スペックは表のとおりである。

図4:筆者の開発環境用自作デスクトップマシン

表:筆者のデスクトップPCスペック

種類 スペック
CPU Intel Xeon E3-1231v3 (4Core 8Thread; 3.4GHz)
MotherBoard ASRock Rack E3C226D2I (Mini-ITX form factor)
RAM DDR3 16GB (SO-DIMM 8GB x 2)
Storage SSD 128GB
Chassis SliverStone SG05-450 (Mini-ITX)/td>
Power Unuit SFX 450W

有線LANはGbE(Gigabit Ethernet)で、ゲートウェイマシンを経由してNTTのフレッツ光回線でインターネットに繋がっている。また、このPCにはモニターやキーボードなどのHID(Human Interface Device)を接続していない。OSはLinux distributionの1つであるUbuntuを動かしていて、通常は外部からSecure SHell(ssh)でログインし、ターミナル環境を用いて開発するスタイルをとっている。

なお、外部からログインするためフロントエンドにはモニターやキーボードを接続したマシンを別に用意している。現在は主にCore i5を搭載したデスクトップマシンとCore m5を搭載したノートブックを利用している。

その他にも、テスト用のマシンとして8コアAtomを載せたマシンやBayTrail搭載マシンなどがあり、スイッチングHUBを介してそれぞれを有線LAN接続している。

本当に多くのマシンは必要なのか

さて、ここまで読んで、皆さんには「なぜそんなにマシンがあるの?」「本当に必要なの?」といった疑問を持たれたことと思う。

実際のところ「最小限の開発環境を整える」という意味では、ここまで多くのマシンを用意する必要はまったくない。基本的にデスクトップあるいはノートブックが1台あれば開発(プログラミング)自体は可能だ。

では、なぜ筆者の環境はここまで複雑になっているのか。それは筆者の業務にも関わる大きな理由があるのだ。

現在の筆者の主な開発ターゲットCPU/OSはLinux x86である。セルフビルドが可能なことから、メインの開発マシンはソースコードの編集・バイナリのビルド・テストを実行できるようにしている。そこへのアクセス手段として用意しているCore i5デスクトップおよびCore m5ノートブックでは、普段から使い慣れているWindowsが動作している。

外出時にアクセスが必要な際はノートブックからインターネットを経由して一度ゲートウェイマシンに接続し、そこを踏み台として開発マシンへアクセスする、という手段をとっている。

また、Core i5デスクトップマシンはリモートデスクトップ接続を有効にしているため、必要があれば外出先からデスクトップ画面を操作できるようにしているのだ。

その他のマシンの多くは開発というよりCPUの違いによる挙動の差を検証するためのマシンだが、「単に動かしてみたかった」という筆者の欲の結果でもあり、開発環境が生活環境を兼ねることから、開発マシンと生活マシンを分けた結果として台数が増えたとも言えるだろう。

マシンを選択する基準

ここまで筆者の例を示したが、何はともあれ「開発ができればなんでもいい」というのが実際のところである。とは言え、「Windowsタブレットで開発!」などというのはお勧めしづらい(開発ターゲットがタブレットそのものであればデバッグ時にタブレットで開発するのもアリかと思うが)。

どのような開発を行うにしてもマシンにはそれなりのメモリやストレージが必要となるため、容量の制約が少なく比較的安価に入手でき、紛失・盗難の危険度の差からデスクトップを選ぶも良し、「場所を選ばずに開発できる」という利点を生かすためにノートブックを選ぶも良し、筆者のように開発マシンとは別にフロントエンドのマシンを用意するのも良いだろう。

中には1U(1Uとはいわず2U、4Uでも良いが)ラックマウントサーバー(図5)を用意している場合もあるだろう。ただし、ラックマウント機器はサーバールームなどに置かれることを想定しており、一般家庭やオフィスでの利用を想定していないのもある。

図5:DELL製ラックマウントサーバー。厚みはないが大きくファンもうるさい

また、特に1Uラックサーバーは空冷ファンの口径が小さく、回転音がかなりやかましい。「独身貴族で1人暮らし、防音は完ぺき」という部屋に住んでいるなら話は別だが、周囲への配慮を考えるとラックマウント機器は選択しづらいだろう。

その他の選択肢としてはMacだろう。Mac用のソフトウェアを開発するのであれば、最低1台はテスト用のMacが必要になるため、テスト環境と開発環境を兼ねてMacを選ぶのは自然な選択と言えるだろう。

もちろん、好みや趣味でMacを選ぶ人も数多くいる。実際にソフトウェア開発者向けの勉強会に参加すると、MacBook(AirやProも含む)を持っている参加者が数多くいたりする。また近年では「スターバックスの窓際席でMacを開く」ことが1つのステータスになっている向きもある。

物理マシンと仮想マシン

ここまで物理的なハードウェアについて書いてきたが、「仮想マシン上に開発環境を構築する」という手段もある。その利点は、筆者のように物理マシンをたくさん並べなくても、複数のOS(例えばDebianやFedoraといった複数のLinux distribution)におけるビルドやテスト環境を構築できる(図6)、仮想マシンイメージをコピーすれば複数(人)の開発環境を用意する手間を省ける、開発環境と生活環境を明確に分離できる、周辺ハードウェアの種類や数を(実際にハードウェアを購入することなく)カスタマイズできるといったことが考えられる。

図6:生活環境にインストールされたVirtualBox。臨時の開発環境となっている

また、開発環境の構築ミスによるトラブルシュートに時間をかけなくて済むのも大きな利点だろう。開発ターゲットによってはSDK(Software Development Kit)として開発環境の仮想マシンイメージを提供しており、必然的に仮想マシンを使用しなくてはならないケースもある。いずれにしても仮想マシンの動作に必要なメモリやストレージなどを十分に確保できるよう、物理マシンのスペックに注意する必要がある。

特に物理マシンのプロセッサの仮想化支援機能(Intel VT-xやAMD-V)の有無で仮想マシンの速度も違ってくるので、導入の際には注意しておこう。

ソフトウェアに合わせてハードウェアを選ぶ

先ほども少し取り上げたが、開発ターゲットによって提供されるSDKが仮想マシンイメージならば簡単だが、イメージではなくインストーラパッケージで提供され、インストール先のOSなども指定されているケースがある。

仮想マシン上に構築するならば対応できなくもないが、むやみに推奨されない普段使いのOS上にインストールすると、いらぬトラブルに襲われることが多い。指定されたソフトウェアパッケージやバージョンを合わせておかないとSDKがちゃんと動かないこともよくあるが、場合によっては同じようにハードウェアも選ぶ必要が出てくるかもしれない。

例えばx86用ソフトウェアをセルフビルドする場合、プロセッサにSSE 4.2のサポートが必要といった制約があれば、古いプロセッサを搭載したマシンを開発環境にすることはできない(仮想マシンでエミュレートさせる場合は可能といえば可能)といったケースだ。

開発環境へのアクセス手段

「ノマド」という言葉を聞いたことはあるだろうか。近年のIT系ワークスタイルの1つで、決まった場所(例えばオフィス)にこもって仕事をするのではなく、カフェなどのいろいろな場所で仕事をするというものだ(図7)。

図7:ノマドと言えばカフェ(?)。筆者は主に原稿執筆と、まれにトラブルシュートをする

2016年現在の日本では、誰もができるものではない。スターバックスでMacBookを広げている人を見かけることがあるが、もしかするとノマドかもしれないし、単にレポートを書いている大学生なのかもしれない。

ともあれ、もし仮にカフェで開発作業を進められるとしたら、開発環境へのアクセスをどうすべきだろうか。もちろんノートブックに開発環境が入っていれば作業できるが、モノによっては開発環境が持出禁止だったりすることもあるだろう。

あるいはオフィスや自宅では使い慣れたデスクトップで作業して、外出先ではノートブックを使いたいといった場合には、開発環境へのアクセス手段が必要となる。筆者は冒頭で書いたようにフレッツ光回線でインターネット接続されているゲートウェイマシンを踏み台にしているが、VPN(Virtual Private Network)接続で外出先からあたかも開発環境のLANへ繋がっているように作業できるネットワーク環境が構築されていることもある。

実際の現場では、ノマドも禁止、外出先からの臨時アクセスも禁止、オフィスに行かないと開発環境にアクセスできない、そんな環境も普通に数多く存在する。

まとめ

今回は、開発環境におけるハードウェアの選択について「どのような種類」があり、「どのような方針」で選ぶべきなのかを解説した。ひとくちに「開発環境」「開発マシン」と言っても、さまざまな選択肢が存在することを分かってもらえたと思う。

次回はもう少し深堀りして、主に物理マシンを構成する各種コンポーネント(CPUとチップセット、メモリ)について解説していく。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています