サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GWの過ごし方
bufferings.hatenablog.com
生成AIを使った開発。個人としては少し手に馴染んできているけど、チームでの開発はどう取り組むのがいいんだろうな?と思っている。この記事は、やってみた結果どうだったというものではなくて、これから試行錯誤するための頭の中の整理。 僕が自分の手でコードを書くことはもうない まず、AIを使っていて感じるのは「今後、僕が自分の手でコードを書くことはないだろう」ということ。すでにこの数カ月間、自分ではコードを書いていない。 誰かと仕事をするときに、コーディングを一緒にするのはいい時間だったなぁと思う。ペアプロやモブプロで知識の交換をしたり、新しいメンバーを受け入れたり、若手を育成したり、そういうときにコードを見ながら「ここはこうしましょう」「それはどうしてですか?」みたいに話せるのはとてもよかった。 でも今後は、そういう時間は中心にはならなさそうに思う。コーディングは誰かと一緒にやるよりは、1人でAI
Claude CodeのAgent Teamsおもしろいなーって思っている せっかく使うならtmuxで使うとAgent同士が会話している様子も見えて面白いよなぁって思うんだけど、僕は以前にtmuxをやめてiTerm2だけを使っていくことにしたんだよなー またtmuxをメインにする???いやーでもちょっと手間だなぁ・・・ってぼーっと考えてて、あ、そういえばiTerm2ってtmuxインテグレーションの機能があるんだったなって触ってみたら、これでいいじゃん!!!ってなった iTerm2のtmux integration tmux Integration - Documentation - iTerm2 - macOS Terminal Replacement iTerm2上で tmux -CC を実行するとtmuxが起動するんだけど、見た目はiTerm2なのだ。えっと、何を言ってるか意味がわから
分割キーボード「Cornix」レビュー、すべてにおいて文句なし|けんすう を見て、そろそろ新しいキーボードがほしいなぁって気持ちになって、去年の10月に注文してたやつが届いたー!わーい。 (パームレストは娘が何年か前に作ってくれたやつを出してきた) ↓こちらで買いました。今は売り切れで予約の受け付けだけみたい。 Cornix LP 無線分割キーボード – JezailFunder Japan もともと Moonlander Mark I という分割キーボードを使っていて、そちらもカラムがまっすぐ並んでるタイプ&親指を使うタイプだったので、大きな戸惑いはないかな。 キーマップ ということで、今日はキーマップをボーっと考えてた。しばらくはこれでいこうと思う。あんまり難しいことは覚えられないので、シンプルにしたつもり。 2026-01-27追記ここから ==== さっそく変更してしまった。しばら
こっちに雑記を書くのは久しぶりな気がする。年末だし家族で買い物でも行こうかってなって、娘たちがメイクを始めたので待っている間になんか書く、という感じ。 自分は、周りから見るとわりと変わった動き方をしているように見えるのかもしれない?と思うので、なんとなく書いてみる。 それは、助けてもらえるように意識して動いているところ。 聞く相手が自分 最近は光栄なことに、いろいろな仕事を任せてもらえるようになってきている。チームのリーダーをやったり、ひとつの案件をなんとかする人としてアサインされたりしている。 任されるようになってくると、誰かが見てくれている中で動いているときとは違って、自分が色々なものを見ながら判断していく必要がある。「これで進めていいですか?」と許可を求める相手が上司ではなくて、自分になる。 だから、これまで以上にしっかりしなきゃなと思う。任せてもらっている以上、自分の力でできる限り
fukabori.fmのtwadaさん回、面白いなー分かるなーって思いながら聞いて、今の自分の頭の中を書きだしてみようと思ったので書いておく。 どのくらい生成AIに任せているかをあらわす指標 どのくらい生成AIに任せているかをあらわす指標は、こうかなぁと僕は思っている。 「生成されたコードを自分が読んでいない割合」 どれだけたくさん生成AIにコードを書いてもらっていたとしても、生成されたコードを自分が全部読んで理解している場合は、主導権は自分にある。逆に、生成されたコードを全く読んでいなければ生成AIに主導権がある。 右のほうが生産性は上げやすい AIにどれだけたくさんコードを生成してもらったとしても、全部読んで理解しないといけないなら人間がボトルネックになる。右側にいけばいくほど、生成AIに任せられるので生産性は上げやすい。 ただ、右側にいけばいくほど自分がコードを理解していないし、構造
「技術的負債をなんとか減らさなきゃ!」とがんばっているのに、なんかうまくいかないってケースをちょくちょく見る。忙しくて時間が取れないとか、少し改善を進めている間に別の機能追加によってまた負債を抱えてしまうとか。 僕はこの10年ぐらい、どうやったらもっとうまく開発できるかなぁって考えながら過ごしている。よりうまく開発をするためには、開発チームの内側を良くするのはもちろんだけど、それ以上に、開発チーム自体を組織の中でどのように設計するかがとても重要だよなと思っている。 8月25日に発売です! 最近もそんなことを考えながら過ごしていたところ @mtx2s さんから「チームの力で組織を動かす」をいただいた。明日(8/25)発売です!めちゃ面白かった。結構ボリュームがあるので、最初ザーッと読んで、次に、気になったところを中心に読み込んでいった。図がたくさんあって分かりやすいのも良かった! 組織やチー
とりあえずコンセプトは動きそうだなぁってくらいで、ちゃんと動くことも確認してないし、テストも書いてないし、まだまだやることはたくさんあるんだけど、どっかでいったんブログに書いて休憩しようと思ったので、書くことにした。年内である程度動くところまで持っていけたらいいな。 Kori Kori (英語版を作ってその翻訳をCursorにお願いしたのでそういう感じの日本語になってます) 特徴 TypeScriptの型安全さをわりといっぱい活かしてコードを書ける。 スキーマを定義すると、そのスキーマにしたがってバリデーションが実行されて、その結果を型安全に扱える。その同じスキーマをOpenAPIのスキーマとしても利用できる。スキーマの実装としては、とりあえずZod v4に対応しておいた。 たとえばこんな感じで定義すると const UserSchema = z.object({ name: z.stri
最近「説明が足りなくてごめんね」って記事(Clarifying Our Pricing | Cursor - The AI Code Editor)がでたりして話題のCursorの料金プラン。僕はプライベートではProプラン($20)を使っていて、新料金プランのレートリミットモードはわりと気に入っていた。 でも、けっこうすぐに$20ぶん使い切って、(たぶん)月間のレートリミットに達してしまっていた。こっからは従量課金かーって気持ちで$100リミットとかにして使っていた。プランのアップグレードも考えてみたけど、Proの上位プランだとUltraプラン($200)だから・・・んー、そこまではちょっとなぁ・・・って思っていた。 そんな中でふとドキュメント(Cursor – Models & Pricing)を眺めてたら「あれ?Pro+プラン($60)なんてあるんだ?これくらいならちょうどいいかも?
「最近のおうちコーディングは、CursorのBackground Agentで遊んでいてわりと面白いよ」って会社の同僚に言ったので、簡単にメモだけ残しておくことにする。 前半でBackground Agentのことを、後半で僕がどう使ってみてるかを簡単に紹介する。 Cursor Background Agent? Cursorをふつうに使うと、AIとチャットしながらコーディングしている感じになる。それはそれでいいんだけど、それとは別で、Cursorにはリモート環境で非同期でタスクを実行してくれる Background Agent という機能がある。ローカル環境とは別のところで実行されるので、手元では別の作業を続けられて便利。 https://docs.cursor.com/background-agent 準備 GitHubとの連携をしておく必要がある。あと、Slack連携もしておくと便利
Devinにお願いしてソースコードからドキュメントを生成してもらえると面白そうなので実験してみた。Devin Wiki や Deep Wiki もあるんだけど、それとは別に自分で指示を出してコントロールできるのもいいかなという気持ち。 どうせ作るなら自分がドキュメントを読みたいやつがいいなぁと思って、ecspresso が好きだから、ecspressoのソースコードからドキュメントを生成してみることにした。 軽い気持ちでやってみたら、思ってたより苦戦した。すごくいい感じにできたわけじゃないので「この記事をめちゃ信じる!」んじゃなくて「へー、ちょっと参考にしとこっか」くらいが良いと思う。 勢いで書かないと書き終わらなさそうだったので、勢いでざーっと書いた。ので長い。 できあがったもの できあがったものを最初に書いておく。わりと気に入ってる。ただ、生成するたびに色々変わるので、雰囲気で参照する
2025-12-14 追記 正式版リリースの前にdiscriminatedUnionまわりの仕様変更が入っていました。この記事の内容から変わってるので↓こちらの記事も合わせてご確認ください! 追記ここまで 「数日前に↓のIssueがクローズされたんだよねー。Zod v4が関係してそう。知らんけど」って会社の同僚と喋ったので、ちゃんと知っておくかーって気持ちになった。 ※ 本記事は[email protected]時点の挙動をもとにしています。正式版で変更される可能性があります。 最初にまとめ z.switchが追加されるとか、z.discriminatedUnionが非推奨になるとかの話はなくなった様子 Zod v4 ではz.discriminatedUnionに識別プロパティを渡さないようになった(渡しても無視される) 共通の識別プロパティを持たずに、各オプショ
エンジニアとしてチームをリードするときよりも、もう少し広めの範囲をリードするときの話。 1 つのチームをエンジニアとしてリードするときには、ぐいっと引っ張ったり、やって見せたり、そばでペアプロをしたり、直接話をしたり、そういう直接のコミュニケーションでリードできるし、そうしたい。 でも、複数チームの方向性を決めるような旗振りをするときには、そういう直接のコミュニケーションは難しくなる。それに 1 つのチームを見ているときよりももう少し遠くを見ることが多い。 そんなときに意識しているのは「自分が考えてることを見えるようにすること」。 考えてることが見えないと 考えてることが見えないタイプのリーダーは、メンバーとしては動きにくいなって思ってしまう。 責任感が強かったり、自分がリーダーとしてしっかりしなきゃ!と頑張ってたりするから、というのが多いかも。で、いろいろ悩んで、最終的に決まってから「こ
数日前に↓を読んで、なるほどー!ってなったので、なんか作ってみるかと思い MCPサーバー自作入門 なんとなく、npxで実行するより、実行可能ファイルにしてみたいなと思って、Denoに初挑戦。↓こちらを参考にして作ってみた Deno で RooCode 用にローカルMCPサーバーをさっと作る ↓こうなった https://github.com/bufferings/mcp-servers/tree/main/hello 実行可能ファイルはこんな感じで作って ❯ deno compile --output dist/hello hello/index.ts Cursorでそのファイルを設定して { "mcpServers": { "hello": { "command": "~/mcp-servers/hello", "args": [], "env": {} } } } 有効化して 文字列の
すごく久しぶりにブログを書く。3ヶ月ぶりくらい? ↓この記事を読んで「へー。どういうこと?」ってなったので遊んでみた。 「GITHUB_TOKEN でGitHub Modelsを呼び出せるようになったよ!PAT(Personal Access Tokens)はもう使わなくていいよ!」って書いてある。そもそもGitHub Modelsを知らんかったけど、GitHub Copilotとかで使ってるAIのモデルたちのことかな。 やってみた GitHub ActionsでAIの呼び出しができるよってことだろうなと思って適当に作ってみた。「今日の運勢を教えて!」って投げるだけのGitHub Actions。 「今日は新しいことにチャレンジする絶好の日!」ふむふむー。 コード github.com name: GitHub Models API Example on: workflow_dispatc
HonoとZodとOpenAPIまわりが気になって、Zod OpenAPIのコードをWebStormで読んでたら、WebStormとNode.jsのプロセスがCPUをたくさん消費して、動きが遅くなって困った。メモリもWebStormに割り当てたぶんを使い切っちゃうよーって警告が出てきてた。 なんの気なしにそんなことをつぶやいてたらJetBrainsの@niklas_wortmannがコメントをくれた。 Did you happen to create a YouTrack ticket with some CPU or Memory snapshots? Would love to further look into this— Jan-Niklas Wortmann (@niklas_wortmann) January 18, 2025 ので、たしかにレポート送るのいいか、と思ってYou
基本的なことは大丈夫なのでざっと読んで気になったところだけをメモしておく。使ってるときに「そういえばこんな機能がZodにあった気がする」って頭の中で引っかかるように。 視点としては、Webアプリケーションのサーバーサイドを作る頭で読んでる。フレームワークを作る頭とかではない。 Coercion コンストラクタ関数を噛ませて変換するやつ。 z.coerce.string() Literals 忘れたりはしないだろうけどメモ z.literal("tuna") Strings datetime ZodStringにくっついてくる。タイムゾーン有無・精度・ローカルとかある。 const schema = z.string().datetime({ local: true }); schema.parse("2020-01-01T00:00:00"); // pass datetime以外に、da
Branded Typeについては、もういろんなところで触れられているから、わざわざ書かなくてもいいよなぁという気持ちがありつつ。でも、せっかく頭の整理をしたから、来月の自分用にまとめておくくらいはやっておこうか、という気持ちになったのでメモを残しておく。それとZodの.brand。 やりたいこと 次の2つの型に対する値を間違えて渡したときに、TypeScriptの型検査でエラーになってほしい。 type UserId = number; type BookId = number; TSの型システムはStructural Subtypingを採用しているので、構造が同じだったら部分型として扱われる。だから、↓こんな風にUserIdを引数で受け取る関数にBookIdの値を渡してもエラーにならない。どちらも同じnumber型だから。 const getUser = (id: UserId) =
年末年始にGhosttyを触ってみてて、好きだなとは思いつつもメイン使いするのはもうちょっと待ちたいなという気持ちになった。 なので、↓以前に書いたみたいにiTerm2 + tmuxに戻すかー!と思って、それならtmuxの使い方をもういっかい勉強するかー!って考えたんだけど。 はて?そういえばなんでtmuxを使ってるんだっけ?ってなった。 もともとは、踏み台からサーバーに入って作業をするときに切断されないようにするためだったな。ついでに複数台のサーバーに入りやすくて便利だなくらいで使い始めたんだった。 もう今じゃ踏み台からサーバーに入ることもほとんどないし、単に複数ペインやタブで操作したいだけならiTerm2だけでよくない?って気持ちになった。 それに、もしまた踏み台経由でtmuxを使いたいってなったら、iTerm2のtmuxインテグレーションの機能を使えばiTerm2の使い方でtmuxが
2025-01-07 追記 年末年始に触ってみてて、いまはまだiTerm2+tmuxのままにしておこうと思ったのだった。 検索ができなかったり、ちょこちょこ気になる動きをする部分があったりするから。 追記ここまで 今朝リリースされた なんとなく楽しみにしてたやつ。わーい。 https://t.co/39Xj39wheA 👻 pic.twitter.com/PH0qejFB4z— Mitchell Hashimoto (@mitchellh) December 26, 2024 使ってみようと思った ちょっと触った感じ、なんとなく心地良いなと思ったので使ってみることにする。僕は今 iTerm2 + tmux なんだけど、これを機に tmux もやめてみて Ghostty だけを使ってみようかなと思っている。 Ghostty + tmux でもいいよなとは思ったんだけど、せっかくなら Gho
私の目標は、読者が午前中に本書を読み始めたら、午後には設計が上達していることだ。 本当にそのとおりだった。読んでる途中で既に自分の設計に対する考えが良い方向に変わってると感じた。とても良かった。おすすめです。 『Tidy First?』 をいただいて読んだ。昨日(2024年12月25日)発売。英語版が2023年11月28日発売だから、たった1年で日本語版が出たということだな。うれしい!はやい!ありがたい! ソフトウェア設計に焦点を当てたシリーズの最初の1冊ということで、サブタイトルに「個人で実践する経験主義的ソフトウェア設計」とあるように、1人でできる種類のソフトウェア設計について書かれている。続刊ではチームについての話になる予定のようで、それも今から楽しみ。 2周読んだ なんとなく2周読もうと思ってそうした。 1周目は細かい部分は気にせずにざーっと1,2時間くらいで読んだ。全体的にどうい
2025-11-22 追記 ESLintに変更が入って tseslint.config はdeprecateになってた。 2025-11-22 追記ここまで typescript-eslintのFlat Configについて、自分に今必要そうな部分だけをひととおり確認したので忘れる前にメモを残しておく。 前提 素のJavaScriptプロジェクトをやることは自分はあまりなさそうなのでTypeScript前提 ES Modules前提でいいやと思っているので設定ファイルの拡張子はシンプルに .js にする フォーマッターにはESLintのStylisticじゃなくてESLint外のフォーマッター(PrettierやBiome)を使う前提 基本の設定 https://typescript-eslint.io/getting-started/ の最初に書いてある設定。 // @ts-check
カケハシのスタッフとしてTSKaigi Kansaiに参加して楽しんできた。 スポンサーのランチLTでカケハシのメンバーも喋るからブースを抜け出して見に行ってたら、newmoの大貫さんのLTで「DuckDB Wasmを使ってクライアントだけで処理したよ!」って発表があって、面白いなーと思ったのだった。 kansai.tskaigi.org ので、遊んだ DuckDBは初めて知ったし、Wasmには興味があるので、遊んでみた。GitHub Pagesにアップロードしておいた。11/18の日本各地の最高気温が分かるよ! https://bufferings.github.io/vite-react-duckdb-wasm/ やってるのは DuckDB Wasmをクライアントで取得して e-Govデータポータルの11/18の最高気温のCSVをDuckDBに入れて そのDBの内容をテーブルに表示 テ
数日前にTypeScript 5.7 RCがアナウンスされてリリースが楽しみだなー!ってところなんだけど、そのさらに数日前に、ウォッチしていたこのPR↓がマージされてTypeScript 5.8.0のマイルストーンに入った。わー! これが今日のお話。TypeScript 5.8.0でConditional return type narrowingが入りそう。楽しみ! Conditional return type narrowing? 直訳すると「条件付き戻り値型の絞り込み」かな。引数の型によって戻り値の型が変わる関数を定義したいときに、例えばこんな風に書きたくなる。 declare const record: Record<string, string[]>; declare const array: string[]; function getObject<T extends str
2024-11-11 追記ここから ---- TS 5.8で、その1のインデックスアクセス型の方はサポートされそう。その2の方はその対応が入ってもサポートされない。 追記ここまで ---- 最初にまとめ 現在のTypeScript(2024-09-19時点のバージョン5.6.2)では Generics と Control Flow Analysis は、いい感じには連携しないということを学んだ。 どういうこと?その1 Genericsを使って型安全にやりたいなぁと思って、こんなコードを書いてみてもコンパイルエラーになる。 type Mapping = { a: boolean, b: string, } function getValue<K extends "a" | "b">(key: K): Mapping[K] { if (key === "a") { return true; }
何を言っているんだ?というタイトルだけど、今日はTypeScriptの型で遊んでた。 タグ付きユニオンから型をExtractしたい こういうタグ付きユニオンがあって type MyUnion = | { tag: "a", value: boolean } | { tag: "b", value: boolean } | { tag: "c", value: string } その中の型をExtractしたいときは、こんな風に書ける type A = Extract<MyUnion, { tag: "a" }> そうするとtagが"a"の型を取得できるので、このテストがとおる import type { Equal, Expect } from '@type-challenges/utils' type cases = [ Expect<Equal<A, { tag: "a", value
うちのチームにはPdMが2人いる。そのPdM2人は、お互いの得意を活かしながらプロダクトをマネジメントしてくれている。「PdMやPOは1人であるべき」って言葉を見かけたりするけど、うちのPdMは2人でいい感じにやっていて、このスタイルいいなぁって思う。おかげでエンジニアとしても動きやすい。 そもそも、PdMってやることがめちゃくちゃ多い。ステークホルダーと話したり、ユーザーさんのお話を聞きに行ったり、少し先のことを考えたり、仕様を決めたり、受け入れ判断をしたり、仮説検証のためのKPIをチェックしたり、問い合わせがあったら一次請けをしてくれたり、いろんなことを決断しまくったり。それでいて業界の勉強もしている。 大変だよね。ひとりでさばききれる量じゃないよね。って僕は思っている。 だから、複数のPdMがいるのはとても良い。大変な作業を分担したり難しい決断を相談したりしながらプロダクトのことを考
うれしかった。ので、メモ。 僕のいるチームのプロジェクトで、複数のチームにサポートしてもらいながら進める必要がある、ちょっと大きなものが始まりそうだったから、キックオフ前のキックオフやっとこかーってなって司会をした。オンラインミーティングね。 最初にこの会の目的を説明 今日のアジェンダのページのリンクは事前に共有もしていましたけど、いまSlackにもポストしておきましたー。 まだプロジェクトは始まってないんだけど、事前に調査とかをしたいから質問や相談をさせてもらいたいなと思っていて、そのときに「え?これなんの話?」って戸惑わせることがないように、プロジェクトの概要を共有しとこうと思ったー!だから、この会がうまくいったら、僕らが質問してもみなさんが戸惑わないようになっている! Bさん、Slackにメモ残してってください。お願いしまーす! からの、会の流れを説明 最初にPdMから10分くらいで
開発部全体を見てるあのすごい人が、ある1つのチームのマネージャだったらどんな感じなんだろうなぁ?仕事がやりやすいんだろうなぁ?って考えることがある。それが今、僕のいるチームで起こっている。 VPoEの経験もあるいくおさんと、カケハシの同じチームで仕事をしている。いくおさんが1つのチームのエンジニアリングマネージャとしてついてくれているのって、とても贅沢だなぁと思っている。実際に仕事はめちゃくちゃやりやすいし、それだけじゃなくて、僕やチームみんなの心の支えになってくれている。 いくおさんが書籍を出した そんないくおさんが書籍を出した。この本がとてもいい本なので、みんなに読んでほしい。どうしていくおさんと一緒だと仕事がやりやすいのか、なぜ自分の持ってる力が引き出されるのか、その理由がこの本には書かれている。 www.shoeisha.co.jp いやー目標って苦手なんだけど・・・ 目標って聞く
読んでよかった book.mynavi.jp 評判通りよかった そっかーなるほどなぁ。面白いなぁ。と思うことがいろいろあった とはいえ、著者の主張全てに同意というわけではなく「著者はそう考えるんだな。自分は違う考えだな」と考えさせられる部分もいくつかあった 苦手な部分もあった 古典学派とロンドン学派に分けて話を展開しているのはあまり好きじゃないなと思いながら読んだ 定理やマトリクスに当てはめて話を展開する部分があって、いくつかは無理やりだったり話をややこしくしていたりするように自分は感じた。そういう部分は苦手だなぁと思いながら読んだ というのが全体の感想。内容はとてもよかったし、苦手な部分もそれはそれで考えさせられたので、読んでよかった。ってことでパラパラめくりながらメモを書いていこう あらためて意識したい2本 「第4章 良い単体テストを構成する4本の柱」の中の2本が、当たり前のことではあ
次のページ
このページを最初にブックマークしてみませんか?
『Mitsuyuki.Shiiba』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く