半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

bakuさんのデザインハブのやつ軽く見た

飛ばしながらちょっと見て、また内容についてはちゃんと見たいんだけど、ちょっと思ったこと。

 

この動画の中身に限らずインターネットとか見てて、bakuさんの発言って薄々思ってたけどそんなこと言っちゃっていいんだ、ということが多い。

しかし表現してみることで進む思考もあるというか、そんなこと考えるのは良くないよな、と暗黙的にセーブかけていたことを話すことで進む議論や思考もあるし、そうした表現は重要なのかもと思ったりもした。

 

別にパブリックにしなくても思考を深められることはできるかもしれないが。これを公言できるというのは、ある種インディペンデントだからできることでもありそうだなと思う。

スタンスを取っているということなのかもしれない。

 

しかしキショい、みたいな表現は自分の中ではあまりしたくなくて、下品やな、とか思ってしまうんだけど、その品がない、みたいなの含めてなんかリミッターがかかってる感じもあり(誰かを気にして何かを表現しないということでもありそうだから)そういうリミッターを外すことでできる思考みたいなのはありそう、という話だったかもしれない。

 

ある日の夜

柚子を風呂に浮かべて入ったらどうして食べ物がお風呂に浮かんでいるのか、早く取り出したほうが良いと取り出して親たちに渡しはじめ、何回かお風呂に柚子を戻していたらどうしてそんなにもったいないことをするのかと本気で泣き、最終的には柚子の皮を剥いて種ごと一粒食べ、この味は一体なんなんだと驚いていた。

お風呂上がりに髪を乾かしたあと、みかんをほぼ自分で剥いてほとんど食べた。

冬至だった!

今日あったこと

昨日いつものようにPRをマージしようと思ったら、main branchとコンフリクトしたので対応。するとtscがエラーを吐いた。

TS2589: Type instantiation is excessively deep and possibly infinite. 

Prismaのモデル拡張を生やすための $extends() を呼び出しすぎた結果、TypeScriptが音を上げたようだった。このことはまたブログに書けたら良いと思うが、保守性が悪化しないコードを目指して数時間格闘しても良い感じにならなかったので、もはや保守性を諦めるか…。と思い、妥協案をPRに出して眠りについた。

 

翌朝。チームにPRを見てもらうと思っていた通りあまり反応は良くない。XXできないの?といろいろな提案をもらう。うーんですよね。そう思いますよね。いや昨日試したんだけどなんかうまく行かなかったんですよね…。まあとはいえ!結構数時間粘っていたし一晩寝たわけだから、ここはいっちょ試してみよう。そうしよう。ということで新しくブランチを切ってみたのでした。そうそう、そういや最近はgit gtrが手に馴染んできていて、VSCodeインスタンスが画面に増えまくってまあまあ大変なんですけど、まあ便利ですね。モバイル開発してるとworktreeはちょくちょく使うものだけど、こんなに世界中で使われるようになるとは思わなかった。

 

それで。いつものようにClaude Codeに頼む前に、どんなコードだったかな、どんなふうに書くと良いかなー、と手元でこねこねしてみる。こんな感じでかけたらよいかなーとUtility Typesを使ってがんばって書いてみると、なんか昨日と違ってうまくいきそうなんですね。睡眠大事だわ。なんだけど、ちょっとうまく行かない。そこでClaude Codeくんに出てきてもらって、ちょっとここがうまくいかんのだけど、君TypeScript得意だよね?ちょっとやってみてくれない?とお願いすると、それっぽいコードを出してくれます。ただやっぱりうまくいかないんですね。チーン。

 

そこでアプローチを変えよう!もうちょっと素直に書こう!ということで、まずは愚直に書いてもらうことにします。するとなんだか気になるところが出てきて… ここ、もうちょっとこうならないかな?なんでこれはうまくいかないの?あー、なるほどね。それはむりか。こーれはちょっと微妙すぎるコードになっちゃったね、もどそう!などなど話していくとまあ動くコードにはなってきて、まあ最低限のコードくらいになる。ClaudeのContext Windowも限界になってきそうだったところで、リファラジの id:t-wada さんゲスト回を思い出す。「ほんじゃ、ここまでの議論をADRにしてくれる?」とお願いしてADRを書いてもらうことにします。その間にコードを改めてレビューしていると、もうちょいカッコよく書くためのヘルパー関数的なものを用意したらいいんじゃない?ということを思いつく。

 

ADRも書き終えたところで、こんな感じに書けたら嬉しいじゃないの?というコードを雑に書いて渡してみる。これはTypeScriptの型的にできないんですよー、そうなのかー。じゃあここ妥協したらいけるの?パターン出してみて!とかClaudeとのやりとりをして方針を決めたら、Claudeに実装してもらい、その関数を使って私がコードを書いてみて書き味チェックを繰り返します。あれ?ここは補完出ないのだっけ?嫌だなー、ここは出てほしいよ!とか、そんな感じで。それで何往復かすると、かなり良い書き味のインタフェースに落ち着いた。もちろん最初に描いていたものではないが、まあだいぶ良くなったね!というものに落ち着いたのでした。で、じゃあこれもADRに書いといて、とお願いして、お片付けしてセルフレビューして、リベンジPRを出すところまで行けたのでした。

 

こんなのが今日のあった出来事なのだけど、AIを使いこなしている人からすればなんてことないことだとは思うが、確実に自分の能力が拡張されているなという気持ちになったのだった。TypeScriptの知識をそこそこ持った、無限に壁打ちできてそれなりに(自分と同じくらいは)コードが書ける相手がいる。プロトタイプもちょうどいいくらいにやっておいてくれる。しかもADRとか過去のやり取りもまとめてくれる。自分1人ではこの短時間で行ける気がしなかった所まで登れたことに驚きがあった。

 

このスタイルになるまでには、バリバリAIを使って並行開発しまくる同僚や、ちょうど良いところを追い求め続けるチームや、リファラジ*1#102が欠かせなかったので、接続しておきたい。

 

で。いま、ここ、の目線から言うと…。いまコードを書く仕事に転職できたのは良かったなと思っている。AIがない時代に転職するのとは、わけがちがう。AIのサポート(とそれを適用しやすいサイズと言語のプロジェクト)によって、しばらくコードを書いていなかったことのブランクも多少マシになっていると思う。これまで多くの時間を使ってやってきた、何をつくるか、どう作りすぎず、しかし積み上げていくか、どうチームをつくっていくか(いまは逆に、逆の視点からどう動いてフォローしていくか)を考えながら、時にはこうしたたのしいひとときを過ごしてお金を頂けるのは、とってもありがたいことだし、きちんとインパクトのある仕事に繋げていきたいと思う。

 

山下達郎のクリスマス・イブが流れはじめたので、これにて終わり!

*1:リファラジはid:lacolaco さんと okunokentaro さんがやっているソフトウェアのポッドキャスト。もうすぐシーズン1終了ってマジですか。