LinearのCustom Fields(カスタムフィールド)完全活用ガイド:開発ベロシティを極限まで引き上げるメタデータ設計の極意
テックリードやエンジニアリングマネージャーの皆さん、日々のスプリントレビューやバックログリファーメントで、こんなモヤモヤを抱えていないか?
- 「このチケット、顧客への影響度はどれくらいだっけ?」
- 「どの機能領域(ドメイン)の負債なのか、ステータスを見ただけじゃ分からない」
- 「PdM、エンジニア、カスタマーサポートの間で、共通の文脈(Context)が欠落していてチケットの行ったり来たりが発生している」
Issueトラッカーを「単なるタスクの置き場」にしているうちは、チームのベロシティは頭打ちになる。Linearの真骨頂は、その圧倒的なスピード感だけではない。「Custom Fields(カスタムフィールド)」を適切に設計・運用することで、開発組織全体の文脈共有コストをゼロにし、意思決定を加速させる最強のナレッジハブに変貌させることができる点にある。
本記事では、LinearのCustom Fieldsを単なる「おまけ機能」で終わらせず、チームの生産性を劇的に高めるための実践的な設計手法と、プロが使っているハックを余すところなく伝授する。
—
1. なぜ「Custom Fields」なのか? ── サイロ化を防ぐメタデータ設計
従来のJiraや旧態依然としたツールでは、カスタムフィールドを追加すると画面が重くなり、入力項目が増えすぎてエンジニアが疲弊する「入力地獄」に陥りがちだ。結果、誰もメンテしなくなり、データは腐る。
LinearのCustom Fieldsは思想が違う。「必要な場所に、必要な型(Type)で、最小限の認知負荷で」データを埋め込むことができる。
定義すべきメタデータの基本方針
開発チーム、プロダクトマネジメント(PdM)、カスタマーサポート(CS)の三位一体でプロジェクトを回す際、最低限持たせるべきメタデータは以下の3つに集約される。
1. Impact(ビジネスインパクト / 顧客影響度):どの程度の収益・顧客数に影響するか
2. Domain(ドメイン / 境界づられたコンテキスト):どのマイクロサービス/モジュールに属するか
3. Escalation Source(エスカレーション元):CSからの直訴か、内発的なリファクタリングか
これらをLinear上で構造化することで、カスタムビューやフィルターが劇的に機能し始める。
—
2. 実践:チームを救うCustom Fieldsの構築と神設定
まずは、実際にLinearでどのようなフィールドを定義すべきか、推奨のスキーマ設計を見ていこう。
| フィールド名 | タイプ | 選択肢 / 設定値 | 目的 |
| :— | :— | :— | :— |
| Impact Level | Select | `P0-Critical`, `P1-High`, `P2-Medium`, `P3-Low` | 優先度とは別に「ビジネス上の重み」を定義 |
| Target Release | Text / Date | バージョン文字列(例: `v2.4.0`) | リリーススコープの明確化 |
| Support Ticket ID| URL / Text | Zendesk / IntercomのURL | CS起因のバグ追跡用 |
| Domain Architecture| Select | `Auth`, `Billing`, `Core-Engine`, `Frontend` | 担当チーム・コードベースの切り分け |
必須入力(Required Fields)の罠と回避策
「すべてのチケットでカスタムフィールドを必須にする」のは最悪のアンチパターンだ。エンジニアリングのフローを殺す。
Linearのチーム設定では、特定のワークフロー状態(例: `In Progress` や `Ready for Review`)に遷移する瞬間にのみ、特定のCustom Fieldが入力されていることを強制する運用ルールを推奨する。これにより、バックログ起票時のハードルを下げつつ、開発フェーズに入った段階での情報欠落を防げる。
—
3. ベロシティを加速させる!知られざるキーボードショートカット&操作術
Linearの信奉者であれば、マウスに手を伸ばした時点で負けだと知っているはずだ。Custom Fieldsの操作も、すべてキーボードアークで完結させろ。
- `Cmd + K`(Mac) / `Ctrl + K`(Windows):コマンドメニューを開き、検索窓に「Change custom field…」と打ち込むことで、キーボードから手を離さずにフィールド値を書き換えられる。
- Issue作成時の連続入力(`Enter` の長押し・連続打鍵):テンプレート機能と組み合わせることで、Custom Fieldsがあらかじめ埋め込まれた状態のIssueを0.5秒で生成する。
—
4. チーム開発をブーストする「設定の共有化」とベストプラクティス
組織がスケールするにつれ、チームごとにバラバラのCustom Fieldsを作り始めるという「ナレッジのサイロ化」が発生する。これを防ぐための管理戦略を共有しよう。
ガバナンスルール:チーム横断の命名規則(Naming Convention)
- プレフィックスの統一:プロダクト全体で共有するフィールドには、組織名を冠するか、プレフィックスを揃える(例: `prod_`、`eng_`)。
- 色の意味の統一:Linearではセレクト型のフィールドにカラーラベルを付与できる。
- 赤系 (`#F87171`):致命的 / 緊急
- 黄系 (`#FBBF24`):注意 / 中程度
- 緑系 (`#34D399`):軽微 / スムーズ
これらを組織の「エンジニアリングハンドブック(Markdown等)」に明文化し、新メンバーが参入した瞬間に同じ共通認識を持てるようにする。
—
5. 【実用設定】Linear API & 外部連携のためのベストプラクティス構成例
Linearの強みは、その堅牢なGraphQL APIと、豊富なWebhooksにある。Custom Fieldsに格納されたメタデータをCI/CDパイプラインやデータウェアハウス(Snowflake / BigQuery)に同期し、組織のメトリクスと結合するための設定例を紹介する。
以下は、GitHub ActionsからLinearのAPIを叩き、カスタムフィールドの値を検証(Lint)するスクリプト、およびWebhookペイロードの期待値構造(JSON)のベストプラクティスだ。
A. Linear Webhook Payload 構造例 (JSON)
カスタムフィールド(例: `Impact Level`)が更新された際、Slack通知やデータ分析基盤へ流すためのイベントペイロードの構造。
{
“action”: “update”,
“createdAt”: “202X-10-27T08:30:00.000Z”,
“type”: “Issue”,
“data”: {
“id”: “uuid-issue-1234-5678”,
“identifier”: “ENG-420”,
“title”: “決済APIのタイムアウトエラーハンドリング改善”,
“state”: {
“name”: “In Progress”,
“type”: “started”
},
“customFields”: {
“impact_level”: “P0-Critical”,
“domain_architecture”: “Billing”,
“support_ticket_ref”: “https://company.zendesk.com/agent/tickets/99812”
}
},
“updatedFrom”: {
“customFields”: {
“impact_level”: “P1-High”
}
}
}
B. Custom Fields 整合性チェック用スクリプト (TypeScript / Node.js)
PRがマージされる、あるいはLinearのステータスが「Ready for Review」に変わった際、特定のCustom Field(例: `Domain Architecture`)が未入力の場合にアラートを飛ばす、あるいはCIを落とすためのバリデーションスニペット。
/
- Linear Custom Fields Validator
- チーム開発において、特定のステータス遷移時に必須カスタムフィールドが
- 埋まっているかを検証するためのロジックサンプル。
/
interface LinearIssue {
id: string;
identifier: string;
title: string;
state: string;
customFields: {
domainArchitecture?: string;
impactLevel?: string;
};
}
// 必須チェック対象のステータス
const TARGET_STATE = ‘Ready for Review’;
function validateIssueMetadata(issue: LinearIssue): boolean {
console.log(`[Linear Linter] 検証中: ${issue.identifier} – ${issue.title}`);
if (issue.state === TARGET_STATE) {
let hasError = false;
// ドメインアーキテクチャが未選択の場合
if (!issue.customFields.domainArchitecture) {
console.error(`❌ エラー [${issue.identifier}]: “Domain Architecture” が未入力です。`);
hasError = true;
}
// インパクトレベルが未選択の場合
if (!issue.customFields.impactLevel) {
console.error(`❌ エラー [${issue.identifier}]: “Impact Level” が未入力です。`);
hasError = true;
}
if (hasError) {
console.info(`💡 対策: Linearのコマンドパレット (Cmd+K) からメタデータを補完してください。`);
return false;
}
}
console.log(`✅ [${issue.identifier}] メタデータ検証を通過しました。`);
return true;
}
// モックデータによるテスト実行
const sampleIssue: LinearIssue = {
id: “uuid-9999”,
identifier: “ENG-501”,
title: “OAuth2トークンのリフレッシュ処理の修正”,
state: “Ready for Review”,
customFields: {
domainArchitecture: “Auth”,
// impactLevel がわざと抜けている
}
};
const isValid = validateIssueMetadata(sampleIssue);
if (!isValid) {
// CIを失敗させる、またはSlack通知を飛ばす処理をここに記述
process.exit(1);
}
—
6. おわりに:ツールに縛られるな、ツールを使い倒せ
アジャイル開発の本質は「個人の能力の最大化」ではなく、「チームとしての適応力と学習スピードの最大化」にある。
LinearのCustom Fieldsは、単に綺麗にチケットを整理するためのものではない。「エンジニア」「PdM」「CS」という異なる言語を話すプレイヤーたちが、共通のメタデータを通じて対話し、最速で価値をユーザーに届けるための共通言語(Ubiquitous Language)なのだ。
今日から、チームのバックログを見直せ。
「今、本当に必要なメタデータは何だ?」を問い直し、Custom Fieldsの設計をアップデートしろ。開発チームの景色が、驚くほどクリアに変わるはずだ。