<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
  <title>仕組みから学ぶ Web</title>
  <subtitle>言語やフレームワークの使い方ではなく、Web の仕組みと設計判断に特化した学習サイト。動く図解と、設計判断を問う演習で学びます。</subtitle>
  <link href="https://shikumikara.dev/feed.xml" rel="self" />
  <link href="https://shikumikara.dev" />
  <id>https://shikumikara.dev/</id>
  <updated>2026-09-17T00:00:00+09:00</updated>
  <entry>
    <title>ページネーション — 数えて飛ばすか、続きから取るか</title>
    <link href="https://shikumikara.dev/topics/api/pagination" />
    <id>https://shikumikara.dev/topics/api/pagination</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="API 設計" />
    <summary>offset は「ページ番号」という画面の都合から来ている。件数が増えると遅くなり、データが動くと境界がずれる。カーソル方式が何を解いて、何を捨てるのか。</summary>
  </entry>
  <entry>
    <title>ブラウザのストレージ — 読めるか、と、送られるかは別の話</title>
    <link href="https://shikumikara.dev/topics/browser/client-storage" />
    <id>https://shikumikara.dev/topics/browser/client-storage</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>Cookie / localStorage / sessionStorage / IndexedDB を容量ではなく「誰が読めて、いつ送られるか」で分ける。認証情報の置き場所を決めるための判断軸。</summary>
  </entry>
  <entry>
    <title>Core Web Vitals — 数字を上げるのではなく、何が遅いかを特定する</title>
    <link href="https://shikumikara.dev/topics/browser/web-vitals" />
    <id>https://shikumikara.dev/topics/browser/web-vitals</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>LCP・INP・CLS は原因ではなく症状の分類。3つが何の代理指標なのかを知ると、直す場所が工程の中で決まる。</summary>
  </entry>
  <entry>
    <title>マイグレーション — 流した瞬間に、書き込みが全部待つ</title>
    <link href="https://shikumikara.dev/topics/data/migration" />
    <id>https://shikumikara.dev/topics/data/migration</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>列を1つ足すだけの変更が、本番で11分サイトを止める。行数ではなく、同時に走っているトランザクションの長さが効く。</summary>
  </entry>
  <entry>
    <title>RDB と NoSQL — 問い合わせの形を、いつ決めるか</title>
    <link href="https://shikumikara.dev/topics/data/rdb-vs-nosql" />
    <id>https://shikumikara.dev/topics/data/rdb-vs-nosql</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>性能の比較ではなく「アクセスパターンがもう固まっているか、まだ動くか」で選ぶ。後から取り方を増やしたくなったとき、何が起きるかの違い。</summary>
  </entry>
  <entry>
    <title>インシデント対応 — 直すのが先か、分かるのが先か</title>
    <link href="https://shikumikara.dev/topics/ops/incident-response" />
    <id>https://shikumikara.dev/topics/ops/incident-response</id>
    <published>2026-09-17T00:00:00+09:00</published>
    <updated>2026-09-17T00:00:00+09:00</updated>
    <category term="運用 / 開発プロセス" />
    <summary>原因が分からないまま戻すのは怖い。その感覚が復旧を遅らせる。止血と原因究明の順序、記録の残し方、そして再発防止に「気をつける」と書かないこと。</summary>
  </entry>
  <entry>
    <title>金曜のリリースを、切り戻せなかった夜</title>
    <link href="https://shikumikara.dev/cases/friday-deploy-rollback" />
    <id>https://shikumikara.dev/cases/friday-deploy-rollback</id>
    <published>2026-09-16T00:00:00+09:00</published>
    <updated>2026-09-16T00:00:00+09:00</updated>
    <category term="実践ケース" />
    <summary>リリース後に決済が通らなくなった。切り戻せば直るはずだった。5つの判断点で、あなたは何を選びますか。</summary>
  </entry>
  <entry>
    <title>エラー設計 — 呼び出し側が正しく振る舞える情報を返す</title>
    <link href="https://shikumikara.dev/topics/api/error-design" />
    <id>https://shikumikara.dev/topics/api/error-design</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="API 設計" />
    <summary>エラーは失敗の通知ではなく、次に何をすべきかの指示。リトライしてよいか、直せば通るかを伝える。</summary>
  </entry>
  <entry>
    <title>冪等性 — 同じリクエストが2回届く前提で設計する</title>
    <link href="https://shikumikara.dev/topics/api/idempotency" />
    <id>https://shikumikara.dev/topics/api/idempotency</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="API 設計" />
    <summary>ネットワークがある限り、再送は異常ではなく正常系。2回実行されても壊れない形をどう作るか。</summary>
  </entry>
  <entry>
    <title>リソース設計 — 一度公開したら変えられない契約</title>
    <link href="https://shikumikara.dev/topics/api/resource-design" />
    <id>https://shikumikara.dev/topics/api/resource-design</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="API 設計" />
    <summary>URL は動詞ではなく名詞で切る、の理由。そして「きれいな REST」に収まらない操作をどう扱うか。</summary>
  </entry>
  <entry>
    <title>REST と GraphQL — 何を楽にして、何を難しくするか</title>
    <link href="https://shikumikara.dev/topics/api/rest-vs-graphql" />
    <id>https://shikumikara.dev/topics/api/rest-vs-graphql</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="API 設計" />
    <summary>過不足のない取得という利点の裏で、キャッシュ・認可・負荷制御がクライアント任せから自分の責任に移る。</summary>
  </entry>
  <entry>
    <title>CORS — 壁に穴を開けるのは「読まれる側」</title>
    <link href="https://shikumikara.dev/topics/browser/cors" />
    <id>https://shikumikara.dev/topics/browser/cors</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>プリフライトはなぜ飛ぶのか。ワイルドカードと Cookie が同時に使えないのはなぜか。エラーメッセージから原因を逆算する。</summary>
  </entry>
  <entry>
    <title>イベントループ — 1本のスレッドで待たずに捌く</title>
    <link href="https://shikumikara.dev/topics/browser/event-loop" />
    <id>https://shikumikara.dev/topics/browser/event-loop</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>JavaScript が1スレッドなのに、なぜ複数の処理を同時に進められるのか。そして、なぜ「重い処理」が画面ごと止めるのか。</summary>
  </entry>
  <entry>
    <title>レンダリングパイプライン — どのCSSが重いかは工程で決まる</title>
    <link href="https://shikumikara.dev/topics/browser/rendering" />
    <id>https://shikumikara.dev/topics/browser/rendering</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>ブラウザが HTML を受け取ってから画面を描くまでの工程。どのプロパティを触ると、どの工程からやり直しになるのか。</summary>
  </entry>
  <entry>
    <title>同一オリジンポリシー — ブラウザが最初から持っている壁</title>
    <link href="https://shikumikara.dev/topics/browser/same-origin" />
    <id>https://shikumikara.dev/topics/browser/same-origin</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ブラウザ" />
    <summary>なぜ他のサイトの JavaScript から自分のページのデータを読めないのか。この制約がなければ Web はどうなっていたか。</summary>
  </entry>
  <entry>
    <title>実行計画 — DB が何をしようとしているかを読む</title>
    <link href="https://shikumikara.dev/topics/data/execution-plan" />
    <id>https://shikumikara.dev/topics/data/execution-plan</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>推測でチューニングしない。EXPLAIN の読み方と、見積もりと実測のズレが何を意味するか。</summary>
  </entry>
  <entry>
    <title>インデックス — 読む行を減らすための索引</title>
    <link href="https://shikumikara.dev/topics/data/index" />
    <id>https://shikumikara.dev/topics/data/index</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>B-tree が何をしているかと、複合インデックスの列順がなぜ効くのか。張れば速くなるものではない。</summary>
  </entry>
  <entry>
    <title>N+1 問題 — 1回で済むはずの問い合わせが100回になる</title>
    <link href="https://shikumikara.dev/topics/data/n-plus-one" />
    <id>https://shikumikara.dev/topics/data/n-plus-one</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>ORM の便利さが隠してしまう問い合わせ回数。発見の仕方と、対処の選択肢を使い分ける。</summary>
  </entry>
  <entry>
    <title>正規化 — 同じ事実を2か所に書かない</title>
    <link href="https://shikumikara.dev/topics/data/normalization" />
    <id>https://shikumikara.dev/topics/data/normalization</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>正規化は理論ではなく「更新時に矛盾が起きない形」を作る作業。どこまで正規化し、どこで意図的に崩すか。</summary>
  </entry>
  <entry>
    <title>トランザクションと分離レベル — 同時に動く処理が互いをどこまで見てよいか</title>
    <link href="https://shikumikara.dev/topics/data/transaction-isolation" />
    <id>https://shikumikara.dev/topics/data/transaction-isolation</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="データ / DB 設計" />
    <summary>在庫が二重に引かれる、残高がずれる。同時実行の事故は、分離レベルの選択と設計の両方で決まる。</summary>
  </entry>
  <entry>
    <title>凝集度と結合度 — 変更したとき何ファイル触るか</title>
    <link href="https://shikumikara.dev/topics/design/cohesion-coupling" />
    <id>https://shikumikara.dev/topics/design/cohesion-coupling</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="設計 / アーキテクチャ" />
    <summary>良い設計は「動くか」では測れない。測れるのは、仕様変更が来たときの影響範囲。それを制御する2つの語彙。</summary>
  </entry>
  <entry>
    <title>ドメインモデリング — 業務の言葉をコードの形にする</title>
    <link href="https://shikumikara.dev/topics/design/domain-modeling" />
    <id>https://shikumikara.dev/topics/design/domain-modeling</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="設計 / アーキテクチャ" />
    <summary>テーブル設計から始めると、業務ルールの置き場所がなくなる。何が概念で、何が制約かを見つける作業。</summary>
  </entry>
  <entry>
    <title>レイヤードアーキテクチャ — 依存の向きを一方向に揃える</title>
    <link href="https://shikumikara.dev/topics/design/layered-architecture" />
    <id>https://shikumikara.dev/topics/design/layered-architecture</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="設計 / アーキテクチャ" />
    <summary>層に分けること自体に価値はない。価値があるのは、依存が一方向であることと、業務ロジックが技術から独立すること。</summary>
  </entry>
  <entry>
    <title>SOLID — 5つの原則が守ろうとしている1つのこと</title>
    <link href="https://shikumikara.dev/topics/design/solid" />
    <id>https://shikumikara.dev/topics/design/solid</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="設計 / アーキテクチャ" />
    <summary>暗記する対象ではなく、判断の道具として使う。それぞれが「どういう変更に備えているか」から理解する。</summary>
  </entry>
  <entry>
    <title>キャッシュ戦略 — いつ捨てるかを設計する</title>
    <link href="https://shikumikara.dev/topics/network/caching" />
    <id>https://shikumikara.dev/topics/network/caching</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>キャッシュを置くのは簡単で、正しく捨てるのが難しい。max-age・ETag・stale-while-revalidate の使い分けを判断軸から組み立てる。</summary>
  </entry>
  <entry>
    <title>CDN — 利用者の近くに置いて、オリジンを守る</title>
    <link href="https://shikumikara.dev/topics/network/cdn" />
    <id>https://shikumikara.dev/topics/network/cdn</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>配信を速くする仕組みであると同時に、オリジンへのアクセスを減らす仕組みでもある。キャッシュキーの設計を誤ると、どちらも機能しない。</summary>
  </entry>
  <entry>
    <title>DNS — 名前からIPアドレスにたどり着くまで</title>
    <link href="https://shikumikara.dev/topics/network/dns" />
    <id>https://shikumikara.dev/topics/network/dns</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>ブラウザが example.com を数字の住所に変換する経路と、その途中に置かれたキャッシュがなぜ事故の原因になるのか。</summary>
  </entry>
  <entry>
    <title>HTTP/1.1 → 2 → 3 — 何が遅くて、何を直したのか</title>
    <link href="https://shikumikara.dev/topics/network/http-versions" />
    <id>https://shikumikara.dev/topics/network/http-versions</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>バージョンが上がるたびに解かれてきたのは「待ち」の問題。どの待ちがどこで消えたかを知らないと、HTTP/2 にしても速くならない。</summary>
  </entry>
  <entry>
    <title>TCP/IP — データが相手に届くまでの4層</title>
    <link href="https://shikumikara.dev/topics/network/tcp-ip" />
    <id>https://shikumikara.dev/topics/network/tcp-ip</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>アプリが送った1行の文字列が、どう包まれて、どう運ばれ、どう元に戻るのか。障害の切り分けはこの層の把握から始まる。</summary>
  </entry>
  <entry>
    <title>TLS — 盗聴・改ざん・なりすましを同時に防ぐ</title>
    <link href="https://shikumikara.dev/topics/network/tls" />
    <id>https://shikumikara.dev/topics/network/tls</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="ネットワーク / Web" />
    <summary>HTTPS の鍵マークが保証しているのは3つ。何を保証していて、何を保証していないのかを分けて理解する。</summary>
  </entry>
  <entry>
    <title>CI/CD — 壊れていることに、人間より先に気づく</title>
    <link href="https://shikumikara.dev/topics/ops/ci-cd" />
    <id>https://shikumikara.dev/topics/ops/ci-cd</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="運用 / 開発プロセス" />
    <summary>自動化そのものが目的ではない。「壊れた変更が本番に届かない」ことと「いつでも戻せる」ことを仕組みで保証する。</summary>
  </entry>
  <entry>
    <title>コンテナ — 「手元では動く」を構造的に潰す</title>
    <link href="https://shikumikara.dev/topics/ops/container" />
    <id>https://shikumikara.dev/topics/ops/container</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="運用 / 開発プロセス" />
    <summary>仮想マシンとの違いはどこか。イメージが層でできていることが、ビルド時間とデプロイの両方を決める。</summary>
  </entry>
  <entry>
    <title>ログと監視 — 誰より先に、壊れていることに気づく</title>
    <link href="https://shikumikara.dev/topics/ops/logging-monitoring" />
    <id>https://shikumikara.dev/topics/ops/logging-monitoring</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="運用 / 開発プロセス" />
    <summary>ログは調査のため、メトリクスは検知のため、トレースは特定のため。3つの役割を分けて設計する。</summary>
  </entry>
  <entry>
    <title>テスト戦略 — どこに何枚の網を張るか</title>
    <link href="https://shikumikara.dev/topics/ops/testing-strategy" />
    <id>https://shikumikara.dev/topics/ops/testing-strategy</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="運用 / 開発プロセス" />
    <summary>テストは多いほど良いわけではない。壊れやすさ・実行時間・書く手間のバランスをどこで取るか。</summary>
  </entry>
  <entry>
    <title>Cookie とセッション — 状態を持たない HTTP に記憶を持たせる</title>
    <link href="https://shikumikara.dev/topics/security/cookie-session" />
    <id>https://shikumikara.dev/topics/security/cookie-session</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="認証 / セキュリティ" />
    <summary>サーバーが覚えるか、利用者に持たせるか。この選択が、ログアウトの実装可能性とスケール特性をすべて決める。</summary>
  </entry>
  <entry>
    <title>JWT — 取り消せない代わりに、問い合わせが要らない</title>
    <link href="https://shikumikara.dev/topics/security/jwt" />
    <id>https://shikumikara.dev/topics/security/jwt</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="認証 / セキュリティ" />
    <summary>署名付きトークンが解いた問題と、その代償。「ステートレスだからスケールする」の裏で何を諦めているのか。</summary>
  </entry>
  <entry>
    <title>OAuth 2.0 と OIDC — 「代理で使わせる」と「誰かを証明する」は別物</title>
    <link href="https://shikumikara.dev/topics/security/oauth-oidc" />
    <id>https://shikumikara.dev/topics/security/oauth-oidc</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="認証 / セキュリティ" />
    <summary>認可と認証を混同すると穴が開く。認可コードフローがなぜ遠回りに見える手順を踏むのか、一歩ずつ理由がある。</summary>
  </entry>
  <entry>
    <title>XSS・CSRF・SQLi — データとコードの境界が壊れる</title>
    <link href="https://shikumikara.dev/topics/security/web-vulnerabilities" />
    <id>https://shikumikara.dev/topics/security/web-vulnerabilities</id>
    <published>2026-09-15T00:00:00+09:00</published>
    <updated>2026-09-15T00:00:00+09:00</updated>
    <category term="認証 / セキュリティ" />
    <summary>3つの代表的な脆弱性は、どれも「データとして扱うべきものが命令として解釈される」という同じ形をしている。</summary>
  </entry>
</feed>
