そらのうきぶくろ

Miscellaneous

プログラミングを始めよう

目次

  1. はじめに
  2. 環境を整える
  3. プログラムを書く&コンパイルする
  4. わけがわからないよ ~ 何が起きているのか?
  5. おわりに

はじめに

これは「PCでのプログラミングなんて全然やったことないけど面白そうだし興味ある」という人を対象とした記事です。 しかもプログラミングそのものについてはあまり書いていません。 プログラミングしたいけど何からやればいいのか分からない、と思っている人がプログラミングを始めるきっかけになれば……ということで。

また、Windowsユーザを対象とした説明となっているので、ご注意下さい。

環境を整える

プログラミングを始めるには、まず開発環境を用意する必要があります。 開発環境といっても、専用のPCとか大層なものは必要なく、今あなたが使っているPCで用が足ります。 しかも良い時代になったもんで全部無料で整います。

必要なのは次の2つです。

コンパイラ
書いたプログラムを実行出来る形式に変換(コンパイル)するためのプログラムのこと。→Wikipedia
テキストエディタ
より高機能な「メモ帳」みたいなもの。

一口にプログラミングするといっても、プログラムの書き方は様々なものがあります。このプログラムの書き方を「プログラミング言語」といいます。 世界に日本語とか英語とか他色々な言語があるのと一緒です。 同じ動きをするプログラムを違う言語で書いたりすることもできるのです。

まずは、上で少しだけ説明した「コンパイラ」というものを用意することにしましょう。 コンパイラによって、解釈できるプログラミング言語は異なるので、言語にあったコンパイラを選択する必要があります。 ここでは、プログラミング学習に最適な「C言語」のコンパイラを使います。

コンパイラ

WindowsでC言語プログラミングを始めるには、MinGWを使うのが良いでしょう。
MinGW (SourceForge.net)
上のリンク先を開き、Downloadボタンを押して、MinGWのインストーラのダウンロードを行って下さい。 割とすぐに終わるはずです。 ダウンロードが完了したら早速実行してみてください。

インストーラ起動

こんな感じのダイアログが出るはずです。 まず英語で「うげー」とか思うかもしれませんが、ひるんではいけません。
Nextをクリックしましょう。

Administrator Install

管理者権限でログインしている人はこんなダイアログが出ると思います。 PCを一人で使っているのなら無視してNextをクリックして構いません。 複数人で使っていて、管理者がいるのならその人に相談した方がいいかと思います。

Repository Catalogues

これは最新版を自動でダウンロードするかどうかの確認です。 Donwload latest repository cataloguesを選択し、Nextをクリックします。

License Agreement

ライセンス情報の確認です。君はこれを読んでもいいし、読まなくても……あー、読まなくていいわ。読んでる人いるのか? I accept the agreementを選択し、Nextをクリックします。

Select Destination Location

インストール先を選択します。 とりあえず変更せずにNextをクリックすれば良いでしょう。 どうしてもCドライブの容量を圧迫したくない!と言う人は別のインストール先に変更すると良いです。 もし変更した場合ちゃんとインストール先を覚えておいてください。あとで使います。

Select Start Menu Folder

スタートメニューにMinGWの項目を追加するかどうかを設定します。 どうせスタートメニューに追加されたものは一切使わないので、Don't create a Start Menu folderにチェックを入れてしまって構いません。 Nextをクリックします。

Select Components

どのプログラミング言語を使えるようにするかの設定です。 とりあえずC言語が使えればいいので、何も変更せずにNextをクリックします。

Ready to Install

インストールの準備が出来たことを確認する画面になります。 Installをクリックすると、インストールが始まります。 少し時間がかかるので、終わるまで何もしないで待機していてください。

これが終わったら、とりあえずC言語の開発環境はほとんど揃いました。

テキストエディタ

次に、テキストエディタの用意をします。 先程、メモ帳のようなものと説明しました。じゃあメモ帳で良いんじゃないのと思うかもしれませんが、それはやめたほうが良いです。 理由は簡潔に言うと不便だから。 では何を使えば良いかというと、無料で手に入る物にも結構色々あります。

などなど。目移りしちゃう。 ここで重要なのは、「プログラミング言語を記述する上での支援機能」があるかどうかであり、上記のような有名なテキストエディタは大抵そういった機能を持っています。 そのため、別にどれを選んでもいいです。完全に好みの問題となります。
ちなみに筆者はUnEditorを使っています。

テキストエディタのインストールはここでは省略します。 何かインストールして使えるようにしておいて下さい。

拡張子の設定

「拡張子」というものがあります。「かくちょうこ」ではなく「かくちょうし」です。 これはファイル名の最後に付く文字列であり、そのファイルの形式を表したものです。 例えば、実行ファイルなら「.exe」、ただのテキストファイルなら「.txt」といった感じになります。
Windowsでは、標準では拡張子を表示しない設定になっているので、その場合は表示するように設定することにします。 表示する設定になっているのであれば、この項目は読み飛ばしてください。 →次の項目へ

コンピュータを開きます。するとエクスプローラが起動します。下の画像のように上部に灰色のメニューが表示されてない場合は、Altキーを押すと出てきます。

フォルダオプションを開く

ツール→フォルダーオプションをクリックします。 するとダイアログが開くので、「表示」タブをクリックします。

フォルダオプション設定

「登録されている拡張子は表示しない」のチェックを外し、OKをクリックします。

これで拡張子が表示されるようになりました。 慣れないうちは、ファイル名を変更するときに拡張子まで変更してしまわないように注意をするようにしてください。

開発環境の起動

プログラムを書くためのフォルダを作っておくと便利です。 何処でもいいです。デスクトップやDドライブ等に、「program」等といった名前のフォルダを作りましょう。

次に、以下のファイルをダウンロードしてください。
c_env.bat
これはバッチファイルというもので、開発環境を起動するためのコマンドが書かれています。

ちなみに中身は次のようなテキストとなっています。

@echo off
set PATH=C:\MinGW\bin;%PATH%
cmd

これは簡単に説明すると、環境変数を設定し、C言語コンパイラを使えるコマンドプロンプトを起動できるようにするためのコマンド……となります。
環境変数というのは、OSが管理している割と重要な情報で、上のバッチファイルで、そのうちのPATHという環境変数の設定を行っています。 PATHの設定をしてプログラムを使えるようにする事を「パスを通す」などと言ったりもしますが、そういう事を気にせずに書けるようにするために上のバッチファイルを用意したので、とりあえず今はあまり気にしなくて良いです。

MinGWをインストールするときにインストール先を変えた人は、バッチファイルをテキストエディタで開き、C:\MinGWの部分を自分で決めたインストール先に変更してください。

あとはバッチファイルを実行してください。エクスプローラ上でダブルクリックするだけで実行できます。

開発環境の起動が成功

こんな感じの画面が出るはずです。 この画面は「コマンドプロンプト」といい、マウスは使わずキーボード入力だけで操作することになります。

D:\program>のような表示は、ユーザーのコマンド入力を待っている状態であることを示していて、「プロンプト」と呼ばれています。

ではここで、開発環境が正しくインストールされているかの確認をします。
gccと入力し、Enterキーを押してください。

gccの動作確認

gcc: no input filesと出たら、成功です。 'gcc' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。というメッセージが出た場合は、パスが正常に通せていません。 コマンドプロンプトを終了し、先ほどのバッチファイルを編集して正しいインストール先に変更しましょう。

プログラムを書く&コンパイルする

ここまで、プログラミングなんてやったこと無い!という人には結構しんどい作業だったと思います。 というわけで、モチベーションアップも兼ねてプログラムを動かしてみることにしましょう。

テキストファイルを作る

まずは、先程作ったプログラムを書くためのフォルダの中(起動用のバッチファイルがあるフォルダ)に新しくテキストファイルを作成します。

名前変更

test.cとでも付けておきましょう。拡張子をcにすることで、そのファイルはC言語のソースファイルという扱いになります。
ソースファイルというのは、簡単に説明すると、何かプログラムが書かれたテキストファイルの事です。覚えておいてください。

不吉なダイアログ

ファイル名を確定しようとすると、こんな不吉なダイアログが表示されます。 ファイルが使えなくなる、なんて書いてありますが、全然そんなことはないので、はいをクリックして確定します。

では早速、先程インストールしたテキストエディタで、ソースファイルを開いてみましょう。 今作ったファイルは空のファイルなので、何も書かれていません。

では早速、テスト用プログラムとして有名な「Hello World」を書いて実行してみることにします。 以下のソースをテキストエディタにコピー&ペーストしてください。

#include <stdio.h>

int main(){
	printf("Hello World!");
}

ソースを貼り付けたら、エディタで上書き保存します。 そしてコマンドプロンプト上で、gcc test.c(test.cは自分で作ったソースファイルの名前)と打ち、Enterキーを押してみてください。
少し待つと、再びコマンドを入力できるようになるので、今度はaとだけ打ってEnterキーを押してみましょう。

コンパイル&実行

このように表示されたら成功です。 プログラムのコンパイルと実行が出来ています。おめでとう!!

わけがわからないよ ~ 何が起きているのか?

しかし、ここまでは完全に「書いてある事をやってみただけ」であり、何でこれで動作するのかさっぱり分からない、気持ち悪い、なんとかしろ、と思う人は当然いるはず。
そのため、バッチファイルを実行する所から、順を追って説明していくことにします。

1. 環境変数PATHの変更

バッチファイルの中に、set PATH=C:\MinGW\bin;%PATH%という行があります。 これは環境変数PATHを変更している、というのは前にも説明しました。 ではそのPATHとは何なのか。

コマンドプロンプト上で、notepadと入力し、Enterキーを押してみてください。 なんとメモ帳が起動します。
メモ帳の正体はC:\Windows\System32\notepad.exeという場所にいるプログラムなのですが、一体どうやってこれを呼び出したんでしょうか。 実はここでPATHが活躍しています。

PATHのはたらき

このように、WindowsがPATHに書かれた場所を順番に辿って、実行したいプログラムを探すのです。つまり、PATHは実行したいプログラムがある場所を列挙したものなのです。
ただこれには多少語弊があって、実際は実行したいプログラムだけでなく、プログラムを実行するために必要なファイル(ライブラリファイルなど)を探すためにも使用しています。(その証拠に、パスを通していない環境で、C:\MinGW\bin\gcc.exe test.cを実行しようとすると、DLLが無いと言われて失敗するはずなので、余力のある人は試してみてください。)

そして、そのPATHにC:\MinGW\binという、C言語コンパイラの場所を示す場所を追加しているのです。
ただ、後述しますがこの設定は一時的なものです

ちなみに、上で「ディレクトリ」という言葉をさりげなく使っていますが、これは「ファイルを置く場所」の事です。重要なので、覚えておいてください。

2. コマンドプロンプトの起動

バッチファイルの中にcmdという行があります。 cmdの実体はコマンドプロンプトで、C:\Windows\sytem32\cmd.exeという場所にあります。 前述のPATHの活躍により起動できるというわけです。 ただ普通と異なるのは、PATHにC言語コンパイラの場所が追加されているということです。

先程、PATHの設定は一時的なものだと表現しました。 バッチファイルの中で設定した環境変数は、

  • バッチファイルの実行中
  • バッチファイルから実行されたプログラムの実行中

上記の間だけ有効となります。
よって、cmdでコマンドプロンプト起動後にバッチファイルの実行は終了しますが、起動したコマンドプロンプト上ではバッチファイルで設定したPATHの設定が有効になっています。

3. コンパイル

ソースファイルをコンパイルする時に、gcc test.cと打ったと思います。 これは、gccという名前のプログラムを、test.cという引数を渡して実行することを意味しています。
さっぱり意味不明だと思うので、更に細かく解説を行います。

gcc起動

gccというプログラムは何かというと、C言語コンパイラそのものです。 コンパイラも実はプログラムなのです。どっかの凄い人が作ったんです。
そしてこのプログラムが先ほどバッチファイルでPATHに追加したディレクトリ、C:\MinGW\binに置いてあります。 よって、gccと入力しただけで、Windowsは「ああ、C言語のコンパイラだな」と解釈してくれます。

次に、引数(ひきすう)とは何なのか。これはプログラムを実行する時に渡すパラメータのことです。
例えばあなたは人に物を頼む時、「誰」に「何」をして欲しい、という具合に頼むかと思います。
コンピュータでも同様で、「プログラム」に「何」をして欲しいのかをきちんと明確にする必要があります。
ここでいう「何」の部分に相当するのか、引数なのです。

gccは、引数の部分にファイル名だけを指定されると、「指定されたファイル名のファイルをコンパイルして、a.exeという実行ファイルを生成せよ」という命令だと判断し、それを即座に実行に移します。
引数をどう解釈するかはプログラムによって異なります。

ちなみに、コマンドプロンプト上では基本的にあらゆる処理をプログラム/コマンド名 引数(引数は省略可能)という記法に従って行います。

4. プログラムの実行

先程の説明で、gccがソースファイルをコンパイルしてa.exeという実行ファイルを生成する事が分かったと思います。 この後、コマンドプロンプト上でaと入力してEnterキーを押すと、a.exeが実行されました。
しかし、環境変数PATHにa.exeが存在するディレクトリは登録されていないし、そもそもaという名前のファイルは存在しないのにどうして実行できるのか、という疑問を抱くのではないでしょうか。

実はWindowsは、最初からPATHに登録されたディレクトリを探しにいくわけではありません。
まずカレントディレクトリという場所を検索し、そこに目的のファイルが無ければPATHに登録されたディレクトリへ探しに行くのです。
カレントディレクトリって一体何処だ?というと、

カレントディレクトリ

矢印の部分のディレクトリです。 カレント(current)ディレクトリ、現在のディレクトリ、という意味なのです。

しかし、カレントディレクトリには確かにaというプログラムは存在しません。 a.exeならgccが作ってくれましたが。 それでも実行できるのはどういうことかというと……Windowsは、「特定の拡張子のファイルを参照するとき、拡張子の入力を省略」することを許しています。

拡張子補完

このように、指定されたプログラムが無かった場合、ファイル名にいくつかの拡張子を付与して探し、見つけた場合はそのプログラムを実行する、といった動作をします。
これなら、aとだけ入力してもa.exeを実行してくれるのも納得ですね。

ちなみにどんな拡張子を付与するのかというと……それはコマンドプロンプトでsetというコマンドを実行して、PATHEXTの値を見れば分かります。余力のある人は試してみてください。

5. プログラムの内容について

今回は以下のプログラムを実行しました。

#include <stdio.h>

int main(){
	printf("Hello World!");
}

1行目は、C言語について説明した書籍・サイトなどではしばしば「プログラムを実行するためのおまじない」と言われるものです。最初はその程度の認識で構いません。
少し詳しい説明をすると、「プログラム中で使いたい命令等をあらかじめ宣言する」という感じになります。それでも本質とは多少の違いはありますが。 stdio.hは、命令の定義等が書かれたヘッダファイルの一種で、主に入出力系の機能を持っています。

3行目は「関数」というものの宣言です。関数の内容は中括弧{ }で囲まれている部分になります。
関数そのものについての詳細については省略しますが、C言語ではmainという名前の関数が、プログラムを開始して最初に実行される関数となっています。 もっともこのプログラムの場合は、関数が1個しかないので、あまり気にならないかもしれませんが……。
このように、最初に実行される関数のことは「エントリーポイント」と呼ばれています。

4行目は、既存のprintfという名前の関数の呼び出しを行っています。 この関数によって、画面に「Hello World」という文字列を出力します。
ところで、1行目のことを「プログラム中で使いたい命令等をあらかじめ宣言する」と説明しました。1行目で宣言したstdio.hにはprintf関数の定義が含まれているため、プログラム中でprintf関数が使用できるわけですね。

5行目の時点で、もうmain関数の中身を実行し終わったので、main関数は終了します。 通常、この関数の実行が終了すると、プログラム自体も終了します。
コマンドプロンプト上で実行したプログラムの実行が終了すると、またプロンプト(コマンド入力待ちだという状態)に戻ります。

おわりに

これで、プログラミングはどんな風に始めれば良いのか、どういう仕組みで動いているのか、なんとなく分かったと思います。 C言語をもっと色々試してみたいと思う人は、下記のサイトやGoogleで検索して勉強していきましょう。

また、プログラミングとは異なりますが、下記のサイトに載っていることも勉強しておくと役に立ちます。