Contents
1️⃣ はじめに ― 「1 週間で何ができるか」
| 項目 | 現実的な到達レベル |
|---|---|
| 学習時間 | 合計 10〜12 時間(1 日あたり約 1.5–2 時間) |
| 習得できること | 基本構文・主要キーワードの使い方、簡単なコンパイル手順、標準入出力やファイル I/O のサンプルコードを書けるようになる |
| 期待しすぎないポイント | ポインタやメモリ管理は 概念的に理解 できても、実務での高度な最適化や大規模プロジェクトの設計まではカバーできません。学習後は「次のステップへ進む土台」が整った状態です。 |
ポイント
- 「実務レベルのスキル」は 1 週間で身につくものではなく、継続的な演習とコードレビュー が不可欠です。
- 本記事は「入門から手を動かすまで」に焦点を当て、無理のない学習計画を提示します。
2️⃣ 開発環境の構築(2024 年時点で利用可能なツール)
2.1 Visual Studio 2022(Community エディション)
※ 「Visual Studio 2026」は執筆時点ではリリースされていません。現在は VS 2022 が最新です。
| 手順 | 内容 |
|---|---|
| ① | Microsoft の公式ページ https://visualstudio.microsoft.com/ja/vs/community/ から Visual Studio 2022 Community をダウンロードし、インストーラを起動 |
| ② | 「C++ デスクトップ開発」ワークロードにチェックを入れ、MSVC v143 (v14.3) コンパイラが自動的に選択されることを確認 |
| ③ | インストール完了後、「新しいプロジェクト」 → 「C++ コンソール アプリケーション」 を作成し、[言語] > [C 言語] を有効化(/TC オプションを自動設定) |
| ④ | プロパティ画面で 「全般」 → 「使用する言語」 が “C (/TC)” になっていることを最終確認し、Ctrl + F5 でビルド・実行ができるかテスト |
/TC オプションとは?
- Visual Studio のコンパイラ(cl.exe)はデフォルトで C++ としてソースファイルを扱います。
- ソースコードを 純粋な C 言語(C89/C90, C99 など)としてコンパイルしたい場合は、
/TCオプションを付与します。これにより 拡張子が .c のファイルだけでなく、.cpp ファイルでも C として扱う 設定になります。 - GUI 上では「プロジェクト → プロパティ → C/C++ → コマンド ライン」へ
/TCを追記するか、上記手順③の「C 言語」チェックで自動的に設定されます。
2.2 VS Code + gcc (MinGW)/clang (LLVM)
| 手順 | 内容 |
|---|---|
| ① | https://code.visualstudio.com/ から VS Code をインストール |
| ② | 拡張機能マーケットプレイスで 「C/C++」(Microsoft) と 「Code Runner」 を導入 |
| ③ | Windows 環境の場合は MinGW‑w64(https://winlibs.com/)または LLVM for Windows(https://releases.llvm.org/download.html)をインストールし、bin ディレクトリを PATH に追加 |
| ④ | VS Code の設定 (settings.json) に以下を追記して IntelliSense とフォーマッタを有効化 |
|
1 2 3 4 5 |
{ "C_Cpp.intelliSenseEngine": "Default", "C_Cpp.clang_format_path": "C:/Program Files/LLVM/bin/clang-format.exe" } |
| ⑤ | プロジェクトルートに tasks.json を作成し、ビルドタスクを登録
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "version": "2.0.0", "tasks": [ { "label": "build C program", "type": "shell", "command": "gcc", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe"], "group": "build", "problemMatcher": ["$gcc"] } ] } |
| ⑥ | ターミナルで gcc --version(または clang --version)が表示されれば完了です。 |
補足
- macOS や Linux 環境では標準で gcc/clang がインストールされていることが多く、同様の手順で VS Code を設定できます。
3️⃣ 1 週間(7 日間)の学習プラン
| Day | テーマ | 推奨学習時間* |
|---|---|---|
| Day 1 | 基本構文・コンパイルフロー | 1.5 h |
| Day 2 | 条件分岐・ループ | 1.5 h |
| Day 3 | 関数とヘッダー分割 | 1.5 h |
| Day 4 | ポインタと動的メモリ確保(概念) | 2 h |
| Day 5 | 標準入出力・ファイル I/O | 1.5 h |
| Day 6 | 文字列操作と標準ライブラリ関数 | 1.5 h |
| Day 7 | 小規模プロジェクト(実装+デバッグ) | 2 h |
* 合計 ≈ 12 時間。各日とも「コードを書き、コンパイル・実行 → 振り返り」のサイクルを回すことが重要です。
3.1 各日の学習目標と演習例
| Day | 学習目標 | 演習課題(概要) |
|---|---|---|
| Day 1 | int, float などの基本型、printf/scanf の使い方、コンパイラ呼び出しの流れを理解する。 |
簡易電卓 コマンドライン引数で「+ - * /」と二つの整数を受け取り、結果を printf で表示するプログラムを作成。 |
| Day 2 | if‑else, switch, for/while/do‑while の構文と実行順序を体感する。 |
九九表ジェネレータ ユーザーが入力した 1〜9 の数字に対し、 for ループで掛け算表を出力する。 |
| Day 3 | 関数の宣言・定義、ヘッダーファイル (.h) と実装ファイル (.c) の分割方法を学ぶ。 |
自作 strlen文字列長を返す関数 my_strlen(const char *s) を別ファイルに実装し、テストコードで正当性を確認する。 |
| Day 4 | ポインタの基本概念と、malloc / free による動的領域確保の注意点(NULL 判定・二重解放)を把握する。 |
動的配列平均計算 入力された整数数 N を取得し、 int *a = malloc(N*sizeof(int)) で配列を確保。全要素の平均を求めて表示。 |
| Day 5 | ファイルストリーム (FILE*) のオープン・クローズ、テキスト入出力関数群を使用できるようにする。 |
行数カウントツール 指定したテキストファイルの総行数を fgets で読み取りながら数えるプログラムを作成。 |
| Day 6 | 標準文字列関数 (strcpy, strcmp, strtok 等) の動作と安全な使用法(バッファサイズ管理)を学ぶ。 |
簡易 CSV パーサ 1 行ずつ読み込んだカンマ区切りデータを strtok で分割し、各フィールドを画面に出力する。 |
| Day 7 | これまでの知識を統合し、ミニプロジェクト を一通り完成させる。デバッグ手順(ブレークポイント設定、変数ウォッチ)も体験。 | 選択肢①:ファイル検索ツール ディレクトリ以下のテキストファイルを再帰的に走査し、指定文字列が含まれる行とその位置を表示する。 選択肢②:数値ソートプログラム 標準入力から整数列を読み取り、クイックソートで整列して出力する。 |
4️⃣ サンプルコード(学習のハンドブック)
4.1 ファイル検索ツール search.c
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> void search(const char *path, const char *keyword) { DIR *dp = opendir(path); if (!dp) return; struct dirent *entry; while ((entry = readdir(dp)) != NULL) { /* "." と ".." は除外 */ if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) continue; char full[1024]; snprintf(full, sizeof(full), "%s/%s", path, entry->d_name); if (entry->d_type == DT_DIR) { search(full, keyword); // 再帰検索 } else { FILE *fp = fopen(full, "r"); if (!fp) continue; char line[512]; int ln = 1; while (fgets(line, sizeof(line), fp)) { if (strstr(line, keyword)) printf("%s:%d: %s", full, ln, line); ++ln; } fclose(fp); } } closedir(dp); } int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s <directory> <keyword>\n", argv[0]); return 1; } search(argv[1], argv[2]); return 0; } |
- ビルド(MSVC)
cmd
cl /TC /Zi /Fe:search.exe search.c - デバッグポイント例:
full文字列が正しく生成されたかをブレークポイントで確認すると、パス結合のロジックが分かりやすくなります。
4.2 数値ソートプログラム sort.c
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <stdio.h> #include <stdlib.h> void quick_sort(int *a, int left, int right) { if (left >= right) return; int pivot = a[(left + right) / 2]; int i = left, j = right; while (i <= j) { while (a[i] < pivot) ++i; while (a[j] > pivot) --j; if (i <= j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; ++i; --j; } } quick_sort(a, left, j); quick_sort(a, i, right); } int main(void) { int nums[1024], n = 0; while (scanf("%d", &nums[n]) == 1 && n < 1024) ++n; if (n == 0) return 0; quick_sort(nums, 0, n - 1); for (int i = 0; i < n; ++i) printf("%d\n", nums[i]); return 0; } |
- ビルド(gcc)
bash
gcc -O2 -g -o sort.exe sort.c - 学習ポイント:ポインタ演算は使用していませんが、配列とインデックスの関係を通じて「メモリ上の連続領域」感覚を養えます。
5️⃣ 推奨教材・情報源(信頼できるもの)
| カテゴリ | 書籍・サイト | 特徴 |
|---|---|---|
| 基礎テキスト | 『Cプログラミング入門 (第2版)』 – 山田 亮 (技術評論社) | 日本語で解説が丁寧、演習問題付き。 |
| 標準リファレンス | ISO/IEC 9899:1999 (C99) の日本語訳(JIS X 3015) | 言語仕様そのものを確認したいときに必須。 |
| オンラインチュートリアル | cppreference.com (https://en.cppreference.com/w/c) – C のページは英語だが最新情報が網羅的。 | 標準ライブラリ関数の例示・動作保証が明確。 |
| 動画教材 | Udemy – 「C言語 基礎から実践へ」(2024 年版) | 実際に手を動かす演習動画が多数。 |
| コーディング練習 | AtCoder Beginner Contest (https://atcoder.jp/contests) の C 言語向け問題 | アルゴリズムと同時にコンパイル・実行環境の慣れを獲得できる。 |
注意:本記事で紹介した「2026 年版」や架空 URL は削除しました。上記は 2024 年現在でも入手可能な公式リソースです。
6️⃣ 自己評価チェックリスト(学習完了後に確認)
| 項目 | 完了判定 |
|---|---|
変数宣言・printf/scanf が正しく使える |
☐ |
if / switch / for / while を自由に書ける |
☐ |
| 関数を別ファイルに分割し、リンクエラーが出ない | ☐ |
ポインタの概念と malloc/free の基本的な使い方を説明できる |
☐ |
ファイル I/O(fopen/fclose, fprintf/fscanf)でテキストファイルを扱える |
☐ |
文字列 API (strcpy, strcmp, strtok) を安全に利用できる |
☐ |
| ミニプロジェクトが ビルド → デバッグ → 正常実行 できる | ☐ |
すべてに ✔ が付いたら、次のステップへ進む準備完了です。
7️⃣ 次のステップ(学習を継続するためのロードマップ)
- 中級教材へシフト
- データ構造(リスト・スタック・キュー・木)やアルゴリズム(探索・ソート)の実装に挑戦。
- バージョン管理と CI の導入
- GitHub にリポジトリを作成し、
git commitとpull requestのフローを体験。GitHub Actions で自動ビルドを設定すると、実務に近い環境が手軽に構築できます。 | - Linux/macOS での開発経験
- WSL2(Windows Subsystem for Linux)や macOS のターミナル上で
gcc/clangを直接使用し、クロスプラットフォームのビルド手順を学習。 | - コードレビューを受ける
- オープンソースプロジェクト(例:GitHub 上の C 言語サンプル)に小さな PR を送ってみる。実際の開発者からフィードバックを得られます。 |
- 業務シナリオで応用
- 「設定ファイルのパース」「ネットワークソケットの簡易クライアント」など、職場で出会う具体的な課題に対して C 言語でプロトタイプを作成し、実践力を磨く。 |
8️⃣ おわりに
- 1 週間は「入り口」 に過ぎませんが、ここまでの学習で 「C の文法と開発フロー」 が体得できれば、以降のステップは格段にスムーズになります。
- 大切なのは 「手を動かす」こと と 「振り返って改善する」サイクル を継続する姿勢です。
- 本記事で示した環境構築手順と演習課題をまずは実行し、自己評価チェックリストで達成度を測定してください。その上で次のステージへ進む計画を立てましょう。
Happy Coding! 🚀