Skip to content

Instantly share code, notes, and snippets.

View kobitoDevelopment's full-sized avatar

I_AM_NOT_SPAM kobitoDevelopment

View GitHub Profile

ボットによる大量アクセスに対するコスト調整の原則

1. レート制限(Rate Limiting)

1.1 制限単位

単位 説明
IPアドレス 送信元IPごとにリクエスト数を制限する
APIキー 発行したキーごとにリクエスト数を制限する
.svg {
width: 400px;
height: 800px;
}
.svg-path {
stroke-dasharray: var(--totalLength);
stroke-dashoffset: var(--totalLength);
}

GitHub リポジトリ初期セットアップチェックリスト

リポジトリ設定

  • ブランチ保護ルールを設定(main への直 push 禁止、レビュー必須など)
  • マージ後のブランチ自動削除を有効化(Settings → General → Automatically delete head branches)

ブランチ戦略

  • ブランチ運用ルールの策定と共有

npm サプライチェーン攻撃対策

前提:MFA

npm アカウントおよび GitHub アカウントの両方で多要素認証を有効化する。


1. 意図しないバージョンの混入防止

.badge {
/* type()必須。省略すると文字列扱いになりcalc()等で使えない */
/* 型一覧: https://www.w3.org/TR/css-values-5/#attr-notation */
font-size: calc(attr(data-size type(<number>), 1) * 1rem);
background: attr(data-color type(<color>), gray);
}
<head>
<!-- 日本語版ページの場合 -->
<link rel="alternate" hreflang="ja" href="https://example.com/ja/page" />
<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/page" />
<!-- フォールバック(言語が一致しない場合のデフォルト) -->
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
</head>
.grid {
display: flex;
flex-wrap: wrap;
gap: 1rem;
max-width: 960px;
margin: 2rem auto;
padding: 0 1rem;
}
.item {
width: calc((100% - 2rem) / 3);

Next.js: 空の generateStaticParams() + searchParams で 500 エラーになる問題

結論

Next.js App Router で 空配列を返す generateStaticParams()searchParams を同じページで併用すると、本番ビルド(buildstart)時に 500 Internal Server Error が発生する。dev では再現しない。


問題が起きるコード

<a id="download-csv" download="data.csv">CSVダウンロード</a>