pocof の 1 年間
krymtkts/pocof の話。
明日 2023-04-24 で pocof の開発を始めてから 1 年になるらしい。 開発しない週があったり、そもそも進捗は亀だが、続けてきたのは我ながらエライ。 折角なので Git の commit history を基に活動を振り返ってみる。
書き捨てのスクリプトは以下。案外役に立ったのでなんか小綺麗にして使える感じにしてもいいな。
# merge commit 除く。
$logs = git log --pretty=format:"%cd,%s" --date=iso-strict | ConvertFrom-Csv -Header CommitDate, Message | Where-Object -Property Message -NotLike 'Merge pull request*' | ForEach-Object { [PSCustomObject]@{
CommitDate = Get-Date $_.CommitDate
Message = $_.Message
} }
# 年月ごとのコミット数。
$logs | ForEach-Object { $_.CommitDate.ToString('yyyy-MM') } | Group-Object | Select-Object -Property Name, Count
# 追加・削除行数。
$ret = @{}
$stats = git log --numstat --pretty="%cd" --date=iso-strict | ForEach-Object {
switch ($_) {
{ $_ -match '\d{4}-\d{2}-\d{2}' } {
$key = Get-Date $_
}
default {
$values = $_ -split "`t"
if ($values.Count -eq 3) {
if ($ret.ContainsKey($key)) {
$entry = $ret[$key]
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0] + $entry.Add
Remove = [int]$values[1] + $entry.Remove
}
}
else {
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0]
Remove = [int]$values[1]
}
}
}
}
}
} -End { $ret }
$stats.GetEnumerator() | ForEach-Object { [PSCustomObject]@{Add = $_.Value.Add; Remove = $_.value.remove } } | Measure-Object -Property add, remove -Sum | Format-Table
# 年月ごとの追加・削除行数。
$ret = @{}
$monthly = $stats.GetEnumerator() | ForEach-Object { [PSCustomObject]@{YM = $_.Key.ToString('yyyy-MM'); Add = $_.Value.Add; remove = $_.value.Remove } } | ForEach-Object {
if ($ret.ContainsKey($_.YM)) {
$entry = $ret[$_.YM]
$ret[$_.YM] = [PSCustomObject]@{
Add = [int]$_.Add + $entry.Add
Remove = [int]$_.Remove + $entry.Remove
}
}
else {
$ret[$_.YM] = [PSCustomObject]@{
Add = [int]$_.Add
Remove = [int]$_.Remove
}
}
} -End { $ret }
$monthly.GetEnumerator() | Sort-Object -Property Key | ForEach-Object { [PSCustomObject]@{YM = $_.Key; Add = $_.Value.Add; Remove = $_.value.remove } }
# ファイルごとの追加・削除行数。
$ret = @{}
$fileStats = git log --numstat --pretty="%cd" --date=iso-strict | ForEach-Object {
$values = $_ -split "`t"
if ($values.Count -eq 3) {
$key = $values[2]
if ($ret.ContainsKey($key)) {
$entry = $ret[$key]
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0] + $entry.Add
Remove = [int]$values[1] + $entry.Remove
}
}
else {
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0]
Remove = [int]$values[1]
}
}
}
} -End { $ret }
$fileStats.GetEnumerator() | ForEach-Object { [PSCustomObject]@{File = $_.Key; Add = $_.Value.Add; Remove = $_.Value.Remove } } | Sort-Object -Property Add, Remove -Descending
# 年月・ファイルごとの追加・削除行数。
$ret = @{}
$fileStats = git log --numstat --pretty="%cd" --date=iso-strict | ForEach-Object {
switch ($_) {
{ $_ -match '\d{4}-\d{2}-\d{2}' } {
$date = Get-Date $_
}
default {
$values = $_ -split "`t"
if ($values.Count -eq 3) {
$key = "$($date.ToString('yyyy-MM')) $($values[2])"
if ($ret.ContainsKey($key)) {
$entry = $ret[$key]
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0] + $entry.Add
Remove = [int]$values[1] + $entry.Remove
}
}
else {
$ret[$key] = [PSCustomObject]@{
Add = [int]$values[0]
Remove = [int]$values[1]
}
}
}
}
}
} -End { $ret }
$fileStats.GetEnumerator() | ForEach-Object { [PSCustomObject]@{File = $_.Key; Add = $_.Value.Add; Remove = $_.Value.Remove } } | Sort-Object -Property File, Add, Remove
Merge commit を除いたコミット数が 113 。 2023 年に入ってからは前年より多少活発。
以下は年月ごとのコミット数。 開発してない月あるんじゃないかって気がしてたが、ギリギリ毎月開発してた様子。
YM | Commit |
---|---|
2022-04 | 4 |
2022-05 | 16 |
2022-06 | 4 |
2022-07 | 2 |
2022-08 | 1 |
2022-09 | 11 |
2022-10 | 4 |
2022-11 | 7 |
2022-12 | 2 |
2023-01 | 7 |
2023-02 | 15 |
2023-03 | 24 |
2023-04 | 16 |
コードの変更を伴うコミットが今まで 109 あって、 追加された行が 6312 、削除された行が 2821 。44% 位を書き直してるのが意外だった。時期的にはテストコード拡充とそれによるリファクタが大きい要因か。
以下が年月ごとの追加・削除行数。
YM | Add | Remove |
---|---|---|
2022-04 | 717 | 83 |
2022-05 | 1425 | 386 |
2022-06 | 83 | 26 |
2022-07 | 61 | 56 |
2022-08 | 30 | 17 |
2022-09 | 233 | 145 |
2022-10 | 69 | 27 |
2022-11 | 365 | 170 |
2022-12 | 57 | 19 |
2023-01 | 358 | 245 |
2023-02 | 214 | 143 |
2023-03 | 2163 | 1134 |
2023-04 | 537 | 370 |
ファイル別の分析はちょっと面倒で、 rename したものやドキュメント類も含まれてしまってる。
が、 目 grep した感じだと最近テストを頑張って書いてた Action.fs
, Data.fs
あたりの新陳代謝ができており、それにつられて依存関係の Library.fs
の変更も多いと。
Query.fs
はコア部分なので削除少ないのはおっかなびっくりいじってるからかな?
UI.fs
なんかは全然いじれてないので削除行数少なめ。
以下がファイルごとの追加・削除行数。
File | Add | Remove |
---|---|---|
src/pocof.Test/Tests.fs | 798 | 798 |
src/pocof.Test/PocofData.fs | 705 | 145 |
src/pocof/Action.fs | 569 | 179 |
src/pocof/Data.fs | 517 | 451 |
src/pocof/Library.fs | 470 | 282 |
src/pocof.Test/PocofQuery.fs | 459 | 131 |
src/pocof/Query.fs | 430 | 261 |
.gitignore | 399 | 0 |
src/pocof/pocof.dll-Help.xml | 382 | 60 |
tests/pocof.Tests.ps1 | 263 | 113 |
docs/Select-Pocof.md | 260 | 31 |
src/pocof/UI.fs | 238 | 112 |
src/pocof/pocof.psd1 | 231 | 99 |
src/pocof.Test/PocofAction.fs | 171 | 23 |
psakefile.ps1 | 134 | 31 |
src/pocof/{Action.fs => Data.fs} | 71 | 82 |
src/pocof/pocof.fsproj | 38 | 17 |
pocof.sln | 36 | 2 |
src/pocof.Test/pocof.Test.fsproj | 36 | 1 |
README.md | 33 | 2 |
.github/workflows/pr.yml | 30 | 1 |
LICENSE | 21 | 0 |
test/pocof.Tests.ps1 | 17 | 0 |
src/pocof.Test/Program.fs | 4 | 0 |
{test => tests}/pocof.Tests.ps1 | 0 | 0 |
以下が年月・ファイルごとの追加・削除行数。
File | Add | Remove |
---|---|---|
2022-04 .gitignore | 398 | 0 |
2022-04 pocof.sln | 27 | 0 |
2022-04 src/pocof/Library.fs | 57 | 3 |
2022-04 src/pocof/pocof.dll-Help.xml | 1 | 0 |
2022-04 src/pocof/pocof.fsproj | 22 | 0 |
2022-04 src/pocof/pocof.psd1 | 212 | 80 |
2022-05 {test => tests}/pocof.Tests.ps1 | 0 | 0 |
2022-05 docs/Select-Pocof.md | 181 | 0 |
2022-05 LICENSE | 21 | 0 |
2022-05 pocof.sln | 1 | 1 |
2022-05 psakefile.ps1 | 90 | 13 |
2022-05 README.md | 15 | 0 |
2022-05 src/pocof/{Action.fs => Data.fs} | 71 | 82 |
2022-05 src/pocof/Action.fs | 346 | 46 |
2022-05 src/pocof/Data.fs | 89 | 107 |
2022-05 src/pocof/Library.fs | 150 | 112 |
2022-05 src/pocof/pocof.dll-Help.xml | 261 | 3 |
2022-05 src/pocof/pocof.fsproj | 8 | 9 |
2022-05 src/pocof/pocof.psd1 | 1 | 1 |
2022-05 src/pocof/Query.fs | 39 | 2 |
2022-05 src/pocof/UI.fs | 128 | 10 |
2022-05 test/pocof.Tests.ps1 | 17 | 0 |
2022-05 tests/pocof.Tests.ps1 | 7 | 0 |
2022-06 src/pocof/Library.fs | 3 | 3 |
2022-06 src/pocof/pocof.fsproj | 3 | 3 |
2022-06 src/pocof/Query.fs | 43 | 11 |
2022-06 src/pocof/UI.fs | 34 | 9 |
2022-07 src/pocof/Data.fs | 7 | 4 |
2022-07 src/pocof/Library.fs | 4 | 11 |
2022-07 src/pocof/Query.fs | 41 | 38 |
2022-07 src/pocof/UI.fs | 9 | 3 |
2022-08 psakefile.ps1 | 3 | 3 |
2022-08 src/pocof/Library.fs | 27 | 14 |
2022-09 psakefile.ps1 | 17 | 8 |
2022-09 README.md | 18 | 2 |
2022-09 src/pocof/Action.fs | 11 | 8 |
2022-09 src/pocof/Data.fs | 18 | 18 |
2022-09 src/pocof/Library.fs | 88 | 51 |
2022-09 src/pocof/pocof.fsproj | 2 | 2 |
2022-09 src/pocof/pocof.psd1 | 15 | 15 |
2022-09 src/pocof/Query.fs | 18 | 17 |
2022-09 src/pocof/UI.fs | 8 | 12 |
2022-09 tests/pocof.Tests.ps1 | 38 | 12 |
2022-10 src/pocof/Library.fs | 19 | 12 |
2022-10 src/pocof/pocof.fsproj | 1 | 1 |
2022-10 src/pocof/pocof.psd1 | 1 | 1 |
2022-10 src/pocof/Query.fs | 16 | 8 |
2022-10 src/pocof/UI.fs | 6 | 4 |
2022-10 tests/pocof.Tests.ps1 | 26 | 1 |
2022-11 docs/Select-Pocof.md | 58 | 26 |
2022-11 src/pocof/Action.fs | 1 | 0 |
2022-11 src/pocof/Data.fs | 29 | 0 |
2022-11 src/pocof/Library.fs | 6 | 1 |
2022-11 src/pocof/pocof.dll-Help.xml | 97 | 57 |
2022-11 src/pocof/pocof.fsproj | 1 | 1 |
2022-11 src/pocof/pocof.psd1 | 1 | 1 |
2022-11 src/pocof/Query.fs | 66 | 53 |
2022-11 src/pocof/UI.fs | 0 | 1 |
2022-11 tests/pocof.Tests.ps1 | 106 | 30 |
2022-12 src/pocof/Data.fs | 13 | 0 |
2022-12 src/pocof/Library.fs | 23 | 9 |
2022-12 src/pocof/Query.fs | 5 | 5 |
2022-12 src/pocof/UI.fs | 16 | 5 |
2023-01 src/pocof/Action.fs | 3 | 3 |
2023-01 src/pocof/Data.fs | 204 | 154 |
2023-01 src/pocof/Library.fs | 14 | 7 |
2023-01 src/pocof/Query.fs | 124 | 50 |
2023-01 src/pocof/UI.fs | 13 | 31 |
2023-02 docs/Select-Pocof.md | 21 | 5 |
2023-02 src/pocof/Action.fs | 9 | 4 |
2023-02 src/pocof/Data.fs | 21 | 14 |
2023-02 src/pocof/Library.fs | 22 | 11 |
2023-02 src/pocof/pocof.dll-Help.xml | 23 | 0 |
2023-02 src/pocof/pocof.fsproj | 1 | 1 |
2023-02 src/pocof/pocof.psd1 | 1 | 1 |
2023-02 src/pocof/Query.fs | 18 | 12 |
2023-02 src/pocof/UI.fs | 17 | 25 |
2023-02 tests/pocof.Tests.ps1 | 81 | 70 |
2023-03 .gitignore | 1 | 0 |
2023-03 pocof.sln | 8 | 1 |
2023-03 psakefile.ps1 | 17 | 7 |
2023-03 src/pocof.Test/pocof.Test.fsproj | 36 | 1 |
2023-03 src/pocof.Test/PocofAction.fs | 113 | 0 |
2023-03 src/pocof.Test/PocofData.fs | 530 | 2 |
2023-03 src/pocof.Test/PocofQuery.fs | 404 | 118 |
2023-03 src/pocof.Test/Program.fs | 4 | 0 |
2023-03 src/pocof.Test/Tests.fs | 798 | 798 |
2023-03 src/pocof/Action.fs | 161 | 91 |
2023-03 src/pocof/Data.fs | 81 | 112 |
2023-03 src/pocof/Library.fs | 2 | 2 |
2023-03 src/pocof/Query.fs | 7 | 2 |
2023-03 tests/pocof.Tests.ps1 | 1 | 0 |
2023-04 .github/workflows/pr.yml | 30 | 1 |
2023-04 psakefile.ps1 | 7 | 0 |
2023-04 src/pocof.Test/PocofAction.fs | 58 | 23 |
2023-04 src/pocof.Test/PocofData.fs | 175 | 143 |
2023-04 src/pocof.Test/PocofQuery.fs | 55 | 13 |
2023-04 src/pocof/Action.fs | 38 | 27 |
2023-04 src/pocof/Data.fs | 55 | 42 |
2023-04 src/pocof/Library.fs | 55 | 46 |
2023-04 src/pocof/Query.fs | 53 | 63 |
2023-04 src/pocof/UI.fs | 7 | 12 |
2023-04 tests/pocof.Tests.ps1 | 4 | 0 |
2 年目も細々と開発を続けていく。他にやることで Fable でブログ再構築する際の調べ物あるけど、直感ではそんなに失速しないんじゃないかなという気がしている(気だけかも)。