bouzuya.hatenablog.com

ぼうずやのにっき

b の状況メモ

b の状況メモ。

b を stamp-rally と同様の構成に変更したかった。

stamp-rally は https://github.com/bouzuya/rust-sandbox/tree/ff014d2a2f46f87a84379d369ace2f68887c3d44/stamp-rally

同様の構成というのは次のようなもの。

  • 複数 crates に分割する
  • 大きく分けて entity / use_case / adapter / application の 4 つにする
    • README では ports になっているが ports は use_case に含まれている
    • entity はシステム化対象範囲における中心的な要素を表現したもの
    • use_case は entity を使用してシステムとユーザーの相互作用を表現したもの
      • adapter のための port を提供する
    • adapter は入出力などシステム外部のものに適合させるためのもの
    • application は entity / use_case / adapter を統合するもの

同様の構成にしようとして起きたことは次のようなもの。

  • 入出力を切り離そうとした
  • Repository の戻り値として Vec を返していた
    • 大量のファイルを一度に読みこむとメモリ使用量の問題が起きると気づいた
  • Vec ではなく Iterator を返すことにした
    • これにより一度に読み込む量を減らして順に読み込むようにする
    • Iterator を書いたことがなかったので書いてみた
  • Repository を Iterator に変更する際に Query に対応しようとした
  • Query を b と bbn で共通化しようとした
  • 実装してみてから b と bbn では同一にするのは大変だと気づいた
    • 0.10.18 (2021-10-08)
    • b は日時 (UTC) 単位、 bbn は日付 (JST) 単位で保存している
    • 例: b では date:2021-02-03flow/2021/02/03/ だけでなく flow/2021/02/02/ 検索する必要がある
      • 単純な YYYY, MM, DD のパスとの一致だけでは不十分になる
      • パスを日付として解釈してそれがマッチするかで確認することにした
        • 意外と難しい
        • flow/2021/ はどの日付になる?
          • 現状は 2021-01-01T00:00:00/2021-12-31T23:59:59 (指定のタイムゾーンの) と解釈するようにしている
    • 例: date:--02-03 のようなクエリへの対応が面倒

現状はまだ Query を直している。


子どもが熱で保育所から途中で帰ってきた。一日中元気に家の中を走り回っていた。それを見ていたぼくのほうが微熱になっている。

下の子は「あー」と「てぇー」を話す。


今日のコミット。