「C#（シーシャープ）」とは？｜特徴・使用シーンを紹介します！


この記事を読めば、「C#」についてザックリと知ることができます！

具体的には、「C#」が
**①	どんな言語なのか**
**②	何をするために使われているのか**
**③	学ぶメリットは何か**
この3点についてわかります！

少しでも、「C#」に対して興味を持ってもらえたらうれしいです！


# 「C#」ってどんな言語？
Microsoftのアンダース・ヘルスバーグ氏によって開発され、2000年に登場しました。**現在でも盛んに使われている**歴史の長い言語です。主にWindows向けのアプリケーション開発に用いられます。開発環境を変えれば、Mac OSやiOS、Androidといった他のOSにも対応できます。

## 「C#」の４つの特徴
**１．オブジェクト指向言語である**
オブジェクト指向言語、とは、“部品を作って組み立てるイメージ”でプログラミングができる言語です。オブジェクト指向であることにより、**各プログラムの独立性が高まります。**それにより、他のプログラムを追加しても、一部を修正しても、影響が出にくく、**開発しやすいです。**

**２．文法がJavaに似ている**
「C#」の文法は、「Java」に似ている部分があります。そのため、「C#」を知っていれば、少しの学習でJavaを扱えるようになります。逆に、Javaを知っていても、「C#」の扱いが楽になります。

**３．開発環境が整っている**
「C#」は、特定の「統合開発環境（IDE , Integrated Development Environment）」で用います。GUIアプリ※の開発にはVisual Studio、Webアプリの開発にはASP.NET等、環境を変えれば、様々な作りたいものが作れます。特にVisual Studio は優れた自動補正機能があり、**初心者でも開発がスムーズに進められます。**
※画面上でユーザーが選択・操作ができるアプリ、一般的なアプリケーションはほとんどこれに当てはまります。

**４．汎用性が高い**
エクセル、パワーポイント、といったWindows用のアプリケーションから、マイクロソフト公式の検索エンジン「Bing」、更にはスマホゲームの「ポケモンGo」も、「C#」を用いて作られています。

# 「C#」の使用シーン３選
20年以上の歴史をもつ「C#」、開発は持続的に進められていて新しい機能に次々対応しています。

**１.	アプリ開発**
Visual Studioという環境を用いれば、フォームにボタンなどを張り付けていくだけで綺麗にGUIアプリケーションを作成できます。

**２. ゲーム開発**
Unityというゲーム開発プラットフォームを用いれば、物理エンジンを使うことができ、3D、2Dのどちらのゲームも作成可能です。

**３. クロスプラットフォーム開発**
従来は、Windows向けだった「C#」ですが、Xamarinというクロスプラットフォームを使うことで、Mac、iOS、Android向けのアプリも作ることができるようになりました。


# 「C#」を学ぶメリット
**- 蓄積されたデータを活用できる**
.NET Frameworkという開発環境内には、BLC（Base Class Library：ベースクラブライブラリ）があります。この中には、Microsoftによって作成された、プログラム群が用意されており、そこから引用するだけで簡単にプログラムを実行できます。

**- 汎用性が高く、応用が効く**
Windowsをはじめとした様々なOSでのアプリケーション開発や、ゲームの開発等、様々なものが作れます。

# 実際に「c#」を使ってみた！
　実際に「c#」を用いて、Unityで物体を動かしてみようと思います。

　Unityで物体を動かすには、実際に動く**オブジェクト**とコードが書いてある**スクリプト**の2つが組み合わさって動きます。
具体的に言うと、「Visual Studio」にて、「C#」という言語でコードを書いてスクリプトを作り、そのスクリプトをオブジェクトに紐づけると、オブジェクトがコードの指示通りに動きます。

### 例①	：物体を動かす
 画面上の赤いCube（立方体）のオブジェクトに、以下のように書いたスクリプトを紐づけます。
(“//”の後に書いてある言葉は、コードとして読み込まれることはありません。メモのような存在になります。)

```VisualStudio:Move
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour
{   float speed = 5.0f;
    // "speed"という文字には”5.0”という整数の値をいれるという宣言です。

    void Update()
    { //ここには、毎フレーム読み込んでほしいコードを書きます。
　　　
　　　this.transform.position += new Vector3(0,0,speed*Time.deltaTime);
      //スクリプトが紐づけられたオブジェクトの位置を、
      //x,y,zの方向軸を基準に見たときに、z方向に、”＋”するを続ける（＝ 動かしつづける）。
    }
}
```

そうすると、この動画のように動きます。
![Move.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2614507/3878dc25-3382-75a8-1ef8-aa352da1505d.gif)

奥に一直線に動きましたね。

### 例②	：物体を生成する
　先ほどの動くCubeをたくさん作ってみます。
　Unityで、**Create Empty**から透明なオブジェクトを生成し、それにCubeを作ってもらいます。そして、作ったオブジェクトに以下のように書いたスクリプトを紐づけます。

```VisualStudio:Make
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Make : MonoBehaviour
{
   public GameObject box;
    // ”box”という名前のオブジェクトを指定しました。
    // ”public”が書いてあると、Unity画面からオブジェクトなどを紐づけできます。
  
  void Update()
    {   Instantiate(box);
        //”Instantiate”は”生成する”という意味を持っています。
        //ここでは、先程指定した”box”というオブジェクトを”生成”するように書いてあります。
    }
}

```

するとこうなります。

![Make.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2614507/2f617c46-1221-67df-9f5f-eb4e46a3f63c.gif)


かなり大量の、赤いCubeが生成されました。
1フレーム＝1/60秒なので、1秒放置するだけで、60個の箱が生成されます！


　ちなみに、例②のコードに別のコードを加えると、**スペースキーを押したときだけ**のように、**特定のタイミングでのみ、オブジェクトを生成**することができます。

　ボタンを押したら、何かが発射される……。それって、シューティングゲームの動き、ですよね。
　ゲームが作れそうな予感にちょっとだけワクワクしませんか？　少しでもゲーム製作が気になったら、ぜひ「Unity」と「Visual Studio」のインストールから、始めてみてくださいね。

# 最後に	
　Microsoftが開発した「C#」。いまや、様々な環境で使用できたり、他言語との関連があったり、と広い範囲で使うことができる言語です。開発環境が整っているため、初心者でも、**直感的に扱うことが可能**です。難易度も、C++や、Javaよりも低いため、**最初に学ぶプログラミング言語としてオススメ**です！

　「C#」を学ぶために、参考にできる書籍は数多くあります。ぜひ参考にして、**あなただけのアプリケーションを作ってみてください**。何から手をつけたらいいか困ってしまう人は、やりたいことに合わせたスクールで習うのもおすすめですよ。