Go言語でWALKを使うプロジェクトを作成するPowerShellスクリプト

Go言語 コンピュータ
Go言語

manifestというファイルが必要で毎度コピーするのも少し面倒なので、スクリプトを作ってみました。

PowerShell.exeからテキストエデッタで$profilesを開き以下の関数を追加する。

function Make-GoWalk
{
$projName = Split-Path (get-location).path -Leaf
. go mod init example.org/$projName
. go get github.com/lxn/walk
$manifest = @"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>
"@
$fs = New-Object System.IO.StreamWriter((Join-Path (Get-Location).Path ($projName+".exe.manifest")), $false)
$fs.WriteLine($manifest)
$fs.Close()
$template = @"
function Make-GoWalk
{

$projName = Split-Path (get-location).path -Leaf
. go mod init example.org/$projName
. go get github.com/lxn/walk
$manifest = @"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
    </dependency>
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True</dpiAware>
        </windowsSettings>
    </application>
</assembly>
"@
$fs = New-Object System.IO.StreamWriter((Join-Path (Get-Location).Path ($projName+".exe.manifest")), $false)
$fs.WriteLine($manifest)
$fs.Close()
$gosrc = @"
package main

import (
    `"log`"

    `"github.com/lxn/walk`"
    . `"github.com/lxn/walk/declarative`"
)

type MyMainWindow struct {
    *walk.MainWindow
}

func main() {

    mw := new(MyMainWindow)

    if _, err := (MainWindow{
        AssignTo: &mw.MainWindow,
        Title:    `"$projName`",
        MinSize:  Size{640, 480},
        Layout:   VBox{},
        Children: []Widget{},
    }.Run()); err != nil {
        log.Fatal(err)
    }
}
"@
$fs = New-Object System.IO.StreamWriter((Join-Path (Get-Location).Path ($projName+".go")), $false)
$fs.WriteLine($gosrc)
$fs.Close()
}

$profiles保存した後、$profilesを再読み込みするため、PowerShell.exeを再起動
PowerSehll.exeでプロジェクト用のディレクトリを作成、移動し「Make-GoWalk」を実行。
ビルドに必要なファイルが自動作成されます。
カレントディレクトリの名前がプロジェクト名になります。
PowerShellのヒアドキュメントでテキストファイルを作成しています。環境によって文字コードを修正する必要があるかもしれません。

コメント