0329
人々は平日ですが僕は四連休の三日目なので休日。でもまあ、結局書斎でコード書いてるのだし、普段の仕事と特に違いはないという話もある。会社のSlackは見てるし。
それで、twlgの実装を進めた。フロントエンドはほぼ完成と思う。テストは書きたいけど。問題はバックエンドで、完成していたと思っていたクローラの挙動が不穏だったので調べていた。rustでTwitter APIを叩くegg-modeというクレートがあるのだけど、こいつはEntityの文字列オフセットを勝手に変換しているようだ(Twitter APIはコードポイントオフセットで返しているが、egg-modeはrustで扱いやすいようにバイトオフセットにしている)。それはそれでありがたいけど、過去のデータとの互換性が壊れて困るので、結局Twitterクライアントを書きなおすことになった。tokio 1.xと互換性のあるreqwestのOAuth1拡張がなかなか見つからなくて難儀した。
あと、serdeはクリーンアーキテクチャと相性がよくない気配がある。というのも、derive(Deserialize)は構造体定義につけるものだからドメイン層のものだけど、よく考えるとJSONデシリアライズは実装詳細、インフラ層なのであった。真面目にやると結局インフラ層のためのモデルとドメイン層のためのモデルが分離することになるし、実際今回はそうしたのだけど……。まあそこは、変換不要であれば同一視するくらいの感覚がよいのだろう。今回はでも、Twitter APIがRFC 5322の形式で日付を返すのでモデルが必要だった。だるい。
tokio 1.xと互換性のあるクレートが地味に足りていない問題はたびたび躓く。活発なプロジェクトであればβ版くらいは提供されているが、そうでもないとそうでもない。rust自体はそれなりに勢いのある界隈だし、時間が解決するのだ、とは思うけれども。
今日デプロイまでこぎ着けたかったけど、バックアップのことを忘れていたので一回休み。明日やろう。
(こういうことをわざわざ言うと嘘くさくなるのは承知なんだけど、)僕はもしかすると競争というものからけっこう自由なのかもしれない、と思う。中学受験を経験しておいて競争してないってのも変な話なのだけど、その先ではけっこう競争の価値観から外れて生きられているのではないだろうか?まあ、ドラマとかで表現されている「競争社会」がどの程度リアルなものなのかはわからないし、けっこう割り引いてみないといけないだろうけれど……。少なくとも僕はこの五年くらいは「好き勝手やっている」と思っているし、それで満足できているのは幸運なことだろう。
そういう状況のために有効だったのは、やっぱり中学受験だったりなんだろうか。それとも、結局僕のような人間はどこでもそういう風に生きていけるということなのだろうか。でも、結局僕のような人間が僕のように育つためには、僕が生きてきたような環境が必要だった、と考えることもできるだろう。僕は単に幸運だったのだろうか。それとも僕に教育を施そうとした両親の努力の結果なのだろうか(まあ両親は僕にもうちょっと立派になってほしかったようだけど……)。