じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

Ory Kratosで認証を委譲する

前回からの続き 前回の記事では、Playwright MCPを使ったE2Eテストで5つのバグを発見した。CORS設定の欠如、JWTトークンの切り詰め、Hydraトークンとの不一致、ミドルウェアの適用漏れ、X-Tenant-Slugヘッダーの欠如。RBACの検証とOWASP Top 10との比較まで…

おい、辞めないなら頑張れ

はじめに 先週、「おい、辞めるな」という記事を書きました。 syu-m-5151.hatenablog.com 思った以上に反響がありました。何人かから連絡をもらいました。辞めないことにしました、考えるきっかけになりました、と。ありがたかったです。嬉しかった、と言っ…

OAuth2認証をE2Eテストしたら、5つのバグが出てきた話

はじめに 認証が動いた。だがそれは始まりに過ぎなかった。 前回の記事では、Next.jsでOry Hydra認証を実装した。OAuth2認可コードフロー、Cookie管理、ID Token署名検証、マルチテナント認証について解説した。 前提知識: この記事は前回の記事の続編です。…

Next.jsでOry Hydra認証を実装する ― マルチテナントSaaSでの実践

はじめに 前回の記事では、RustでOry HydraのLogin/Consent Providerを実装した。5つのエンドポイント(GET/POST /login、GET/POST /consent、GET /logout)とHydra Admin APIの連携。Argon2idによるパスワードハッシュ、ユーザー列挙攻撃を防ぐテスト設計の…

Fear of the Unknown:Rust/sqlxでNULLを制する6つのパターン

はじめに あるプロジェクトで、電話番号が未登録のユーザーを検索するコードをレビューしていた。WHERE phone = NULL——一見正しく見えるこのクエリは、常に0件を返していた。データは確実に存在する。クエリもシンプル。では何が問題なのか。 答えはSQLの3値…

AI時代に今からITエンジニアを目指す若者にオススメする10冊の本 2026年版

はじめに AIは、あなたが聞いたことにしか答えない。 聞かなかったことは、永遠に教えてくれない。あなたが何を知らないのか、AIは知らない。 2026年だ。AIに聞けば何でも教えてくれる。コードを書いてもらい、設計を相談し、ドキュメントを要約させる。便利…

RustでOry Hydra用認証プロバイダーを実装する

はじめに 年が明けた。月曜日。エディタを開いている。 認証プロバイダーを自分で実装できるか、と聞かれたら、たぶん「できる」と答える。OAuth2のRFCは読んだ。フローも理解している、と思う。ただ、「じゃあ書いて」と言われたとき、キーボードに手を置い…

おい、辞めるな

はじめに かつての私は、深夜2時にベッドの中で転職サイトを開いていた。 開いて、求人を眺めて、閉じて、また開く。そういうことを繰り返していた。辞めたいのか、と聞かれると困った。会社の限界が見えたのか。自分の天井が見えたのか。それとも、隣の芝生…

Hacker NewsのShow HN に自作ツールを投稿する方法

はじめに Hacker News の「Show HN」は、自分が作ったものを開発者コミュニティに紹介できる場だ。しかし、ただ URL を貼れば良いわけではない。明確なルールがあり、それを守らないと投稿が埋もれたり、他のユーザーから通報されて非表示になることもある。…

Ory HydraでOAuth2認可サーバーを構築する

はじめに 認可サーバーを構築するタスクがアサインされた。技術選定の裁量はある。仕事の合間にRFC 6749や技術書をいくつか読み始めた。 datatracker.ietf.org 帰宅後の深夜、週末の空き時間。3日目の深夜2時、私は確信した。 これは自前で作るべきではない…

私の為のNvChadのキーマッピングガイド 2026年版

はじめに 一月三日である。私は今、ソファの深淵に身を沈め、己の怠惰と対峙しているところである。年末にやろうと固く心に誓った開発環境の整理は、見事なまでに手つかずのまま新年を迎えてしまった。大掃除もしていない。年賀状も書いていない。結婚もして…

テスト,検証してますか: cargo-mutantsによるミューテーションテスト入門

はじめに テストは全部通っている。コードカバレッジも90%を超えている。なのに、本番環境でバグが見つかった。 私が実際に経験したことだ。原因を調べると、テストコードにassert(検証)が書かれていなかった。テストは「コードを実行しただけ」で、結果が…

2025年 個人的に心に残ったグラビアアイドル10選

はじめに 2025年12月31日の夜、パソコンの前でこの文章を書き始めている。Xのフォロワーが1万人を超えたとき、勢いで「おすすめのグラビアを紹介します」と言ってしまった。忙しさを言い訳にして先延ばしにしていたら、年末年始になってしまった。孤独な独身…

2025年、nwiizoが作ったソフトウェア

はじめに 2025年が終わろうとしている。 先日、「なぜ『何でも作れる時代』に私は作れないのか」という記事を書いた。「代表作」がないという焦り、量をやることの重要性、そして引き算の必要性。書きながら、自分の弱さと向き合った。 syu-m-5151.hatenablo…

おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、おい、

はじめに 誰もまとめてくれないので自分でまとめます。こんなに悲しいことはありません。 2025年11月から12月にかけて、「おい、〜」というシリーズでブログを15本書きました。登壇もしました。合計16本です。誰かがまとめ記事を書いてくれるかなと思ってい…

おい、論理で人が動くと思ってるのか

はじめに 数年前の、ある金曜日の夜のことだ。会議は完全な失敗に終わった。会議室を出て、エレベーターのボタンを押しながら、私はこの文章を書こうと決めた。書き上げるまでにずいぶん時間がかかってしまったので、当時の思いとは少し違っているかもしれな…

2025年 俺が愛した本たち 非技術書編

はじめに 技術書編を書き終えて、ふと気づいた。あれだけ書いても、まだ語っていない本がある。仕事に直結しない本。読んでも生産性が上がらない本。キャリアに役立つかどうかわからない本。そういう本たちのことを、どこかで書きたいと思っていた。だから、…

2025年、AI時代の要件定義について考える

——「何を作るべきか」を選び、腹を括ることの価値 この記事の核心:AIがコードを書く時代になっても、「何を作るべきか」を選び、腹を括り、うまくいかなければ別の手を打つのは人間の仕事だ。なぜなら、痛みのない決断は決断ではなく計算だから。本稿では、…

Rustにしたのに遅い?─ N+1クエリ問題の発見と解決

はじめに Rustは速い。だが、Rustで書けば速くなるわけではない。 ある日、APIのレスポンスが突然5秒を超えた。コードを見直してもバグはない。SQLも正しく書けている。途方に暮れながらログを確認すると、1リクエストで300回以上もクエリが発行されていた。…

0.1+0.2=0.30000000000000004 をRust/PostgreSQLで考える

はじめに テストを書いていて、奇妙なことに気づいた。合計金額のアサーションが通らない。期待値は10.00なのに、実際の値は9.99999999999983。コードにバグはない。SQLも正しい。では何が問題なのか。調べた結果、犯人は浮動小数点の累積誤差だった。金額カ…

論理削除という技術的負債、それでも僕たちは使い続ける

はじめに 「論理削除?deleted_atカラム追加すればいいでしょ」この一言から始まる地獄を、何度見てきただろうか。 最初は簡単に見える。カラムを1つ追加するだけ。しかし、その「簡単さ」こそが罠だ。 論理削除は技術的負債の温床だ。WHERE句への条件追加忘…

書評や要約は「圧縮」ではなく「変換」であり、「変換」に価値がある。

タイトルがそのままゴールなのですがダラダラ書きます。 はじめに ある技術書の要約を読んで、「なるほど、この本の主張はこういうことか」と納得した。数ヶ月後、原著を手に取って驚いた。要約で「核心」とされていた部分は、実は本全体の一部に過ぎなかっ…

なぜ「何でも作れる時代」に私は作れないのか

はじめに 年末、2025年を振り返る。フォロワーは7倍になった。副業も順調。書籍の執筆や翻訳にも関わった。登壇の依頼も増えた。どこからどう見ても、良い年だったはずだ。 なのに、胸の奥に澱のようなものが溜まっている。 コードは書いた。山ほど書いた。…

cargo-coupling: Visualizing Coupling in Rust Projects

cargo-coupling Web UI - Self-diagnosis view Introduction "I really don't want to touch this module..." If you've been developing software long enough, you know this feeling. Every change breaks something else. Tests are painful to write. U…

おい、休め

はじめに 金曜日の夜、ベッドの上でこの文章を書き始めている。 先週の土日は何をしていたかと聞かれたら、たぶん「寝てた」と答える。嘘ではない。ベッドにいた時間は長かった。ただ、眠っていたかというと怪しい。スマホを持ったまま横になって、気づいた…

cargo-coupling: Rustプロジェクトの結合度を可視化する

cargo-coupling を自己診断した時のweb ui です。 はじめに 「このモジュール、なんか触りたくないな...」 ソフトウェア開発をしていると、こんな感覚を覚えることがあります。変更するたびに他の箇所が壊れる、テストが書きにくい、そもそも何をしているの…

生成AI時代のMarp によるスライド環境の構築

この記事は、3-shake Advent Calendar 2025 19日目のエントリ記事です。 はじめに エンジニアがプレゼン資料を作るとき、PowerPointやKeynoteにもどかしさを感じることがあります。コードを書くようにスライドを作りたい。Gitでバージョン管理したい。テーマ…

Claude Codeの Agent Skills は設定したほうがいい

Claude Codeを使い始めて、様々な発信をしてきました。今回は「Agent Skills」について。これも設定しておくと、Claude Codeがグッと使いやすくなる機能です。 Claude Code の settings.json は設定した方がいい - じゃあ、おうちで学べる Claude Code の CL…

「自分の環境では動く」から解放される Nix Flake

はじめに 「自分の環境では動くんだけど...」という言葉を、何度聞いたことがあるだろうか。開発環境の差異は、これまで「手順書」「Docker」「asdf/anyenv」で解決を試みてきたが、いずれも時間経過で破綻する。手順書は陳腐化し、Dockerfileのベースイメー…

2025年版 私がAIエージェントと協働しながら学習する方法

労働こそが最高の学習だった あなたは最近、「成長している」と感じているだろうか。 かつて、プログラマーにとって、労働こそが最高の学習の場だった。なぜか。労働には「摩擦」があったからだ。エラーが出る。原因がわからない。仮説を立てる。試す。失敗…