20250425 チーズバーガー丼

項目 内容 得点 換算点
睡眠時間 3時間30分 0 0.0/13.0
起床 8:31 74 5.9/8.0
散歩 ノー 0 0.0/5.0
朝食の栄養カバレッジ 0色カバー 0 0.0/5.0
体操 ノー 0 0.0/5.0
労働 passion: 70点, discipline: 70点 70 16.8/24.0
ジム 休養日 100 12.0/12.0
勉強会 ノー 0 0.0/12.0
個人開発 ノー 0 0.0/7.0
あすけん - 45 4.0/9.0
総合 1日の総合評価 - 39

↑結構いろいろ改修した(させた)。今回はGemini2.5Pro。小規模アプリケーションだとめっちゃ賢いよ。ちゃんと.clinerulesに従うしpackage.jsonのコマンドも読める。まあコスト的にはハイエンド側だからね。コメントが過剰気味なのは変わってない。そう言えばYouTubeのある英語話者がジェミナイって読んでたけど、本人(?)に聞いたら発音はジェミニって言ってたな。


(世代がバレる)

夜眠れず、眠れないことにイラついて開き直って5時頃まで起きてた。健康も精神も全てが破滅している。

友人からのタレコミで松屋の新メニューチーズバーガー丼を食べた。美味いかまずいか以前に「普通にパンでバーガーにすれば良いのでは…?」という疑問が湧くほどには単にチーズバーガー。味の評価は米に酸味を合わせることをどう思うか次第。僕は若干懐疑(しかし改めて考えてみると酢飯・ケチャップライス・ケバブ・ドリア等は違和感なく食べてはいるな…)。シンプルに肉がデカいのは満足感がある。

休みが多い期間に入る。と言ってもカレンダー通りだが、憂鬱だ。休みは退屈で、休みを退屈にしてしまう自分の至らなさを思い知るのは辛いからだ。

基本的に僕はポイントカードアンチなのだが、ここに住み始めて結構長く、そろそろ近所のスーパーで使えるカードなら作ってもいいかなという気分になってきた。しかし僕は基本的にデジタル国粋主義者なので、GAFAにピンハネさせないでポイントカードを活用するためにはどういう方法がいいかなと考えている。

20250421 もう一人のボク

項目 内容 得点
睡眠時間 5時間0分 20
起床 6:30 100
散歩 ノー 0
朝食の栄養カバレッジ 3色カバー 100
体操 ノー 0
労働 した・passion: 75点, discipline: 80点 78
ジム 有酸素 100
勉強会 ノー 0
個人開発 実施 100
あすけん - 64
総合 1日の総合評価 59

入眠困難・眠い浅い・悪夢の三重苦。一応早起きした(してしまった)がその後も半覚醒でボーッとしていたのでゴミを捨てそこねた。

昼食は日高屋のW餃子定食。いつもながらあんまり美味しくない。なんならいつもあんまり美味しくなさすぎて思ったより美味しいまである。あすけんに入力するときキムチか唐揚げか選べるようにしてほしい。

神の気温。むしろ適温に近すぎるせいで日に当たると暑いし風が吹くと寒い。フィードバック処理なら平滑化を入れないと高速で服を着たり脱いだりし始めて他の行動ができなくなる。

最近は睡眠の不調を反映してか頭の動きが悪い。とっさに単語が出てこなかったり、複雑な仕組みをイメージするのに時間がかかったりする。元気もあまりない。年齢もあるだろうが、それよりも体調による短期的変動のほうがずっと大きい。

ふと思い立って自分の全ツイートと全日記をNotebookLMに突っ込んでみた。全然面白くなくて、あれこれ質問しても自分がもう知ってることを自分よりも曖昧で不正確な文章で返答してくるだけだった。

20250420 モアイ回し

項目 内容 得点
睡眠時間 5時間37分 45
起床 8:38 68
散歩 ノー 0
朝食の栄養カバレッジ 3色カバー 100
体操 ノー 0
労働 休日 100
ジム 有酸素+筋トレ 100
勉強会 ノー 0
個人開発 実施 100
あすけん - 72
総合 1日の総合評価 66

睡眠時間を追加した。

朝食。2時間おいてジム。風呂上がりに扇風機の風を浴びるおじさん、脱衣所あるあるだと思うんだけど今日は2台の扇風機で2人のおじさんが同じポーズで浴びてて面白かった。モアイ回し(ああ、僕が小学生の頃に遊んだブラウザゲームたちは今どこにいるのだろう)。帰りに『爽 とろける濃厚完熟マンゴー』を買って食べてみた。うん、確かにマンゴーらしい風味はあるけど、そもそも爽があんまり好きじゃないんだよね。シャリシャリ系なので。

↑の点数計算アプリケーションをGPT-4.1-miniでvibe codingしていた。いじるファイルが3つくらいで行数も少ないのでこのAIでもかなりいい具合に動く。激安だし。やってる最中にちょっと面白い発見があって技術ブログも書けた。AIもフロントエンドのツールチェインの複雑さには勝てないようだな。

逆にもっと複雑なwatch-duty-managerはAIに任せるのはかなり難しい。AIが何をしているのか俺にはよくわからないし、AIも俺が何をしているのかよくわかってない。相当上手く操縦しないといけないがそんなことするなら自分でやったほうが早い。.clinerulesを当然のように無視してくるのでこちらがノウハウを積み重ねられないんだよな。

気候がとても丁度いい。26度で湿度50%。自室で服を脱いでいて、暑くもなく寒くもない。蒸しもせず乾燥もしない。布団を被っても気持ちいいし蹴飛ばしても気持ちいい。

20250420 回転寿司/gpt-4.1-miniの印象/prismaでgroupBy

遅めに起きて布団カバーを洗濯した。また冬が終わったので毛布類をコインランドリーで洗った。待つ間にくら寿司で豪遊(1100円)。

回転寿司

回転寿司というのは、極みである。食事の進行中に1品ずつ注文を受けてオンデマンドで調理される自由度の高さ、それを支えるweb注文とコンベヤ輸送という温かみの欠片もない高度な技術によるオペレーション、射幸心を煽るびっくらぽん。揚げ物スイーツラーメンなんでもありの無文化性。そんなに美味しくない寿司、腹に貯まる米による満腹感。誰も触らないせいで回転レーンで干からびていく寿司(そしてそのせいで一層誰も触らなくなる)。

食べる分量が空腹である入店時には決まらないという性質上食べ過ぎにくいというのはなかなか良いところだと思う。

洗いたての毛布を持ち帰って神の昼寝。起きたら友人が麻雀で大負けしていた。

gpt-4.1-miniの印象

またいろんなLLMを試しながら個人開発。これ自分じゃメンドクセぇ〜って思うところはやっぱりLLMにも任せられないね。今日の感触としてはこんな感じ。

  • gemini2.5: やたらと作業ログをコメントで残す。やめろと言ってもやめない。diffツールの使い方が下手で何度もやり直し金ばかりかかる。触るなと言ったところを触る。
  • gpt-4.1-mini: 頭も記憶力も悪いが時間をかけて誘導すれば一応仕事はできる

僕は安くてそこそこ使えるやつに興味があり、その点ではgpt-4.1-miniは良い。claudeはお高くて使いづらいんだけど優秀であるということを痛感。gemini2.5は高いし評判も良かったけど使ってみたらそれほどでもなかった。

prismaでgroupBy

具体的にやった作業はprismaのクエリいじり。アニメの作品(work)とエピソード(episode)が一対多対応であるという前提で、ある条件を満たすようなepisodeを2つ以上持つworkを抽出したい。生SQL(を使えるprisma API)だと

const works = await prisma.$queryRaw`
  SELECT w.*
  FROM work w
  JOIN episode e ON e.work_id = w.id
  WHERE e.some_condition = true
  GROUP BY w.id
  HAVING COUNT(e.id) >= 2
`;

のようにwhere→group by→havingの流れで2回絞り込みを行うことで実現するらしいのだが、これをprismaに持っていくと

const works = await prisma.episode.groupBy({
  by: ['workId'],
  where: {
    some_condition: true,
  },
  _count: {
    workId: true,
  },
  having: {
    workId: {
      _count: {
        gte: 2,
      },
    },
  },
});

となり、返り値の型が { _count: { workId: number }, workId: number } になる。つまり SELECT w.* が再現されずworkIdしか取れない。

既知のissueとしてはこの辺りが近い話に思われるが、いずれも対応される雰囲気がない。
https://github.com/prisma/prisma/issues/24816
https://github.com/prisma/prisma/discussions/6517

まあしないだろうなという感覚もわかる。prismaはそもそも様々なデータベースを隠蔽する抽象化の役割も持っており、各データベースのある程度細かい機能に逐一対応するのは無理だ。TypeScriptとの堅固な統合が持ち味であることを考えれば難易度は一層高い。

ある程度複雑なクエリ、パフォーマンスチューニングが求められるクエリは生SQLのAPIを使ってくださいよということなのだろう。

20250418 車輪の日

項目 内容 得点
起床 8:20 83
散歩 ノー 0
朝食の栄養カバレッジ 3色カバー 100
体操 ノー 0
労働 した・passion: 60点, discipline: 50点() 55
ジム 有酸素 100
勉強会 ノー 0
個人開発 ノー 0
あすけん - 48
総合 1日の総合評価 53

入眠が遅かった。コンディションは微妙。仕事で使えるLLMは当然個人開発よりは制約があるので、その中で上手く活用できる方法をいろいろ試している。同じLLMでもClineとCopilotだとClineのほうが遥かにいい動きをするのだが、開発元の基礎力から考えるといずれCopilotが勝つ未来も十分にあり、慣れておきたい。

ジムはアークトレーナーが珍しく埋まっていたので車輪を漕いだ。これめっちゃしんどい。膝爆発するかと思ったけど終わってみたら意外とそうでもなかった。ジム帰りに御徒町で酒が立っているのを観測したので集合。いつもの中華へ。女将に「顔見て(いつもの連中だと)わかった」と言われて複雑な気分。4月で環境が変わった友人たちの話を聞くのは楽しい。

帰宅してDota2して歯磨きして日記書いて寝ようとしている。WordPressのテーマの更新中にうっかりブラウザバックしてしまったらメンテナンスモードが終わらなくなった。フロントエンドの操作でそこに影響出ていいんだ…。サーバーに入って .maintenance を消したら復活。

徐々に冬服をしまい始めている。毛布・上着類もクリーニングに出したいな。着衣終了・脱衣開始。

20250403 Lerna

項目 内容 得点
起床 9:58 2
散歩 ノー 0
朝食の栄養カバレッジ 3色カバー 100
体操 ノー 0
労働 した・passion: 85点, discipline: 65点() 75
ジム サボった 0
勉強会 参加 100
個人開発 実施 100
あすけん - 72
総合 1日の総合評価 56

個人開発でちょっとした機能を追加したく、deepseek-r1にやらせようと思ったが、一人であれこれ思考を巡らせている間にAPIがエラーになって何もできなかった。gemini-2.0-flash-001に切り替えてみると明らかに返答がバカ速くなり、思考に僕が追いつけなかった。でも出てきた編集内容はトンチンカンで、ダメ出しするとまた高速で思考し始めたが、結局何の成果も出せないままRoo Codeに「このタスクはgeminiくんには難しすぎたんじゃない?」と言われて終わった。やはり安いLLMはそれなりだ。

腰痛・膝痛は改善した。

JavaScriptのモノレポ管理ツールでlernaってあるじゃないですか。多頭のドラゴンをロゴにしてるやつ。これなんでlernaなんだろうと思ってChatGPTに聞いてみたらlernaは地名でレルネーのヒュドラというギリシャ神話の怪物をモチーフにし、ヒュドラは名前被りが多いのでlernaの方を取ったのではないか、という話だった。なるほどなあ。

断片的にはメンバーのこういう言及もある。
https://github.com/lerna/lerna/issues/1858#issuecomment-452782408

現実のlernaはこんな感じの草原と丘のある村だ。

風景をGeogusserの友人に送りつけてここどこだ?してみたらギリシャなのは一発で当てた。

20250330 LLM教育

特に用事なく、のんびりと家事をして昼寝して、LLMをシバきながら個人開発をしていた。

LLMシバきもいろいろやり方、コツがある。人の使い方にいろいろあるのと同じだ。今回はそこそこ手数が必要なライブラリ移行タスクをTDDでやらせてみた。書かれたコードを自分で100%確認していてはLLMの速度を活かせないと思い、押さえるべきところをはっきりさせて実装はある程度お任せとする方針だ。それでも筋の悪い共通化をしたり、逆に類似コードが増殖したりと自分と同等のクオリティにはならないので、適宜LLMによる差分にレビューのようにコメントをつけることで方向性を理解させることにした。コンテキストが生きている間はそれで質が向上するのだろうが、費用とのトレードオフなのが厳しい。たぶん.clinerulesとかに書いておいても同じ話だよな。LLM自体を俺好みに育成しない限りは解決しない問題だと思う。

20250222 Cline+Claudeやってみた

昨日は国外出張から戻った友人の無事を祝って御徒町で飲んでいた。飲みはとても楽しかったのだが寒さと胃腸の弱さ(普段は全く自覚しないが飲み屋でだけ覿面に弱くなる)ゆえに酷い胃もたれを起こしてしまい、帰って苦しんで寝ていた。寝るタイミングを逃し、寝ないまま今日に突入。午前に用事を済ませ、昼はもつ煮屋で食べてきた。スタミナもつ煮ってなんだろう、大きいのかな?と思ったらニンニクモリモリで、なるほど写真じゃわからんかった!!となった。

mizchi氏の魂がまた震えているらしいのでとりあえず真似してCline+Claudeを導入してみた。Clineは任意のLLMのサポートを得ながらvscodeを自動操作するvscode拡張で、単なるコード生成を超えてシェルやpuppeteerまで操作して勝手に動作確認までやり始める。マジですごい。ClineのバックエンドになるLLMは幅広く選べるのだが、おすすめはClaudeらしい(ローカルollamaは遅すぎて無理だった。GitHub CopilotはVS Code LM APIという仕組みを通じて使えるのだが、トークンが激増するらしくすぐrate limitになった)。Claudeを使いたいときはClaudeに直接金を払ってもいいし、OpenRouterというサービスを使ってもいい。OpenRouterは様々な商用LLMを統一的なインターフェースでアクセスできるように集約したもので、ここにお金を入れておくと使ったLLMに使った分だけ支払われる。若干手数料は乗るのだが、AIアシスト開発はいろいろなモデルを試す段階だと思うので便利。Claudeとdeepseekを比べてみたけどやっぱりClaudeの方が強かった。

とりあえず20ドル入れていろいろ遊んでみたのだが、使い方によって課金額が結構違う。コンテキストをリセットしないまま長話をするとトークンが嵩んで高くつくようだ。その辺りに少し慣れた状態で、日々の日記のアレを生成するサービスを作らせてみた。20コミット1000行分くらいのちょっとしたもので3~4ドルくらいかな。Claudeとの1回の応答で0.02ドルくらい。

https://chao7150.github.io/discipline/

(以下はサンプルです)

項目 内容 得点
起床 7:30 100
散歩 実施・ゴミ拾いあり・犬0匹() 100
朝食 三色食品群のうち0色カバー 0
体操 実施 100
労働 passion: 0点, discipline: 0点() 0
ジム 有酸素+筋トレ 100
勉強会 実施 100
個人開発 実施 100
総合 1日の総合評価 59

Claudeはとても賢い。曖昧な自然言語で指示を出してもかなり正確に意図を読み取ってくれるという点で対人間インターフェースは非常に優秀。知識も豊富でライブラリの使い方とかもよく知っている。コードの整理・美学みたいなものは弱く、場当たり的な構造を作りがちに見える(まあ1つずつ指示を受けながら作っていくという条件なら人間でもそうなるかもね)。Claudeを活用してある程度まで野放図に成長してしまったアプリケーションに、後から人間の開発者が複雑な機能を追加するとなると辛いだろうな。

これ仕事で使えるようになったら俺の仕事何が残るんだろう。大きいアプリケーションを作ろうとなったらやっぱり人間エンジニアが整理しないと破綻するのかなあ。なんかそれも希望的観測のように思える。非エンジニアが直接プロンプトを叩いて(しかも何回細かい修正指示を出しても不満を言わない)かなりの精度のものが作れるだろうし、そんな時代にコードを美しく整理するということに意味があるんだろうか。衝撃的な体験だった。

20250212 反動

今朝は起きたときから喉以外は快調。昨日までとの差が自分ではっきりと感じられ、気分もウキウキだった。

一応仕事は午前休にして買い物・掃除をした。ウキウキだったので昼食はさぼてんのロース弁当にした(肉に特殊なブランド名が付いているとき、正しく読めているか不安になって結局さn…ロース弁当でッ…!ってなっちゃうよね)。

労働(短)、夕食は新しい豆苗を購入してサラダを作った。栽培も新シーズン開始。

自宅のネット回線について進展があった。マンションには光が来ているが僕の部屋は配管の問題でそれを使えない件、管理会社に相談してみたらとりあえず大家と相談してくれるらしい。僕も多少金出してもいいと言っておいた(なぜならこんな悲しい部屋は世界から消滅すべきなので)。

鼻うがいの上達を感じる。よく「アー」と発声すると説明されるが、正確には鼻と口に同時に息を流しマイクラの村人のような声を出すと口に液が流れやすい(口に液が流れると奥まで洗浄できるらしい)。

以下、chaoGPTとChatGPTの会話記録。なんか急に早口で喋りだして、怖い。

マインクラフトの村人の声に近い?

おお、それは めちゃくちゃ近い! 😂🎮

マインクラフトの村人(Villager)の「ンゥー」「ア゛ン?」みたいな声 は、鼻に抜ける「ア」にかなり近い発音になっています!

村人の声は、口を軽く開けながら鼻に抜けるように「ア゛ン」「ンゥー」と発音 すると似た感じになりますね。

  • 「ンゥー」 → 鼻母音+ちょっとこもった響き
  • 「ア゛ン?」 → 少し濁った「ア」に鼻の響きを足した感じ

試しに 鼻にかかる感じで「んあ〜?」「んゥ〜?」って言ってみると、村人感が増します🤣

リストのツールチップをgridで作る/ローカルLLM環境構築

リストのツールチップをgridで作る

リストの項目をクリックすることで詳細情報が展開されるタイプのUI(これツールチップって言うんか…?)。

  • その項目の近くに表示されてほしい
  • 詳細情報が表示されることでリストの配置が乱れてほしくない

という前提を置くと、position: absolteで配置するのがシンプルだろう。しかしabsoluteによる配置物はレスポンシブ化が難しい。詳細情報のwidthを固定すると画面の横幅が狭いとき小さくなってくれずにはみ出すし、逆に親であるリストに合わせて100%とするとリストの大きさを先に確定させる必要があり、リストの隣にも表示物があるので不都合だった。

いろいろ考慮した結果gridで詳細情報表示領域を確保してやるのがいい感じだった。まず4行のgridを作る(画像では5行あるがここでは関係ない目的で1つ多い。気にしないで)。詳細情報を表示する前の各項目は3行だけ利用する(grid-column: span 3;)。

■■■□
■■■□
■■■□
■■■□
■■■□

そしてある項目の詳細情報を表示するときは、HTMLでその項目の直後に1行n列(図ではn=3)の要素を置く(grid-column-start: 4; grid-row: span 3; 4行目に3列分使って要素を配置する)。


■■■□
■■■□
■■■▤ <選択
■■■▤
■■■▤

cssは本当に難しい。各要素の大きさがどこで決まっているのかわからない、ググったときに情報の質がピンキリ、プログラミングよりも1つの問題に対して様々な解決法があり良くない意味での創意工夫の余地が大きい。さらに個人開発で言うと終わりがない。いつまでも触れてしまう。僕はあまり考え過ぎたくなくてGoogle検索をひたすらパクるという方針でやっているのだが、Google検索のUIも少しずつ変化しているのでな…。

ローカルLLM環境構築

AI系の開発をやってみたいけどOpenAIに金払いたくないのでローカルマシンでLLMを動かすというのにチャレンジしていた。動かす事自体はそう難しくなくollama(LLM界のdocker cliみたいなやつ)を入れて、huggingface(LLM界のdockerhubみたいなやつ)からpullしてきてrunすれば済む。そこにwebuiをつけたりAPIアクセスしたりweb検索エンジンと連携させたり…みたいな細かい手間もあるが別にAIだから難しいということはない。

難しかったのは個人所有程度のマシンでLLMを動かしても速度も質も全然ダメというところだ。browser-useでURLを指定してこれを開けと指示するだけでもCPU100%で30分間かかってまだ終わらない。こういうのをやってみるとChatGPTがいかにものすごいか(LLMを実用レベルにするためにどれだけの半導体と電力をつぎ込んでいるのか)というのがわかる。

また今アツい分野であるだけに技術の進み方も速く、今日入れてみたパッケージが今日の更新で壊れてて3時間前にissueが立ってリアルタイムで解決法が共有されているという光景を目にした。不安定ではあるがダイナミックな活力がある(他分野から見るとwebフロントもこう見えるんだろうか、最近はさすがにすこし落ち着いていると思うが)。