Home English

Kuina-chan

くいなちゃんOct 17, 2017


6さいからのプログラミング」第14話は、基本編の最終回です。

第13話までで、どのプログラミング言語を使う場合にも役に立つ基礎知識を一通り解説してきました。 最後に基本編の締めくくりとして、世の中の実際のプログラムがどのように作られているのかを紹介します。

世の中のプログラムに使われる技術

世の中のプログラムに使われる言語や技術は流行り廃りが激しいため、ここで紹介するものも今後時代遅れになるかもしれません。 しかし未来とは全く新しいところから湧くのではなく、常に今の積み重ねで現れますので、どういう流れなのかを把握しておくと新技術にも適応しやすくなるでしょう。

Windowsプログラム

Windows上で動く、ウインドウやボタンで構成されたツール系アプリは、かつては「Visual Basic」や「Delphi」といった言語で作られていましたが、現在では「Visual Studio」というアプリを使って「C#」で作られることが多いです。
これらの言語ではいずれも、視覚的にウインドウ上にボタン等を配置して、「このボタンが押されたときにこの処理を行う」という内容を組み合わせてプログラムを作成します(イベントドリブン)。
イベントドリブン
イベントドリブン
図のプログラムは、ボタンが押されたときに「Hello, world!」と表示するC#のソースコードです。
このように「○○されたとき××を行う」という組み合わせでプログラムを作ることを「イベントドリブン」といいます。
C#で作成したプログラムは、「.NET Framework」と呼ばれる一種の仮想マシンの上で動作します(仮想マシン)。
仮想マシン
仮想マシン
.NET Frameworkは、ウインドウやボタンを作成する機能などが詰まった便利なプログラム群で、OSの上に構築されています。 C#などで作る各アプリは、.NET Frameworkを利用することでプログラムを簡単にすることができます。
ただし何らかの理由で.NET Frameworkを使いたくない場合は、C++を使ってOSと直接やりとりするプログラムを書きます。 この方法は比較的大変で、例えばC#であればVisual Studio上で1行もプログラムを書くことなくウインドウが表示できますが、C++ではウインドウを表示させるだけでも50行ほど書く必要があります(C++でウインドウを表示させるプログラム)。
C++でウインドウを表示させるプログラム
C++でウインドウを表示させるプログラム
Mac OSやLinuxなど、Windows以外のOSでも動作させる場合は、Javaなどの言語で作られることもあります。

ゲームプログラム

次はゲームプログラムについてです。 高度なグラフィックスのゲームを作るには、計算がCPUだけでは処理しきれないため、グラフィックスの計算に特化した「GPUジーピーユー」という装置を併用します。
GPUはプログラム中から「OpenGLオープンジーエル」もしくは「DirectXダイレクトエックス」などのソフトウェアを通じて操作します。 また、GPUはCPU向けの機械語を読み込めないため、CPU向けのプログラムとは別に、GPU専用の「シェーダ」と呼ばれるプログラムを作る必要があります。
シェーダはC言語などで書くことはできず、シェーダ専用の言語で書かれます。 現在では、OpenGLであれば「GLSLジーエルエスエル」、DirectXであれば「HLSLエイチエルエスエル」などの言語で書かれるのが一般的です。
ゲームプログラムはゲームプログラムのように、主に「CPUの処理→GPUの処理→画面に表示」のサイクルを何度も繰り返すことで実行されます。
ゲームプログラム
ゲームプログラム
このサイクル1回分のことを「1フレーム」と呼び、一般的なゲームでは1秒間に60フレームもしくは30フレーム実行されることが多いです。
最近ではゲームをプログラミング言語で一から作るのではなく、ゲームを容易に作ることができる「Unityユニティ」などの「ゲームエンジン」と呼ばれるソフトウェアが利用されることも多いです。 ゲームエンジンを利用するとC++で一から書くよりも簡単に作れますが、作れるものには限界があるため、より高速で凝った処理をしたい場合にはC++などで作られます。

Webプログラム

次はWebプログラムについてです。 Webサイトは、サーバで処理したWebページを閲覧者の端末に送って、Webブラウザ上で表示する仕組みです。 このため、サーバ側とWebブラウザ側との両方でプログラムを動作させることができます(Webプログラム)。
Webプログラム
Webプログラム
サーバ側は「Perlパール」「PHPピーエイチピー」「Pythonパイソン」「Rubyルビー」などの言語で書かれることが一般的で、アクセスのたびに異なるWebページを生成することができます。 例えばサーバ側で生成した現在日時の現在日時は、このWebサイトのサーバ上で生成しており、アクセスするたびに変化します。
"Oct 17, 2017 - 10:48:41"
サーバ側で生成した現在日時
Webブラウザ側は、かつては「Flashフラッシュ(ActionScriptアクションスクリプト)」と呼ばれる技術も広く使われていましたが、現在では「JavaScriptジャヴァスクリプト」が主流になっています。 これらはWebページに埋め込まれて送信され、閲覧者の端末上で動作するため、閲覧者がページを読み込み直さなくてもページを更新することができます。 例えば、Webブラウザ側で生成した値の値はあなたの端末上で生成して更新しています。
""
Webブラウザ側で生成した値

組み込みプログラム

次は組み込みシステムについてです。 PCのような汎用的なコンピュータではなく、炊飯器に組み込まれたコンピュータのような、特定の目的に特化したハードウェアとプログラムを合わせたものを「みシステム」といいます。
組み込みシステムのプログラムでは、限られたハードウェア資源を効率良く活用することが要求されます。 そのため、時にはプログラムの読みやすさを犠牲にしてでも処理効率が良くなるように工夫したり、アセンブリ言語で書く必要が生じることもあります。
組み込みシステムはPCとは違い、ハードウェアの設計から開発者が行えることが多いため、ソフトウェアでの工夫に限界があるときはハードウェアの工夫で補うことができる自由さがあります。 逆に、あまりに負荷の大きいプログラムを書くと発熱が問題になるなど、ソフトウェアがハードウェアの制約に縛られることもあります。

複数人開発の手法

さて、ビジネスなどにおいてプログラムの多くは複数人で開発されますが、全員が理解できるプログラムを維持したり同じ目標を共有しなければ破綻するため、個人制作とは違った難しさがあります。
また大規模開発になると、プログラムのすべてを読むことがほとんど不可能になるため、いかにプログラムの一部を理解して編集し、バグを多く発見するかといった方法が求められます。 これらは「ソフトウェア工学こうがく」という分野で研究が進んでおり、(実際にはしばしば妥協されますが)現実的に有用そうだと思われる範囲で開発に採り入れられます。
複数人で大規模開発を行う際によく用いられる手法を、複数人開発の手法に挙げました。
  • コーディング規約
  •  誰が書いても同じようなソースコードの見た目になるように、「コーディング規約きやく」と呼ばれる書き方のルールを定めます。 例えば、「関数名の先頭は大文字にする」など。
  • 仕様の明文化
  •  機能ごとに、それがどういう機能であるかというルールを文書化します。 これらのルールを「仕様しよう」と呼びます。 機能を実装する人は仕様を満たすように制作し、機能を利用する人は仕様を信頼して使うことで、バグがあった場合に責任の範囲を明確化できます。
  • テスト
  •  作成したプログラムが正しく動作するかについて「テスト」を行います。 テストの手法には、各機能ごとに行うものから、全機能を統合して行うものまでいろいろあります。
  • その他
  •  このほか、開発者全員の目標をすり合わせるための手法や、短期間で素早く開発するための手法など、世の中の動向の変化に伴い新しい手法が提案され続けています。
複数人開発の手法

関数型言語とマルチパラダイム

最後に、第3話で触れた「関数型言語」が世の中でどのように使われているかを紹介します。
LISPやHaskellなどの関数型言語は、研究用途で使われることはありますが、実用的な製品を関数型言語のみで作ることは多くありません。 その理由は関数型言語での開発方法があまり確立されていないことや、C++などの広く浸透している言語が使われる前提で世の中が進展していることなどがあります。
ただし関数型言語には関数型言語の利点がありますので、部分的に利用されることはあります。 その方法には、関数型言語で作った部品をC++などで作った部品と組み合わせて作る方法と、C++などの言語そのものに関数型の機能を取り入れて使う方法があります。 後者のような、「オブジェクト指向」と「関数型」のような複数の概念を組み合わせた言語を「マルチパラダイム言語げんご」といいます。

次章以降

以上で、全14回にわたる「6さいからのプログラミング」の基本編はおしまいです。 ここで得た知識は、これからどのような言語を使ってどのようなプログラムを書くときにも直接役立つはずです。 お疲れ様でした。
ここから先は、各分野のプログラムをチュートリアル形式で実際に作りながら解説しますので、学習したい分野の章に進んでください! >目次へ
1508204921ja