SE(たぶん)の雑感記

一応SEやっている筆者の思ったことを書き連ねます。会計学もやってたので、両方を生かした記事を書きたいと考えています。 でもテーマが定まってない感がすごい。

昔つくったツール(のソース)を公開する

当ブログでやっているCodeKataやってみた記事の第七回は、以前自分が書いたソースを読むというものです。

それの公開に先駆けて、その対象にしたツールのソースをGitHubに公開しました。

github.com

ツールの中身の一部は、以前紹介しています。

hiroronn.hatenablog.jp

事前に言うこと

以下に書いていますが、一晩で最低限の機能を詰め込んだツールですので、ソースは汚いです。
だからこそ、CodeKataの題材になるわけですが。

また、作ったのは2年半ぐらい前です。

修正して、UWP製として公開することも考えたのですが…需要はあるのでしょうか?

ツール概要

.zip圧縮で、ファイルをバックアップしていたのですが、すさまじい量のファイルをルートフォルダから圧縮していたせいで、再度開くのに時間がかかっていました*1

かといって、個々のフォルダごとに圧縮していくと、操作手順が手間になります。

そこで、ツールでどのフォルダを圧縮するか選択しながら、一気に圧縮できればいいんじゃね?という発想に至り、一晩で作ったツールになります。
圧縮ファイルに至るまでの、元のフォルダ構造は維持します。

Windows デスクトップでしか動作しません。それ以外の環境で動いても、圧縮フォルダを作るというシチュエーションが無いです。

開発環境

環境 ツール名
IDE Visual Studio 2015*2
.NET Framework 4.5.2
アーキテクチャ WPF(補助でLivetを使用)

Livetは、NuGet経由で取得しています。

機能(スクショ)

f:id:hiroronn:20180609122724p:plain

f:id:hiroronn:20180609150411p:plain

  • 圧縮後

f:id:hiroronn:20180609153225p:plain

こんな感じで、チェックを入れたフォルダを圧縮し、別フォルダに格納、というツールです。

問題点

そもそも、一日で最低限の機能だけ入れたので、問題点だらけです。

「中断」できない

ボタンは置きましたが、動きません。

圧縮処理自体は並列実行しますが、個々の圧縮*3を止める手立てが無いため、お蔵入りとなりました。

実行中の制御がダサい

処理中だと分かるような画面になっていません。
手抜きです。

テストがいい加減

単体テスト、全く活用できていません。
当時の知識と経験の無さを示しています。

見た目がいけてない

ツリー上の項目に「全選択」や「全解除」を置いたのですが、ださいなぁと思います。
とはいえ、こういうのが簡単に実装できるあたり、WPFは好きです。UWPでいいんですけどね。

TreeViewの項目は、こんな感じで書いています。
このテンプレートを、TreeViewに設定して、データバインドした項目をすべて描画します。

<HierarchicalDataTemplate x:Key="selectTree" DataType="vm:FileSystemViewModel" ItemsSource="{Binding Path=Childs}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <CheckBox Grid.Column="0"  Content="{Binding Path=Name}" IsChecked="{Binding Path=IsSelected}" Margin="0,0,10,0" VerticalAlignment="Center"></CheckBox>
        <Button Grid.Column="1" Command="{Binding Path=SelectAllCommand}"  Margin="0,0,10,0">全選択</Button>
        <Button Grid.Column="2" Command="{Binding Path=DeselectAllCommand}">全解除</Button>
    </Grid>
</HierarchicalDataTemplate>

JavaScriptだと、横並びに配置すればこんな感じに置けたりするんですかね?

今後

それなりに、ネタとしては面白い題材です。
とにかく非同期処理を使用します。

圧縮ファイルを作るのは、けっこう重たい処理です。
複数の圧縮ファイルを作成する場合、並列実行すると、目に見えて速度向上します。

今は、Task.WhenAllを使って待ち合わせるという、かなり単純な方法で実装しています。

いろいろ工夫したり、試してみたりするには面白いと思います。

現在のソースにも、試行錯誤の形跡はありますが…

おわりに

次の記事で、CodeKataの内容を扱います。
よろしければ、そちらもご覧ください。

hiroronn.hatenablog.jp

*1:しかも、事あるごとに中身を開く必要があった

*2:当時の開発環境。2017にアップグレードした

*3:.NETの圧縮処理が、同期バージョンしか用意されていない