学習環境コンテナとは、『スッキリわかるC言語入門 第2版』の読者さまによる学習の敷居を下げる目的で、無償・非保証で提供されているしくみです。以下の手順に従って導入・構成を行うことで、お手持ちのPCの中に「C言語開発のために必要なツールやファイルがセットアップ済みの、仮想的なLinuxマシン」を手軽に準備して、学習に利用することができます。
事前準備
学習環境コンテナを利用するためには、ご利用のPCにDockerDesktopというソフトウェアがインストールされている必要があります。まだインストールされていない場合、以下の手順に従って導入を済ませてください。
コマンドプロンプトからdocker -v
と入力することで、バージョンが表示されれば導入には成功しています。
コンテナのダウンロード
学習環境コンテナをダウンロードするには、インターネットに接続された状態で、コマンドプロンプトから
docker run --name sc2 -it flairlink/sc2
と入力するとコンテナのダウンロードと初回起動が行われます。
[misaki@~]$
というプロンプトが表示されたら成功ですので、exit
と入力してコンテナを一度終了させます。
コンテナの起動とログイン
以降、学習環境コンテナで学習を開始しようとする時は、以下のコマンドでコンテナにログインします。
docker start -ia sc2
次のようなプロンプトが表示されたらログイン成功です。
[misaki@~]$
学習環境コンテナにログインしたら、以後、通常のLinuxマシンとして、ファイルのコピーやプログラムの実行など、一般的なLinuxコマンドを使うことができます。学習を終えるときには、exit
と入力して、コンテナから抜けます。
コンテナに導入済みのツール
このコンテナには、『スッキリわかるC言語入門』書中で登場するものを含め、以下のツールが既に導入済みなので、すぐに使うことができます。
- gcc (C言語コンパイラ)
- make (ビルドツール)
- nano (エディタ)
- git (ソースコード管理ツール)
- doxygen (ドキュメント生成ツール)
- cppcheck (静的解析ツール)
- vim (エディタ)
- emacs (エディタ)
- curl (Webコンテンツアクセスツール)
- lynx (Webブラウザ)
たとえば、docker start -ia sc2
でコンテナにログインしたあと、/home/misakiフォルダにいる状態となりますので、そのフォルダ内に自分オリジナルのC言語ソースコードhello.cを作成し、コンパイルして実行するには、以下のような一連のコマンドを入力します(灰色部分は入力しません)。
nano hello.c ・・・nanoエディタが開くのでソースコードを入力して保存して閉じる
ls ・・・確かに現在のフォルダにhello.cファイルができていることを確認する
gcc hello.c ・・・gccでコンパイルを行う(成功すればa.outファイルが生成されるはず)
ls ・・・ 現在のフォルダ内のファイル一覧を表示し、a.outファイルができていることを確認する
./a.out ・・・ a.outファイルを実行する
code-sc2フォルダの内容
学習環境コンテナにログインした直後、ユーザーは/home/misakiフォルダにいます。
このフォルダには、code-sc2というフォルダが存在し、以下、次のような構造に従って、『スッキリわかるC言語入門 第2版』のファイルが配置されています。
/code-sc2 /chap00 /code00-01 code0001.c ・・・コード0-1のソースファイル /code00-02 code0002.c ・・・コード0-2のソースファイル :
たとえば、docker start -ia sc2
でコンテナにログインしたあと、code0001.cをコンパイルして実行するには、以下のような一連のコマンドを入力します(黄色マーカー部分は入力しません)。
cd code-sc2 ・・・現在のフォルダにあるcode-sc2フォルダに移動する
cd chap00 ・・・さらにその中のchap00フォルダに移動する
cd code00-01 ・・・さらにその中のcode00-01フォルダに移動する
gcc code0001.c ・・・gccでコンパイルを行う(これによりa.outファイルが生成されるはず)
ls ・・・ 現在のフォルダ内のファイル一覧を表示し、a.outファイルができていることを確認する
./a.out ・・・ a.outファイルを実行する
なお、上記の例では、code-sc2フォルダ内に移動して、ソースファイルがある場所でコンパイルや実行を行いました。nanoエディタを使い、これらソースファイルを自分で書き換えてコンパイル・実行することも可能です。もし、「code-sc2内の書籍掲載ファイルを編集してしまうと、もともとの内容が失われてしまう」ことが懸念される場合は、code-sc2フォルダ内のファイルを/home/misakiにコピーして、その複製したものを修正することもできます。たとえば、docker start -ia sc2
をしてコンテナにログインした直後の状態から、
cp code-sc2/code00-01/code0001.c /home/misaki ・・・ code0001.cを自分のフォルダにコピーしておく
nano code0001.c ・・・ 現在のフォルダ(/home/misaki)にあるcode0001.cを編集して保存する
gcc code0001.c ・・・ 現在のフォルダ(/home/misaki)にあるcode0001.cをコンパイルする
実践動画
game-sc2フォルダの内容
/home/misakiフォルダには、code-sc2のほかに、game-sc2というフォルダも含まれています。このフォルダが内部に含んでいるpuzmonという実行可能ファイルは、『スッキリわかるC言語入門 第2版』 第12章で取り組むゲーム開発課題の成果物 Puzzle&Monstersの完成品サンプルです(完成品のソースコードは、コンテナ内には含んでいません)。
puzmonは、コンテナ起動直後の状態から、以下の方法で起動することができます。プレイヤー名の部分は、適当に書き換えてください(ゲーム内で使われます)。
cd game-sc2
./puzmon プレイヤー名
第12章の課題に取り組む前に、完成品のイメージをつかんでおきたい場合や、C言語の学習に疲れて息抜きしたい時にご利用ください。
AKAGI-MODEについて
特定の教育指導現場での利用や、「より自分に厳しくC言語の道を究めていきたい」という学習者の方のために、この学習環境コンテナは「AKAGI-MODE」を備えています。AKAGI-MODEでコンテナを利用するためには、コンテナの初回インストールや、以降の利用時のコマンドを、以下のように変える必要があります。
コンテナの初回インストール:
docker run --name sc2a -it -u akagi flairlink/sc2
コンテナ利用時:
docker start -ia sc2a
AKAGI-MODEでは、通常モード(misaki-mode)と比較して、配置されているファイルに以下のような違いがあります。
- code-sc2フォルダ内の「スッキリCの章末練習問題」について、その解答例コードが含まれていない
- code-sc2フォルダ内の「スッキリCの12章課題」について、ヒントコードが含まれていない
- game-sc2フォルダが存在しない
コンテナのより高度な利用について
学習環境コンテナは、一般的な「AlpineLinuxによるx86-Dockerコンテナ」として、各種のLinuxやdockerの技術を用いて、さらに高度に利用して頂くことが可能です。詳細は、Linux, Dockerに関するWebサイトなどを参照ください。
以下では、特に入門者の方が遭遇しやすいケース別に、いくつか応用を紹介します。
コンテナの利用中に、「なんだかよくわからなくなってしまった」
一度コンテナを終了して再度docker start -ia sc2
で利用を再開することが最もおすすめです。コンテナを終了するには、
exit
というコマンドを入力します。状況によっては複数回、exit
を入力することで、PCのコマンドプロンプトに戻れるかもしれません。exitコマンドが効かない(無視される)場合は、CTRLキーを押しながらCキーを押す(通称、CTRL+C)でコンテナを終了させられることもあります。
このようにして終了しても、コンテナ自体が削除されているわけではないため、docker start -ia sc2
で再度ログインして開発を再開することができます。
コンテナ自体の中身のファイルがおかしくなってしまった
「利用中のコンテナの中身がおかしくなってしまった(必要なファイルを削除してしまった等)ので、一度すべて削除して、全部最初からやり直したい」という場合、以下の2つのコマンドを順に入力することで、コンテナを完全に削除できます。
docker rm -f sc2 ・・・ AKAGI-MODEをご利用の場合、docker rm sc2a
としてください
docker rmi -f flairlink/sc2
この処理が終わると、再度コンテナのインストール(docker run ...)を行うことが出来るようになります。
コンテナ内とコンテナ外でファイルをやりとりしたい
コンテナ内で作成したファイルを、コンテナ外の自分のPCに取り出すためには、docker cpコマンドを使います。
たとえば、コンテナログイン直後にいる/home/misakiフォルダで作成されたhello.cを、PCの現在のフォルダに取り出すためには、一度exitでコンテナを終了させたうえで、次のようなコマンドを入力します。
docker cp sc2:/home/misaki/hello.c . ・・・末尾に半角スペースとピリオドを入れ忘れないようにすること
逆に、自分のPCの現在のフォルダにあるgoodbye.cを、コンテナ内の/home/misakiにコピーするためには、以下のように記述します。
docker cp goodbye.c sc2:/home/misaki/goodbye.c
よくある質問
- Q.
docker run 〜
でコンテナをインストールしようとしたら、You have to remove (or rename) that container to be able to reuse that name.
というエラーが表示されます - 既にsc2という名称のコンテナがインストール済みのようです。
docker start -ia sc2
で利用を行うことができます。一度削除して再インストールしたい場合は、上記の「コンテナ削除」の手順を行ってください。 - Q.
docker run 〜
でコンテナをインストールしようとしたら、toomanyrequests: You have reached your pull rate limit.
というエラーが表示されます - 多数のユーザーがコンテナをダウンロードしたため、サーバー側によってアクセス制限が行われています。この制限は、Dockerアカウントを作成してログインした状態だと大幅に緩和されますので、こちらの記事のSTEP4終盤の解説に従い、Dockerアカウントを作成・ログインしてご利用いただくか、しばらく待って再度おためしください
- Q.
docker start 〜
でコンテナにログインしましたが、キー入力をしても何も反応しません。 - docker start時のオプションとして -ia を付け忘れている可能性があります1。この状態だと、exitと入力してコンテナを終了することもできなくなるため、CTRL+Cで終了させてください。
- Q.私のコンテナと知人のコンテナで、収録されているコードに小さな違いがあるようですが、なぜですか
- 学習環境コンテナは、常に不定期バージョンアップをしています。そのため、誤植報告などによってソースコードに修正が行われた場合、コンテナに収録されるコードも修正版に変更となります。一方、docker runコマンドでコンテナを導入するとき、その時点で最新版のコンテナがダウンロードされます。そのため、docker runを実行した時期が異なると、収録ファイルに違いが生じることがあります。一度手元のコンテナを削除して、再度導入し直すことで、最新版にすることができます。
- Q.『スッキリわかるC言語入門』(初版/2018年発売)の購入読者ですが、利用できますか
- 無償・非保証・非サポートであることと、収録コードが第2版のものですが、それで差し支えなければご自由に利用ください。
- Q.『スッキリわかるC言語入門』ではない、他の入門書で学んでいますが、利用できますか
- 無償・非保証・非サポートですが、それで差し支えなければご自由に利用ください。書籍『スッキリC』もよろしくお願いします。
- Q.企業研修や学校教育で利用して構いませんか
- 無償・非保証・非サポートですが、それで差し支えなければご自由に利用ください。書籍『スッキリC』もよろしくお願いします。
- Q.企業に研修サービスを販売している研修企業ですが、利用して構いませんか
- 無償・非保証・非サポートですが、それで差し支えなければご自由に利用ください。書籍『スッキリC』もよろしくお願いします。
- Q.コンテナを修正・拡張・再配布していいですか
- さまざまな非公式バージョンが出回ると、入門者の方が混乱したり、緊急性のあるパッチの反映が遅れたり、悪意あるコードを混入させたコンテナが流通するリスクが増えるためお控えください。企業研修や学校教育などで用いる場合も、独自に派生コンテナを作成せず、必ず公式のコンテナの導入方法を学び手の方にご案内ください。