版の配色
1920 × 1080 作品として見る 版そのものを描画 — どの倍率でも字は潰れません 骨格・余白・カラムを重ねた状態
1920 × 1080 作品として見る 版そのものを描画 — どの倍率でも字は潰れません 骨格・余白・カラムを重ねた状態
コピーして貼るか、ファイルに保存して渡す。ネットにつながらない環境には「全部入り」を 1 つ渡せば足りる。
このパネルの中身を、URL の先にあるファイルの中身まで含めて 1 つにまとめた Markdown — 大きいのでファイルで渡す(コピーは 32KB まで)
以下の仕様でスライドを 1 枚作ってください。 - 版面 1920 × 1080 - 余白 上 96 右 140 下 96 左 140 ## 文字(版面 1920px に対する px) title 44px / 700 / 字間 0.01em / 行送り 1.3 window 20px / 500 / 行送り 1.5 poleName 28px / 700 / 行送り 1.3 poleNote 22px / 400 / 行送り 1.6 markerNow 32px / 700 / 行送り 1 / 等幅数字 markerPast 24px / 500 / 行送り 1.4 / 等幅数字 conclusion 26px / 500 / 行送り 1.6 note 16px / 400 / 行送り 1.6 ## 配色 地 #FFFFFF / 面 #F4F6F9 / 文字 #131820 / 補助 #667183 / 強調 #1F5FA8 / 罫 #DBE1E9 ## 外すと崩れる点 - 両端に「ありえない極」を置く。実在する選択肢を端にすると、軸が選択肢の比較に戻ってしまい、位置という読み方が消える - 印は 2 つまで。現在地だけでは動きが見えず、3 つ以上になると軸が折れ線グラフの代わりになる - 目盛りを刻まない。刻むと 5% の差を読み取ろうとするが、この図が答えられるのは向きと程度までである - どちらの極が望ましいかを図で言わない。軸の塗りは左の極からの距離を読ませるためのもので、色を「良い側」の意味に使った瞬間、これは測定ではなく主張になる - 位置ではなく、位置がもたらす制約を結論に書く。7 割という数より、戻せるかどうかが決定に効く 内容は[ここに自分の内容を書く]に置き換えてください。寸法と配色はそのまま守ってください。 正確に再現する場合は、この HTML をそのまま使ってください: https://design-vault.pages.dev/designs/spectrum-two-poles/pattern.html
/ai/designs/spectrum-two-poles.json
format: slide-16x9
density: low
layout:
kind: axis
canvas:
w: 1920
h: 1080
margin:
top: 96
right: 140
bottom: 96
left: 140
type:
title:
size: 44
weight: 700
tracking: 0.01em
leading: 1.3
window:
size: 20
weight: 500
leading: 1.5
poleName:
size: 28
weight: 700
leading: 1.3
poleNote:
size: 22
weight: 400
leading: 1.6
markerNow:
size: 32
weight: 700
leading: 1
numeric: tabular
markerPast:
size: 24
weight: 500
leading: 1.4
numeric: tabular
conclusion:
size: 26
weight: 500
leading: 1.6
note:
size: 16
weight: 400
leading: 1.6
colors:
ground: "#FFFFFF"
surface: "#F4F6F9"
ink: "#131820"
muted: "#667183"
accent: "#1F5FA8"
rule: "#DBE1E9"
rules:
- 両端に「ありえない極」を置く。実在する選択肢を端にすると、軸が選択肢の比較に戻ってしまい、位置という読み方が消える
- 印は 2 つまで。現在地だけでは動きが見えず、3 つ以上になると軸が折れ線グラフの代わりになる
- 目盛りを刻まない。刻むと 5% の差を読み取ろうとするが、この図が答えられるのは向きと程度までである
- どちらの極が望ましいかを図で言わない。軸の塗りは左の極からの距離を読ませるためのもので、色を「良い側」の意味に使った瞬間、これは測定ではなく主張になる
- 位置ではなく、位置がもたらす制約を結論に書く。7 割という数より、戻せるかどうかが決定に効く{
"format": "slide-16x9",
"density": "low",
"layout": {
"kind": "axis",
"canvas": {
"w": 1920,
"h": 1080
},
"margin": {
"top": 96,
"right": 140,
"bottom": 96,
"left": 140
}
},
"type": {
"title": {
"size": 44,
"weight": 700,
"tracking": "0.01em",
"leading": 1.3
},
"window": {
"size": 20,
"weight": 500,
"leading": 1.5
},
"poleName": {
"size": 28,
"weight": 700,
"leading": 1.3
},
"poleNote": {
"size": 22,
"weight": 400,
"leading": 1.6
},
"markerNow": {
"size": 32,
"weight": 700,
"leading": 1,
"numeric": "tabular"
},
"markerPast": {
"size": 24,
"weight": 500,
"leading": 1.4,
"numeric": "tabular"
},
"conclusion": {
"size": 26,
"weight": 500,
"leading": 1.6
},
"note": {
"size": 16,
"weight": 400,
"leading": 1.6
}
},
"colors": {
"ground": "#FFFFFF",
"surface": "#F4F6F9",
"ink": "#131820",
"muted": "#667183",
"accent": "#1F5FA8",
"rule": "#DBE1E9"
},
"rules": [
"両端に「ありえない極」を置く。実在する選択肢を端にすると、軸が選択肢の比較に戻ってしまい、位置という読み方が消える",
"印は 2 つまで。現在地だけでは動きが見えず、3 つ以上になると軸が折れ線グラフの代わりになる",
"目盛りを刻まない。刻むと 5% の差を読み取ろうとするが、この図が答えられるのは向きと程度までである",
"どちらの極が望ましいかを図で言わない。軸の塗りは左の極からの距離を読ませるためのもので、色を「良い側」の意味に使った瞬間、これは測定ではなく主張になる",
"位置ではなく、位置がもたらす制約を結論に書く。7 割という数より、戻せるかどうかが決定に効く"
]
} /designs/spectrum-two-poles/pattern.html — 版そのものの HTML。書体の部分集合ごと同梱で、開けばこの絵がそのまま出ます。
<!doctype html>
<meta charset="utf-8">
<title>内製と外注のあいだ — いま 7 割を外に出している</title>
<meta name="dv-font" content="Zen Kaku Gothic New:400;500;700">
<link rel="stylesheet" href="./font.css">
<style>
/* 色のリテラルはこの :root にだけ置く。以下の規則は var() か color-mix() で名指す。
区分色は持たない —— 軸の上では色ではなく位置が意味を運ぶ。 */
:root {
--ground: #FFFFFF;
--surface: #F4F6F9;
--ink: #131820;
--muted: #667183;
--accent: #1F5FA8;
--rule: #DBE1E9;
}
* { box-sizing: border-box; margin: 0; }
html, body { width: 1920px; height: 1080px; }
body { font-family: "Zen Kaku Gothic New", "IPAGothic", sans-serif; }
.artboard {
width: 1920px;
height: 1080px;
background: var(--ground);
color: var(--ink);
padding: 96px 140px;
}
.content {
height: 100%;
display: grid;
grid-template-rows: auto minmax(0, 1fr) auto;
}
.head { border-bottom: 2px solid var(--rule); padding-bottom: 28px; }
.title { font-size: 44px; font-weight: 700; letter-spacing: 0.01em; line-height: 1.3; }
.window { margin-top: 14px; font-size: 20px; font-weight: 500; line-height: 1.5; color: var(--muted); }
.body { display: grid; align-content: center; row-gap: 48px; }
.poles { display: flex; justify-content: space-between; align-items: flex-start; }
.pole-right { text-align: right; }
.pole-name { font-size: 28px; font-weight: 700; line-height: 1.3; }
.pole-note { margin-top: 10px; font-size: 22px; font-weight: 400; line-height: 1.6; color: var(--muted); }
.figure { display: block; }
.track { fill: var(--surface); }
/* 塗りは「左の極からどれだけ来たか」を示すためのもので、望ましい側の表明ではない
(左端の「全部を内製」は誰も選ばない極として置いてある)。印だけでも位置は読めるが、
塗りが無いと 55% と 70% の差が目測になる。望ましさを言い始めたらこの塗りは外す。 */
.fill { fill: var(--accent); }
.stem { stroke: var(--rule); stroke-width: 2; }
.knob-now { fill: var(--ground); stroke: var(--accent); stroke-width: 8; }
.knob-past { fill: var(--ground); stroke: var(--muted); stroke-width: 5; }
.marker-now { fill: var(--ink); font-size: 32px; font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums; }
.marker-past { fill: var(--muted); font-size: 24px; font-weight: 500; line-height: 1.4; font-variant-numeric: tabular-nums; }
.conclusion { font-size: 26px; font-weight: 500; line-height: 1.6; color: var(--muted); }
.foot { border-top: 1px solid var(--rule); padding-top: 22px; font-size: 16px; font-weight: 400; line-height: 1.6; color: var(--muted); }
</style>
<div class="artboard" data-artboard>
<div class="content" data-content>
<div class="head">
<h1 class="title" data-type="title">内製と外注のあいだ — いま 7 割を外に出している</h1>
<p class="window" data-type="window">2026 年度の開発工数ベース / 運用と保守は含まない / 判断は 3 月の投資委員会</p>
</div>
<div class="body">
<div class="poles">
<div class="pole-left">
<div class="pole-name" data-type="poleName">全部を内製</div>
<div class="pole-note" data-type="poleNote">設計から運用まで自社が持つ</div>
</div>
<div class="pole-right">
<div class="pole-name">全部を外注</div>
<div class="pole-note">仕様だけ自社に残す</div>
</div>
</div>
<!-- 等倍で描く。viewBox と width/height を一致させてあるので、
SVG の中の文字の級数は版面の px とそのまま同じ数字になる。 -->
<svg class="figure" width="1640" height="300" viewBox="0 0 1640 300">
<text class="marker-now" data-type="markerNow" x="1132" y="44" text-anchor="middle" dominant-baseline="central">いま 70%</text>
<path class="stem" d="M1132 66V120"/>
<rect class="track" x="40" y="136" width="1560" height="40" rx="20"/>
<rect class="fill" x="40" y="136" width="1092" height="40" rx="20"/>
<circle class="knob-past" cx="898" cy="156" r="18"/>
<circle class="knob-now" cx="1132" cy="156" r="34"/>
<path class="stem" d="M898 192v46"/>
<text class="marker-past" data-type="markerPast" x="898" y="262" text-anchor="middle" dominant-baseline="central">1 年前 55%</text>
</svg>
<p class="conclusion" data-type="conclusion">7 割そのものは問題ではない。戻す判断ができる人が社内に 2 名しかいないことが問題</p>
</div>
<div class="foot" data-type="note">工数は受入検査を含む。社内の兼務者は稼働率で按分している。</div>
</div>
</div>
/designs/spectrum-two-poles/font.css — 全部入りには入れていない
/* dv-subset v2 — generated by scripts/subset-font.mjs. Do not edit.
* font Zen Kaku Gothic New 400;500;700
* chars 92 (cfaac8ef07341ab0)
*
* pattern.html の文字だけを含む部分集合。描画時に外部へ取りに行かないよう同梱する。
* 版の文字を変えたら取り直すこと — 忘れると足りない字が豆腐になる。
* その取り忘れは pattern-entries.test.ts が上の指紋で検出する。
*/
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 400;
font-display: block;
src: url(./font-0.woff2) format('woff2');
unicode-range: U+25, U+2f-33, U+35-37, U+2014, U+3002, U+3042, U+3044, U+304b-304e, U+3051-3054, U+3057-305a, U+305d-3060, U+3064-306b, U+306e-3070, U+307e, U+3080, U+3082, U+3089, U+308b, U+3092, U+3099, U+30b9-30ba, U+30d8-30d9, U+30fc, U+4eba, U+4ed5, U+4f1a, U+4fdd, U+50cd, U+5165, U+5168, U+517c, U+5185, U+51fa, U+5206, U+5224, U+524d, U+5272, U+52d9, U+53d7, U+540d, U+542b, U+54e1, U+554f, U+5916, U+59d4, U+5b88, U+5de5, U+5e74, U+5ea6, U+623b, U+6295, U+6301, U+6309, U+6570, U+65ad, U+6708, U+67fb, U+691c, U+69d8, U+6b8b, U+6ce8, U+7387, U+7528, U+767a, U+793e, U+7a3c, U+8005, U+81ea, U+88fd, U+8a08, U+8a2d, U+8cc7, U+904b, U+90e8, U+958b, U+984c;
}
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 500;
font-display: block;
src: url(./font-1.woff2) format('woff2');
unicode-range: U+25, U+2f-33, U+35-37, U+2014, U+3002, U+3042, U+3044, U+304b-304e, U+3051-3054, U+3057-305a, U+305d-3060, U+3064-306b, U+306e-3070, U+307e, U+3080, U+3082, U+3089, U+308b, U+3092, U+3099, U+30b9-30ba, U+30d8-30d9, U+30fc, U+4eba, U+4ed5, U+4f1a, U+4fdd, U+50cd, U+5165, U+5168, U+517c, U+5185, U+51fa, U+5206, U+5224, U+524d, U+5272, U+52d9, U+53d7, U+540d, U+542b, U+54e1, U+554f, U+5916, U+59d4, U+5b88, U+5de5, U+5e74, U+5ea6, U+623b, U+6295, U+6301, U+6309, U+6570, U+65ad, U+6708, U+67fb, U+691c, U+69d8, U+6b8b, U+6ce8, U+7387, U+7528, U+767a, U+793e, U+7a3c, U+8005, U+81ea, U+88fd, U+8a08, U+8a2d, U+8cc7, U+904b, U+90e8, U+958b, U+984c;
}
@font-face {
font-family: 'Zen Kaku Gothic New';
font-style: normal;
font-weight: 700;
font-display: block;
src: url(./font-2.woff2) format('woff2');
unicode-range: U+25, U+2f-33, U+35-37, U+2014, U+3002, U+3042, U+3044, U+304b-304e, U+3051-3054, U+3057-305a, U+305d-3060, U+3064-306b, U+306e-3070, U+307e, U+3080, U+3082, U+3089, U+308b, U+3092, U+3099, U+30b9-30ba, U+30d8-30d9, U+30fc, U+4eba, U+4ed5, U+4f1a, U+4fdd, U+50cd, U+5165, U+5168, U+517c, U+5185, U+51fa, U+5206, U+5224, U+524d, U+5272, U+52d9, U+53d7, U+540d, U+542b, U+54e1, U+554f, U+5916, U+59d4, U+5b88, U+5de5, U+5e74, U+5ea6, U+623b, U+6295, U+6301, U+6309, U+6570, U+65ad, U+6708, U+67fb, U+691c, U+69d8, U+6b8b, U+6ce8, U+7387, U+7528, U+767a, U+793e, U+7a3c, U+8005, U+81ea, U+88fd, U+8a08, U+8a2d, U+8cc7, U+904b, U+90e8, U+958b, U+984c;
}
内製か外注かという問いは、置き方を変えるだけで答えが出ることがある。両極を端に 置いた軸の上では、どちらかを選ぶのではなく「いまどこにいて、どちらへ動いたか」を 言うことになるからである。
端に実在する選択肢を置かないのは、そのためである。「全部を内製」は誰も選ばない案 だが、端にあることで軸が軸として成立する。実在する案を端に置くと、目盛りは たちまち二択の比較表に戻る。