2023-04-02

入社して半年経った

昨年10月に今の会社に入って、早いものでもう半年が経った。最初の3ヶ月は会社の雰囲気や開発のやり方に慣れていくことにエネルギーを使っていたけど、最近3ヶ月くらいはようやく自発的に動き出せるようになってきた。

もう半年のゴールとしては、忙しい中でももう少し余裕を持って仕事できるようにしていきたい。あんまり家のこととか自分のこととかに時間やエネルギーを使えていなかったので。

パーソナルトレーニングはだいたい3ヶ月

今年の初めから開始したパーソナルトレーニングももうそろそろで3ヶ月が経とうとしている。成果としては2ヶ月時点で3kg減を達成したし、週2回のペースで運動するリズムやタンパク質中心の食生活は身についたので、やってよかったと思う。

とはいえ、パーソナルトレーニングは比較的高額なので、3ヶ月経過したら一般的なジムに移ろうと思っている。

花粉症かも

ここ数日、頭がぼーっとしたりくしゃみや鼻水が止まらなくなり風邪をひいたかと思っていたけど、もしかして花粉症なのではないかと思ってきた。花粉症とは縁のない人生を送ってきたけど、ついになってしまったかもしれない。

Dartのパッケージ作り

社内で「セキュア・バイ・デザイン」を輪読している影響でDartでドメイン・プリミティブを実装していきたい気持ちが高まっている。

そんな中で足りないパーツとして宣言的に不変条件を定義する手段がDartにはないことに気づいた。assertは開発時にしか機能しないものだし、if文を使ってチマチマとチェックするのはドメインロジックをストレートに表現する実装とは言えない。

そこで、naoty/requireというパッケージを作り始めた。これを使うと、こんな感じで不変条件を宣言的に記述できる。条件にマッチしなかった場合、それぞれの条件に合った例外がthrowされるようになっている。

import 'package:require/require.dart';

class Customer {
  final String name;
  final int age;

  Customer({required this.name, required this.age}) {
    require(name, label: 'name')
      .hasLengthGreaterThanOrEqualTo(1)
      .hasLengthLessThan(20)
      .matches('^[a-zA-Z]+$');
    require(age, label: 'age')
      .isGreaterThanOrEqualTo(0)
      .isLessThan(200);
  }
}

PoC的に何パターンか実装してみて、APIの可読性と実装の柔軟性のバランスがとれた実装になってきた。今後はさまざまな条件や型のサポートを増やしたり、実用上の課題を見つけて対応していきたい。

実装においては、似たような実装が多かったので、おそらく半分以上のコードはGitHub Copilotが生成していると思う。怖いくらい便利。