.NET関連技術

25 12月

C#たんは最初から最後までクライマックスだぜ!

 

この記事は、C# Advent Calendarの方の25日目です! 私の1人Advent Calendarの方は、そっちはそっちで書きます!

今日は、C#や.NETと、その周辺のキーワードを網羅的に紹介していこうかと思います。

.NET周辺キーワード

軽く図にしてみました。

 

コア

クロス ターゲットに使える部分です。.NET Frameworkの標準ライブラリの中でも、基礎中の基礎。

  • Text/RegularExpressions: テキスト処理と正規表現
  • Collections: コレクション
  • LINQ: データ列の加工や集計(.NET 3.0以降)
  • Math: 数学関数
  • Numerics: BigInteger(任意精度整数)とComplex(複素数)(.NET 4以降)
  • IO: ファイルなどの入出力
  • Net: ネットワーク アクセス
  • Reflection: 実行時型情報
  • Expressions: 式ツリー(ラムダ式をデータ化)、動的コード生成
  • Task: 同時実行(並列処理、非同期処理)
  • Service Model: サービス化(システムの備品化、疎結合化)
  • MEF (Managed Extensibility Framework): プラグイン拡張

 

クライアント

いわゆるビュー、プレゼンテーション層技術、GUIフレームワークです。XNA以外は、同じスタイルで開発(XAML+C#、Visual StudioやBlendによるRAD開発)できます。ただし、GUIのクロス プラットフォーム開発は割かし幻想で、ターゲットごとに微妙に差があります。

  • WPF: デスクトップ向け
  • Silverlight(ブラウザー): ブラウザー プラグインとして提供。FireFoxや、Safari上でも動きます
    • デスクトップ向けの.NETと比べると、使えるライブラリが少ないです
    • コアの部分は使えます
  • Silverlight(Windows Phone 7): Windows Phone 7向け。
  • Metro/WinRT: Windows 8なタブレット端末向け(現在、早期プレビュー版)
  • XNA: アクション性の高いゲーム向けのフレームワーク
    • イベント駆動型ではなく、メッセージ ループを直接書く
    • Windows PC、Xbox 360、Windows Phone 7上で動きます

 

加えて、ASP.NETでは、HTMLをサーバー上で生成して、クライアント側はブラウザーを使って表示というパターンもあります。HTML5にも対応しています。最近はjQueryに投資しているようです。

通信

WCFは、.NETにおけるサービス化の要です。ネットワークをまたいで、インターフェイスのメソッドを呼び出すようなプロキシの役割を担います。

元々は、いろんなタイプの通信プロトコルを統一的に扱うためのものでしたが、最近はHTTPを使ったウェブ サービスに最も注力しています。

昔は、SOAPというメッセージ交換プロトコルを主軸にしていましたが、今は、REST形式のプロトコルであるODataを主軸としています。XMLだけでなく、JSONにも対応しています。

アプリ サーバー

処理の大部分をサーバー上で行うようなアプリを開発するためのフレームワークとして、ASP.NETがあります。

サーバー上でHTMLを生成してブラウザーで表示する場合もあれば、ウェブ サービス化しておいてクライアント アプリから呼び出す場合もあります。

  • ASP.NET Web Forms: 通信層を隠ぺいして、デスクトップ アプリと同じ感覚でウェブ アプリを作れます
    • 内部を隠ぺいしすぎて不評というのもあったりします
  • ASP.NET MVC: .NET以外の言語のウェブ フレームワークに多い、MVC構造を採用したフレームワーク
    • HTTPを下手に隠ぺいするのはやめて、規約ベースでURLと処理の対応付けします

 

特に、ASP.NET MVCでは、HTMLの生成用のテンプレート部分に、aspx形式と、Razor形式(拡張子cshtmlかvbhtml)を選べます。Razorでは、<%%> のような不恰好なコード ブロックではなく、@ を使って簡潔にコードを書けます。

データ アクセス

C#などの.NET言語からデータベースにアクセスするためのフレームワークとして、ADO.NETというものがあります。

特に、.NET 4から標準に入った、ADO.NET Entity Frameworkというものを使うと、ER図的なデータ設計モデルからデータベースや、エンティティ クラス(.NET側からデータベースにアクセスするために使うクラス)を作ったりすることもできます。

  • Database-First: データベースからエンティティ クラスを生成します
  • Visual-Model-First: Visual Studio上で、ER図(Entity Relationship Diagram)的なGUIを使ってエンティティを設計し、データベースやエンティティ クラスを生成します
  • Code-First: 素のクラス(何も継承しないし、内部に何も特別な処理を書かない、純粋にデータを表すクラス)から、データベースやエンティティ クラスを生成します

サーバー インフラ

  • WF (Windows Workflow Foundation): フローチャート的な処理手順を、GUI上で編集して実行できます
    • SharePointサーバーやTFSのカスタマイズに使えます
    • 次期バージョンでは、バッチ処理をWFで書いて、PowerShellから起動というようなこともできるようになります
  • WIF (Windows Identity Foundation): 認証基盤

サーバー製品

サーバー アプリを作るなら、それを動かすためのサーバー製品が必要になります。オン プレミス(On Premise: 自前でハードウェアを持って自前で管理する)版と、クラウド(PaaS、管理もお任せ)版の両方が提供されています。

  • Windows Server/Window Azure: OS
  • SQL Server/SQL Azure: データベース サーバー
  • AppFabric: サーバー間の連携や、アクセス制御を担うインフラ

サーバー管理は、RDP(リモート デスクトップ接続)かPowerShellを使います。繰り返しになりますが、GUIにもCUIにもそれぞれいいところがあって、両方需要があります。Azure(のVM Role)ではクラウド相手ですらRDP管理できます。

また、Office製品と連携する業務基盤であるSharePointというサーバー製品もあります。OfficeやSharePointのカスタマイズも、Visual Studioと.NETを使ってできます。

開発インフラ

.NETと言えば、強力な統合開発環境。

  • Visual Studio: 説明不要かと思います。.NETの生産性の高さの原動力
  • TFS (Team Foundation Server): バージョン管理、作業項目管理、継続的インテグレーションなどを行うためのサーバー製品
  • Team Foundation Service: TFSのSaaS版。Azure上で稼働(現在、プレビュー版

Visual Studioは、2010から、拡張が簡単になりました。拡張マネージャーというものを使って、サード パーティ製のVisual Studio拡張を簡単にインストール可能です。拡張を作る側は、Visual Studio SDKというものを使います。

Roslynで一番期待されているのも、Visual Studio拡張によるメタプログラミングです。

現状だと、ビルド時コード生成によるメタプログラミングでは、T4テンプレートを使います。

コミュニティ

ライブラリ

現在では、約2年周期の大きなアップデート(Vistaから7にとか、Visual Studio 2008から2010にとか)の合間合間にも、オープン ソースで広くフィードバックを厚めながら新機能を提供しています。

コードの公開にはCodePlexというオープン ソース コミュニティ向けサイトを利用しています。

いくつか例を挙げましょう。

マイクロソフト公式のもの以外にも、コミュニティ ベースのToolkitもあります。

その他、CodePlexには有用なオープン ソース ライブラリがたくさんあるので、サイト内をいろいろ検索してみてください。

こうして作られたライブラリ(マイクロソフト公式の追加ライブラリや、コミュニティ ベースのもの)は、最近だと、NuGetという、オンライン ギャラリー + Visual Studio拡張を通して、簡単にプロジェクトから参照できます。

情報提供

マイクロソフトの開発者向け製品に関する情報は、MSDN(Microsoft Developer Network)というサイトに集約されています。

  • ライブラリ: APIリファレンスなど、学習コンテンツ
    • 初心者が学ぶには詳しすぎてしんどいなんて話もありますが、網羅性と詳細さは非常に良いです
    • 日本からは、「英語の情報があるってことは、まだ日本語未対応なんでしょ。そんな情報要らない」というフィードバックと「英語でもいいから最新の情報もらえないと困る」というフィードバックが半々で、途方に暮れているそうです
    • 「機械翻訳でもいいから早く」と「機械翻訳とか役に立たねー」も半々
  • ブログ: 社員によるブログ
    • 最新の情報はだいたいここ(の本社社員の記事、もちろん英語)から出てきます
  • マガジン: 毎月刊行される情報サイト
    • 元々は本当に紙の冊子も販売されてた
  • フォーラム: フォーラム(掲示板)形式で、質問や意見/要望を受け付けています
  • Code Recipe: コード付きのサンプル/解説置き場
    • 元々は公式コンテンツしかなかったですが、今ではユーザー投稿(誰でも可能)を受け付けています

多様化

C#やVBだけが.NETじゃなく、マイクロソフトだけが.NET提供しているわけではなく、PCだけが.NETの対象ではありません。

  • DLR (Dynamic Language Runtime): .NET上に動的言語を実装するための基盤
    • マイクロソフトの寄与度が高いものでいうと、IronPythonが提供されています
    • その他、IronRubyなど、いくつかの動的言語がDLR化されています
    • DLR上に実装された動的言語からは.NETのライブラリを利用でしますし、動的言語側で作ったクラスなども、C# 4.0のdynamicキーワードなどを使って相互運用可能です
  • mono: オープン ソースな.NET実装です
    • Mac向けやLinux向け、iOS向けやAndroid向けなども提供されています
    • UnityPlayStation Suiteなどのゲーム開発フレームワークでも採用されています
  • Robotics Studio: C#などを使ってロボットを制御
  • .NET Micro Framework:組み込み機器向け.NET
    • OSすら載せたくないような低フットプリント機器向けに、.NETの最低限の機能だけを提供
    • オープン ソース提供されています
    • Porting Kitを使って特定のハードウェア向けにカスタマイズすることもできます
    • 元から対応しているハードウェア基盤の購入もできます
    • モジュールの組み合わせでプロトタイプ作成ができる、.NET Gadgeteerというプロジェクトも

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。