4/4(Sat)

今日の生放送

かいせつ先輩

スマートフォン向けのアプリがどんどん増えてきているから、覚えたい人も多いのでは?そのアプリの開発によく使われているのが、「C#」というプログラミング言語だよ。

 

ただ、一からC#を覚えようと思っても、何から手を付けてよいのかわからないよね。

 

でも大丈夫!ほかの言語でプログラミングの経験がある人も、これからプログラミングを学んでいこうと考えている人も、本講義を聞いて、まずはC#の基本から理解していこう。

 

「C#」とは?

 

猫田くん

C#って何?どのような言語なの?

 

かいせつ先輩

C#は、日本マイクロソフト株式会社が開発した言語だよ。Windows用のデスクトップアプリケーションを製作するために作られたみたいだね。

 

でも、最近ではAndroidとかiOSのようなスマートフォン向けのアプリケーションでもC#を使えるようになったし、「Unity(ユニティ)」っていうゲームを作るためのツールがC#で開発されていることもあって、活躍の場は広がってきているね。

 

C#についてもっと知りたい人は、西村先生の講義を聞いて覚えていこう!

 

先生のご紹介

西村 誠 古代魚庵(フリーランス)/プログラマー・ライター

カレーパン屋の店主からプログラマーに転職する。主な使用言語はC#とPHP。Microsoft MVP for Windows Development。EC-CUBE公式エヴァンジェリスト。 <著書>『基礎からわかる C#』『EC-CUBE 3店舗運営&デザインカスタマイズガイド』ほか <連載>WebサイトCodeZineで連載中。

 

C#入門 -C#の概要と開発環境-

 

C#の特徴

 

西村先生:C#の特徴なんですけど、まず、オブジェクト指向型の言語です。ほかの言語のよいところも取り入れているんですけど、基本的にはオブジェクト指向型の言語です。

 

型は静的です。そして、強力な「IDE」をもっています。IDEというのは「統合開発環境」の略です。

 

学生代表:統合開発環境ですね、はい。

 

西村先生:あとは「デリゲート」っていう機能があったり、「async/await」、これは非同期通信っていうところなんですけど。このような独自の機能がいろいろ付いています。

最近、「Unix」というオープンソースでよく使われるOSでもC#が動くようになって、MacでもC#の開発ができるようになってきましたので、いまお伝えしたいのは、「マイクロソフトだけじゃないよ」というところにいろいろ広がってきています。

 

C#でできること

 

学生代表:では、C#でできることにはどんなことがあるのでしょうか。

 

西村先生:Windows上で動くアプリケーションが作れます。インターネットのウェブサイトですね。ホームページも作ることができます。

 

あとは、iPhone・Androidなど、タッチで操作するデバイスのアプリケーションも作れます。Unityというものを使えばゲームを作ることもできます。まだまだあって、小さくてなんでもデータを取ったりできるIoTデバイス。

 

OfficeやSharePointといった、仕事でよく使うソフトウェアの拡張機能も作れます。あと、クラウドで利用するアプリケーションも作れます。本当にいろいろなことができます。

 

学生代表:わりとなんでもできると覚えておけばよいですかね。

 

西村先生:はい、そうですね。

 

C#の歴史

スクリーンショット が含まれている画像

自動的に生成された説明

 

学生代表:では先生、歴史について教えてください。

 

西村先生:C#の歴史ですけど、バージョン公開が2002年と、「Java」とか「C++」に比べると比較的新しい言語です。「Ruby」と比べると古いんですけど、Javaが1996年、C言語が1973年と比べると新しいです。なので、これら既存の言語のよいところを取り入れた言語になっています。

 

最近あまり聞くことがないとは思うんですが、「Delphi(デルファイ)」というものがあって、開発環境だった言語なんですが、そこの開発者が参加しているので最初はそれに近い形で始まりました。

 

Delphiに似た言語から始まったC#は、C#2.0になることで大きく変わります。

「ジェネリクス」だったり「static」などが追加されます。なので、staticってプログラミング言語を知っている方だったら結構わかるところだと思うんですが、C#1.0ではなかったんですね。C#2.0でようやくこれが追加されました。

 

そして、C#3.0で「varキーワード」「型推論」っていう、これも面白いところなんですけど、これが入ってきます。「ラムダ式」「LINQ」とかも、ここで追加されます。

 

さらに、C#4.0で「dynamic」っていう機能が追加されます。先ほど「C#は静的な言語です」と話したんですけれども、そこに一部、動的な機能を追加する必要が出てきたので追加した。ってのが、dynamicです。

 

で、C#5.0になったときにスマートフォンが出てくるんですよ。で、スマートフォンって画面がヌルヌル動かないとダメじゃないですか。快適な動作を実現するために非同期処理というのが出てくるんですけど、その非同期がやりやすいようにC#5.0で非同期向けの機能を追加したんです。

 

学生代表:非同期処理ができるようになった。C#5.0から。

 

西村先生:「やりやすくなった」ですね。需要が高まるにつれて、そういった書きやすくなるようなものが追加されます。時代時代のプログラムの、アプリケーションの、必要に合わせてC#で機能を追加していく部分もあります。

 

それで、C#6.0というバージョンでコンパイラーの刷新。もう、根本部分を作り替えたんですよ。

 

あと、「オープンソース」といって、ソースを公開し始めました。日本マイクロソフト株式会社が。これは聞こえが悪いんですが、iOS、AppleさんにWindowsの携帯が負けちゃった部分があるんですよ。そこで、日本マイクロソフト株式会社は負けるだけじゃなくて大きく変わったんですよ。オープンにしていこうと。で、オープンソースになったという流れがあります。

 

そして、C#7.0が「Visual Studio 2017」と同時に登場しました。大きな動きなんですけど、ウェブサイトを作る「APS.NET」というのは、元々マイクロソフト製のサーバー・機械でしか動かなかったんですけど、Linuxといったところでも動くようになってきました。この辺もオープンの流れですよね。

 

それから「ザマリン(Xamarin)」によるAndroid、iOSの開発部分でどんどん機能が追加されています。

 

このような感じで、「マイクロソフト製品だよねC#は」という部分がだいぶ変わりつつあるかな、っていうのがご理解いただけるかと思います。

 

.NET Framework

人 が含まれている画像

自動的に生成された説明

 

西村先生:では、概要。ちょっと細かいところになってくるんですけれども「.NET Framework」 というものがあります。

 

学生代表:何でしょうか。

 

西村先生:これは、「言語に依存しない開発環境および実行環境を提供する」というものなんですけれども、C#でも書けるし、「Visual Basic」でもアプリケーションが作れますよ、C++でも作れますよ、という環境を提供したんです。

 

同じような感じで機能を利用できる、というものですね。これを、共通言語基盤っていうんですけど。言語が違っていても、同じ感じでアプリケーションを作ることができる仕組みだと思っていただければ十分です。

 

なので、お仕事でC#を利用する場合は、自分が作る環境とお客さまが動かす環境に入っている「.NET Framework」のバージョンに気をつけないと、場合によっては片方のバージョンが古い、ということがあるので、納品先、お客さまの環境に注意していただければ、と思います 

 

.NET Core

 

西村先生:「.NET FrameworkをさらにMacやLinuxで動かしたい」というときに使うのが「.NET Core」というものです。

 

Visual Studioでは、「.NET Framework」という従来のものと、新しく出た「.NET Core」が出るので、覚えておいてください

 

中間言語

 

西村先生:Javaとかほかの言語で開発をやっている人だったらご存知だと思うんですけれど、C#で作ったアプリケーションは「中間言語」という形でコンパイルされます。

 

学生代表:中間言語?

 

西村先生:はい。中間言語っていうのは CPUのタイプにかかわらず、いろいろなパソコンで動かすための形式だと思ってください。パソコンってCPUによっていろいろあるんですよ。ビットの違いとか。それによって違うので、どれでも動かせるような形でコンパイルします

 

これは、Javaとかと同じ動作です。C#を中間言語に翻訳することをコンパイルといいます。

 

C#というプログラミング言語は、人間が書ける、人間が読める、という言語ですよね。中間言語というのは、読める人は誰もいないけれどアセンブラに翻訳できる。「アセンブラ」というのも難しい言葉ですけど、アセンブラというのはコンピューターが読める言語です。

 

人間が読める言語で書いていきます。そして、最終的にはパソコンが読める形にしないといけないんですけれども、パソコンの種類によって読める形式が違う。

 

ですので、いったん中間的なものにしておいて、それをパソコンに実行するときに変換する、という形をとっています。

 

もともとWindowsを使ったことのある方は、32ビット用と64ビット用のソフトとかをネットからダウンロードするときがあったと思うんですよ。「32ビット版の場合はこれを落としてください」みたいな。

 

ただ、中間言語だとそれが必要ありません。一個落としてしまえばどっちでも動くという形になっています。

 

学生代表:なるほど、ありがとうございました。では、続いて開発環境の構築についてです。先生教えてください。

 

開発環境の構築

 

西村先生:C#で開発をするために必要なものは「Visual Studio」です。Windowsの場合はそれだけ入れてもらえばOKです。

 

Macではもともと、Visual Studioというものはなかったんですけれども、いまは「Visual Studio for Mac」というものができて、MacでもC#で書けます。先ほどの、オープンになりつつあるだとか、Microsoft だけじゃなくいろいろところで開発したり動くようになったり、という流れの一環であると思ってください。

 

学生代表:Macユーザーの方も使えるようになったんですね。

 

Visual Studioとは

 

西村先生:Visual Studioというのは、Microsoftが提供する「IDE」。「統合開発環境」というツールです。

 

コーディング、プログラムが書きやすくなるだけじゃなくて、プログラムのバージョン管理、仕事では必須の技術なんですけど、そのバージョン管理や、単体テストですよね、テストをするための補佐とかいろいろな機能が統合されています。プログラムを書くだけじゃなくていろいろな機能をサポートしてくれます。

 

なので、オープンソースの界隈では「PHPのソースコードはエディタで書いて、アップロードはFTP接続します」のように別のソフトに変えるんですけど、Visual Studioは全部Visual Studioだけで進めることができます。


動的な型付けと静的な型付け


 

西村先生:で、ちょっとコーディングの補佐というところで、「静的な型付け言語」と「動的な型付け言語」の比較を紹介したいと思います。

 

静的な言語と動的な型付けで何か違うかというと、静的な型付けって「型」があるんですね。

 

学生代表:「型」ですか。

 

西村先生:文字だったら文字、数字だったら数字というものしか変数って言われるものに入れられないんですよ。

 

学生代表:うーん。。。


 

西村先生:動的な言語では、どの変数に何が入っているのかわからないんですよ。しかし、C#は静的な言語で変数の型がわかるので、Visual Studioはその型に合わせた候補を出すことができます。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

ですので、IDEと静的な言語は非常に相性がよいです。Javaとかもそうなんですけど。という感じなので、意外とC#はサクサク、タイプ量が少なく打てる言語です。言語というよりIDEの力もあるんですけど。

 

型が決まっているから補助がしやすい。何が入っているのかがはっきりしているので補助ができる。といった感じで、静的な型付け言語は非常に強力な補助ができます。

 

逆に、テキストエディタでC#を書くのは非常に苦行ですね。補助がないので。それは非常に辛いので、Visual Studioを使ってください、という話になります。


 

補足ですけれども、PHPは動的な型というか型に決まりがないので、「1」という数字を入れた後に同じ変数に動的な型付け、文字を入れることができます。

 

スクリーンショット が含まれている画像

自動的に生成された説明


 

C#はこれができません。こんな感じです。「int(イント)」っていう数字ですね。intって整数なんですけど、整数を入れるための変数には、「この文字は代入できない」と書いてあるとおり、文字列は入れられません。入れるとエラーになります。

 

人 が含まれている画像

自動的に生成された説明

 

PHPのような動的な言語だと逆に、どこに何が入っていないかがわからないからミスが起きる、エラーになる、ということがあります。

 

C#はその辺の型が決まっているので、そういうミスが少なくなります。

 

で、先ほどいったように、int 型です。これに「1」が入ります。これはエラーになりません。で、緑線が出ているんですけど、これは使っていないからということです。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

この「intValue」に文字を入れてみます。ここに赤い波線が入っているのが見えますかね。これがエラーです。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

このエラーは、「もう実行できません。こうなったら直してください」ってことですね。というのを教えてくれます。

 

学生代表:エラーを教えてくれる。

 

西村先生:はい、そのエラーを実行前に教えてくれます。面白いのが、実行前と実行後っていうのは影響が大きいんですよ。

 

たとえば、ソフトを作ってお客さんに「はい、これアプリケーションですよ」って渡してからエラーが出るのと、Visual Studioでコードを書いている時点でエラーが出るのってやっぱりダメージが違うじゃないですか。

 

じゃあ動的な言語、PHPがダメかというとそうではなくて。PHPはすぐに直せるんですよ。インターネットのサイトとかでエラーが出ても即座に直せるという強みがあります。

 

学生代表:なるほど。

 

西村先生:C#は即座に直すっていうのはちょっと難しいので、一長一短があります。なので、静的な言語か動的な言語かというのは、皆さんが何を作るかというときに選択していただければなと思います。

 

コンパイル

 

西村先生:で、先ほどのちょっと難しいコンパイルの話ですけれども。

 

PHPは、誰かがサイトを見たとき・インターネットにアクセスした瞬間からコンパイルを始めるっていう、C#と比較すると実行速度が遅くなるという特徴があります。

 

ただ、C#もコンパイルで中間的な型にいったんしてしまうので、実行した後の修正が難しいという特徴があります。まぁ、コンパイルの作業まで IDE がやってくれるので、特に認識しないでもいいです。

 

あとは、短いタイピングでコードが補完できるというのは、静的な型付けの特徴ですね。補完機能があります。

 

また、それ以外にもVisual Studioの補完機能がいろいろあるので、簡単に紹介していきたいと思います。

 

コードスニペット


 

西村先生:たとえば Visual Studioで「for文」という繰り返しを行う処理があるんですけど、ここでtabキーを2回押すとここまで書いてくれます。勝手にfor文の基本的な構文を入れてくれます。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

これが「コードスニペット」という機能で、たとえば皆さんが、自分がよく使うコードやパターンがあるんだったら、そのコードを登録しておいて簡単に呼び出すことができます。

 

学生代表:登録もできるんですね。

 

西村先生:はい、たとえば、もっと量が多いのになるとしたらプロップ。「prop」と打ちます。

スクリーンショット が含まれている画像

自動的に生成された説明

候補がいくつか出たと思うんですけれども、Fを押すと「propfull」と出るので、tabキーを2回押すとここまでだだだだと。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

ここに書いちゃいけないところだったのでエラー(上画面:赤い波線箇所)が出ていますけれども、こんな感じです。ショートカット的な機能もいろいろ用意されているので、コード量が多いところをうまくカバーしてくれます。

 

ですので、Visual Studioを使いこなすとC#が上達するというのがあります。Visual Studio の機能を理解するというのは結構大事です。

 

IntelliSense

 

西村先生:あとは関数の引数表示ですとか、補完とか、この辺もちょっと見せます。


 

ConsoleのWriteLineでカッコまで打ちます。すると、いまここに小さくポップが出ているのは見えますかね。

 

スクリーンショット が含まれている画像

自動的に生成された説明

 

学生代表:出ていますね。

 

西村先生:これが引数です。ここで何が渡せるのかっていうのを教えてくれています。という感じで、「次に何を入れますか、何を入れますか」というのをどんどん教えてくれるので、あまり覚える必要がないんですね。

 

学生代表:覚える必要がない。あまりの早さにびっくりしています。

 

西村先生:使いこなすと非常に書きやすいところがあります。あと、コントロールスペースですね。こうなった時点でコントロールスペースをしてあげると、先ほどみたいに候補が出るので、ここから「これを呼びたいんだ」というのを探すことができます。

 

まとめ

 

西村先生:C#は静的な型付け言語なので、Visual StudioのIDEの補助を受けやすいです。処理も補助前提のため、C#のタイプ量ってConsole WriteLineみたいに長いじゃないですか。


基本的に長くなりがちなんですけど、長い方が情報量は多いじゃないですか。なので、やっぱり使う側も理解しやすいという部分と、補完機能があるので長くても少ないタイプ量で済むという利点があります。IDEを活用するとC#が書きやすくなるんですね。

この記事で紹介した授業をみる

学びのハイライト

今日の生放送

  • このエントリーをはてなブックマークに追加

まとめ記事の記事一覧