スマホのLinux(Termux/PRoot)でHugo・Eleventy・Astroのビルド時間を測った(100/500ページ)
スマホの中の Linux で、ブログを作る道具はどこまで動くのか。Android の Termux に PRoot で Ubuntu を入れた環境で、静的サイトジェネレーター(Markdown から HTML のサイトを作る道具)の Hugo・Eleventy・Astro を実際に入れて、同じ記事でビルドの時間を測りました。
測ったのは 2026-09-25、1台の端末だけです。ここに出す数字は「この端末・この設定で自分が測った値」で、ツール同士の一般的な速さの差を示すものではありません。
結果(5回の中央値)
| ツール | 100ページ | 500ページ | 500ページの最大メモリ |
|---|---|---|---|
| Hugo 0.166.0 | 0.34秒 | 1.20秒 | 約87MB |
| Eleventy 3.1.6 | 2.09秒 | 3.15秒 | 約133MB |
| Astro 7.3.5 | 8.29秒 | 10.33秒 | 約417MB |
- 時間は、ビルドのコマンドを起動してから終わるまでの時間(壁時計の時間)です。毎回、出力とキャッシュを消してからビルドしました。
- 最大メモリは、ビルドのプロセスが使ったメモリの最大値(Linux の
wait4で取れる最大 RSS)です。 - 5回の幅は、Hugo が 0.23〜0.41秒(100ページ)・1.07〜1.29秒(500ページ)、Eleventy が 1.69〜2.16秒・2.92〜3.23秒、Astro が 8.23〜8.48秒・9.81〜11.22秒でした。
この環境では、どのツールも500ページを約11秒以内でビルドできました。100ページから500ページに増やしたときの増え方は、Hugo が約0.9秒、Eleventy が約1.1秒、Astro が約2.0秒です。Eleventy と Astro は、ページが少なくても一定の時間がかかっていて、その分が差の多くを占めていました。
測った環境
| 項目 | 内容 |
|---|---|
| 端末 | Android スマホ(Termux + proot-distro) |
| Android のバージョン | 取得できず(PRoot の中から getprop を実行すると「Operation not permitted」) |
| Linux | Ubuntu 26.04 LTS(aarch64)、カーネルの表示は 6.17.0-PRoot-Distro |
| CPU | lscpu の表示は Qualcomm・8コア・最大 4.74GHz。ただし、このプロセスが使えたのは4コア(nproc が 4、使える CPU は 0-1,4-5) |
| メモリ | 約10.8GB(/proc/meminfo の MemTotal) |
| Node.js / npm | v22.23.2 / 10.9.8 |
端末の温度や充電の状態は記録していません。スマホは熱で速度が変わることがあるので、同じ端末でも日によって数字は変わりえます。
測り方
記事は自分で生成したダミーです。 短い語句を組み合わせて作った日本語の文章に、見出し3つ・箇条書き・表・JavaScript のコードブロック1つ・内部リンクを入れた Markdown を、100件と500件用意しました(合計で約197KB と約983KB)。3つのツールに同じファイルを入れています。
作るサイトはそろえました。 各記事のページ(タイトル・日付・本文)と、全記事へのリンクを並べたトップページだけです。CSS・画像・RSS・サイトマップは作りません。どのツールも出力の HTML は101枚(100ページのとき)と501枚(500ページのとき)で、5回とも同じ枚数・同じサイズでした。
- Hugo: 既定では RSS・サイトマップ・セクションの一覧ページなども作るので、設定の
disableKindsで止めて枚数をそろえました。 - Astro: コンテンツコレクション(
globローダー)で記事を読み、getStaticPathsでページを作りました。 - Eleventy: 記事のフォルダにレイアウトとタグを指定するデータファイルを置き、トップページで
collections.postsを並べました。
回し方。 1回目は慣らしとして中央値から外し、そのあと5回測りました。ツールの順番は回ごとに入れ替えています。コマンドは npx を通さず、Hugo はバイナリを、Astro と Eleventy は node で各ツールの起動スクリプトを直接実行しました。
出力サイズ(HTML の合計)
| ツール | 100ページ | 500ページ |
|---|---|---|
| Hugo | 351,132 バイト | 1,751,909 バイト |
| Eleventy | 254,484 バイト | 1,268,861 バイト |
| Astro | 364,397 バイト | 1,818,374 バイト |
Eleventy が小さいのは、主にコードブロックの色付けの有無によるものです。記事ページを開いて比べると、Hugo と Astro はコードの部分に色の指定(インラインの style)が入り、Eleventy は色付けなしの <pre><code> のままでした。公式ドキュメントによると、Hugo と Astro は Markdown のコードブロックを既定で色付けし(Hugo は monokai、Astro は Shiki の github-dark)、Eleventy は別のプラグインを入れたときに色付けします。今回は3つとも既定のままにしました。Eleventy は色付けの処理をしていない分、時間の比較でも条件が少し違います。
導入してみて分かったこと・つまずいた点
Hugo は、公式のバイナリがそのまま動いた。 GitHub のリリースから hugo_0.166.0_linux-arm64.tar.gz(約19MB)を取り、公開されているチェックサムと一致することを確かめてから展開しました。展開したバイナリは約57MB で、PRoot の中でも追加の作業なしで hugo version が通りました。
Hugo は、設定の書き方で警告が出た。 最初に languageCode = "ja" と書いたところ、v0.158.0 で非推奨になったという警告が出ました。公式の設定一覧でも languageCode は非推奨で、代わりに locale を使うよう書かれています。locale = "ja" に直すと警告は消えました。以前の書き方の設定例をそのまま使うと、この警告が出ることになりそうです。
Astro は、入れる量がいちばん多かった。 npm install の表示は「194 packages in 41s」、入れた直後の node_modules は約138MB でした。esbuild・rolldown・sharp・lightningcss・Astro のコンパイラなど、linux-arm64 用のネイティブのパッケージが自動で入り、PRoot の中でもビルドのエラーは出ませんでした。Astro の公式ドキュメントでは Node.js v22.12.0 以上が必要とされていて、今回の v22.23.2 は条件に合っていました。
Astro は、ツール自身が表示する時間と、待った時間が違った。 500ページのとき、Astro のログには「501 page(s) built in 5.81s」のように5.5〜6.3秒と出ましたが、コマンド全体の時間は9.8〜11.2秒でした。この差の内訳は調べていません。スマホで試すときは、ログの数字より実際に待つ時間のほうが長くなることがあります。
Astro は、記事を入れ替えた直後の1回目が遅かった。 500ページに入れ替えた直後の慣らしの回は16.46秒で、その後の5回(9.81〜11.22秒)より長くかかりました。出力とキャッシュは毎回消しているので、原因は確かめられていません。
Eleventy は、入れる量が少なかった。 npm install の表示は「129 packages in 11s」、node_modules は約18MB でした。ネイティブのアドオン(.node ファイル)は入っておらず、設定ファイル・レイアウト1つ・データファイル1つで動きました。
端末の情報が一部取れなかった。 PRoot の中からは Android のバージョンを取るコマンドが使えず、SoC の名前も読めませんでした(/sys/devices/soc0/machine の読み取りが拒否された)。CPU は lscpu では8コアと出るのに、このプロセスが使えるのは4コアでした。理由は確かめていません。
数字を見るときの注意
- 1台の端末・1日の測定です。 同じツールでも、端末・温度・Node のバージョン・設定で結果は変わります。ほかの環境で同じ差になるとは限りません。
- サイトはごく単純です。 CSS・画像の処理・コンポーネントなどを足すと、かかる時間の比率は変わると考えられます(今回は測っていません)。
- コードの色付けの条件がそろっていません。 上に書いたとおり、Eleventy だけ既定で色付けをしていません。
- 毎回クリーンビルドです。 開発中によく使う「保存したら画面が更新される」開発サーバーの速さは測っていません。
出典
- 測定値(所要時間・最大メモリ・出力サイズ・インストールの表示): すべて筆者が 2026-09-25 に上の環境で実行して記録したもの。ダミー記事の生成と計測は自作のスクリプトで行った。
- Hugo の公式リリース v0.166.0(
hugo_0.166.0_linux-arm64.tar.gzとチェックサム、取得日: 2026-09-25) - Hugo のドキュメント「Syntax highlighting」(コードブロックの既定の色付け、取得日: 2026-09-25)
- Hugo のドキュメント「All settings」(
disableKindsの値、languageCodeの非推奨とlocale、取得日: 2026-09-25) - Astro のドキュメント「Syntax Highlighting」(Shiki・github-dark が既定、取得日: 2026-09-25)
- Astro のドキュメント「Install Astro」(必要な Node.js のバージョン、取得日: 2026-09-25)
- Eleventy のドキュメント「Syntax Highlighting Plugin」(色付けは別プラグイン、取得日: 2026-09-25)
- npm レジストリ(astro 7.3.5・@11ty/eleventy 3.1.6 のバージョンと Node の条件、取得日: 2026-09-25)