開発者と開発環境のいまむかし

2016年8月1日(月)
沖 勝(おき まさる)

はじめに

昔から、よく「開発者はハードウェアに弱い」「ハード屋はソフトウェアに弱い」などと言われることが多かったようだ。真偽のほどは明らかでないが、実際にいろいろなところで話を聞くと、やはり開発者で「ハードウェアが苦手」と感じている層がある程度いるように感じられる。

そこで本連載では、開発者向けに近年のハードウェア事情から各種パーツ詳解、開発のためのPC環境作り等について、基礎から解説していく。

本連載における「開発者」とは

「ソフトウェア開発」という業務がある。この業務に携わっている人はとても数多く、いま本稿に目を留めていただいているあなたもそうかもしれない。基幹システムのソフトウェアの場合、規模で言えば1人でシステム全体の細部を一手に担当するようなことはなく、巨大なシステムのごく一部の開発を担当していることもあるだろうし、ベンチャー企業で1人何役もこなしつつ目的に特化したシステムをイチから組み上げる人もいるだろう。

あるいはスマートフォンやタブレットのアプリを書いている、既存のOSS、例えばPythonやRubyといった言語処理系とそれらを用いたライブラリ、あるいはアプリケーションを組み合わせて目的の機能を実現するRaspberry Pi(図1)のようなIoT(Internet of Things)で利用するマイコン機器を制御するプログラムを書いている、クラウド上で動作するWebサービスを作っている、といったように、ひと言で「ソフトウェア開発」とまとめてしまうには業務内容が多彩なのである。

図1:筆者所有のRaspberry Pi Zero

また、業務でなくても趣味で日曜プログラミングを楽しんでる人もいるだろうし、ソフトウェアについて勉強している学生もいる。学生は計算機科学のような理論を積み上げたり、ロボットを制御するプログラミングをしたり、あるいは本来の研究目的のために手段としてプログラムを書かざるをえなかったりする。本連載はこのようにプログラミングに近いところで日常生活を送っている人だけでなく、「プログラムなんて書いたことはないけど、これから勉強してみたい」という意欲ある人、「自分でプログラムなどは書かないけれども、どういうものかを知っておきたい」という知識欲のある人にも興味を持ってもらえれば幸いである。

開発ターゲットと開発環境

昔から「コンピュータ、ソフトなければただの箱」などと言われ、ノイマン型コンピュータの動作にはソフトウェアが不可欠なわけだが、果たして逆はどうだろうか。コンピュータがなくてもソフトウェアを動作させることはできるだろうか? 屁理屈を言えば「イエス」である。プログラムリストを用意して最初に動くべきところから人間が読み始め、書かれている動作に従って読み進めていく「机上トレース」と呼ばれるデバッグ手法は、「人間がコンピュータの代わりにプログラムを実行しているようなもの」と解釈できる(強引ではあるが)。

現在主流のクラウド上でプログラムを動かすとき、実際にそれを動かしているコンピュータを目にすることはないし、場合にもよるがコンピュータハードウェアの存在を全く意識せずに済むこともあるだろう。しかし、実際には人間がプログラムを読んでいるのであれば「人間がコンピュータの役割を果たしている」と言えなくもないし、当然ながらクラウドの向こう側には何らかのコンピュータリソースが存在している。つまり、ソフトウェアの実行にはコンピュータハードウェアが不可欠なのだ。

では、ソフトウェアの開発環境はどうだろう。大昔にはまず手書きで紙にプログラムを書き、それを紙テープやパンチカードといった媒体に入力してコンピュータにプログラムを読み込ませて実行していた。紙やパンチカードといったメディアに対する筆記具やカード穿孔機が開発環境と言えるかもしれない。

実際に筆者が学生の時分、FORTRAN言語のプログラミング演習で、まず80桁のマスが並んだ紙に手書きでプログラムを1行1行丁寧に(?)記入し、それを見ながらカード穿孔機を使ってパンチカードを作成していた。パンチカードは横長の紙で、1文字を2進数で表した時の1と0を紙に穴を開けたり開けなかったりすることで表現し、1枚で1行を表現できる。打ち込みミスは即カードの廃棄だ。完成したFORTRANのプログラムはパンチカードの束となり、実際にコンピュータ上で動かす際は実行すべきジョブを指示するカードをパンチカードの前後に置き、まとめてカード読み取り機にセットしていた。このようなとても古典的な環境では、開発環境にコンピュータを使っていなかったと言えるだろう。

ソフトウェアとハードウェア

昔話はさておき、現在のソフトウェア開発環境ではコンピュータが不可欠である。今でも設計時にフローチャート(図2)などを手書きしているところがあるかもしれないが、多くはコンピュータで動作する作図ソフトを使用するだろうし、プログラミング言語を駆使して実装する際にはコンピュータ上でVisual StudioやEclipseのようなIDE(Integrated Development Environment:統合開発環境(図3)、あるいはEmacsやVimのようなテキストエディタ(図4、図5)を動かすだろう。世の中にはマウスで部品を配置するようにプログラムを組む「ビジュアルプログラミング言語」といったものもある。

図2:フローチャートの例。実際にこんな簡単なものはあまりない

図3:メジャーな統合開発環境(IDE)のEclipse。カーナビではない

図4:テキストエディタEmacs。Linux使いにはなじみ深い

図5:テキストエディタVim。Viaから派生した高機能なエディタだ

いずれにせよ、私たちがソフトウェアを開発する際、開発ターゲットとしてのコンピュータとは別に、開発環境としてのコンピュータは必須のハードウェアなのだ。

開発環境=生活環境?

ソフトウェア開発環境としてのコンピュータハードウェア。ピンキリである。現在は「パーソナル」コンピュータを通り越して、スマートフォン(図6)という名で1人1台以上コンピュータを持つ時代がやってきているが、スマートフォン「で」開発をしているという人は明らかに少数派だろう。

図6:言わずと知れたAppleのスマホiPhone。みんな持ってる

昔、まだコンピュータリソースが高価だったころは、大学などに設置されている高速な電子計算機を時間単位で借りて使っていた。今でもビルドに使うマシンや環境は複数人で共有しており、いつでも自由には使えない、といったところもあるだろう。また、開発ターゲットの種類によってはSDK(Software Development Kit:ソフトウェア開発キット)を動作させるための環境(ハードウェアやOS等)を限定している場合もあり、指定された機器やバージョンの通りにしないとうまく動作しないといったトラブルに巻き込まれることもある。

実際のところ、現在はソフトウェアを開発するとき、リースあるいは購入したPCを開発環境として使っていることが多いようだ。Web閲覧などに用いる生活環境としてのPCと開発環境としてのPCに同一のものを使用するケースもある(図7)。中には「BYOD」と呼ばれる私用PCの業務利用を許可する企業もあり、使われるPCがどのようなものであるかは様々だろう。

図7:筆者の愛機。生活環境と開発環境で同一のPCを使っている

今回は連載第1回として、本連載の読者対象と開発者・開発環境のいまむかしについて見てきた。大よそ、筆者がどのような開発者人生を送ってきたのか、その一部が垣間見えたのではないだろうか。

次回以降からは、開発環境としてのPCハードウェアについて私見を述べていきたい。少しでもハードウェア嫌いな開発者のために克服の機会になればと思う。

著者
沖 勝(おき まさる)
株式会社インターネットイニシアティブ
前職時代は「沖@沖」と名乗り、X68000用のフリーソフトウェアを発表していた。2001年より株式会社インターネットイニシアティブに勤務、自社開発の高機能ルータSEIL(ザイル)の開発に従事し、OS移植やデバイスドライバ開発などに携わった。2013年よりオープンソースソフトウェアLagopus(ラゴパス)の開発に従事、パケット処理機能の設計及びプログラミングを担当している。

連載バックナンバー

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

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

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

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