2013/06/22 つくばC#勉強会 幻想ツバメ(@f_swallow) Officeで始めるC# 2013/06/22 つくばC#勉強会 幻想ツバメ(@f_swallow)
Agenda C#でのOffice開発について VSTOって何 VSTO+ASP.NET(SignalR)の実現 PowerPoint+WinForms+WPF まとめ Agenda
!注意! 決して斧などは投げないでください 斧じゃなくても投げないでください なんか作ってたらタイトルとずれてるのですがそこは大目に見てあげてください あと私はVB.NETを基本使ってます
そもそもお前は誰 幻想ツバメとか名乗ってる人です Twitterでは@f_swallowでした 今年から新宿のどこかに通ってる学生をしてます →Facebookの某所にいるかもしれません 今年から新宿のどこかに通ってる学生をしてます 元Twitterクライアント開発側→Tumblrに逃げた えっちくない画像を保存するアプリケーション作ってます OfficeとかWeb APIとかに興味あります
違います
C#におけるOffice開発
Office開発といえば? Visual Basic for Applicationsが最初に上がる Excel DNAなんていうのもある でも今回はVisual Studio Tools for Officeについて Office開発といえば何があるか? VBA? Excel DNAというC#使えるのもあるよ! でも私はVSTOを話すよ!
Visual Studio Tools for Officeとは Visual Studio Tools for Office(以下VSTO)ではVisual Studioを用いてOfficeの拡張機能、自動化などを開発できる 開発できる製品はデフォルトでサポートしているのはOneNote,Access,Publisherを除くすべて 言語はVB.NETかC#のどちらかを選択可能 (昔はVB.NETのほうが優位だったが今はほぼ同等)
Visual Basic for Applications(VBA)とは Officeに標準でついているマクロや自動化した機能を開発するためのもの ドキュメントレベルの開発が可能で、特定のドキュメントにおける反復処理や特殊な対話を行うのに利用される 言語はVisual Basic 6のみ。難しくはないが古いため気が利かないこともある
VBA vs VSTO VSTO→アプリケーションレベルの開発 VBA→ドキュメントレベルの開発 VBA↔VSTOという相互運用も可能 VBAはファイルに固定されるためアプリケーションレベルの開発は不可能、VSTOはドキュメントレベルの開発もできるがいかんせんCOMなので細かい処理が厳しい
VSTOとは何か
もうちょっとわかりやすく Visual StudioでOffice開発ができる技術 VSTOではアプリケーションレベルの開発ができる .NETとOfficeの架け橋的な役割を担える技術がVSTO
Officeの開発モデルについて VSTO Apps for Office Open XML BCS Fluent UI VBA あああああああああ ああああああああ Office Services Add-ins
VSTO一つ覚えればいいの? つまりVSTOを使えばほぼすべてのOffice開発が実現できる? そうはいってもアプリケーションレベルのアドイン+.NETなのでそもそもあまり関係がなくてもできるという面がある OpenXMLとか実際別のSDK必要です
結局VSTOって何 アドイン作るのがメイン リボンとか扱えます BCSも大丈夫 OpenXMLも扱えるけど別段VSTO向けってわけでもない 今どきなApps for Officeも作れるかも?
実際はどんな感じなの WinFormsで開発していく感じ 対象がOfficeアプリケーションなだけで基本的には他のものと一緒 使える範囲も基本的には制限がなく.NET 4.5でasync/awaitとかだって普通にできます
Sample:iTunesをExcelから操作する COMを使ってiTunesは操作できる もちろんVBAでも可能だが記法が古い+リボンを使いづらい VSTOを使えばリボンのカスタマイズなども手軽 そもそもVBAを扱わなくても手慣れたC#で気軽に書ける
Demo
PowerPoint & SignalR
ASP.NETとは MicrosoftによるWebアプリケーションフレームワーク Windows Server上で動作し、デスクトップアプリケーションと同じようにWebアプリケーションを開発できる つまるところPHPのVB.NETやC#版みたいなもの
SignalRとは ASP.NETのサービスの一つで、双方向性のあるリアルタイム通信を提供する いわゆるプッシュ通知を実装するためのサービス 少ないコードで簡単にリアルタイムな通信ができる
SignalRのイメージ
もっと深く見てみよう SignalRではサーバー上にHubと呼ばれるオブジェクトを設置する
Hubのイメージだった、ような…
これはとっても難しいなって
なんか複雑で私にはちょっと… 確かにネットワークも絡むし複雑だがこう考えると実装する側の理解としては十分な理解となる Hub→クラス Send→そのままメソッド Receive→イベント Hubへの通知→Send(); クライアントへの通知→イベントをハンドルする
なんか複雑で私にはちょっと… つまりHubとか言ってるけどイベントを実行するとかメソッドを実行するとかそのレベルの話でしかないとも考えられる eventくらいならWinFormsとかWPFとかをやっていれば一度くらい触ったこともあるし理解だって難しいことでもない!
もう何も怖くない
PowerPointでどのように利用するか PowerPointのスライドショーをSignalRを使って行えればよいのでは? 手元のスマートフォンをコントローラとして作用させる 特別にポインターのようなものを買わなくても手軽にコントローラ作れれば便利?
こんなのを作ろう
実装をどうするか Windows Phone向けでもよいが通信が(お察しください)なのでHTMLページ+JavaScriptで操作する IIS Express 8上にホストしたSignalRのHubですべてを実現する Azure Web Sites? クレジットカードないって言われて… PowerPoint部分はVSTOでアドイン作ってつなげる
Demo2
Windows Forms + WPF (時間があったら)
Windows Forms(WinForms)とは グラフィックスを多用したアプリケーション(スマートクライアント)を作成するためのテクノロジ 古くから使われており、手軽に高機能なUIを持ったアプリケーションが作れる しかしリッチなUIかというとそうでもないし今どきな技術があんまり使えない
Windows Presentation Foundation(WPF)とは “魅力的な外観のユーザー エクスペリエンスを持つアプリケーションを作成するための次世代プレゼンテーション システム” UI部分とコードの部分を完全に分離でき、UI部分だけである程度の対話型アプリケーションを作ることも可能 WinFormsと比べて強力なデータバインディングやグラフィックス、アニメーションをサポートしている
しかしVSTOは 先ほどのとおりWinFormsで開発するスタイルでありWPFがメインではない しかしWindowsFormsIntegration.dllを使うことでWinFormsとWPFを相互運用することができる つまりWPF内でWinFormsを使ったりWinForms上でWPFを使うことができる(ただしUserControlのみ)
System.Windows.Forms.Integration WPFとWinFormsを相互運用することができるがユーザー定義のコントロールのみ WinFormsでWPFを使うときにはElementHost、WPFでWinFormsを使うときにはWindowsFormsHostを用いる
WinFormsでWPFを使うとき WinForms ElementHost WPF UserControl WinFormsによるフォーム フォーム内にコントロールを配置してもよい ElementHost WinForms内のコントロールの一つとして扱われる 子にWPF UserControlを持てる WPF UserControl WPFのユーザー定義のコントロール
使い方 普通にVisual StudioでWinFormsなフォームにWPF UserControlを置くと自動でElementHostが生成されてその上に設置される ElementHostを意識して利用することはほぼない
まとめ
まとめ VSTOはVisual StudioでOffice開発する技術 Office + .NETな開発でOfficeの新しい使い方を実現できるかも? SignalRのリアルタイム性を用いたアプリケーションなんかも今熱いですね!