フリーランス案件の「単価相場」は、記事によって幅がまちまちで、どこから来た数字なのか書かれていないことも多いです。
実は、私たちが運営している案件サイトの記事もそうでした。読み返すと、単価の幅を書いたページが102あり、その相場の行に出典が書かれていたものは1行もありませんでした。説明できない数字は消し、かわりに掲載中の案件から、スキル別の単価の上限を集計し直しました。この記事はその集計結果と、集計のしかたです。
対象と前提
- 2026年10月20日時点で掲載中・募集中の案件 770件。月額の単価の上限がわかるのは 750件
- 値は「単価の上限」。実際の契約額ではない
- 月10万円未満・月300万円超は入力の誤りとして除外
- すべて1つの掲載元の案件で、勤務地に東京を含むものが713件。市場全体の相場ではない
- 1件に複数スキルが付くので、スキル別の件数の合計は750を超える
集計のしかた
案件の skills は JSON 配列で持っています。SQLite(Cloudflare D1)でスキルごとに展開し、単価の上限を取り出しました。
SELECT j.value AS skill, p.price_max
FROM projects p, json_each(p.skills) j
WHERE p.is_public = 1 AND p.status = 'open' AND p.deleted_at IS NULL;
中央値と「真ん中の半分」(25〜75パーセンタイル、最も近い順位の値)は Python で出しています。
def summarize(values):
v = sorted(x for x in values if 100_000 <= x <= 3_000_000)
n = len(v)
if n == 0:
return None
median = (v[(n - 1) // 2] + v[n // 2]) / 2
at = lambda q: v[min(n - 1, max(0, round(q * (n - 1))))]
return {"n": n, "median": median, "p25": at(0.25), "p75": at(0.75), "max": v[-1]}
件数が少ないスキルは中央値が大きく動くので、単価の上限がわかる案件が10件以上のスキルだけを載せます。
単価表(月額・単価の上限)
| スキル | 件数 | 中央値 | 真ん中の半分 | 最高 |
|---|---|---|---|---|
| PM | 47 | 95万 | 85万〜110万 | 150万 |
| データ分析・解析 | 11 | 90万 | 70万〜120万 | 150万 |
| Go | 40 | 90万 | 80万〜100万 | 130万 |
| 上流SE | 10 | 87.5万 | 80万〜110万 | 130万 |
| Ruby on Rails | 72 | 87.5万 | 75万〜100万 | 120万 |
| TypeScript | 87 | 85万 | 70万〜100万 | 150万 |
| Ruby | 78 | 85万 | 70万〜100万 | 120万 |
| Flutter | 15 | 85万 | 70万〜100万 | 120万 |
| ゲーム | 38 | 80万 | 70万〜85万 | 120万 |
| Vue | 45 | 80万 | 65万〜100万 | 120万 |
| Unity | 23 | 80万 | 75万〜80万 | 90万 |
| Swift | 45 | 80万 | 80万〜85万 | 120万 |
| Salesforce | 10 | 80万 | 80万〜80万 | 140万 |
| React | 75 | 80万 | 70万〜95万 | 150万 |
| Python | 60 | 80万 | 65万〜100万 | 150万 |
| PMO | 17 | 80万 | 80万〜100万 | 115万 |
| PHP | 95 | 80万 | 65万〜90万 | 130万 |
| Kotlin | 22 | 80万 | 80万〜95万 | 120万 |
| JavaScript | 90 | 80万 | 60万〜90万 | 130万 |
| Java(Android) | 23 | 80万 | 70万〜80万 | 100万 |
| GCP | 18 | 80万 | 75万〜95万 | 120万 |
| C++ | 19 | 80万 | 70万〜90万 | 150万 |
| AWS | 72 | 80万 | 70万〜90万 | 120万 |
| Nuxt | 14 | 77.5万 | 70万〜90万 | 120万 |
| HTML | 28 | 77.5万 | 60万〜80万 | 95万 |
| サーバー設計構築 | 11 | 75万 | 70万〜80万 | 95万 |
| Node.js | 11 | 75万 | 65万〜100万 | 120万 |
| Laravel | 33 | 75万 | 60万〜80万 | 100万 |
| Java | 84 | 75万 | 65万〜80万 | 120万 |
| WEBデザイン | 11 | 72万 | 60万〜90万 | 100万 |
| CSS | 27 | 70万 | 60万〜80万 | 95万 |
| C# | 35 | 70万 | 65万〜80万 | 95万 |
| Spring | 14 | 65万 | 65万〜80万 | 120万 |
| SQL | 36 | 65万 | 60万〜80万 | 150万 |
| サーバー運用保守監視 | 11 | 60万 | 52万〜80万 | 105万 |
| ディレクション | 10 | 57.5万 | 45万〜80万 | 90万 |
全体(750件)は中央値80万、真ん中の半分は70万〜90万、最高150万でした。
表から読めること
- 上限の中央値が高いのは PM・Go・Ruby on Rails。件数が多い Java(84件)と PHP(95件)は、中央値がそれぞれ75万と80万で、全体と同じか低め
- Unity・Swift・Salesforce は「真ん中の半分」の幅が狭い。単価がそろっている
- 最高額150万の案件は6件。PM(2件)のほか、DX推進支援・NFTゲームのリードエンジニア・スケジューリング最適化・データサイエンスと、仕事の中身はばらばら。スキル名だけで上限が決まるわけではない
自分の単価をこの表でどう見るか
提示された単価や、自分の希望額をこの表に当てて、どの位置にあるかを見るのが一番使いやすい読み方です。
- 自分のスキルの行を探す。 案件の募集で主に求められているスキルの行を見ます。複数ある場合は、いちばん件数の多い行と、いちばん中央値の高い行の両方を見ます
- 「真ん中の半分」と比べる。 提示額がその幅の下端より下なら、単価の上限で見て低めの位置です。上端より上なら、掲載の中では高い側です
- 単価の上限だということを忘れない。 この表は募集の上限です。提示額が中央値より下でも、上限で書かれた募集と比べているだけかもしれません。交渉の材料にするなら「掲載中の同じスキルの募集で、上限の中央値は○万だった」と、何と比べたかを添えて伝えるのが正確です
たとえば Java の案件で月70万を提示されたなら、Java の真ん中の半分(65万〜80万)の中に入っています。同じ70万でも、Go の案件なら真ん中の半分(80万〜100万)の下端より下です。
この表で言えないこと
- 実際の契約額(ここにあるのは単価の上限)
- 商流の段数(エンド直か何次請けか)
- 経験年数ごとの違い(案件データに経験年数の項目がない)
書いた人: 合同会社Radineer(フリーランス向け案件サイト FreelanceDB を運営)