LYNCSブログ

慶應義塾大学公認団体 宇宙科学総合研究会(LYNCS)のブログです。

2018年版 C言語/C++ 入門者のための環境構築 (Windows編)

対象となる読者

  • C言語/C++言語を始めたいが、環境が構築できていない
    • 大学の授業などでC言語を学習する必要がある人もこれに含みます
  • プログラミング自体経験がほとんどない
  • PCの基本操作は理解している

この記事を書いた理由

LYNCSでは、マイコンを用いたロボット等の制御にC++が使われることがあるため、プログラミング初心者でもC/C++から入る層が一定数居ます。 また、大学の一般教養科目として開講されるプログラミングの授業では、C言語を学ぶものもあります。 そういった状況を想定して、環境構築でつまづくことなく、言語の学習に集中できる一助となる記事を書きたいと思った次第です。

まず、本当にC/C++から入門して大丈夫?

あくまで筆者個人の考えですが、初心者が最初に学ぶ言語として安易にC/C++を選ぶのは良くありません。もちろん、理由や信念があってC/C++を学ぶのであれば全く問題はありません。

ここに辿り着いた方のうち、C/C++を学ぶ動機・理由が明確な方は次のセクションまですっ飛ばして環境構築を始めてください。逆に、プログラミングというものが何かはよく分からないけど触ってみたい方や、ゲームやスマホのアプリなど何か作りたいものがあるという方はこれからの文章を読むことをおすすめします。

C言語はOSの開発やプログラミング言語自体の開発などには欠かせない存在で、とても重要な言語であることは事実です。 しかし、ゲームやスマホアプリ、Webアプリ、人工知能(AI)などを開発したい場合には不向きな言語です。世の中には、それらに最適な言語が数多く存在しています。 そういった言語などがあるのにあえてC言語を使うのは、新幹線があることを知りながら自転車で東京-京都間を往復するようなものです。

さらに、作りたいものが作りづらいだけでなく、C/C++にはとても難解な概念が登場します。つまり「初心者殺し」でありながら、言語を習得したところで初心者にも作りやすいアプリを作れないという、プログラミング学習の挫折につながりやすい言語なので、特に理由がない限りはCを「最初に学ぶプログラミング言語」として選ぶことはおすすめしません。漠然とC/C++を最初の言語として選ぶと、殆どの人はプログラミングに対する苦手意識を持ってしまうだけだと思います。逆に、何かしらの言語を学んだあとにC/C++を学ぶと、あらゆるプログラミング言語に共通する一般的な事柄はスキップしてC/C++固有の難しい概念だけに集中できるので、スムーズに学習出来るようになると思います。 (そういう理由もあってか、近年はプログラミング学習スクールなどでも初心者向け講座としてはRubyやNode.js、Pythonといった言語が選定されることが多いようです。)

また、よく言われる話として「C言語は様々な言語に影響を与えた存在だから、C言語をやっていれば応用が効く」「あらゆる言語はCで開発されているので、Cを理解すれば言語も深く理解できる」というものがあります。
これを外国語の学習に例えると「ラテン語はヨーロッパのさまざまな言語に影響を与えているので、外国語を学びたければラテン語から始めると深く理解できる」といった感じになると思います。確かにそれは事実かもしれませんが、メリットに比べてあまりにもデメリット(負担や挫折のリスク)の方が大きすぎます。

英語圏で活躍したければ英語を、フランスに行きたければフランス語をまずは学べばいいのです。ラテン語ギリシャ語など、それらに影響を与えた言語を学んで文法や単語を詳しく理解するのは後回しでもいいはずです。 プログラミングでもそれは同じで、Webアプリを作りたければWeb向けの言語を、スマホアプリを開発したければスマホアプリ向けの言語を最初に学ぶのが一番なのではないでしょうか。それらを習得した後に、C/C++を学んでも遅くはありません。 (やりたいことに直結している方がモチベーションも続きますからね)

大学での初心者に対するプログラミング講義ではC言語を使うべきでない」といった記事でも解説されていますのでこちらも紹介しておきます。

C/C++が向いていないなら何の言語を選べばいいの?

やりたいことを最初に掲げて、それから言語を選んでいいと思います。

  • ゲーム開発/AR/VR - Unity
    • UnityはPCだけでなくスマホAndroid/iOS)でも動作するため、移植の度にハードに合わせてプログラムを書き直さないで済むのが強みです。最近は家庭用ゲーム機向けの開発にも利用されることがあるほか、VRなどでもよく利用されています。
  • スマホアプリ開発 - Java/Kotlin (Android)、Swift (iOS)
  • Webアプリ開発 - RubyJavaScript
  • 機械学習/深層学習/人工知能 - Python
    • 最近流行りのAIなどを触りたいならPython一択です。ライブラリはPython向けのものが圧倒的多数ですし、Jupyter Notebookを始め研究向きの環境も整っています。
  • 統計学 - R
    • 統計処理に最適化された言語です。統計を扱うならまずはRから始めて、より詳細な分析・処理を行うならPythonの学習に進んでもいいかもしれません。
  • 特にやりたいことがない - JavaScript
    • 言語としてめちゃくちゃ優れているというわけではなく、プログラマからは時々批判されることもある言語ではあります。しかし、Webページ、Webアプリ、ブラウザ拡張機能スマホアプリ、PC向けアプリ、IoT機器……などと、あらゆる場面で使用できる言語なので、やっておいて損はないと思います。言語自体も難解ではないため「積極的にエンジニアになりたいわけではないが、スキルとしてプログラミングを身に着けたい」という層にもマッチすると思います。
    • 最近になって仕様がいろいろと追加されている言語なので、古い参考書などはあまり役に立たないと思います。出来る限り新しい本で学ぶことをおすすめします。

逆にどういう人はC/C++から始めるといいの?

  • 機械工学を学ぶ人
    • ロボットなど各種機械の制御として利用される言語は今でもC/C++が中心です。
  • 競技プログラミングをしたい人
    • 多くの競技プログラミングにおいて言語の選定は自由ですが、実行速度の面で有利なC/C++が事実上の標準となっています。
  • プログラミング言語やOSを作りたい人
  • コンピュータの動作を詳しく理解・把握しながらプログラムを書きたい人
    • C/C++では、他の言語ではあまり意識しなくても済むような、メモリやCPUといったコンピュータの内部にある要素をほぼ常に意識してコードを書いていく必要があります。先ほど「C/C++を初心者には勧めない」と書いた理由の1つでもありますが、このあたりの動作に関心がある人にとってはむしろメリットになるかもしれません。
  • 大学の授業がC/C++の人
    • これはもうどうしようもないので頑張っていきましょう。

1. コンパイラのインストール

MinGW(ミン・ジー・ダブリュー)というソフトウェアを使って、gccというコンパイラをインストールしましょう。

Windows向けならVisual Studio(VS)を利用するという手もあります。 ただし、VSは大規模な開発向けのソフトであるため使わないような機能が多くて入門には分かりづらいほか、動作が重いなどプログラミング学習にはデメリットが目立つのでオススメしません。

まず、http://www.mingw.org にアクセスし、右上の「Download Installer」をクリックします。 f:id:lyncs:20180310042602p:plain

しばらくするとページが切り替わり、SourceForgeという外部サイトから自動的にダウンロードが開始されるはずです。 インストーラをダウンロードし、任意の場所に保存するかそのまま実行してください。 f:id:lyncs:20180310042703p:plain

インストーラを実行すると以下のような表示になります。 「Install」をクリックしてください。 f:id:lyncs:20180310042921p:plain

特に変更せず、「Continue」をクリックしてください。 (なお、Cドライブの空き容量が少ないなどでインストール先を変更した場合はその後のパスを適宜読み替えてください) f:id:lyncs:20180310043031p:plain

必要なファイルのダウンロードが始まります。しばらくお待ちください。 f:id:lyncs:20180310043144p:plain

ダウンロードが完了すると「Continue」をクリックできるようになりますので、クリックしてください。 f:id:lyncs:20180310043407p:plain

スタートメニューやデスクトップに「MinGW Installation Manager」というショートカットが作成されるはずなので、これを起動しましょう。

MinGW Installation Managerが起動したら「mingw32-base」という項目をクリックし、現れるメニューの中から「Mark for Installation」をクリックしてください。 f:id:lyncs:20180310043908p:plain

「mingw32-gcc-g++」という項目にも同じ操作を行ってください。以下のような画面になるはずです。 f:id:lyncs:20180310044018p:plain

「Installation」メニューから「Apply Changes」をクリックしてください。 f:id:lyncs:20180310044100p:plain

「Apply」をクリックしてください。 f:id:lyncs:20180310044157p:plain

必要なファイルがダウンロードされます。そのままお待ちください。 f:id:lyncs:20180310044218p:plain

完了したら「Close」をクリックしてください。 f:id:lyncs:20180310044252p:plain

このような画面になれば、MinGW Installation Managerを閉じて構いません。 f:id:lyncs:20180310044322p:plain

2. パスを通す

インストールしたgccを開発環境から利用できるようにします。以下はWindows 10の場合です。

スタートメニューを右クリックし、コントロールパネルを開きます。 f:id:lyncs:20180310044545p:plain

検索欄に「環境変数」と入力すると現れる「環境変数を編集」をクリックします。 f:id:lyncs:20180310044611p:plain

上の欄で「Path」を選択し、「編集」をクリックします。 f:id:lyncs:20180310044625p:plain

「新規」をクリックします。 f:id:lyncs:20180310044804p:plain

「C:\MinGW\bin」と入力し、追加します。 以下のような画面になれば完了です。 f:id:lyncs:20180310044825p:plain

3. 拡張子の表示

プログラミングをする上で拡張子を表示していないと何かと困ることがあるので、Windowsの設定を変えて表示しておきます。

適当なフォルダを開いて上部の「表示」をクリックし、「拡張子の表示」にチェックを入れます。 f:id:lyncs:20180310045028p:plain

4. エディタのインストール

書籍やサイトによっては「メモ帳」でも出来ると書かれていることがありますが、きちんとしたプログラミング向けのエディタを使うことでより学習しやすくなります。 ここでは、2018年現在でよく使われている「Visual Studio Code」(VS Code)を利用しましょう。(「Visual Studio」と名前が似ていますが、「Code」の方はソースコードの編集に特化した軽量・シンプルなソフトです。)

プログラミング用のエディタとしては「TeraPad」や「サクラエディタ」などが挙げられることもありますが、2018年現在では残念ながら時代遅れ感が否めませんので VS Code をおすすめします。

https://code.visualstudio.com にアクセスし、「Download for Windows」をクリックします。 インストーラがダウンロードされるはずです。 f:id:lyncs:20180310045205p:plain

インストーラを実行したら、「次へ」をクリックします。 このあたりはインストーラの指示に従って進めてください。 f:id:lyncs:20180310045518p:plain f:id:lyncs:20180310045538p:plain f:id:lyncs:20180310045548p:plain f:id:lyncs:20180310045554p:plain

ここでは、全てにチェックを入れてください。 f:id:lyncs:20180310045624p:plain

インストールを進めてください。 f:id:lyncs:20180310045640p:plain f:id:lyncs:20180310045712p:plain

インストールが完了すると「Getting Started」といったWebページが開くことがありますが、読む必要がなければそのまま閉じてください。

VS Codeが開くと、「警告:Gitが見つかりません」というエラーが出ますが、「今後は表示しない」をクリックしてください。 また、一旦右下の「×」をクリックしてください。 f:id:lyncs:20180310045919p:plain

5. コードを書いて実行していく

一般的な参考書では、エディタでコードを書いてコマンドプロンプトなどから実行するように指示されていると思います。 VS Codeコマンドプロンプトをウィンドウ内に呼び出すことができるので、より効率的な学習ができると思います。

Ctrl + @ を入力してください。すると、統合ターミナルが開くはずです。(もう一度 Ctrl + @ を押すと閉じます) 最初に表示したときは「規定のターミナルシェルをカスタマイズ」といったメッセージが出ると思います。 特にこだわりがなければ、Microsoftコマンドプロンプトの後継としている「PowerShell」にしていいと思います。 (参考書や解説サイトではコマンドプロンプトの利用を指示している方が多いと思うので、違う物にするのが怖ければコマンドプロンプト(cmd)でも大丈夫です) f:id:lyncs:20180311021702p:plain

また、プログラミングにおいては「フォルダ」(ディレクトリ)を1つの単位としてプロジェクトを進めていくことが多いです。とりあえず全部マイドキュメントに保存、といったことは行いません。
ですので、とりあえず何らかの作業用フォルダを作成しておきましょう。(日本語文字列が含まれないファイルパスが望ましいので、Cドライブ直下などに programming のようなフォルダを作ると無難だと思います。)
学習が進んでいったら、この作業用フォルダ内にサブフォルダを作成して細分化していっても良いと思います。

また、VS Codeもプログラミングしやすくするため、「フォルダごと」開くことが出来ます。 左側の「エクスプローラー」ボタンをクリックして「フォルダーを開く」をクリックするか、ファイル→フォルダーを開く をクリックしてください。 f:id:lyncs:20180311023021p:plain

フォルダを作成したら新規ファイルを作成しましょう。 「ファイル」→「新規ファイル」で新しいタブが開くはずです。(「ようこそ」タブは閉じてOKです)
Hello Worldでも書いてみましょう。 f:id:lyncs:20180311023521p:plain

ファイルを保存しましょう。hello.c あたりで、拡張子 .c を付けるのをお忘れなく。 f:id:lyncs:20180311023618p:plain

拡張子を付けたファイルは言語に応じて色付け(シンタックスハイライト)してくれます。プログラミング向けエディタの強みの1つです。 f:id:lyncs:20180311023641p:plain

Ctrl + @ を押して統合ターミナルを開くと、既に現在開いているフォルダに移動した状態のPowerShellがウィンドウ内で開いてくれます。 コンパイルするコマンド gcc hello.c を入力して Enter を押してください。 f:id:lyncs:20180311023916p:plain

コンパイルが完了すると同じフォルダに実行ファイルが出力されます。
今回はコンパイル時に出力ファイル名を指定しなかったので a.exe という名前になっているはずです。 f:id:lyncs:20180311024013p:plain

これを実行してみましょう。統合ターミナルに .\a.exe と入力してください。(a.exe の前に .\ ドットとバックスラッシュを入力することをお忘れなく。バックスラッシュはWindows環境では円マークと同じ文字列です。)
無事実行できれば以下のような表示になるはずです。 f:id:lyncs:20180311024130p:plain

環境構築とHello Worldの実行手順を把握するところでこの記事は終わりです。
ここから先はお手持ちの参考書や授業をベースにして進めていってください。それでは良き開発ライフを!

LYNCS とは?

慶應義塾大学文化団体連盟所属団体 宇宙科学総合研究会 LYNCS (Laboratory of sYNnthetic Cosmic Science, リンクス)はその名前の通り、宇宙について様々な面から研究、アプローチをするサークルです。
工学分野では電子工作やプログラミングを扱い、模擬人工衛星CanSat」の開発やドローンの開発などを行っています。プログラミング・電子工作の初心者でも興味がある方なら大歓迎です!先輩がサポートしていきます! (実際、プログラミング未経験だった1年生が、その年の終わりにはRaspberry Piなどを利用して自律走行ロボットやドローンを自作できるようになりました。)
慶應義塾大学に進学される方、在学中の方でご興味をお持ちの方は、公式Twitterメールなどでお気軽にお問い合わせください!