こなさんみんばんわ。
はてな絶対許さないマンです。

…というのはちょっとした冗談ですので、今後とも何とぞよろしくお願いします。まぁいうても僕アカウントはあるけどほぼ何のサービスも使ってないんですけどね。涙

どうしようもない僕(のブログ)にはてブ砲が飛んできた

2025 年 11 月 5 日公開の記事「Affinity アプリが永久無料と聞いてこれで脱 Adobe できるかと思ってるあなたに、Affinity 歴約 5 年の私から伝えておきたいこと」

そんな訳で、先月の初めに無料になった新 Affinity アプリに関する記事を書いたところ、はてなブックマークにて思ってもなかった数のブックマークが付きまして、そのはてブ経由で急激にアクセス数が上昇するという、いわゆるはてブ砲というのが飛んできました

日付
PV 数 53 49 175 22,732 13,713 10,816 4,298 1,887 1,250 634
記事公開翌日から 10 日間のサイト全体の PV 数推移。11/9 から 3 日間は PV 数が一万を超えた

こういうデータをどこまで公開していいものなのか分からんのですが、いちばん見られた 11 月 9 日はサイト全体では 22,732PV、この記事だけで 22,336PV ありました。公開前一週間の全ページ合わせた平均が 32PV くらいなので、およそ 700 倍ということになりますね…なんか今それ以前がしょぼすぎやろという天の声が聞こえた気がしますが、真摯に受け止めておきます。涙

発表から少し経過してて自分的には出遅れた感もあったし、内容も今までの Affinity アプリ知ってる人なら誰にでも書けそうな話(と自分では思っている)だったので、まさかはてブのトップページにしばらく居座るとか週間ランキングに載るほどになるとはまじで微塵も思ってなかったのですが、それでもこれだけ見られるということは、まぁタイムリーな記事ではあったんだろうと思います。誰でも永久無料というインパクトのある内容で話題にはなってましたし、興味を持つ人が増えてたというのもありそうです。

ちょっとだけ分析(っぽいこと)

誰も興味はないと思うのでほどほどにしておきますが、ざっくり箇条書きするとだいたい次のような感じです。

日別詳細(だらだら長いので閉じておきます、興味のある人だけ開いてお読みください)
11/5 記事公開
夜遅くだったのもあり、当然アクセスは自分が SNS にシェアするために開いた 1 のみ🤣
11/6〜7
おおむね数 10PV で推移する、いわば平常運転。
Mastodon で好意的な反応をちょっとだけいただく
11/8 徐々に PV が増え出す
はてブからの流入がひとつ確認できるので、この辺からブックマークがちょくちょく付き始めたものと思われる。
11/9 はてブ砲到来
朝目が覚めて何の気なしに Analytics を確認すると、普段は 1 あるかないかのリアルタイムユーザー数のグラフが、いつもと桁数の違う棒で埋まって真っ黒に…😨1
大まかな状況は把握したけど、とりあえず 14 時からの京都 vs 横浜 FM 戦が終わるまでは放置😅
その後(0-3 という結果に打ちひしがれつつも)はてブを見てトップに掲載されてるのを確認。大敗のショックもあってスクショとか取り損ねた…😭
なおこの時点でのブックマーク数はくわしく覚えてないけど 900 は超えていたはずです。大敗のショックで(以下略
11/10 流入元が増える
今週のはてなブックマーク数ランキングに掲載される
なぜか Gigazine に掲載される(というか単にリンクが貼られただけ)
Google や SNS からの流入が増加。SNS は X 以外だと Bluesky が多くて、ああこの辺が最近は主流なんだなってなった。
11/11 SNS 流入がピークに
はてブからの流入は落ち着き、変わって X (t.co) からの流入がはてブの 5 倍近くに上昇。
客層が入れ替わった感じだけど、おかげで PV 数はあまり落ち込まずに済んだかも。
11/12〜14
さすがに一万越えは終了したけど、それでもこの期間は 1,000 超の PV 数なので、それ以前からすれば万万歳といったところ。
X は前日から急激にしぼんだけど、はてブはこの期間もけっこうしぶとく安定した数をキープしていて底力を感じる。何の底力かは知らん🤣
11/15〜 確変終了
1,000PV 切りました。おつかれさまでした。

SNS でのピークがはてブの二日後れになってることをふまえると、流れ的にはブックマークが増えることでトップに掲載されて人の目に留まるようになり、読まれる回数も増えてさらにブックマーク数も増える、その URL が次第に SNS にも共有されることで SNS 経由で読まれる回数も増えていった…という感じだったのかなと思います。

あと、ひとつ気が付いたことを挙げておくと、はてブや Google, Bluesky といったところからの流入と比較すると X や Facebook からの流入は平均エンゲージメント時間が極端に少ないんですよね。前者が平均 1 分半なのに対して後者は 45 秒前後、およそ半分ほどです。

まぁ積極的に情報を求めに行く感じのはてブ利用者などとは違い、X などはどちらかというとたまたま TL で見かけたものに興味が湧けばアクションするという感じですし、フォロワーのユーザー層も多種多様なので仕方ないのかもしれませんが、結果を見る限りはもしかすると「SNS 経由のユーザーは記事をまともに読んでくれない」程度に思っておいた方がいいのかもしれないなぁ…とか感じました。涙

PV 急増のその裏で

まぁそんな感じで数日間でものすごいアクセス数、それこそその前月は月間で 1,000PV 超えた程度で喜んでたのが一日でその 20 倍以上の PV 数を稼いだ訳ですが、PV 上がって広告収入も入って大喜びかというとそんなことはなく、実は裏ではちょっと…いや、とても焦っていたのです。

Netlify の転送量無料枠が…

過去にも関連した話を何度かして触れてはおりますが、このサイトは 2017 年 9 月頃から Netlify でホストされています。

プランはその当時の Starter プランで、月額料金は無料だけど転送量やビルド時間に一定の制限があり、それを超えるとリミットを増やすために追加料金が登録カードに請求されるというもの。そのひと月間に無料で使える枠は、ビルド時間が 300 分、転送量が 100GB です。いいですか、月間の転送量無料枠は 100GB ですよ。大事なことなので(以下略

さて、以上をふまえた上で次のグラフをご覧下さい。

Netlify のダッシュボードで見られる Bandwidth Usage のグラフ

拡大したので端が切れてて分からないかと思うので補足しますと、グラフの縦軸は一目盛りが 9.3GB です。色が変わってるひときわ長い棒がはてブ砲に撃たれた 9 日の午前 9 時から翌日同時刻まで 24 時間の転送量実績で、その数値はポップアップしたラベルに書かれているとおり 46.7GB。そのひとつ前は前日分ですが 9 日の 0 時から 9 時までのデータが含まれているので、それ(実績値 9.9GB)の大半も 9 日分だと仮定して合計するとおよそ 56GB です。

要するに、はてブ砲を受けたことで月間転送量無料枠の半分以上がほぼ一日で飛んでった訳です😇

いちおう 8 年ほど前にほんの少しバズった記事で一時的なアクセス増は経験済み2ですが、翌日になれば確実に落ちるとはいえ即元通りという訳ではなく、少なくとも一週間くらいは徐々に落ちつつも、それまで以上のアクセスがあるはず…なのにこの時点で残り半分もないという事実を目の前に、さすがにちょっと焦り始めます😅

転送量上限を超えるとどうなるか

先ほど無料枠を超えると追加料金が発生すると書きました。その金額がいくらかというのは Legacy pricing plans | Netlify Docs 内の価格表If Starter plan, $55 per 100GB when exceeded とあるとおり、追加の 100GB につき 55 ドル、この時点のレートで日本円に換算するとおよそ 8,500 円弱。この額が先ほども書いたとおり、転送量上限超えると同時にカードに請求される訳ですよ😱

今まで全然 PV も収益もない代わりに、ドメイン維持費を除けばほぼ無料で運営できてたこのサイトに、いきなり 8,500 円の費用が発生するとか、さすがに事前の心構えができていません。しかもこの時点でのアドセンス収益の推定額は月間 2,000 円ちょいとかですよ…まだ増える可能性があるとはいえその額は予測不能ですし、最終的にバズって赤字とかなるのはさすがに勘弁願いたい😭

料金プランの改定でさらに悩む

これが以前の(今「レガシー」と呼ばれている)料金プラン体系のままならそこまで悩むことはなかったと思います。Pro プランに変更すれば月額 $19 で上限がビルド時間 25,000 分、転送量が 1TB までになりますし、落ち着いたらまた無料プランに戻せば済みます。

ですが、Netlify では 2025 年 9 月に料金プランの改定があり、クレジットという概念が導入されました(以下こちらを新プラン、以前のレガシープランを旧プランと呼びます)。

新プランの価格表。Free: $0, Personal: $9/月, Pro: 1 メンバーごとに $20/月, Enterprise: Custom(応相談)
https://www.netlify.com/pricing/ より

機能ごとにその使用分に対するクレジット消費量が決まっていて、プランごとに割り当てられたクレジットの範囲内で各機能を使っていくという感じですね。なおクレジットが足りなくなった場合、有料のプランは追加購入ができますが、無料の Free プランでは購入することができず、使い切った時点でその月は何もできなくなります

機能ごとのクレジット消費量
https://www.netlify.com/pricing/ より

そして機能ごとのクレジット消費量がどうなってるかというと、画像と順番は前後しますが以下のようになります。

本番デプロイ (Production deploys)
ビルド 1 回につき 15 クレジット
転送量 (Bandwidth)
1GB あたり 10 クレジット
リクエスト回数 (Web requests)
10K(1 万)リクエストあたり 3 クレジット
サーバーレス関数などの計算量 (Compute)
1GB/h あたり 5 クレジット
Netlify Forms のフォーム送信 (Form submissions)
1 送信につき 1 クレジット(スパム判定された場合は 0)
AI 機能の使用 (AI inference)
180 クレジット(参考値、AI モデルごとに異なる)

Free プランのクレジット少ないよ…

さて、ここでひとつ戻って新 Free プランに割り当てられたクレジットを確認すると 300 クレジットとなっています。300 クレジットでどれくらいの作業ができるか、軽く計算してみます。

  • このサイトの 10 月の転送量は 3.7GB、リクエスト数は 74K 回でした。少し余裕を見て 5GB, 100K 回とすると、5×10+100÷10×3=80 で 80 クレジットです。
  • 残りの 220 クレジットで何回本番デプロイができるか確認してみます。220÷1514.6666… ですから、最高でも 14 回くらいが限度です

以前のウチみたいなアクセス数の少ないサイトでこれなので、もう少し PV 数の多い(一日あたり 100PV くらいはある)サイトでは転送量とリクエスト回数でこの倍以上はクレジットを取られて、デプロイ可能な回数はもっと少なくなるでしょう。さらに、少しでもバズった時点で転送量がクレジットを消費し尽くして、おそらくその月は終了…ということにもなりかねません😭

積極的に宣伝もしないのでアクセスもあまりない、更新もほとんどしないような名刺代わりのちょっとした Web サイトであれば何とかなるかもしれませんが、このサイトのように SSG で構築してるブログサイトを新 Free プランで無料で維持していくというのは、記事を書くたびに必ずビルド作業が発生するという仕組み上、なかなか厳しいものがありそうですね。

つまり、もし変更するのであれば有料の Personal プラン以上にするしかなさそうだぞ、ということです。

一度新プランに変更すると元には戻せない

さらに頭を悩ませたのが、プランを変更しない限りはずっと旧 Starter プランのままでいられますが、一度新プランに変更してしまうともう旧プランに戻ることはできないというところです。

新 Free プランよりも旧 Starter プランの方が、無料でサイトを維持できるという観点では(おそらく)使い勝手がいいんですよね。普通に使う分には十分すぎる無料枠があるので、ほとんど困ることはありません。今回はいきなり万バズとかするから困っているだけなんです😭

でも現実問題として、転送量上限 100GB にもうすぐ達しそうになっているということは直視しないといけません。今から他のサービスを調べて移行作業をしてるような余裕はないので、残された選択肢は

  • 一時的に $55 払って旧プランを維持し、翌月以降はまた無料でサイトを維持する
  • 無料で維持するのをあきらめ、新プランに移行してより少ない支払額で済ませる

このどちらかしかなさそうです。

考えた末に…新有料プランに変更しました

その時点で新プランについてはネットに日本語で書かれた情報が皆無に等しく、仕方ないので自力で翻訳しながら調べたり Netlify が用意しているシミュレーターで試算をやりながら過ごしているうちに、11 日朝時点での転送量が 82GB となります。前日の転送量は 23.7GB だったので、もし同じくらいのペースで今日もアクセスがあるならば、寝ている間に 100GB 超えるのは確実…どちらにするにしても、決断するなら今日しかない!!😭

という訳で、色々考えたのですが

  • どう考えてもやっぱり一撃 $55 はつらい、$9 を半年の方がまだ耐えられる
  • 日本語で書かれた情報がほぼないということは、ここで自分で書けばいいネタになる、かもしれない
  • 維持費が無料だと「書いても書かなくても損はしないんだから一緒かな」と思って更新も途切れがち・サボりがちになるので逆によくない、気がする

まぁ最後のは単純に「お前の意識の問題だけや」という気もしますが😅 以上のような理由をもって新有料プランに変更することを最後は決断しました。いちおう突然一気に PV 数が落ちる可能性もあるかと思って作業は夜まで待ちましたが、22時の時点で上限まで残り 4GB という調子だったので、考え直すまでもなかったです…

ちなみに翌日からのアクセス数がどうなるかが全然読めなかったので、とりあえずはより安全な側に振って Pro プランの方にしておきました。様子を見て、そのまま Pro でいくか Personal に変更するかを考えることにしよう…という作戦でしたが、今のところ「最初から Personal で全然問題なかったわ」という結論です😇

実際に移行してみて分かったこと

さて、ここからは補足的に、実際に新プランに移行したことでようやく分かった、新プランの細かい話を書いていきます。

旧無料プラン → 新有料プランへの切り替え時は請求期間が更新される

ドキュメントには「プランをアップグレードした場合、料金は日割りになる」みたいなことが書いてあったのですが、少なくとも今回のように切り替え前が旧の無料プラン・切り替え後が新の有料プランの場合、切り替えてカードへの請求が発生した時点から新しい請求期間(一ヶ月)が始まるようです。ウチだと旧プラン中は 27 日〜翌 26 日が請求期間でしたが、11 日にプラン切り替え後は 11 日〜翌 10 日の請求期間に変更されました。

「料金が日割りになるんだったらクレジットも日割りになるのかな?」とか思ってたのですが、この場合はそうじゃないみたいです。3,000 クレジットがフルに使えて助かりました。ただ、新プランから新プランのアップグレード(Personal → Pro など)の場合にどうなるかは分からないです…おそらく日割りになるんじゃないかと思いますが。でないとドキュメントが嘘を書いてることになってしまうので😅

ちなみにダウングレードの場合は日割りじゃなくて、翌請求期間からの切り替えになるはずです。これは実際に数日後にやるので、その際にいちおう確かめますが。

クレジットの消費量はかなり細かく計算してくれる

ビルド回数のようにはっきりとした回数単位で計算するクレジットは別ですが、転送量やリクエスト数、計算量といった端数が出る機能については、小数第一位単位でその使用量を計算してくれます。例えば転送量が 20.68GB だったら 206.8 クレジット、リクエスト数が 272,859 回だったら 272.9÷10×3=81.87 で 81.9 クレジットという具合。

このサイトでは Amazon アソシエイトリンクのマイクロコピーを出すためにちょっとしたサーバーレス関数を使っていますが、その計算量はわずかで現時点でも 0.1GB/h に達してないので、今のところ今月のクレジット消費は 0 です。もし達しても 0.1×5=0.5 ですから、1 クレジットも消費しないということになります。サーバーレス関数を使っただけで最低でも 5 クレジット消費する、みたいな仕様ではないということです。

とりあえずはこんなところですかね。また何かあれば追加します。

さすがにノー対策というのもいかんので…画像を遅延ロードさせてみる

まぁこれで当面は転送量のことで心配する必要はなくなったのですが、また何かあった時のことを考えると、さすがに何もしないで放置という訳にはいきません。少しくらいは対策を打ってみることにします。そういえば、少なくとも画像については loading=lazy がすべてのブラウザで使えるようになってかなり経つのに、このサイトでは未だにただ画像をそのまま出してるだけです。そこで、ほぼすべての <img> 要素を遅延ロードさせるようにしてみましょう。

Kramdown Converter のメソッドを置き換える Jekyll プラグインを書く

テンプレートレベルで出してる画像については、ただ単に <img> タグに loading 属性を付け足すだけなので簡単ですが、Markdown で書いてるブログ記事に関しては、さすがに全部を見渡して loading 属性を付けて回るというのは非現実的なので、Markdown から HTML へ変換する部分に手を入れることになります。

このサイトは Jekyll 製なので Markdown → HTML のコンバートは Kramdown が行っていますが、幸い Kramdown は Converter のメソッドを割と簡単に上書きできるようになっているので、<img> タグの出力部分に loading=lazy を付与するコードを追加したもので置き換えてみます。Gem を作らないとダメかなと思ってたら Jekyll プラグインの形でいけました。

module Kramdown
  module Converter
    class Html < Base
      def convert_img(el, _indent)
        attr = el.attr.dup

        if !attr.key?('loading')
          attr['loading'] = 'lazy'
        end

        "<img#{html_attributes(attr)} />"
      end
    end
  end
end

元の Kramdown::Converter::Html にある該当メソッドをそのままコピーして、既存の loading 属性がなければ属性を追加しているだけです。あとは適当な名前(拡張子が .rb である必要はありますが)で _plugins ディレクトリに保存すれば、自動で loading=lazy が付与されるようになります。

で、やってみて実際に効果があったか? ですが、

  • はてブ砲前はだいたい一日 30〜50PV で転送量が平均 200MB 前後
  • ここ最近の PV 数は以前の 3〜5 倍になったが、転送量は平均 330MB程度で以前の 1.6 倍程度しか増えていない

という結果から見ると、そこそこの効果は出ているように見えますね。

おまけ: 収入

おまけって、むしろみなさんが一番興味ありそうな話題がこれという気もしますが…AdSense 収益は確定した分には金額を公開していいそうなので書きますが、他はまだ振込額すら確定してないので、内訳は省略して全部合わせた概算値です。

収入 Google AdSense 7,678 円
他(合計、概算) 3,000 円
支出 Netlify 3,148 円
合計(概算) 7,530 円

こんな感じです。ちなみに先月の合計 PV 数は約 6万 でした…6 万でもやっとこれくらいなんかって気はしますね。ブログで生活してる人とかいったい月何百万 PV くらい稼いではるんでしょうかって思います。

まぁ贅沢いうのは止めときましょう。涙

そんな訳で

今回ははてブ砲を受けて PV 爆上がりしたのはいいけど、そのおかげで Netlify 旧無料プランの転送量上限を超えてしまいそうになったので、色々考えた末に新しい有料プランに変更してみたよという話と、実際に切り替えてみて分かった新プランの細かな部分、自分の方でも対策として画像の遅延ロードを行うようにしてみた話などを書きました。何かの項目が、お読みいただいた誰かの何かのお役に立てれば幸いです。

まぁ今回の件以降、いちおう他のサービス…Vercel とか Cloudflare Pages などの調査も軽くやってはみております。ただ他も他でサービスごとに色々気をつけないといけないことがありそうな気もするので、もうちょっとじっくり調べてみないと分からないですね。Cloudflare Pages の転送量制限なし! とか確かに魅力的ではありますが、割とよく障害が起きてそのたびに大騒ぎになってる印象が強くて、ちょっと考えてしまいますし。

もしかすると数ヶ月後には変わっているかもしれませんが、とりあえずもう少しの間はこのまま Netlify でやっていくんじゃないかと思いますね。

という訳で、もう維持費が無料じゃなくなったので、ちゃんと元取れるように更新がんばるで! いや、取れるようになったらいいなあ。涙

  1. 実際の色は青ですけどね。涙 

  2. ブクマ数はこれくらい なのでせいぜい普段の 10 倍程度? だったと思います…ちゃんと調べようと思ったら昔の Analytics のデータが残ってなかった。涙