nawatech 20131123

43
WF で夢見る世界 Ahf(小尾 智之)

Upload: tomoyuki-obi

Post on 25-Dec-2014

345 views

Category:

Technology


2 download

DESCRIPTION

2013/11/23 NAWA Tech にて利用したスライド

TRANSCRIPT

Page 1: Nawatech 20131123

WF で夢見る世界 Ahf(小尾 智之)

Page 2: Nawatech 20131123

自己紹介

魂の VB 使い

WF メイニア

CLR/H スタッフ

てすとぶろぐ http://blogahf.blogspot.jp/

@twit_ahf

Tomoyuki.Obi @IT エンジニアライフ

地方からの戯言

プロレス好き

DDT / BJW / K-DOJO

Page 3: Nawatech 20131123

本日のアジェンダ

Workflow Foundation 概略

WF で運用管理

Page 4: Nawatech 20131123
Page 5: Nawatech 20131123

Workflow Foundation

WPF や WCF と同じく

.NET Framework コンポーネント

直観的な

デザイナ

WF 3.x と

WF 4.x

アクティビティと

ワークフロー

サービスの作成

Page 6: Nawatech 20131123

• アクティビティ

デザイナー

• ワークフロー

サービス

WF と 関連技術

WCF WPF

• 永続化機構

(標準提供)

SQL Server

• ワークフロー

サービス

IIS

Page 7: Nawatech 20131123

WF を利用している製品

SharePoint

BizTalk

TFS

~2010 は WF 3.x

2013 は WF 4.x

2010~ は WF 4.x

2010~ は WF 4.x

Page 8: Nawatech 20131123

WF を利用しているコンポーネント

PowerShell PowerShell 3.0 より利用

PowerShell は内部で WF 4.x を利用

PowerShell Workflow は PowerShell のスクリプトをワークフロー化させて WF ランタイム上で動作

WF ワークフローは PowerShell で呼び出し / 実行可能

PowerShell のコマンドレットは

WF アクティビティとしても提供

Page 9: Nawatech 20131123

WF と PowerShell Workflow

Workflow

Foundation

PowerShell

Workflow workflow Get-Sample

{

Dir

}

実行

Xaml に変換

Page 10: Nawatech 20131123

WF と PowerShell Workflow

Workflow

Foundation

PowerShell

Workflow

実行

LoadModule で読込

Workflow

Foundation

実行は WF 上

Page 11: Nawatech 20131123

WF と PowerShell Workflow

Workflow

Foundation

PowerShell

Workflow

PowerShell のスクリプト

WF のワークフロー

どちらを利用しても同様のことが可能

どちらを利用しても相互変換可能

Page 12: Nawatech 20131123

次世代の WF

Workflow

Manager

Workflow のホスティングを行うアプリケーション

オンプレミス/クラウド上を問わずに簡易に

ワークフローホスティングを行うアプリケーション

IIS の設定等が不要

セキュリティ要件が厳しめに変更され

WF 4.x アクティビティの一部が利用不可

基本演算を行うアクティビティなどが大量に追加

別名 Azure Workflow Services

Page 13: Nawatech 20131123

WF 3.x と 4.x

WF 3.x のデザイナーは

流れを表す

WF 4.x のデザイナーは

流れと設定を表す

Page 14: Nawatech 20131123

WF 3.x と 4.x

3.x と 4.x はクラス構成も

変更され全くの別物

基底クラスから全て異なる

3.x で実装された処理を

4.x で利用する特殊措置

Interop アクティビティ

CodePrex で移行キットを提供

基本は作り直し

WF 3.x を利用してないのなら

気にしないのが幸せです

Page 15: Nawatech 20131123

WF 4.x での主な改善点

WF 3.x よりもパフォーマンス向上

全面的に向上しすぎ

今まではなんだったんだ

http://msdn.microsoft.com/ja-jp/library/gg281645.aspx

参考:MSDN:Windows Workflow Foudation 4 のパフォーマンス

Page 16: Nawatech 20131123

アクティビティとワークフロー

アクティビティ

アクティビティ

アクティビティ

アクティビティ

アクティビティ

アクティビティ

アクティビティ

アクティビティ

アクティビティ

ビルド ビルド

アクティビティを設置したワークフローをビルドすることで

ワークフロー自体がアクティビティとなり再利用できる

Page 17: Nawatech 20131123

アクティビティデザイナー

WPF によるユーザー

コントロール作成と同じ

Express 環境の場合は ActivityDesigner クラスを

利用するよう xaml を書き換えることで作成可能

Page 18: Nawatech 20131123

デザイナーのメリット

WPF 画面の作成と同様 WPF でできることは

同じく実現可能

デザイナー上での入力 プロパティダイアログを

見なくても設定可能

インテリセンス対応 WF 固有の ExpressionTextbox

ではインテリセンス自作可能

Page 19: Nawatech 20131123

WF サービス

WF サービスプロジェクトの初期状態

メッセージの受信と結果の送信が既に用意されている

間に処理を挟むことで

サービスとして作成

Page 20: Nawatech 20131123
Page 21: Nawatech 20131123

スクリプト資産

MS-DOS

VBS

WSH

PowerShell

似ていても微妙に

違うスクリプトの

大量発生

Page 22: Nawatech 20131123

スクリプト資産

MS-DOS

VBS

WSH

PowerShell

スクリプト改修には

知識が必要なケース

Page 23: Nawatech 20131123

スクリプト資産

MS-DOS

VBS

WSH

PowerShell

スクリプトを

ラップする中間層

何を利用しているかを

意識する必要がない

プログラム 開発では

よく利用する方法

Page 24: Nawatech 20131123

スクリプトのラップ

ラップする方法は多種多様

既存スクリプトを Process.Start で実行

.NET のライブラリを利用

MS-DOS VBS WSH PowerShell

スクリプトを

ラップする中間層

どの方法を用いても良いが

ラップする手法自体は統一しておくと楽

Page 25: Nawatech 20131123

運用管理の基本形

WMI

WMF

エージェント

アプリ

ケーション

Page 26: Nawatech 20131123

運用管理するためのベース

WMF のリリースによって楽になっているがWMI ベースは変化していない

WMF PowerShell

WinRM

WMI

WinRS

Page 27: Nawatech 20131123

WMI を利用するアクティビティ

WMI を直接操作

スクリプトを実行

PowerShell のクラスを利用

Page 28: Nawatech 20131123

Dim objWMIResult

Dim objLocator

Dim objService

Dim objWMIClass

Dim strPCName

'ローカルコンピュータに接続しクエリを実行する

objLocator = WScript.CreateObject("WbemScripting.SWbemLocator")

objService = objLocator.ConnectServer

objWMIResult = objService.ExecQuery("Select * From Win32_ComputerSystem")

‘結果の取得

For Each objWMIClass In objWMIResult

strPCName = objWMIClass.Name

Next

ローカルのホスト名取得

VBS スクリプト

Get-WmiObject Win32_ComputerSystem | select Name

ローカルのホスト名取得

PS スクリプト

Page 29: Nawatech 20131123

Imports System.Activities

Imports System.Management

Public Class WMIComputerSystem

Inherits CodeActivity(Of String)

Protected Overrides Function Execute(context As CodeActivityContext) As String

Dim result = ""

Dim wmScope As New ManagementScope("¥¥" + My.Computer.Name + "¥root¥cimv2")

wmScope.Connect

Dim wmQuery As New ObjectQuery("SELECT * FROM Win32_ComputerSystem")

Using searcher As New ManagementObjectSearcher(wmScope, wmQuery)

Using queryCollection = searcher.Get()

For Each wmResult In queryCollection

result = wmResult("Name").ToString

Exit For

Next

End Using

End Using

Return result

End Function

End Class

ローカルのホスト名取得

WF4 アクティビティ

Page 30: Nawatech 20131123

作成したアクティビティをワークフローに配置し実行

実行結果は問題ないが

見た目で処理がわかりにくい

Page 31: Nawatech 20131123

見た目の分かりやすさ

日本語で記述するだけでイメージが変わる

Page 32: Nawatech 20131123

見た目の分かりやすさ

WF4.5 からは注釈を設定でき

より見た目で理解しやすく

Page 33: Nawatech 20131123

アクティビティデザイナーは WPF

ワークフローデザイナーは WPF 上で動作するので

アクティビティデザイナーも当然 WPF で動作する

WPF アプリケーションでできることは

WF のアクティビティデザイナーでも実現可能

音声を流すデザイナーも作成できるので

利用を補助する「声によるコメント」も可能

Page 34: Nawatech 20131123

WMI プロバイダの作成

System Center は WMI プロバイダから値を

取得するのをサポートしているのでプロバイダを

自作することで色々なものを監視することができる

WMI プロバイダ

基幹システム 3rdパーティ製品

既存監視

スクリプト

WMI だけでは

難しい監視

Page 35: Nawatech 20131123

WMI プロバイダ

アプリケーションから WMI に情報を配信するための仕組みが用意されており

独自に実装することができる

分離型

• セルフホスト型

• 実行中のみ可能

• 管理者権限が必要

インプロセス型

• WMI サービスホスト

• 常に利用可能

• GAC への配置が必要

Page 36: Nawatech 20131123

作成したアセンブリを

InstallUtil.exe で登録する必要がある

管理者権限で実行

インプロセス型の場合GAC に登録が必要

アセンブリの署名必須

Page 37: Nawatech 20131123

Imports System.Management.Instrumentation

Public Class Form1

Private wmiProvider As New SampleWMIProvider(Diagnostics.Process.GetCurrentProcess.Id)

Private executeTimer As System.Threading.Timer = Nothing

Private Sub Closed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed

InstrumentationManager.Revoke(wmiProvider)

End Sub

Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown 'タイマーにて1秒ごとにテキストボックスの内容を出力

executeTimer = New Timer(New TimerCallback(AddressOf OutputData), Nothing, 0, 1000) ' WMI プロバイダの公開

InstrumentationManager.Publish(wmiProvider)

End Sub

Private Sub OutputData()

wmiProvider.DisplayText = TextBox1.Text

End Sub

End Class

Imports System.Management.Instrumentation

Imports System.ComponentModel

''' <summary>WMI プロバイダインストーラクラス</summary>

<RunInstaller(True)>

Public Class SampleWMIProviderInstaller

Inherits DefaultManagementInstaller

End Class

インストーラクラス

入力用フォーム

Page 38: Nawatech 20131123

Imports System.Management.Instrumentation

' アセンブリに対しての WMI 設定指定

<Assembly: WmiConfiguration("root/clrh",

HostingModel:=ManagementHostingModel.Decoupled,

IdentifyLevel:=False)>

<ManagementEntity(name:="clrh")> <ManagementQualifier("Description", Value:="サンプル WMI プロバイダで誰でも利用可能です")>

Public Class SampleWMIProvider

#Region "プロパティ定義"

<ManagementKey()> <ManagementQualifier("Description", value:="プロセス Id を取得します")>

Public Property Id As Integer

<ManagementConfiguration()> <ManagementQualifier("Description", value:="表示されている文字列を取得します")>

Public Property DisplayText As String

#End Region

#Region "コンストラクタ"

Public Sub New(ByVal Id As Integer)

Me.Id = Id

End Sub

#End Region

End Class

WMI プロバイダ

Page 39: Nawatech 20131123

WF で運用管理

WF サービス

監視情報を公開するサービスの提供

監視アクティビティ

ワークフロー

情報を公開する土壌を WF で作成することで

見た目に理解しやすい形になるのでカスタマイズの

難易度も低下できる

Page 40: Nawatech 20131123

WF サービスとストアアプリ

ストアアプリで手軽に外部サービスを

利用する方法がサービス参照

.NET アプリしか接続できない

WF を組み合わせることでストアアプリの

監視ツールを作成するのが容易に

Page 41: Nawatech 20131123

「できる人を増やす」ために

専門的

直観的

大小混ぜた粒度

• 見た目で処理の概要がわかるよう

• 適度なコメント

• 汎用さは多くの指定が必要に

• 無駄が生み出す理解しやすさ

• 部品の粒度はこだわらなくて良い

• 小回りが利く≠利用しやすい

最初のうちは処理の中身まで知る必要はなく

「なんとなく」でもできるようになるのを優先

Page 42: Nawatech 20131123

まとめ

既存資産を置き換える必要はなく WF でラッピングすることにより利用しやすく

WF はコードを書かない非開発者向け

開発者視点で WF を利用する利点はなく

いかに他の人に利用しやすくするか

スクリプトを書くよりも敷居が低いので

処理を作成する難易度を下げられる

理想は「全員が技術に精通すること」だが

そこを目指すために WF でまずは使わせることも

一つの手段としてはありだと思います。

Page 43: Nawatech 20131123

Appendix

The Activity Designer (http://blogs.msdn.com/b/tilovell/)

AppFabric Team Blog(旧 The .NET EndPoint) (http://blogs.msdn.com/b/appfabric/)

MS 松崎さん Blog (http://blogs.msdn.com/b/tsmatsuz/)

てすとぶろぐ (http://blogahf.blogspot.com/)

恐らく退職などでもう更新されていない MSDN Blog Matt W's Windows Workflow Place

(http://blogs.msdn.com/b/mwinkle/)

Go with the Flow (http://blogs.msdn.com/b/flow/)

Cathy Dumas’s Blog (http://blogs.msdn.com/b/cathyk/)

Kushal Shah – Workflows (http://blogs.msdn.com/b/kushals/)