連載
.NETの動作原理を基礎から理解する!

第1回 .NETアプリケーションを動かす土台

デジタルアドバンテージ 一色 政彦
2005/06/04
Page1 Page2

 本連載では、新たに.NETで開発を始めようとしている新人プログラマを対象に、.NETアプリケーションが動作する仕組み、つまり「.NETの動作原理」について解説する。

 もちろん、有能なプログラマや優秀なアーキテクトを目指している読者は、これまでも普通の人よりはコンピュータを使ってきただろう。だから、メール・ソフトやブラウザなどのアプリケーションはある程度思いのままに操れるし、Windows OSのトラブルにも何とか対処できる自信があるに違いない。

 しかしこれからは、そのような「ソフトウェアがうまく使える能力」を磨くだけでは済まなくなる。これからは、「普通の人に役立つ、面白くて、便利で、使い勝手の良いソフトウェアを開発するための能力」を伸ばしていかなくてはならないはずだ。

 「そのために、まずは.NET開発を極めたい。それにはプログラムが実行される仕組み、とりわけ.NETの動作原理の基礎はきちんと学んでおきたい。」

 本連載は、そういう熱意のある新人開発者のための記事である。

 本連載は、次のような構成で進める予定である。

第1回 .NETアプリケーションを動かす土台(パソコンとOSの動作原理)
第2回 .NETアプリケーションが起動する仕組み(Windowsローダーの働き)
第3回 .NETアプリケーションが実行される仕組み(CLRの動作原理)

 今回は、「パソコンとOSの動作原理」について解説する。それぞれの項目を解説する際には、あまり難しくなりすぎたり、細かくなりすぎたりしないように気を付け、なおかつ基本はきちんと押さえた記事にしていきたい。どうか、連載終了(恐らく3回)までお付き合いいただければ幸いである。

Windowsプログラミングの歴史的変化

●Windows OSの普及と進化

 1995年11月23日。この日、Microsoft Windows 95(日本語版)の発売が開始された。それから今日まで、約10年の歳月が流れたことになる。その間、Windowsというオペレーティング・システム(OS)を利用するコンピューティング環境は、個人、企業、産業を問わずに、急速にかつ幅広く普及した。マイクロソフトは、この10年という年月の流れの中で、Windows OSのバージョンアップを繰り返しながら、機能やユーザビリティ(=使い勝手)、パフォーマンス(=性能)、セキュリティ(=安全性)などを大きく向上させてきた。

【コラム】Windows OSの歴史

 次の表にあるように、これまでマイクロソフトは、新しいバージョンのWindows OSを次々と市場に投入してきた。1995年より以前のバージョンについては、「@IT:Insider's Computer Dictionary [Windows]」を参照してほしい。なお、本表にある「クライアントOS」とは、一般的なユーザーが利用することを目的としたOSを意味し、「サーバOS」とはWebサイト構築やファイル共有などの目的で複数のクライアントからアクセスされることを目的としたOSを意味している。

OS名 発売日 説明
Windows 95 1995年11月23日 クライアントOS。MS-DOSなしで利用できる32bit対応OSだが、内部には旧来使われていた16bitカーネルが残されており、システムの安定性に弱いところがある(この系統のOSを、以降では「Windows 9x系」と表記)
Windows NT Server 4.0 1996年12月10日 サーバOS。完全な32bit対応のOSとして、Windows 9x系とは別に新規開発されたWindows OSで、セキュリティやシステムの安定性に優れている(この系統のOSを、以降では「Windows NT系」と表記)
Windows NT Workstation 4.0 1996年12月10日 上記Windows NT 4.0のクライアントOS。OSとしての基本機能や信頼性などはサーバ版と共通
Windows 98 1998年7月25日 Windows 9x系のクライアントOS。Windows 95のメジャー・バージョン・アップ
Windows 98 SE 1999年9月10日 Windows 9x系のクライアントOS。Windows 98のマイナー・バージョン・アップ
Windows 2000 Server 2000年2月18日 Windows NT系のサーバOS。Windows NT Server 4.0のメジャー・バージョン・アップ
Windows 2000 Professional 2000年2月18日 Windows NT系のクライアントOS。Windows NT Workstation 4.0のメジャー・バージョン・アップ
Windows Me 2000年9月23日 Windows 9x系最後のクライアントOS。Windows 98のメジャー・バージョン・アップ
Windows XP 2001年11月16日 Windows NT系のクライアントOS。Windows 2000 Professionalのメジャー・バージョン・アップ
Windows Server 2003 2003年6月25日 Windows NT系のサーバOS。Windows 2000 Serverのメジャー・バージョン・アップ

 もちろん進化したのはOSだけではない。そのOS上で動作する個々のアプリケーション・ソフトウェア(以降、アプリケーション)も同様に進化してきた。例えば、インターネット上のWebサイトを参照するための「IE(Internet Explorer)」などは、これまでにもたびたびバージョン・アップしてきたのだ。

●Windowsにおけるプログラミング環境の変遷

 Windows 95が登場したころのアプリケーションは、Windows OSが提供するAPI(Application Programming Interface:アプリケーションをOS上で動作させるためのインターフェイス。APIは、例えば「ファイルを開く」といった1つの機能をアプリケーションに対して提供するもの)である「Win32 API」を用いて開発することが一般的だった*1

 しかしWin32 APIは、Windows OSと密接に結び付いているため*2、Windows OSの影響を直接的に受けてしまうという問題があった。Windows OSのバージョン・アップの歴史とは、簡単にいえばWindows OSの機能拡張の歴史でもあるのだが、こうして拡張された機能をアプリケーションが利用できるようにするには、既存のAPIを拡張するか、新しいAPIを追加するしか方法がない。このように増築を繰り返しながら、API全体としての一貫性や統一性を維持することは不可能だ。このためアプリケーション開発者は、OSのバージョンごと(例えば、Windows 98とWindows Server 2003など)でのAPIの違いに注意したり、一貫性のないAPI群を複雑な手順で呼び出したりしなければならず、開発が非常に面倒だったのだ。

*1 そのように開発されたアプリケーションは「Win32アプリケーション」と呼ばれる。
*2 Win32APIは、このようなOSの機能に密接に結びついた原始的なシステム・インターフェイスであることから「低水準のAPI」と呼ばれる。逆にインターフェイスを高度に抽象化したもの(例えば、一連の低水準APIの呼び出しを1つのAPIにまとめたものなど)は、「高水準のAPI」と呼ばれる。

 そこで、Windows OSの異なるバージョン間の違い(例えば、Windows 95とWindows XPの違い)をあまり意識する必要がなく、しかもよりシンプルな開発が可能な(つまり、より手軽で簡単にAPIの呼び出しが行える)アプリケーション開発手法が、これまでにいくつも出てきた。

 例えば、(旧来の)「Visual Basic」というプログラミング・ツールでは、プログラミング初心者がなじみやすいWindowsアプリケーションの画面デザインを中心にした開発が行えるプログラミング手法が提供された。また、「Visual C++」という開発ツールでは、大規模なアプリケーション開発に適した(より効率的な開発が可能となる)「オブジェクト指向」*3という考え方に基づく「MFC(Microsoft Foundation Class)」というクラス・ライブラリ(=オブジェクト指向の「クラス」という言語構文機能によって、利用目的ごとにAPIを寄せ集めてまとめたもの。例えば、ファイル操作を目的として「ファイルを開く」「ファイルにデータを書き込む」「ファイルのデータを読み込む」「ファイルを閉じる」という複数のAPIを寄せ集めたクラスなど。このようなクラスをたくさん作成してまとめたものがクラス・ライブラリである)が提供されている。

*3 オブジェクト指向については「オブジェクト指向プログラミング超入門」を参照してほしい。

 このようなプログラミング環境の発展のおかげで、Windowsアプリケーションの開発生産性は飛躍的に高まった(つまり、より早く、より多くの機能を簡単に開発できるようになった)。

●現在のWindowsプログラミングの主流「.NET開発」

 そのような開発スタイルの進化は、最終的に「.NET Framework」を生み出した。これが現在のWindowsプログラミング手法の主流となっている。

 .NET Frameworkとは、「現時点で最も高水準かつ高機能なAPI」(=クラス・ライブラリ)を利用できる開発スタイルだと考えればよい*4。.NET Frameworkを使えば、高機能なアプリケーションを素早く簡単に開発できるだけでなく、開発できるアプリケーションの種類も、Windowsアプリケーションから、インターネット上のWebサイトとなるWebアプリケーション、PDA(Personal Digital Assistants)などの携帯端末までと幅広い*5

*4 詳しくは「初めてのMicrosoft .NET」を参照してほしい。
*5 .NET Frameworkを用いたアプリケーションの開発方法については、「簡単!Visual Studio .NET入門」や「オブジェクト指向プログラミング超入門」を参照してほしい。本稿では、そこで開発された.NET Frameworkを用いたアプリケーションが、どのようにして実行されるのかに焦点を当てて解説する。

 本連載では、「このような.NET Frameworkを用いたアプリケーション(以降、.NETアプリケーション)が、どのようにして起動し、どのようにして実行されるのか?」という.NETの仕組み・動作原理について解説していくわけだが、今回は、「そもそも、アプリケーションを動作させる母体であるWindows OSは、どのようにして動いているのか?」ということについて、次のページで解説しよう。

 

 INDEX
  .NETの動作原理を基礎から理解する!
  第1回 .NETアプリケーションを動かす土台
  1.Windowsプログラミングの歴史的変化
    2.パソコンの歴史と動作原理
 
インデックス・ページヘ  「.NETの動作原理を基礎から理解する!」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間