# オープンソースの CI での計測

> 実在するオープンソースのプロジェクトの CI ジョブを、GitHub のランナーと Skipbox の専用ランナーで計測した結果。すべての実行を GitHub で公開しています。

よく知られたオープンソースのプロジェクトから CI ジョブを一つずつ選び、プロジェクト自身のジョブをステップはそのままに、GitHub ホステッドランナーと Skipbox の専用ランナーで動かしました。すべての実行は GitHub の [skipbox-dev](https://github.com/skipbox-dev) で公開しているので、ログを開いて各ステップの時間を確かめられます。

## 結果

ステップはそのまま、GitHub の `ubuntu-24.04` と Skipbox の専用ランナーで。各 4 vCPU、同じコミットの2回目以降。

| プロジェクト | 言語 | GitHub 2回目以降 | Skipbox 2回目以降 | 速さ | GitHub 1回目 | Skipbox 1回目 |
|---|---|---:|---:|---:|---:|---:|
| [BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) | Rust | **200秒**<br>[194秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43220584380) · [206秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43221108547) | **40秒**<br>[39秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43340925562) · [40秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43341036341) | 5倍 | [209秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43219985487) | [161秒](https://github.com/skipbox-dev/ripgrep/actions/runs/43340538466) |
| [helix-editor/helix](https://github.com/helix-editor/helix) | Rust | **330秒**<br>[293秒](https://github.com/skipbox-dev/helix/actions/runs/43227916673) · [366秒](https://github.com/skipbox-dev/helix/actions/runs/43228816343) | **224秒**<br>[222秒](https://github.com/skipbox-dev/helix/actions/runs/43337749813) · [226秒](https://github.com/skipbox-dev/helix/actions/runs/43338273330) | 1.5倍 | [627秒](https://github.com/skipbox-dev/helix/actions/runs/43226203908) | [442秒](https://github.com/skipbox-dev/helix/actions/runs/43336739720) |
| [tauri-apps/tauri](https://github.com/tauri-apps/tauri) | Rust | **246秒**<br>[220秒](https://github.com/skipbox-dev/tauri/actions/runs/43233861304) · [271秒](https://github.com/skipbox-dev/tauri/actions/runs/43234522982) | **53秒**<br>[53秒](https://github.com/skipbox-dev/tauri/actions/runs/43340142076) · [53秒](https://github.com/skipbox-dev/tauri/actions/runs/43340289959) | 4.6倍 | [474秒](https://github.com/skipbox-dev/tauri/actions/runs/43232491781) | [285秒](https://github.com/skipbox-dev/tauri/actions/runs/43339483384) |
| [cli/cli](https://github.com/cli/cli) | Go | **163秒**<br>[155秒](https://github.com/skipbox-dev/cli/actions/runs/43238350369) · [170秒](https://github.com/skipbox-dev/cli/actions/runs/43238855963) | **137秒**<br>[137秒](https://github.com/skipbox-dev/cli/actions/runs/43308813216) · [137秒](https://github.com/skipbox-dev/cli/actions/runs/43309231207) | 1.2倍 | [294秒](https://github.com/skipbox-dev/cli/actions/runs/43237390783) | [222秒](https://github.com/skipbox-dev/cli/actions/runs/43308147863) |
| [prometheus/prometheus](https://github.com/prometheus/prometheus) | Go | **335秒**<br>[326秒](https://github.com/skipbox-dev/prometheus/actions/runs/43247895808) · [344秒](https://github.com/skipbox-dev/prometheus/actions/runs/43248989318) | **273秒**<br>[287秒](https://github.com/skipbox-dev/prometheus/actions/runs/43312469071) · [259秒](https://github.com/skipbox-dev/prometheus/actions/runs/43313302201) | 1.2倍 | [1,212秒](https://github.com/skipbox-dev/prometheus/actions/runs/43244216658) | [967秒](https://github.com/skipbox-dev/prometheus/actions/runs/43309774658) |
| [vitejs/vite](https://github.com/vitejs/vite) | TypeScript | **141秒**<br>[144秒](https://github.com/skipbox-dev/vite/actions/runs/43251969206) · [137秒](https://github.com/skipbox-dev/vite/actions/runs/43252490601) | [100秒](https://github.com/skipbox-dev/vite/actions/runs/43314779387) | 1.4倍 | [166秒](https://github.com/skipbox-dev/vite/actions/runs/43251370134) | [121秒](https://github.com/skipbox-dev/vite/actions/runs/43314103854) |
| [withastro/astro](https://github.com/withastro/astro) | TypeScript | **528秒**<br>[605秒](https://github.com/skipbox-dev/astro/actions/runs/43258086770) · [450秒](https://github.com/skipbox-dev/astro/actions/runs/43259970798) | **30秒**<br>[31秒](https://github.com/skipbox-dev/astro/actions/runs/43351547473) · [28秒](https://github.com/skipbox-dev/astro/actions/runs/43351638436) | 17.6倍 | [508秒](https://github.com/skipbox-dev/astro/actions/runs/43256489755) | [344秒](https://github.com/skipbox-dev/astro/actions/runs/43350799051) |
| [pytest-dev/pytest](https://github.com/pytest-dev/pytest) | Python | **416秒**<br>[390秒](https://github.com/skipbox-dev/pytest/actions/runs/43300357429) · [441秒](https://github.com/skipbox-dev/pytest/actions/runs/43301518929) | **365秒**<br>[344秒](https://github.com/skipbox-dev/pytest/actions/runs/43318879037) · [386秒](https://github.com/skipbox-dev/pytest/actions/runs/43319899103) | 1.1倍 | [537秒](https://github.com/skipbox-dev/pytest/actions/runs/43298731832) | [347秒](https://github.com/skipbox-dev/pytest/actions/runs/43317936112) |
| [google/guava](https://github.com/google/guava) | Java | **818秒**<br>[715秒](https://github.com/skipbox-dev/guava/actions/runs/43271020501) · [921秒](https://github.com/skipbox-dev/guava/actions/runs/43273152826) | **651秒**<br>[678秒](https://github.com/skipbox-dev/guava/actions/runs/43322978536) · [624秒](https://github.com/skipbox-dev/guava/actions/runs/43324681952) | 1.3倍 | [788秒](https://github.com/skipbox-dev/guava/actions/runs/43268636852) | [747秒](https://github.com/skipbox-dev/guava/actions/runs/43321038538) |
| [mastodon/mastodon](https://github.com/mastodon/mastodon) | Docker | **29秒**<br>[29秒](https://github.com/skipbox-dev/mastodon/actions/runs/43280358343) · [28秒](https://github.com/skipbox-dev/mastodon/actions/runs/43280484975) | **29秒**<br>[30秒](https://github.com/skipbox-dev/mastodon/actions/runs/43327303619) · [28秒](https://github.com/skipbox-dev/mastodon/actions/runs/43327413768) | 1倍 | [550秒](https://github.com/skipbox-dev/mastodon/actions/runs/43278666045) | [388秒](https://github.com/skipbox-dev/mastodon/actions/runs/43326313111) |

表には計測したすべてのプロジェクトがあり、トップページではそのうち3件を紹介しています。「2回目以降」は2回目と3回目の実行、「1回目」は最初の実行です。太字の時間はそれぞれの実行の中央値で、その下に元になった実行をすべて、それぞれの時間つきでリンクしています。時間は GitHub のジョブの API が返す、ジョブの開始から終了までの時間で、キューで待った時間は含みません。失敗した実行も含みません。

## 比べたもの

- **GitHub**：プロジェクトのパブリックなフォークで、標準の `ubuntu-24.04` ランナー。GitHub のパブリックリポジトリの標準ランナーは 4 CPU・16 GB で、メモリはこの計測での Skipbox のマシン（8 GB）の 2倍です。より大きなランナーは使っていません。
- **Skipbox**：本番と同じランナーのイメージからつくった VM。4 vCPU・8 GB（計測した日のいちばん小さいプランと同じ）で、Skipbox のサーバーで動かしました。2026年11月14日から、このプランのメモリは GitHub のこのランナーと同じ 16 GB です。ジョブとジョブのあいだは、[組織専用のマシン](https://docs.skipbox.dev/ja/how-it-works)と同じように準備と後片付けをします。認証情報はジョブごとに消し、キャッシュ・Docker のイメージ・チェックアウトしたコード・Cargo の `target/` は残します。

Skipbox のサーバーは日本にあり、CPU は Intel Core Ultra 7 265F です。VM には、そのうち最大 4.6 GHz の高効率コアを4つ割り当てました。このサーバーの本番のジョブには、最大 5.3 GHz の高性能コアから先に割り当てます。Hetzner Cloud の組織専用のマシンは別の CPU で動いていて、今回は計測していません。コアの速さから来る差は、このサーバーでのものです。

## 各プロジェクトの動かし方

1. コミットは、プロジェクト自身のリポジトリでそのジョブが最後に成功した実行のものです。一つのプロジェクトの実行は、両方の側ともすべてこのコミットを使います。
2. ジョブのステップは、プロジェクトのワークフローから一字一句そのまま写しています。変えたのは計測に要るところだけです。トリガーを手動の起動にし、`runs-on` で動かす側を選び、マトリックスは Ubuntu の一つだけを残し、シークレットを外しました。
3. それぞれの側で3回続けて動かします。1回目はキャッシュがまったくない状態から始めます。2回目と3回目は同じコミットをもう一度動かすので、前の実行がつくったものがすべて見つかります。両方の側にとって最良の条件です。

## 差が出るところ

差は二つのところから出ます。どちらが効いているかは、プロジェクトごとに表から読めます。

- **残るディスク**：GitHub では、ジョブは毎回、空のディスクの新しい VM で始まり、キャッシュをネットワーク越しに戻します。Skipbox の組織専用のマシンでは、前のジョブのキャッシュ、Docker のレイヤー、チェックアウトしたコード、ビルド結果がディスクに残っているので、Rust の差分ビルドは変わったところだけをコンパイルします。tauri の差はおもにここから出ています。Skipbox では2回目以降が1回目よりずっと速く、両方の側の差も1回目より2回目以降のほうがずっと大きくなっています。astro も同じです。Turborepo のキャッシュ（turbo 2）が残るので、2回目以降はどのタスクも動かし直さず、キャッシュから結果を戻します。何が残り何が消えるかは [VM の分離](https://docs.skipbox.dev/ja/isolation)にあります。
- **速いコア**：ディスクに何も残っていなくても、同じジョブが Skipbox のサーバーのコアでは速く動きます。各プロジェクトの「1回目」の列にあらわれています。pytest の差はおもにここから出ていて、何も残っていない1回目でも Skipbox のほうが速くなっています。

## 自分で計測した結果の公開

Skipbox を計測し、その結果を公開するのに、私たちへの連絡や許可はいりません。結果には次の三つを添えてください。

- プラン（例：S、4 vCPU / 16 GB）、またはトライアル
- `runs-on` のラベル（例：`skipbox`）
- 計測した日付

2026-11-13 更新 · https://docs.skipbox.dev/ja/benchmarks
