【実務・中級編】LinearのDraftモードとGitコミットハッシュの紐づけによる未公開機能の安全な開発管理手法 – プロジェクト・ナレッジ管理活用バイブル

誰にも知られず、極限のスピードで実験せよ:Linear「Draftモード」とGitが生み出す暗黒アジャイル開発の極意

テックリードやエンジニアリングマネージャーであるあなたなら、こんなジレンマに直面したことがあるはずだ。

「まだ市場に出せるか分からない実験的機能や、経営層しか知らない極秘プロジェクトを、チームの通常のスクリプトやロードマップに載せてしまい、ステークホルダーを混乱させた」
「GitHubのPRやLinearのボードがオープンすぎて、プロダクトのサプライズが事前にリークされたり、関係のないメンバーが無駄なコンテキストスイッチを起こしたりしている」

アジャイル開発において「透明性」は聖域だが、何でもかんでもオープンにすることが、必ずしもベロシティを高めるわけではない。 むしろ、未熟なアイデアや検証段階のタスクがノイズとなり、チームの集中力を削ぐ最大のガンボ(厄介事)になる。

今日は、次世代型課題管理ツール「Linear」の真髄である「Draftモード」と、「Gitコミットハッシュ/ブランチ戦略」を極限まで結合させ、「誰にも知られずに安全に、しかし猛烈なアジャイルスピードで未公開機能をインキュベートする手法」を伝授しよう。

—

1. 思想:なぜ「Draftモード × Git連携」なのか?

一般的なタスク管理ツールでは、非公開プロジェクトを作るために「別ワークスペース」を切ったり、「限定権限のプライベートプロジェクト」を作ったりしがちだ。しかし、これは最悪の手法である。なぜなら、メインのコードベースやCI/CDパイプラインから乖離し、ナレッジのサイロ化を招くからだ。

Linearの「Draft(下書き)モード」は、単なるメモ機能ではない。
「コードは書き始めるが、組織の誰もその存在を知らない(あるいは気にする必要がない)」という、シュレーディンガーの猫のような状態をLinear上で完全に維持しながら、Gitの強力なトレーサビリティをそのまま乗せるためのキラー機能である。

これとブランチ戦略を完璧に同期させることで、以下の極限状態を作り出す。
1. 完全な不可視性: パブリックなロードマップ、サイクル、チームのビューには一切露出しない。
2. 完全なトレーサビリティ: 未公開のコードであっても、どのコミット、どのPR、どのブランチから生まれたものか、Linearのバックグラウンドで完全に紐づく。
3. シームレスな昇格: アイデアが検証され、正式にプロダクトバックログに乗せるフェーズになった瞬間、ワンクリック(あるいはCLI)で「本番のロードマップ」へと爆速で昇格できる。

—

2. 開発スピードを劇的に高めるLinearの神ショートカット

暗黒アジャイルを支えるのは、マウスを一切使わない超高速なコンテキスト構築だ。以下のキーボードショートカットを指に覚え込ませろ。

  • `C` (Create Issue): どこにいても即座にIssue作成モーダルを呼び出す。
  • `Shift` + `Enter` (Create as Draft): Issue作成時に、これを押すだけで「Draftモード」として即座に生成される。これがすべての起点だ。
  • `Cmd/Ctrl` + `Shift` + `C` (Copy Git branch name): 選択中のIssue(Draft含む)から、規準化されたブランチ名を一瞬でクリップボードにコピーする。

—

3. チーム開発で絶対に守るべき「暗黒ブランチ命名規則」

Draftモードで作成されたIssueを、Git側と完全に紐づけるためには、ブランチの命名規則にルールを持たせる必要がある。LinearはIssue IDを検知して自動的にGitHub/GitLabと連携するが、Draft状態のIssueであってもIDは発行される。

推奨するブランチ命名規則:
`draft/–`

例:`draft/lin-404-ai-auto-refactor`

このプレフィックス `draft/` を使うことが、次のセクションで紹介する自動化の肝となる。

—

4. 実戦投入:設定ファイルと自動化のベストプラクティス

口頭のルールだけではチームは崩壊する。ツールとコードで強制力を持たせろ。ここでは、LinearのAPI、GitHub Actions、そしてGitクライアント側での設定を統合したベストプラクティスを公開する。

① `.github/workflows/draft_guardian.yml`

「Draftとして作成されたIssueに関連するPRは、特定のレビュアー以外マージできないようにし、かつタイトルにガードをかける」ためのGitHub Actionsワークフローだ。これにより、未公開機能がうっかりmainブランチにマージされる事故を物理的に防ぐ。

name: Draft Feature Guardian

on:
pull_request:
types: [opened, synchronize, reopened]
branches:

  • main
  • staging

jobs:
guard-draft-features:
runs-on: ubuntu-latest
steps:

  • name: Check PR branch naming for un-promoted drafts

uses: actions/github-script@v6
with:
script: |
const branch = context.payload.pull_request.head.ref;
const isDraftBranch = branch.startsWith(‘draft/’);

if (isDraftBranch) {
console.log(‘⚠️ Warning: This PR originates from a Draft Linear issue.’);
// ここでラベルを自動付与したり、特定のセキュリティチェックを走らせる
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: [‘experimental/hidden’]
});

// 必要に応じてマージをブロックするフラグを立てる
const isReadyForPrimeTime = context.payload.pull_request.labels.some(
label => label.name === ‘promote-to-production’
);

if (!isReadyForPrimeTime) {
console.log(‘🔒 This draft feature is locked from merging to main/staging.’);
// core.setFailed(‘Draft features cannot be merged without the “promote-to-production” label.’);
}
}

② `.husky/pre-commit` (Gitフックによる強制力)

開発者のローカル環境からリモートへプッシュする際、ブランチ名とLinearのDraftステータスをバリデーションするカスタムスクリプトの断片だ。サイロ化を防ぎつつ、規律を保つ。

!/bin/sh
. “$(dirname “$0″)/_/husky.sh”

current_branch=$(git symbolic-ref –short HEAD)

draft/ で始まるブランチの場合の追加チェック
if echo “$current_branch” | grep -q “^draft/”; then
echo “🕶️ [Dark Agile Mode] Working on a confidential draft feature…”

# コミットメッセージにLinearのIssue ID(例: LIN-XXX)が含まれているか確認
commit_msg_file=”$1″
if ! grep -qE “LIN-[0-9]+” “$commit_msg_file”; then
echo “❌ Error: Commit message must contain a valid Linear Issue ID (e.g., LIN-123).”
exit 1
fi
fi

③ チーム全体で共有すべき Linear CLI / 拡張設定

Linear公式のCLIやブラウザ拡張(Linear App)を導入し、以下のコマンドエイリアスをシェルの設定(`.zshrc` 等)に仕込めば、開発体験は神域に達する。

Draft Issueを作成して即座にそのブランチを切るワンライナー関数
ldraft() {
# 実際にはLinear APIやCLI経由でDraft Issueを作りつつブランチを切るフローのラッパー
echo “Creating confidential draft branch…”
local issue_title=”$1″
# 擬似コード的な実装: 実際にはLinear APIでタイトルからDraftを作成しIDを取得
local dummy_id=”LIN-999″
git checkout -b “draft/$dummy_id-$(echo $issue_title | tr ‘ ‘ ‘-‘ | tr ‘[:upper:]’ ‘[:lower:]’)”
echo “✨ Switched to draft branch: draft/$dummy_id-…”
}

(※日々の業務では、Linearの画面から `Shift + Enter` でDraftを作り、`Cmd + Shift + C` でブランチ名をコピーして `git checkout -b ` する方が手堅い).

—

5. テックリードとしての心構え:暗黒アジャイルの運用ルール

この手法を導入するにあたり、チームに徹底すべき「たった一つのルール」がある。

「実験が終わったら、隠し通すな」

Draftモードは、永遠に闇に隠れるためのものではない。アイデアのPoC(概念実証)が完了し、コードが動き、プロダクトとしての価値が証明された瞬間に、Linear上のDraftステータスを解除し、通常の「Backlog」や「In Progress」へ昇格させなければならない。

ステータスを昇格させ、GitHub上のPRのラベルを書き換えた瞬間、それまで誰にも見えなかった孤立した実験コードが、チーム全体のパブリックなロードマップの文脈に美しく統合される。

この「極限のプライバシーによる集中」と「圧倒的なトレーサビリティによる統合」のスイッチングこそが、アジャイル開発のベロシティをネクストレベルへと引き上げる最大の武器となる。

さあ、今日の午後から、誰にも邪魔されない極秘の実験室をLinear上に作り上げろ。

タイトルとURLをコピーしました