私たちが何気なく使っているソフトウェアはどのように開発されているのか?
PCを使うときもスマートフォンを使うときも、常にソフトウェアを開いて何かしらの操作を行います。そもそもPCやスマートフォンを動かすOS自体もソフトウェアなので、常にソフトウェアの恩恵を受けているといえますが、ソフトウェアが実際にどのような方法で作られているのかは、現場の開発者以外にはわかりにくいもの。そんな意外と知らない「ソフトウェアはどのように開発されているのか?」について解説したムービーが、YouTubeで公開されています。
How Software is Made
ソフトウェアとして知られているコンピュータープログラムは、「1」と「0」の組み合わせで構成されています。これはバイナリと呼ばれ、唯一コンピューターが理解できるものです。
では、私たちはソフトウェアのアイデアから、いったいどのようにしてバイナリを作り上げるのでしょうか。
バイナリを自分で書くのはあまりにも面倒で時間もかかるため、普通はソースコードというものを利用します。
ソースコードは少しの練習を重ねた人間なら読むことができる、コンピューターへの指示書のようなもの。
ソースコードは多くの「プログラミング言語」という専用言語によって書き込むことができ、現在使われているプログラミング言語にはJava、Python、Rubyなどがあります。
これはプログラミング言語の一つ「C++」によって書かれたソースコード。このプログラムは、コンピューターのディスプレイに「Hello World!」と表示するだけの簡単なもの。
このソースコードをコンピューターで実行するには、ソースコードをコンピューターが読み取れるバイナリに変換しなければなりません。ソースコードをバイナリに変換するプロセスのことを「コンパイル」と呼びます。
コンパイルが正常に実行され、ソースコードが0と1で構成されるバイナリに変換されれば、コンピューターでプログラムが実行されます。
ところが、スペルミスがあったり、必要な記号がなかったりするとコンパイルが失敗し、コンピューターはプログラムを実行できません。
簡単なプログラムは1人のプログラマーでも開発可能ですが……
大規模なプログラムになると、数百人のプログラマーが並行して作業に取りかかり、完了するまでに数年を要する場合もあります。
大規模なプログラムは通常、数百から数千の「ファイル」に分割されます。それぞれのプログラマーがファイルを分担し、共同作業によって一つのプログラムを完成させるのです。一緒にプログラムを作り上げるプログラマーたちにとって、互いの協力は必要不可欠なもの。
大規模なプロジェクトの管理には、「バージョン管理システム」と呼ばれるシステムが採用されています。バージョン管理システムでは、プログラマーが作成する全てのソースコードをサーバー上に格納。
それぞれのプログラマーは自分のデスクでプログラムを作成し、ファイルごとに変更を加えていきます。
プログラマーたちは定期的に変更を加えたファイルをサーバーに提出し、サーバーはいつ、誰が、どのようにファイルを変更したのかについて、詳細な記録を残してリスト化します。
ある時点で全体のプログラムに異変が起きた場合、プログラムが正常に動作するまで、開発者が変更をキャンセルすることができます。ファイルの問題点を解決し、訂正後のファイルを提出して異変がなければOK。
ソフトウェアの開発段階でも、異常がないかのチェックはしっかりと行われていますが、どうしても製品のリリース後に異常が見つかることは避けられません。それが通常「バグ」と呼ばれるソフトウェア上の欠陥。
リリース後もソフトウェア開発者は発見されたバグを修正し、継続的にソフトウェアを改善していく必要があります。これがソフトウェアのバージョンが何度も更新される理由です。
ソフトウェア開発の方法は、大きく2つのパターンに分けることができます。1つは「プロプライエタリ・ソフトウェア」といい、個人または企業が営利目的で開発するソフトウェア。ソースコードは公開されず、完成品のみがユーザーに届けられるため、「こうして欲しい」「ここを変更して欲しい」という要望が実現されるには時間がかかります。
もう1つは「オープンソース・ソフトウェア」。これは通常無料でサービスがユーザーに提供され、誰でもソースコードに対してアクセスできるようになっています。
有名なオープンソース・ソフトウェアにはメディアプレイヤーのVLC、画像編集ソフトのGIMP、ブラウザのFireFox、音声編集ソフトのAudacityなどがあります。
オープンソース・ソフトウェアの開発者たちには金銭的報酬を支払われないことが多く、上質なソフトウェアへの情熱だけを持って開発に携わっています。
オープンソース・ソフトウェアのダウンロードサイトやホームページには、しばしば「開発者に寄付をする」という項目が存在します。多くの人が無視してしまう「開発者に寄付をする」の欄ですが、たとえ完成品が無料で手に入るものであっても、彼らの献身的な情熱に報いるため、寄付システムは欠かせないものです。
・関連記事
「バービーのプログラミング教室」でバービーが子どもたちにプログラミングを教えることに - GIGAZINE
世界各地に散らばったエンジニアをまとめ上げる方法 - GIGAZINE
「Windows 95の画期的なユーザーインターフェースはどのようにして開発されたのか」を詳細にまとめた論文 - GIGAZINE
iOSのコアとなるソースコードの一部「iBoot」がネットに流出、「史上最大のリーク」との指摘も - GIGAZINE
エンジニアのスポーツ「競技プログラミング」を実際に体験してみた - GIGAZINE
・関連コンテンツ