だるろぐ

明日できることは、今日しない。

Omawari 1.4.0.0:ユーザーインターフェイスを手直ししました

f:id:daruyanagi:20171006093047p:plain

内部的なところはあまりいじらず、今まで放置してたユーザーインターフェイスの改善(?)を行いました。あと、ぬるぽエラーをちまちま殺したり。

  • 複数環境での起動を考慮する
  • 各部の名称を整理・わかりやすくする
  • ローカルフォルダーや親ルールにアクセスするボタンを追加
  • ログウィンドウに前後移動機能を追加
  • 既存のウィンドウがあれば新規に開かずアクティブにする
  • New/No Changed ステータスの新設
  • アプリケーションアイコンの追加
  • データフォルダーを開くコマンドを新設
  • ウィンドウを開く位置をオーナーの真ん中に設定(不完全、動いてないかも

日ごろ使っていて不便なところから、互換性をとりながら少しずつ、ね。“個人的にはログの前後移動”や“既存のウィンドウがあれば新規に開かずアクティブにする”なんかの実装に達成感を感じています。たかだか数行ちょろっと書くだけでだいぶ便利になった。でも、そろそろコードの整理しないといろいろあかんなぁ。

ついでにアプリケーションアイコンを付けたけど、なんとこれ Office の丸パクリ。あんまりよくないので、時間があるときにクラウドワークスあたりでお願いしようかなって思ってます。

あと、ウチの環境はだんだんデータが肥大化してきていてパフォーマンスが顕著に落ちているので、次はクリーニング機能を付けつつ、データベースへの移行とかも考えようかなーみたな。データ構造ももっとシンプルにできたのなぁー……最初はもっと使い捨てのつもりで作ってたから、あんまり考えてなくてね。

github.com

Chocolatey パッケージ化の準備

実は Chocolatey から簡単にインストールできるようにといろいろ準備をしています。Chocolatey ってのは yum とか apt-get みたいにアプリを入れられるヤツの
Windows 版ですね。Chocolatey のパッケージは、

  • パッケージに全部ファイルを入れちゃう
  • リモートに置いてあるインストーラーを叩く

という2パターンで作れるので、最初は ZIP 版をベースに前者のパッケージを作っていたのですが、いろいろお約束事をクリアするのが面倒……ライセンスファイルとかいろいろもろもろ。後者はそういうのが要らないっぽいので、前バージョンから ClickOnce を用意しています。次回辺りはちゃんと申請を通したい。

https://yanagi.blob.core.windows.net/clickonce-omawari/setup.exe

ついでにスクリプトでリリースパッケージ(ZIP)と Azure Blob へのアップロードも PowerShell で行うようにしてみました。毎回手でやんの鬱陶しくなってきたしね。

# Add-AzureAccount

$StorageAccountName = "yanagi"
$StorageAccountKey = "***"
$ContainerName = "clickonce-omawari"

$binRootDirectory     = "C:\Users\Hideto\GitHub\Omawari\Omawari\bin"
$publishRootDirectory = "C:\Users\Hideto\GitHub\Omawari\Omawari\Publish"

function New-ReleaseArchive {
    [cmdletbinding()]
    param(
        $rootDirectory,
        $Force
    )

    $releaseDirectory = Join-Path $rootDirectory "Release"
    $version = (Get-ItemProperty (Join-Path $releaseDirectory "Omawari.exe")).VersionInfo.FileVersion
    $destinationPath = Join-Path $rootDirectory Omawari-$version.zip
    Compress-Archive -Path $releaseDirectory/* -DestinationPath $destinationPath -Force:$Force
    Invoke-Item $rootDirectory
}

function Upload-FileToAzureStorageContainer {
    [cmdletbinding()]
    param(
        $StorageAccountName,
        $StorageAccountKey,
        $ContainerName,
        $rootDirectory,
        $Force
    )

    $context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
    $container = Get-AzureStorageContainer -Name $ContainerName -Context $context

    $container.CloudBlobContainer.Uri.AbsoluteUri
    if ($container) {
        $filesToUpload = Get-ChildItem $rootDirectory -Recurse -File

        foreach ($x in $filesToUpload) {
            $targetPath = ($x.fullname.Substring($rootDirectory.Length + 1)).Replace("\", "/")

            Write-Verbose "Uploading $("\" + $x.fullname.Substring($rootDirectory.Length + 1)) to $($container.CloudBlobContainer.Uri.AbsoluteUri + "/" + $targetPath)"
            Set-AzureStorageBlobContent -File $x.fullname -Container $container.Name -Blob $targetPath -Context $context -Force:$Force | Out-Null
        }
    }
}

New-ReleaseArchive `
    -rootDirectory $binRootDirectory `
    -Force $true

Upload-FileToAzureStorageContainer `
    -StorageAccountName $StorageAccountName `
    -StorageAccountKey $StorageAccountKey `
    -ContainerName $ContainerName `
    -rootDirectory $publishRootDirectory `
    -Verbose

リリースビルドや ClickOnce の発行も自動化すればいいのかもだけど、途中でコケたときにいろいろぐちゃぐちゃになるのが嫌だったので、もう少しいろいろわかってから挑戦しようかなって感じです。msbuild とかイマイチようわからんしね……(← いろいろエラーが出て困っている顔