当ブログでやっているCodeKata
やってみた記事の第七回は、以前自分が書いたソースを読むというものです。
それの公開に先駆けて、その対象にしたツールのソースをGitHub
に公開しました。
ツールの中身の一部は、以前紹介しています。
事前に言うこと
以下に書いていますが、一晩で最低限の機能を詰め込んだツールですので、ソースは汚いです。
だからこそ、CodeKata
の題材になるわけですが。
また、作ったのは2年半ぐらい前です。
修正して、UWP
製として公開することも考えたのですが…需要はあるのでしょうか?
ツール概要
.zip
圧縮で、ファイルをバックアップしていたのですが、すさまじい量のファイルをルートフォルダから圧縮していたせいで、再度開くのに時間がかかっていました*1。
かといって、個々のフォルダごとに圧縮していくと、操作手順が手間になります。
そこで、ツールでどのフォルダを圧縮するか選択しながら、一気に圧縮できればいいんじゃね?という発想に至り、一晩で作ったツールになります。
圧縮ファイルに至るまでの、元のフォルダ構造は維持します。
Windows デスクトップでしか動作しません。それ以外の環境で動いても、圧縮フォルダを作るというシチュエーションが無いです。
開発環境
環境 | ツール名 |
---|---|
IDE | Visual Studio 2015*2 |
.NET Framework | 4.5.2 |
アーキテクチャ | WPF(補助でLivet を使用) |
Livet
は、NuGet
経由で取得しています。
機能(スクショ)
- 圧縮後
こんな感じで、チェックを入れたフォルダを圧縮し、別フォルダに格納、というツールです。
問題点
そもそも、一日で最低限の機能だけ入れたので、問題点だらけです。
「中断」できない
ボタンは置きましたが、動きません。
圧縮処理自体は並列実行しますが、個々の圧縮*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
の内容を扱います。
よろしければ、そちらもご覧ください。