本サイトからスピンオフした姉妹サイトです。C#2014年10月31日さまざまなプラットフォーム向けのプログラムを開発できるまでに進化してきたC#。その内容と特徴を、プラットフォームごとにまとめる。今後のC#/.NETがどのように進化するかも紹介する。3社合同で開催されました。本稿では、そのセッション内容を詳しく紹介します。勉強会では、下記の4つのセッションがありました。C#でできること本稿では、4の株式会社グラニの田中孝佳による「2014年版C#でできること」のセッション内容をご紹介します。本レポートは、話した内容をそのまま書き起こした形式となります。Sansan主催の「.NET勉強会」についてSansan株式会社は、スキルアップを目指す.NETエンジニアのための勉強会を定期的に開催しています。藤倉成太)の内容をレポートしたものです。ともに、.NETの最新技術や活用状況に関するセッションを行いました。OSだけの開発言語ではありません。マイクロソフトのサービスとだけ連携するわけではありません。本セッションでは、C#がさまざまなプラットフォームでの開発に利用できること、今後、C#がどのように進化していくかについて説明します。1.0は、2002年にJavaやDelphiの影響を受けた形で作られました。5.0でasyncキーワードなどが導入され、進化してきました(図1)。6.0では、“Roslyn”が導入されると思われます。C#の進化の歴史(※特に注目すべき機能に絞っています)――C#での開発が可能なプラットフォームC#による開発は、さまざまなプラットフォームで行われています。以下は、その主要な開発の例です。ecosystem」(図2)が提示されました。.NETでは、ランタイムにRyuJITという新しいJITコンパイラーが導入され、コンパイラーは“Roslyn”で刷新されます。Server、Windowsデスクトップ、Windowsストア、Windows以外にもiOS/Androidなどのプラットフォーム上での開発にも、.NETが活用できるようになっていっています。Foundationという独立フォーラムによるオープンソース化の方針も明らかにされています。Windowsフォーム、WPF――WindowsフォームからWPFへWindowsアプリケーションは、WindowsフォームからWPFへと変化してきました。Interface)から脱却しようという動きがあったことなどが挙げられます。WPFでは柔軟なレイアウトシステムが構築可能であり、UI定義をXAMLで行い、C#のコードから分離できることも、その変化を後押ししました。――時代は高DPI対応へWindowsアプリケーションはどんどんWPFへと変化してきましたが、今後は高DPI対応が進むと思われます。今4K液晶が話題になっていますが、これが当たり前のようにユーザーの手に渡る時代も近いのではないでしょうか。高DPI対応については、Windowsフォームでは、基本的にアプリケーション側が全て対応しなければなりません。WPFでは基本的に対応済みですが、マルチディスプレイ環境でモニターごとにDPIが違う場合には、アプリケーション側でちょっとした対応が必要です。参考までに、Windowsストアアプリはスケーリングにも対応しています。異なるプラットフォームで動作するようにしたアプリをユニバーサルアプリと言います(※ちなみにiOSのiPhoneとiPadの両方で動くアプリもユニバーサルアプリと呼ばれますが、これに近い概念です)。Phoneの両方で動作するアプリがユニバーサルアプリになります(これを指してユニバーサルWindowsアプリとも呼ばれています)。8デバイスはない状態です。将来的には、ここにXboxアプリが入る可能性があります。Runtimeの統一を行おうとしています。どちらについてもある程度は統一が進んでいる状態です。Runtimeについては、APIの9割が共通化しています。ユニバーサルアプリについては課題もあります。ストアの共通化は現在進行中です。Phoneアプリのそれぞれのデベロッパーセンターに行います。ユーザーがアクセスするストアも異なります。開発に関して、プラットフォーム固有のUIの書き方も課題になっています。PhoneアプリではUIや機能で異なる部分があります。アプリ側でこのように固有のUIやスタイルをどのように書けばよいのでしょうか。Phoneアプリにしかない「電話をかける」といった固有のロジックをどのように書き分けるかといった実践的な問題への対応はまだ確立しているとは言えません。――多解像度への対応デスクトップやタブレットなどWindowsデバイスの画面サイズはさまざまです。Phoneにも大きな画面のものと小さな画面のものがあります。このように画面サイズが異なる場合でも、UIは全て同じでよいかという問題があります。同じUIではよくないケースが多いでしょう。UIを統一しても使い勝手が悪くなると思われます。PhoneアプリでUIを切り分ければよいかというと、それも恐らく違います。前述の通り、Windowsアプリは大きな画面のデスクトップで使う場面もあれば、小さな画面のタブレットで使う場面もあるからです。このようにサイズの異なる画面に対応するには、解像度ごとにXAMLの定義を切り分ける方法がよいと言われていますが、現在進行中の話題として捉えてください。Webアプリケーション――数年おきの大変革Webアプリケーションについても数年おきに変革が起きてきました(図3)。MVC(以下、MVC)と変更されてきました。vNextが大きな変革になるかどうかは実際にリリースされないと分かりません。現在公開されている内容から大きな変革になるのではないかと思っています。――WebフォームからMVCへWebアプリケーションでは、WebフォームからMVCへという流れがありました。Webフォームでは、イベント駆動型のプログラミングが可能です。Basicなどのクライアント向けの開発手法で、GUIでUI要素をドラッグ&ドロップし、要素をダブルクリックしてイベントハンドラーを作ってロジックを書くという手順になります。そもそもクライアントとWebでは仕組みが異なるため、Webフォームでは限界があり、C#のRazor構文を使ってHTMLベースでUI開発を行うMVCに移行してきました。MVCでは、Model-View-Controllerデザインパターンを使います。Railsにインスパイアされて取り込んだ機能も数多くあります。このように大きな変革がありましたが、System.Web名前空間などのASP.NETのコアの部分については、拡張や改善が行われてきたものの、10年来引き継がれてきました。vNextの目的の1つです。vNextには次のような特徴があります。Webサイトの同時実行(グローバルアセンブリにあるASP.NETのコアライブラリを実行するのではなく、WebサイトごとにASP.NETライブラリを展開する)DI(=依存性の注入)の標準サポート高速化、低メモリ使用量、パフォーマンスの改善クラウドへの最適化クラウド3つのクラウドを、「.NETから利用する」視点と「.NETを動かす」視点から見てみましょう。.NETにより、.NETからAzureの全ての機能を実行でき、自動化も容易です。Studioで作成したプロジェクトを簡単にAzureにデプロイできます。Serverをほぼそのまま利用できます。Service)で動かすことができます。Webサイトにより、非常に手軽にクラウド上にアプリを作って公開できます。Webサイトにより気軽にASP.NETアプリを展開できることが挙げられるでしょう。Studioの新しいバージョンのプレビュー版がいち早くAzureに公開され、MSDNライセンスが必要なものがあるものの、すぐに利用できることもメリットの1つです。.NETがあり、自動化も可能です。Studioからも操作できます。EC2を利用することが多いです。Serverと変わりません。それ以外のクラウドサービスが強力であり、クラウドの重要な選択肢として取り上げられます。.NETにより、Gmailをはじめとする豊富なサービスの多くを.NETクライアントから操作できます。Gmailのメールの読み込み、Googleカレンダーのデータの取得や予定の挿入といった処理をC#のライブラリを使って実行できます。BigQueryも、.NETから利用できます。R2に対応しているだけで、最新版には対応していません。Platformは、.NETを動かす環境というより、.NETから他にはない特徴的なサービスを数多く利用できるという点で、注目すべきクラウドと言えます。Mac/Linux――MonoプロジェクトMacやLinuxで.NETを動かす選択肢の1つとして、Monoプロジェクトが挙げられます。Frameworkの実装で、オープンソース化されています。Xamarinがスポンサーを務めており、ECMA標準のC#を実装しています。Monoプロジェクトは、ランタイム、コンパイラー、クラスライブラリから構成されます。Frameworkはバージョン3.5以降オープンソース化が進んでいます。Frameworkのソースコードを利用して取り込めるようになったことから、Monoの進化もだんだん速くなっています。――Xamarinマイクロソフトと提携し、クロスプラットフォームでC#アプリを展開するためのツールやクラスライブラリを提供しています。Platformが利用しているという関係です。現時点では、Xamarin.Mac、Xamarin.iOS、Xamarin.Androidがあります。Studio拡張での開発も可能です。ゲーム――UnityUnityは、マルチプラットフォームのゲームエンジンです。U、PlayStation(これらは特別なライセンスが必要)などをサポートしています。C#での開発が可能で、C#以外の言語にも対応しています。Unityでは、Monoのバージョンが古く、さらにiOS側にいろいろな問題があることから、WebやWindowsの開発とは同じようにはいきません。WebやWindowsでC#を開発してきた経験があっても、UnityでのC#による開発はスムーズにはいかないことが多々あります。一方で、LINQやRxといったC#の強力な機能を利用できます。Studioでも開発できます。Unityは、マイクロソフトが開発元を買収したため、無償で提供されるようになりました。Studioと比べるとコード補完やデバッグ機能が貧弱です。Studioでデバッグするという操作が可能になります。Interface)――NUIとはNUIは、人間の自然な動きをコンピューターの入力として利用するための技術分野です。同時に動く複数の人間の動きをセンサリングするセンサー技術や、人間のさまざまな動きを入力パターンとして解釈する機械学習技術など、高度な技術を結集して作られています。v2は、マイクロソフトが出しているKinectの最新バージョンです。次のような機能を持つアプリをC#で開発できます。Office)VSTOを利用することで、クライアント版のOfficeのアドインを開発できます。VBAアプリの置き換え先としても利用可能です。クライアント版のOfficeを会社で使っており、必要な機能をアドインとして開発して展開したい場合に活用できます。365に機能を追加できる「Office用アプリ」が利用されています。Office用アプリはHTML+JavaScriptで作られるもので、C#では開発できないことに注意してください。ModulePowerShellでは、独自に関数をコマンドレットとして作成し、公開できます。Moduleを使えば、PowerShellコマンドレットをC#で実装できます。PowerShellはスクリプト言語であるため、PowerShellで作成したコマンドレットは速度が遅いこともあります。C#を使うことで、実行速度を向上できるほか、例外処理などC#の強力な言語機能も利用できます。Moduleの実体はクラスライブラリ(DLL)です。C#でPowerShellが提供するDLLを参照し、Cmdletクラスを継承してコマンドレットを作成できます。非常に便利な機能なので、実際に弊社でもいろいろと使っていますが、はまりどころが多く、設定ファイルに関連する問題が発生したり、そもそも情報が少ないといった課題があります。――コマンドをDLL参照してC#から実行MSDeployは、Webアプリやファイルの転送に使うコマンドです。通常はコマンドラインでオプションを指定して実行しますが、プログラムからDLLを参照し、APIを利用してデプロイを実行できます。APIでは指定可能なオプションや引数、実行結果を示す戻り値などの型が決められているので、プログラムから利用しやすいというメリットがあります。APIを実行するメソッドに対してtry/catchによる例外処理を実行できるため、コマンドラインでの実行時に、エラー情報を得にくいという問題を解決できます。WPFアプリからWebアプリをデプロイするような仕組みを作りたい場合に活用できます。まとめC#はMicrosoftプラットフォームだけのものではありません。vNext)においてもサポートされています。Microsoftプラットフォームでも、PowerShellコマンドレットやDLL参照などの運用分野、NUIという新しい分野など、活躍の範囲はどんどん広がっています。参考リソース本セッションの参考にしたリソースを紹介します。最後に、繰り返しになりますが、Sansanでは定期的に.NET勉強会を開催しております。※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。INDEX]を参照してください。Identityが生まれたのか紹介。その特徴と機能、構成、処理の流れなどを解説する。“14”の新機能として搭載予定の次期コンパイラープラットフォーム“Roslyn”について、簡単に話せるレベルになるまで、ほんの少しだけ踏み込んで解説。C#&.NETの進化と、次期版でできること(2014年版)さまざまなプラットフォーム向けのプログラムを開発できるまでに進化してきたC#。その内容と特徴を、プラットフォームごとにまとめる。今後のC#/.NETがどのように進化するかも紹介する。破壊的に進化する.NET技術のトレンド変化に立ち向かう数年で根本から大きく変更される.NET技術。gloopsで実践されている手法を具体的に説明する。Xamarinで今日から始めるクロスプラットフォーム開発クロスプラットフォームアプリ開発の戦略についてまとめ、Xamarinによるアプリ開発の特徴を説明する。Xamarinに関する情報収集や、Xamarin.Forms×MVVMによる開発のポイントを紹介する。機械学習エンジニアを目指す人~初中級者のための技術情報サイトです。「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。開発者のためのSlackチーム、作りました:「機械学習&AI」「クラウド&ビッグデータ」「IoTデバイス」のネット記事情報を共有中。2020最適なビューへの切り替えを推奨します:スマートフォン用表示に。