PowerShellでGUIを作成!Windows FormsとWPFを活用したアプリ開発の基礎

PowerShellはシステム管理や自動化に強力なツールですが、GUI(グラフィカルユーザーインターフェース)を追加することで、管理タスクや操作をユーザーフレンドリーにできます。

本記事では、Windows FormsWPF(Windows Presentation Foundation)を使って、PowerShellスクリプトで簡単なGUIアプリを作成する方法を解説します。

この記事を読むことで、以下のことが理解できます。

  • PowerShellでWindows FormsとWPFを使った基本的なGUIの作成方法
  • それぞれの技術を使う利点と使い分け方
  • 実際に使えるサンプルコード

さらに、学習内容を確認できる演習問題解答例も用意していますので、ぜひ試してみてください。


Windows FormsでのGUI作成

Windows Formsとは?

Windows Formsは、Microsoftが提供するGUIフレームワークで、Windows環境で簡単なデスクトップアプリを構築するのに最適です。

古くから存在するため、多くのドキュメントが揃っており、構造がシンプルなので学びやすいのが特徴です。


Windows Formsのサンプルコード

以下のスクリプトは、PowerShellでWindows Formsを使ってシンプルなボタン付きのフォームを作成する例です。

ボタンをクリックするとメッセージボックスが表示されます。

# Windows Formsのライブラリをロード
Add-Type -AssemblyName System.Windows.Forms

# フォームの作成
$form = New-Object System.Windows.Forms.Form
$form.Text = "サンプルフォーム"
$form.Width = 300
$form.Height = 200

# ボタンの作成
$button = New-Object System.Windows.Forms.Button
$button.Text = "クリックしてね"
$button.Width = 150
$button.Height = 50
$button.Location = New-Object System.Drawing.Point(75, 50)

# ボタンクリック時のイベント
$button.Add_Click({
    [System.Windows.Forms.MessageBox]::Show("ボタンがクリックされました!", "メッセージ")
})

# フォームにボタンを追加
$form.Controls.Add($button)

# フォームを表示
$form.ShowDialog()

スクリプトの解説

  1. Add-Type コマンドで、System.Windows.Formsライブラリをロードします。
  2. New-Object でフォームとボタンを作成し、各プロパティを設定します。
  3. ボタンにクリックイベントを追加して、メッセージボックスが表示されるようにしています。
  4. 最後にShowDialog()メソッドでフォームを画面に表示します。

WPFでのGUI作成

WPFとは?

WPF(Windows Presentation Foundation)は、Windows Formsよりも柔軟なレイアウトとスタイリッシュなUIが特徴のGUIフレームワークです。

XAMLというマークアップ言語を使ってUIを定義し、視覚的に洗練されたアプリを構築するのに向いています。


WPFのサンプルコード

以下は、PowerShellを使ってWPFのウィンドウを作成するサンプルスクリプトです。

# WPFのライブラリをロード
Add-Type -AssemblyName PresentationFramework

# XAMLでウィンドウを定義
$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="WPFサンプル" Height="200" Width="300">
  <Grid>
    <Button Name="btn" Width="150" Height="50" VerticalAlignment="Center" HorizontalAlignment="Center">
      クリックしてね
    </Button>
  </Grid>
</Window>
"@

# XAMLをPowerShellオブジェクトに変換
$reader = New-Object System.Xml.XmlNodeReader (New-Object System.Xml.XmlDocument)
$reader.ReadOuterXml($xaml) | Out-Null
$window = [Windows.Markup.XamlReader]::Load($reader)

# ボタンクリック時のイベント
$button = $window.FindName("btn")
$button.Add_Click({
    [System.Windows.MessageBox]::Show("WPFボタンがクリックされました!", "メッセージ")
})

# ウィンドウを表示
$window.ShowDialog()

スクリプトの解説

  1. Add-TypeでPresentationFrameworkをロードします。
  2. XAMLでウィンドウのレイアウトを定義します。
  3. XmlNodeReaderを使ってXAMLをPowerShellのオブジェクトに変換します。
  4. ボタンにクリックイベントを追加し、メッセージボックスが表示されるようにします。
  5. ShowDialog()でウィンドウを表示します。

Windows FormsとWPFの使い分け

項目Windows FormsWPF
学習コスト低いやや高い
レイアウトの柔軟性限定的高い
デザイン性シンプルスタイリッシュなデザインが可能
パフォーマンス軽量3D描画などリッチなUIに対応
適用場面簡単なツールや管理画面洗練されたユーザー向けアプリ

Windows Formsはシンプルなツールや社内向けの管理画面に適しており、WPFはデザイン性が求められるユーザー向けアプリに向いています。用途に応じて使い分けましょう。


演習問題

問題1:Windows Formsのフォームにテキストボックスを追加し、ユーザーが入力した文字列を表示する

  • フォームにラベルテキストボックスを追加します。
  • ボタンをクリックすると、ラベルにテキストボックスの入力内容が表示されるようにしてください。

問題2:WPFのウィンドウに複数のボタンを配置し、ボタンごとに異なるメッセージを表示する

  • 3つのボタンを作成し、それぞれをクリックすると異なるメッセージを表示するようにしてください。

演習問題の解答例

問題1の解答例:Windows Forms

Add-Type -AssemblyName System.Windows.Forms

$form = New-Object System.Windows.Forms.Form
$form.Text = "テキスト入力フォーム"
$form.Width = 300
$form.Height = 200

$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10, 80)
$label.Width = 260

$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10, 10)
$textBox.Width = 260

$button = New-Object System.Windows.Forms.Button
$button.Text = "表示"
$button.Location = New-Object System.Drawing.Point(10, 40)

$button.Add_Click({
    $label.Text = "入力されたテキスト: " + $textBox.Text
})

$form.Controls.Add($label)
$form.Controls.Add($textBox)
$form.Controls.Add($button)
$form.ShowDialog()

問題2の解答例:WPF

Add-Type -AssemblyName PresentationFramework

$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="複数ボタンのサンプル" Height="200" Width="300">
  <StackPanel>
    <Button Name="btn1" Content="ボタン1" Margin="5"/>
    <Button Name="btn2" Content="ボタン2" Margin="5"/>
    <Button Name="btn3" Content="ボタン3" Margin="5"/>
  </StackPanel>
</Window>
"@

$reader = New-Object System.Xml.XmlNodeReader (New-Object System.Xml.XmlDocument)
$reader.ReadOuterXml($xaml) | Out-Null
$window = [Windows.Markup.XamlReader]::Load($reader)

$window.FindName("btn1").Add_Click({ [System.Windows.MessageBox]::Show("ボタン1がクリックされました") })
$

window.FindName("btn2").Add_Click({ [System.Windows.MessageBox]::Show("ボタン2がクリックされました") })
$window.FindName("btn3").Add_Click({ [System.Windows.MessageBox]::Show("ボタン3がクリックされました") })

$window.ShowDialog()

まとめ

この記事では、PowerShellでWindows FormsとWPFを使ったGUI作成の基礎を紹介しました。

それぞれの技術には利点があり、用途に応じて使い分けることが重要です。

演習問題も通して、実際に手を動かしながら学んでみましょう。

これをきっかけに、さらに高度なGUI開発に挑戦してみてください。