Windowsでの自動化の手段
1
いつもの作業を効率化する自動化
2
いつもの作業を効率化する自動化
• 退屈な繰り返し作業はしたくない
3
いつもの作業を効率化する自動化
• 退屈な繰り返し作業はしたくない
• 複雑な作業のミスを減らしたい
4
いつもの作業を効率化する自動化
• 退屈な繰り返し作業はしたくない
• 複雑な作業のミスを減らしたい
• 長い手順書にはうんざりだ
5
いつもの作業を効率化する自動化
• 退屈な繰り返し作業はしたくない
• 複雑な作業のミスを減らしたい
• 長い手順書にはうんざりだ
• 自動化そのものが好きだな
6
いつもの作業を効率化する自動化
• 退屈な繰り返し作業はしたくない
• 複雑な作業のミスを減らしたい
• 長い手順書にはうんざりだ
• 自動化そのものが好きだな?
7
お品書き
• 今日話すこと
• 自動化の手段をざっくり紹介
お品書き
• 今日話すこと
• 自動化の手段をざっくり紹介
• 今日はなさないこと
• 個々の手段の導入方法
お品書き
お前誰だよ?
11
お前誰だよ?
• Hidari(ひだり)
• Twitter @HIDARI0415
12
お前誰だよ?
• Hidari(ひだり)
• Twitter @HIDARI0415
• 大阪市内でエンジニアしてます
13
お前誰だよ?
• Hidari(ひだり)
• Twitter @HIDARI0415
• 大阪市内でエンジニアしてます
• 普段はC++とか.NET言語(主にC#)とか
14
お前誰だよ?
• Hidari(ひだり)
• Twitter @HIDARI0415
• 大阪市内でエンジニアしてます
• 普段はC++とか.NET言語(主にC#)とか
• 秘伝のソースのメンテナンスが仕事
15
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Jenkins AppVeyorタスクスケジューラ
16
自動化のための手段
3つのレイヤーで紹介
Scripts
NugetMSBuild psake
Jenkins AppVeyor
17
自動化のための手段
タスクスケジューラ
3つのレイヤーで紹介
Batch File WSH/VBScript PowerShell
Build Tools
Jenkins AppVeyor
18
自動化のための手段
タスクスケジューラ
3つのレイヤーで紹介
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Executers
19
自動化のための手段
3つのレイヤーで紹介
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Jenkins AppVeyor
20
自動化のための手段
タスクスケジューラ
3つのレイヤーで紹介
「そういう考え方もあるのか」くらいで見ていただければと
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Jenkins AppVeyor
21
自動化のための手段
タスクスケジューラ
Scripts
NugetMSBuild psake
Jenkins AppVeyor
22
自動化のための手段
タスクスケジューラ
Batch File
23
Batch File
• コマンドプロンプト/バッチファイル
• シェルスクリプト(*.sh)に相当
24
Batch File
• コマンドプロンプト/バッチファイル
• シェルスクリプト(*.sh)に相当
• バッチファイルの拡張子は*.bat、*.cmd
25
Batch File
• コマンドプロンプト/バッチファイル
• シェルスクリプト(*.sh)に相当
• バッチファイルの拡張子は*.bat、*.cmd
• 実行するインタプリタ
• COMMAND.COM(Windows Meまで)
• cmd.exe(Windows 2000、XP以降)
26
27
@echo off
!
rem 変数に値を設定します
set HOGE="変数の値"
!
rem このバッチが存在するフォルダに移動します
pushd %0..
!
echo MyAwesomeProgram.exeを実行します。
MyAwesomeProgram.exe
!
rem エラー判定
if "%ERRORLEVEL%" == "0" (
echo 成功
) else (
echo 失敗
)
!
rem 実行結果を確認して終了してください
pause
Batch File
• 可読性が低い
• 構造化しづらい
• 再利用性が悪い
28
Batch File
VBScript/WSH
29
VBScript/WSH
• Windows Script Host + VBScript
30
VBScript/WSH
• Windows Script Host + VBScript
• バッチファイルを置き換える
• Windows 95から標準搭載
31
VBScript/WSH
• Windows Script Host + VBScript
• バッチファイルを置き換える
• Windows 95から標準搭載
• レジストリやWMIへのアクセスが容易
32
VBScript/WSH
• VBScript
33
VBScript/WSH
• VBScript
• Microsoft Visual Basic Scripting Edition
• WSH、ASP上で利用可能
• 組み込みGUI関数 MsgBox、InputBox
34
VBScript/WSH
• VBScript
• Microsoft Visual Basic Scripting Edition
• WSH、ASP上で利用可能
• 組み込みGUI関数 MsgBox、InputBox
• WSH+JScriptの組み合わせも
35
36
Option Explicit
!
WScript.Echo "Hello World"
!
' 変数に値を設定します。
Dim x, y
!
x = 100
y = 200
!
If x > y Then
MsgBox x & "のほうが大きいよ!"
Else
MsgBox y & "のほうが大きい!"
End If
VBScript/WSH
VBScript/WSH
• 簡単な処理も複雑になりがち
37
VBScript/WSH
• 簡単な処理も複雑になりがち
• VBScript製ウィルス等の影響もあり敬遠される
• デフォルトでWSHが有効で*.vbsファイルが実行
可能
• ex. LoveLetter
38
PowerShell
39
PowerShell
• .NET Frameworkを利用したスクリプト言語
• システム管理、自動化
40
PowerShell
• .NET Frameworkを利用したスクリプト言語
• システム管理、自動化
• セキュリティ面に配慮
• 実行ポリシーやスクリプトへのデジタル署名
41
PowerShell
• 利用可能
• Windows XP
• Windows 2003
42
PowerShell
• 利用可能
• Windows XP
• Windows 2003
• 標準搭載
• Windows Server 2008 R2
• Windows 7
43
PowerShell
44
!
$dirPath = “.Fuga”
!
if ( -not (Test-Path $dirPath) )
{
mkdir $dirPath
Write-Host “$dirPath を作成しました"
}
else
{
Write-Host “$dirPath はすでに存在します"
}
!
Get-ChildItem .Hoge* -Include *.txt -Recurse
PowerShell
• Powershell 5.0 Previewが利用可能
45
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Jenkins AppVeyor
46
自動化のための手段
タスクスケジューラ
Batch File WSH/VBScript PowerShell
Build Tools
Jenkins AppVeyor
47
自動化のための手段
タスクスケジューラ
MSBuild
48
MSBuild
• Microsoftが提供するビルドエンジン
49
MSBuild
• Microsoftが提供するビルドエンジン
• ビルド > テスト の様な繰り返し作業を簡単に実行
50
MSBuild
• Microsoftが提供するビルドエンジン
• ビルド > テスト の様な繰り返し作業を簡単に実行
• 無償利用可能
51
MSBuild
• Microsoftが提供するビルドエンジン
• ビルド > テスト の様な繰り返し作業を簡単に実行
• 無償利用可能
• Antに近いXML形式のプロジェクトファイル
• ターゲット、タスク、プロパティ、アイテムなど
から構成
52
53
!
<Project DefaultTargets="build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- =========== プロパティ ========== -->
<PropertyGroup>
<ProjectName>MsBuildSample</ProjectName>
</PropertyGroup>
<!-- ======= アイテムグループ ======== -->
<ItemGroup>
<CSFile Include="***.cs"/>
<Reference Include="System.dll"/>
<Reference Include="System.Data.dll"/>
<Reference Include="System.Drawing.dll"/>
<Reference Include="System.Windows.Forms.dll"/>
<Reference Include="System.XML.dll"/>
</ItemGroup>
<!-- =========== ターゲット ========== -->
<!-- buildターゲット(C#プロジェクトをコンパイル) -->
<Target Name="build" >
<CSC
Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(ProjectName).exe"
TargetType="winexe" />
</Target>
<!-- runターゲット(C#プロジェクトのEXEを実行) -->
<Target Name="run" DependsOnTargets="build">
<Exec Command="$(ProjectName).exe"/>
<Message Text="アプリケーションを実行しました。" />
</Target>
</Project>
http://codezine.jp/article/detail/674
MSBuild
MSBuild
• 標準で用意されているタスク
• https://msdn.microsoft.com/ja-jp/library/
7z253716.aspx
54
MSBuild
• 標準で用意されているタスク
• https://msdn.microsoft.com/ja-jp/library/
7z253716.aspx
• コミュニティによって作られたものも多い
• https://github.com/loresoft/msbuildtasks
55
MSBuild
• タスクは.NETアセンブリとして自作可能
• Taskクラスを継承
• ITaskインターフェイスを実装
56
MSBuild
• タスクは.NETアセンブリとして自作可能
• Taskクラスを継承
• ITaskインターフェイスを実装
• 他のビルドツール
• nmake、NAnt、psake などなど
57
Nuget
58
Nuget
• Windows用のパッケージマネージャ(https://
www.nuget.org/)
59
Nuget
• Windows用のパッケージマネージャ(https://
www.nuget.org/)
• 各種DLL、拡張機能、jsファイルなど様々なものを
ダウンロード、インストール可能
• 依存関係の解決からプロジェクトへの参照追加ま
でひと通り行ってくれる
60
Nuget
• Windows用のパッケージマネージャ(https://
www.nuget.org/)
• 各種DLL、拡張機能、jsファイルなど様々なものを
ダウンロード、インストール可能
• 依存関係の解決からプロジェクトへの参照追加ま
でひと通り行ってくれる
• Visual Studioのエクステンションとして利用可能
61
62
!
PM> Install-Package NUnit -Version 2.6.4
!
PM> Install-Package NUnitTestAdapter
!
PM> Install-Package ChainingAssertion-NUnit
Nuget
63
!
PM> Install-Package NUnit -Version 2.6.4
!
PM> Install-Package NUnitTestAdapter
!
PM> Install-Package ChainingAssertion-NUnit
Nuget
!
PM> Install-Package jQuery
!
PM> Install-Package jquery.TypeScript.DefinitelyTyped
64
!
PM> Install-Package NUnit -Version 2.6.4
!
PM> Install-Package NUnitTestAdapter
!
PM> Install-Package ChainingAssertion-NUnit
Nuget
!
PM> Install-Package jQuery
!
PM> Install-Package jquery.TypeScript.DefinitelyTyped
!
PM> Install-Package Codeer.Friendly
Nuget
• ローカルNugetサーバーも設置可能
• チーム内のツール共有、開発環境の共通化
• ファイル共有サーバー上に構築可能
• Webサーバーは「Nuget.Server」パッケージ
65
Nuget
• 社内の開発環境の改善&効率化のためにNuGetを活
用しよう(http://www.buildinsider.net/
enterprise/nugetprivate/01)
• NuGet.Server を利用してプライベートリポジトリ
を構築する(http://blog.shibayan.jp/entry/
20111017/1318860985)
66
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Jenkins AppVeyor
67
自動化のための手段
タスクスケジューラ
Batch File WSH/VBScript PowerShell
NugetMSBuild psake
Executers
68
自動化のための手段
タスクスケジューラ
69
• プログラムやスクリプトを自動実行する機能
70
タスクスケジューラ
• プログラムやスクリプトを自動実行する機能
• Windows 95以降で搭載
• Windows 95では「システムエージェント」
• Windows 98で「タスクスケジューラ」に変更
71
タスクスケジューラ
• 時刻、間隔、イベントなどをトリガーに指定
• 複数のイベントの組み合わせ
• タスク実行に失敗したとき
72
タスクスケジューラ
• 時刻、間隔、イベントなどをトリガーに指定
• 複数のイベントの組み合わせ
• タスク実行に失敗したとき
• すべての実行履歴が保持される
73
タスクスケジューラ
• 時刻、間隔、イベントなどをトリガーに指定
• 複数のイベントの組み合わせ
• タスク実行に失敗したとき
• すべての実行履歴が保持される
• コマンドラインユーティリティとしてSchtasks.exe
が利用可能
74
タスクスケジューラ
75
!
SCHTASKS /Create /S system /U user /P password /RU
runasuser /RP runaspassword /SC HOURLY /TN rtest1 /TR
notepad
https://technet.microsoft.com/ja-jp/windows/ff467963.aspx
タスクスケジューラ
76
!
SCHTASKS /Create /S system /U user /P password /RU
runasuser /RP runaspassword /SC HOURLY /TN rtest1 /TR
notepad
https://technet.microsoft.com/ja-jp/windows/ff467963.aspx
!
SCHTASKS /Run /TN "Start Backup"
タスクスケジューラ
77
!
SCHTASKS /Create /S system /U user /P password /RU
runasuser /RP runaspassword /SC HOURLY /TN rtest1 /TR
notepad
!
SCHTASKS /Delete /TN "Backup and Restore"
https://technet.microsoft.com/ja-jp/windows/ff467963.aspx
!
SCHTASKS /Run /TN "Start Backup"
タスクスケジューラ
• VBScript、PowerShellなどのスクリプト言語から
もAPIを利用可能
78
タスクスケジューラ
• VBScript、PowerShellなどのスクリプト言語から
もAPIを利用可能
• プログラムから利用
• ITaskFolderインターフェイス
• IRegisteredTaskインターフェイス
79
タスクスケジューラ
Jenkins
80
Jenkins
• Java製のCIサーバー
81
Jenkins
• Java製のCIサーバー
• 汎用的なタスクスケジューラとして利用可能
82
Jenkins
• Java製のCIサーバー
• 汎用的なタスクスケジューラとして利用可能
• 豊富なプラグイン
83
Jenkins
• Java製のCIサーバー
• 汎用的なタスクスケジューラとして利用可能
• 豊富なプラグイン
• マスター/スレーブ構成でリモートな制御も可能
84
Jenkins
• CIサーバーとしてはTeamCityとかTFS
• .NETベースでオープンソースな人にはAppVeyor
(http://www.appveyor.com/)
85
どれを使うか
86
どれを使うか
• 特にスクリプトに関しては無理に置き換える必要は
ない
87
どれを使うか
• 特にスクリプトに関しては無理に置き換える必要は
ない
• これまでVBScriptで作ってきたものがあるならそれ
を使えばいい
88
どれを使うか
• 特にスクリプトに関しては無理に置き換える必要は
ない
• これまでVBScriptで作ってきたものがあるならそれ
を使えばいい
• PowerShellのほうが便利な部分があるなら置き換
える
89
どれを使うか
• 特にスクリプトに関しては無理に置き換える必要は
ない
• これまでVBScriptで作ってきたものがあるならそれ
を使えばいい
• PowerShellのほうが便利な部分があるなら置き換
える
• それぞれの得意なところで使う
90
どれを使うか
• 普段から「手段」を増やして常に対応できるように
91
どれを使うか
• 普段から「手段」を増やして常に対応できるように
• だが pause お前はダメだ
92

Windowsでの自動化の手段