WindowsでLinux環境とC言語の環境を準備する

# はじめに
皆さん、C言語はやってますか? 僕が通っている高専の授業ではではDebian上でC言語を用いてプログラミングを行っていますが、学校でしかできない...　という人もいると思います。そこで、Linuxの環境とC言語の環境をWindowsPC上に用意する方法をまとめてみます。

## この記事の対象者
- C言語を自分のPCで実行できるようにしたい人
- Linuxのコマンドの練習を自分のPCでやりたいが、Linuxを入れるのは難しい人

## この記事をお勧めしない人
- Windowsを愛し、Windowsこそがどの点においても最高だと信じてやまない人
- Macユーザー(ただし仮想でWindowsを使用している場合を除く)
- Visual Studioを使いたい人

## この記事を読むにあたって最低限必要なこと
- PCにWindowsが入っていること
- PCの管理者権限を持っていること
- キーボード入力ができること
- ネットからファイルをダウンロードして実行したりなど、最低限のファイル操作ができること

## ざっくりとした説明
今回用意する環境の簡単な説明をします。興味のない人や、手っ取り早く環境構築したい人は、少し下の「Ubuntuのセットアップ」に進んでください。

### WSLとは
今回は、「Windows Subsystem for Linux」(以下 WSL)というシステムを使って、Windows上でLinuxを再現し、そこにC言語の環境を入れたいと思います。本来LinuxというのはWindowsと同じような括りで、普段使っているブラウザやゲームの土台となる部分です。ですから、WindowsとLinuxを同時に使う　ということはできません。しかし、PC上にPCを再現することによって、Windowsの中でLinuxを扱うことができます。これを実現したシステムが「WSL」です。

### Ubuntuとは
今回は、Linuxの中でも「Ubuntu」と呼ばれる種類を使います。Linuxと一口に言っても[リンク先の図のようにたくさんの種類があります](http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.svg)。その中で、木更津高専の情報工学科では「Debian」という種類を導入しています。
そして、今回扱うLinuxは「Ubuntu」というDebian系Linuxです。これは、Debian系という名前の通りDebianから派生したもので、Linuxの中でもトップクラスのシェアがあります。安定性が高く情報量が多いため、初心者でも扱いやすいOSであり、かつ学校のPCのDebianとほとんど同じように操作できるため、今回はUbuntuを採用します。

### GCC/GDBとは
今回は、GCCと呼ばれるC/C++のコンパイラと、GDBと呼ばれるデバッガを使用します。コンパイラとは、プログラミング言語をPCに読める形式に変換してくれるものです。授業を受けた人は、「./a.out」というファイルを扱ったことがあると思います。これが、PCに読める形式に変換されたC言語ファイルです。
そして、C言語のコンパイラはいくつもあります。その中で、今回はC言語の中でもメジャーであるGCCと呼ばれるコンパイラを導入します。ちなみに、GCCはC言語だけではなく、C言語の拡張版である「C++」という言語のコンパイルもできます。
また、デバッガとはデバッグ、つまりバグ修正を行うときに使うツールです。これもいろいろな種類があり、今回はGCCとセットで使われるGDBを使います。

### Visual Studio Codeとは
Visual Studio Codeとは、Microsoft社が開発する多機能エディタです。WindowsやMac、そしてLinuxでも使用できることが特徴で、WSLとの連携が非常にしやすいです。また、たくさんの言語に対応しており、専用の開発環境(統合開発環境)に劣らない様々な機能が搭載されているエディタとなっています。

# Ubuntuのセットアップ
まずはスタートメニューの検索から「Windows の機能の有効化または無効化」を実行してください。そうすると、チェックマーク付きの一覧が出てくると思うので、その中から「Linux用Windowsサブシステム」「Virtual Machine Platform(または仮想マシンプラットフォーム)」にチェックマークを入れてOKを押して、指示に従って再起動してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/97f51927-8f02-4430-9741-6f2bb3d501b1.png)

再起動が終わったら、[Microsoft Storeページ](https://www.microsoft.com/store/productId/9PDXGNCFSCZV)から、Ubuntuをインストールしてください。
ダウンロードが終わったら、Linuxカーネルというものを更新します。[Microsoftのページ](https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package)に「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」と書いてあるところがあると思うので、そこをクリックしてダウンロードしてください。そうすると、「wsl_update_x64.msi」などという名前のファイルがダウンロードされると思うので、実行して指示に従ってインストールを進めてください。

ダウンロードが終わったら、スタートメニューの検索などからUbuntuアプリを起動させてください。そうすると、下のようなターミナルが開くと思います。これがWSLのUbuntuになります![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/7fca5d2a-463a-24dd-8cef-d7b78f1ec138.png)
指示に従って以下の内容を入力していってください。入力したらエンターを押して確定させてください。

・Enter new UNIX username
→Linuxでのユーザーネームになります

・New password
→パスワードを入力してください。この時、入力したパスワードは表示されないので気を付けてください(バックスペースは使えます)

・Retype new password
もう一度確認のためパスワードを入力してください。

これらを入力すると、
```
ユーザーネーム@PCネーム:$
```
のような表示になるはずです。これで、Ubuntuのインストールは完了です。学校のPCと同じようにUNIXコマンドを使っていろいろな操作ができます。

# GCC/GDBのセットアップ
以下のコマンドを一行ずつ上から実行していってください。
```
sudo apt update
sudo apt upgrade
sudo apt install gcc
sudo apt install gdb
```
その時、途中で
```
[sudo] password for ユーザー名:
```
と聞かれることがあります。その時は、先ほど設定したパスワードを入れてください。なお、先ほどと同じように入力しても見えませんが、ちゃんと入力されています。また、
```
Do you want to continue? [Y/n]
```
と聞かれることもあるので、その場合は`y`と打ってエンターを押してください。
すべて実行し終わったら、以下のコマンドを打ってください。
```
gcc -v
```
この時、ずらっと出てくる結果の下のほうにgccのバージョンが表示されれば成功です。僕の時は以下のようになっていました。
```
(中略)
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)
```
これが成功したら、gccの導入は成功です。また、

```
gdb -v
```
を実行して、正しくバージョンが出てきたら、gdbの導入も成功です。僕の実行時にはこうなりました。
```
GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
```

# Visual Studio Codeのインストール
[Microsoftストア](https://apps.microsoft.com/store/detail/XP9KHM4BK9FZ7Q)からインストールをしてください。
インストールが終ったら起動すると、下のような画面が出てくるので、画面左の四角がいっぱいあるアイコンをクリックしてください。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/a09c3a26-d8e9-4ed7-0c75-6b5e4aa66fd1.png)
そうすると、一覧が出てきて一番上に検索欄があるので、それを使って拡張機能をインストールしてください。
・WSL
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/e35731e9-c37a-7a99-9e46-28b8dc4eedc1.png)


その後、ウィンドウの左下にある緑色のアイコン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/93137770-3d6d-6de4-c860-6b67e91f3a97.png)

↑をクリックすると、以下のような表示が出てくるので、「New WSL Window」を選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/bf30fb63-0b51-dcda-decb-9950d8c1f5a2.png)
すると、新しいウィンドウが開いたと思います。前に使ってたウィンドウは閉じても構いません。左下に「WSL:Ubuntu」と表示されていれば、無事Ubuntuと接続できています。

接続できたことを確認したら、先ほどと同じ手順で以下の拡張機能をインストールしてください。
・Japanese
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/e8f9d3c8-1312-cc47-0e0d-b7bb1076d031.png)
・C/C++
・C/C++ Themes
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/ea4e573d-4255-d628-5de3-a1d4c2b6c041.png)
この2つはインストールしてしばらくすると、ウィンドウ上部にこのような表示が出てくるので、好きなのを選んでください。コードを見やすくするための色の配色です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/0b164b0a-f625-ab0f-0627-3f540887d325.png)
・Cmake
・Cmake Tools
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/753fdc0e-a8bf-d748-76da-cfcd67346aa0.png)


最後にVIsual Studio Codeを再起動してください。再度開いたときに、左下に「WSL:Ubuntu」と表示されていなかったら先ほどと同じ手順でUbuntuに接続してください。

# Visual Studio Codeのコーディング設定
プログラムを書いて実行するための準備をします。
まずは、CtrlキーとNキーを同時押ししてください。そうすると、「Untitle-1」というファイルができると思います。次に、CtrlキーとSキーを同時押しすると以下のような表示が出てくると思うので、Untitle-1をtest.cに置き換えてOKを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/7f298327-b33a-56e6-be0c-a604cbf69843.png)
そうすると、C言語を書くことができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/f3cdb6e9-025c-482b-991a-f596820f8e63.png)
試しに、以下のコードを書いてみてください。
```c
#include <stdio.h>

int main(){
    for(int i=0;i<10;i++){
        printf("テストはとっても楽しいな\n");
    }
    return 0;
}
```

コードを書いたら次は実行します。Ctrl+F5を押すか、右上の「実行」から「デバッグなしで実行」を押してください。すると、下のような表示が出るので、一番上のやつをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/cd52831d-2d0a-ac99-46bc-d26e8085b8d6.png)
そうすると、下のほうにターミナルが出てきて、実行結果が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513361/2878a440-4767-43f7-56d6-96eab366ac6b.png)

# 次回の起動以降
基本的には、今回と同じようにすればできます。ただ、前回と同じファイルを開きたいとき、通常は前と同じファイルを開いててくれますが、たまに閉じられているときがあります。その時は、以下の手順で開いてみてください。
- 右下を確認して、Ubuntuに接続していなかったらUbuntuに接続する
- エディタ上のほうの「ファイル」→「ファイルを開く」から、前回作ったファイル名(今回の場合はtest.c)を開く

# 余談 - Linuxを使う意味
Linuxを操作する練習のため、Linuxをわざわざインストールしたように書きました。しかし、実はLinux上で環境を構築するメリットはほかにもあります。それは、Windowsと比べて楽に環境が構築できることです。今回の作業をWindowsのみで行うと、パスを通すなどのめんどくさい作業が出てきますが、Linuxはインストールするためのコマンドを打つだけででき、非常に便利です。ぜひ自分でもLinuxについて調べて、Linuxを使いこなしてみてください！

# 最後に
うまくいかなったら、[僕のTwitter](https://twitter.com/kokastar_dev)にDMするなどして僕に連絡をくれれば、アドバイスします。ぜひ、良いプログラミングライフを！