Nawatech 20131123

735 views
620 views

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
735
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
1
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Nawatech 20131123

  1. 1. WF で夢見る世界 Ahf(小尾 智之)
  2. 2. 自己紹介 魂の VB 使い WF メイニア CLR/H スタッフ @IT @twit_ahf エンジニアライフ 地方からの戯言 Tomoyuki.Obi プロレス好き DDT / BJW / K-DOJO てすとぶろぐ http://blogahf.blogspot.jp/
  3. 3. 本日のアジェンダ Workflow Foundation 概略 WF で運用管理
  4. 4. Workflow Foundation WPF や WCF と同じく .NET Framework コンポーネント 直観的な デザイナ アクティビティと ワークフロー WF 3.x と WF 4.x サービスの 作成
  5. 5. WF と 関連技術 WPF • アクティビティ デザイナー SQL Server • 永続化機構 (標準提供) WCF • ワークフロー サービス IIS • ワークフロー サービス
  6. 6. WF を利用している製品 SharePoint ~2010 は WF 3.x 2013 は WF 4.x BizTalk 2010~ は WF 4.x TFS 2010~ は WF 4.x
  7. 7. WF を利用しているコンポーネント PowerShell PowerShell 3.0 より利用  PowerShell は内部で WF 4.x を利用  PowerShell Workflow は PowerShell のスクリプトを ワークフロー化させて WF ランタイム上で動作  WF ワークフローは PowerShell で呼び出し / 実行可能  PowerShell のコマンドレットは WF アクティビティとしても提供
  8. 8. WF と PowerShell Workflow PowerShell Workflow Xaml に変換 Workflow Foundation 実行 workflow Get-Sample { Dir }
  9. 9. WF と PowerShell Workflow Workflow Foundation LoadModule で 読込 PowerShell Workflow Workflow Foundation 実行は WF 上 実行
  10. 10. WF と PowerShell Workflow PowerShell のスクリプト PowerShell Workflow Workflow Foundation WF のワークフロー  どちらを利用しても同様のことが可能  どちらを利用しても相互変換可能
  11. 11. 次世代の WF Workflow Manager Workflow のホスティング を行うアプリケーション  オンプレミス/クラウド上を問わずに簡易に ワークフローホスティングを行うアプリケーション  IIS の設定等が不要  セキュリティ要件が厳しめに変更され WF 4.x アクティビティの一部が利用不可  基本演算を行うアクティビティなどが大量に追加  別名 Azure Workflow Services
  12. 12. WF 3.x と 4.x WF 3.x のデザイナーは 流れを表す WF 4.x のデザイナーは 流れと設定を表す
  13. 13. WF 3.x と 4.x 3.x と 4.x はクラス構成も 変更され全くの別物  基底クラスから全て異なる 3.x で実装された処理を 4.x で利用する特殊措置  Interop アクティビティ  CodePrex で移行キットを提供  基本は作り直し  WF 3.x を利用してないのなら 気にしないのが幸せです
  14. 14. WF 4.x での主な改善点  WF 3.x よりもパフォーマンス向上  全面的に向上しすぎ  今まではなんだったんだ 参考:MSDN:Windows Workflow Foudation 4 のパフォーマンス http://msdn.microsoft.com/ja-jp/library/gg281645.aspx
  15. 15. アクティビティとワークフロー ビルド ビルド アクティビティ アクティビティ アクティビティ アクティビティ アクティビティ アクティビティ アクティビティ アクティビティ アクティビティ アクティビティを設置したワークフローをビルドすることで ワークフロー自体がアクティビティとなり再利用できる
  16. 16. アクティビティデザイナー WPF によるユーザー コントロール作成と同じ Express 環境の場合は ActivityDesigner クラスを 利用するよう xaml を書き換えることで作成可能
  17. 17. デザイナーのメリット WPF 画面の作成と同様 WPF でできることは 同じく実現可能 デザイナー上での入力 プロパティダイアログを 見なくても設定可能 インテリセンス対応 WF 固有の ExpressionTextbox ではインテリセンス自作可能
  18. 18. WF サービス WF サービスプロジェクト の初期状態 メッセージの受信と結果の 送信が既に用意されている 間に処理を挟むことで サービスとして作成
  19. 19. スクリプト資産 MS-DOS VBS WSH PowerShell 似ていても微妙に 違うスクリプトの 大量発生
  20. 20. スクリプト資産 MS-DOS スクリプト改修には 知識が必要なケース VBS WSH PowerShell
  21. 21. スクリプト資産 何を利用しているかを 意識する必要がない スクリプトを ラップする中間層 プログラム 開発では よく利用する方法 MS-DOS VBS WSH PowerShell
  22. 22. スクリプトのラップ ラップする方法は多種多様 既存スクリプトを Process.Start で実行 .NET のライブラリを利用 スクリプトを ラップする中間層 MS-DOS VBS WSH PowerShell どの方法を用いても良いが ラップする手法自体は統一しておくと楽
  23. 23. 運用管理の基本形 WMF エージェント アプリ ケーション WMI
  24. 24. 運用管理するためのベース WMF のリリースによって楽になっているが WMI ベースは変化していない WinRM WMF WinRS PowerShell WMI
  25. 25. WMI を利用するアクティビティ スクリプトを実行 PowerShell のクラスを利用 WMI を直接操作
  26. 26. Dim objWMIResult Dim objLocator Dim objService Dim objWMIClass Dim strPCName ローカルのホスト名取得 VBS スクリプト 'ローカルコンピュータに接続しクエリを実行する objLocator = WScript.CreateObject("WbemScripting.SWbemLocator") objService = objLocator.ConnectServer objWMIResult = objService.ExecQuery("Select * From Win32_ComputerSystem") ‘結果の取得 For Each objWMIClass In objWMIResult strPCName = objWMIClass.Name Next Get-WmiObject Win32_ComputerSystem | select Name ローカルのホスト名取得 PS スクリプト
  27. 27. 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 アクティビティ
  28. 28. 作成したアクティビティを ワークフローに配置し実行 実行結果は問題ないが 見た目で処理がわかりにくい
  29. 29. 見た目の分かりやすさ 日本語で記述するだけでイメージが変わる
  30. 30. 見た目の分かりやすさ WF4.5 からは注釈を設定でき より見た目で理解しやすく
  31. 31. アクティビティデザイナーは WPF ワークフローデザイナーは WPF 上で動作するので アクティビティデザイナーも当然 WPF で動作する WPF アプリケーションでできることは WF のアクティビティデザイナーでも実現可能 音声を流すデザイナーも作成できるので 利用を補助する「声によるコメント」も可能
  32. 32. WMI プロバイダの作成 System Center は WMI プロバイダから値を 取得するのをサポートしているのでプロバイダを 自作することで色々なものを監視することができる 基幹システム 3rdパーティ製品 WMI プロバイダ WMI だけでは 難しい監視 既存監視 スクリプト
  33. 33. WMI プロバイダ アプリケーションから WMI に情報を配信 するための仕組みが用意されており 独自に実装することができる 分離型 インプロセス型 • セルフホスト型 • WMI サービスホスト • 実行中のみ可能 • 常に利用可能 • 管理者権限が必要 • GAC への配置が必要
  34. 34. 作成したアセンブリを InstallUtil.exe で登録する必要がある 管理者権限で実行 インプロセス型の場合 GAC に登録が必要 アセンブリの署名必須
  35. 35. Imports System.Management.Instrumentation Imports System.ComponentModel ''' <summary>WMI プロバイダインストーラクラス</summary> <RunInstaller(True)> Public Class SampleWMIProviderInstaller Inherits DefaultManagementInstaller End Class インストーラクラス 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 入力用フォーム
  36. 36. Imports System.Management.Instrumentation WMI プロバイダ ' アセンブリに対しての 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
  37. 37. WF で運用管理 監視アクティビティ WF サービス 監視情報を公開する サービスの提供 ワークフロー 情報を公開する土壌を WF で作成することで 見た目に理解しやすい形になるのでカスタマイズの 難易度も低下できる
  38. 38. WF サービスとストアアプリ ストアアプリで手軽に外部サービスを 利用する方法がサービス参照 .NET アプリしか接続できない WF を組み合わせることでストアアプリの 監視ツールを作成するのが容易に
  39. 39. 「できる人を増やす」ために 直観的 • 見た目で処理の概要がわかるよう • 適度なコメント 専門的 • 汎用さは多くの指定が必要に • 無駄が生み出す理解しやすさ 大小混ぜた粒度 • 部品の粒度はこだわらなくて良い • 小回りが利く≠利用しやすい 最初のうちは処理の中身まで知る必要はなく 「なんとなく」でもできるようになるのを優先
  40. 40. まとめ 既存資産を置き換える必要はなく WF で ラッピングすることにより利用しやすく WF はコードを書かない非開発者向け 開発者視点で WF を利用する利点はなく いかに他の人に利用しやすくするか スクリプトを書くよりも敷居が低いので 処理を作成する難易度を下げられる 理想は「全員が技術に精通すること」だが そこを目指すために WF でまずは使わせることも 一つの手段としてはありだと思います。
  41. 41. 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/)

×