マウスに触れるな。Linearのショートカット極限活用で「フロー状態」をハックする開発術
テックリードの私たちが日々戦っている最大の敵は、バグでも仕様変更でもない。「コンテキストスイッチ(文脈の切り替え)」だ。
思考が最高潮に達し、頭の中でコードのアーキテクチャが美しく組み上がっているまさにその瞬間、Slackの通知音が鳴り、マウスに手を伸ばし、ブラウザのタブをクリックし、JiraやLinearのボードを探す――。たったこれだけの動作で、脳内のキャッシュは完璧にクリアされ、元の深い集中状態(フロー)に戻るまでに平均して15分以上のロスが発生する。
アジャイル開発において、ベロシティの低下はツールの機能不足ではなく、こうした「物理的なインターフェースの摩擦」によって引き起こされる。
今すぐマウスを机の引き出しの奥底へしまいなさい。
本稿では、爆速のissueトラッカーとして名高いLinearのキーボードショートカットを極限まで使い倒し、思考とコードとタスク管理を完全に同期させる「ブラインドタッチ開発」の極意を伝授する。
—
1. なぜ「マウスを手放す」ことがベロシティを爆発させるのか?
アジャイル開発の本質は「学習の高速化」と「価値の連続的なデリバリー」だ。開発者がコードエディタ(VS CodeやNeovim)から手を離し、マウスを握るという行為は、F1マシンがピットインするたびにエンジンを停止させるようなものだ。
Linearが他の肥大化したプロジェクト管理ツールの追随を許さない理由は、単にUIが洗練されているからではない。「キーボード駆動(Keyboard-Driven)で全てのオペレーションが完結する」という思想が、プロダクトの隅々にまで妥協なく実装されているからだ。
キーボードから一歩も指を離さずに、以下のサイクルを0.5秒で回す。
1. アイデアやバグの発見 $\rightarrow$ 即座にIssue化
2. スプリントのバックログからアサイン $\rightarrow$ ステータス変更
3. ブランチ名のコピー $\rightarrow$ ターミナルへ貼付け
4. PR(Pull Request)の連携とクローズ
この一連の流れをマウスレスで行うための「指の記憶(Muscle Memory)」を、今日この瞬間からインストールしよう。
—
2. 現場で即座に使える!Linear高速化ショートカットの神髄
まずは、デイリーの開発フローで確実に指に覚え込ませるべき基本〜応用のショートカットをマッピングする。右手をホームポジションに置いたまま、左手親指と小指を駆使するのが極意だ。
① ナビゲーションの基本(G系コマンド)
全ての画面遷移は、`G`(Go to)に続く2ストロークで瞬時に行われる。マウスでサイドバーをクリックするなどという贅沢な時間は我々にはない。
| ショートカット | 動作 | 現場での活用シーン |
| :— | :— | :— |
| `G` $\rightarrow$ `I` | インボックス(Inbox)へ移動 | 自分宛てのメンションやレビュー依頼を秒速で確認 |
| `G` $\rightarrow$ `V` | ビュー(Views / Active Issues)へ移動 | 現在のアサインタスクを一覧で俯瞰 |
| `G` $\rightarrow$ `P` | プロジェクト(Projects)へ移動 | マイルストーンやロードマップの進捗確認 |
| `G` $\rightarrow$ `T` | チーム(Teams)のボードへ移動 | チーム全体のカンバンボードをチェック |
② Issueの爆速作成・編集(C & E系コマンド)
コードを書いていて「あ、ここリファクタリング用のIssue切っとこ」と思った瞬間、以下のキーを叩く。
- `C` (Create Issue): どこにいても一瞬でIssue作成モーダルが立ち上がる。
- `E` (Edit Description): 選択中のIssueの詳細エディタにフォーカス。
- `Space`: Issueを選択状態でスペースを押すと、プレビューやクイックアクションメニューが展開。
③ ステータス・担当者のインライン変更
マウスでドロップダウンを開く必要はない。キーボードショートカットでステータスやアサインを料理する。
- `S`: ステータスを変更(`Todo` $\rightarrow$ `In Progress` $\rightarrow$ `Done` をキーボードだけで選択)
- `A`: アサイン担当者(Assignee)の変更
- `P`: 優先度(Priority:Urgent / High / Medium / Low)の設定
- `L`: ラベル(Labels)の付与
- `O`: 自分にアサイン(Assign to me)—— これぞ最も使う神ショートカット
—
3. コマンドパレット(`Cmd + K`)こそがLinearの心臓部
個別のショートカットを覚えるのが面倒? 心配いらない。Linearには全知全能のコマンドパレットが備わっている。
`Cmd + K`(Mac) / `Ctrl + K`(Windows/Linux)
このショートカットは、VS CodeのコマンドパレットやMacのSpotlightと同じ精神で作られている。迷ったら `Cmd + K` を叩け。ここから全てが始まる。
コマンドパレットで無双するユースケース
- Issueの検索・ジャンプ: `Cmd + K` を押し、IssueのタイトルやID(例: `ENG-1234`)の断片を打ち込むだけで、一瞬で該当ページにワープする。
- テーマの切り替え(Dark/Light): 「Theme」と打てば、夜間のコーディングから昼間のレビュー時への切り替えも一瞬。
- フィルタリングの適用: 「Assigned to me」「In Progress」などのフィルタを自然言語に近い感覚で適用可能。
マウスでメニュー階層を掘る必要は一切ない。数文字のタイポグラフィを入力してエンターを押すだけだ。
—
4. チーム全体の生産性を底上げする「設定共有化ルール」と拡張術
個人のスキルとしてショートカットを極めるだけでは、テックリードとしては半人前だ。チーム全体でLinearの環境を最適化し、認知負荷をゼロにするための組織的アプローチが不可欠である。
1. ワークフロー状態(Workflow States)の厳格な共通化
チームメンバーによってタスクのステータス解釈が異なると、アジャイルのメトリクス(サイクルタイムやベロシティ)が崩壊する。Linearの設定(Settings $\rightarrow$ Teams $\rightarrow$ Workflow)において、以下の状態を厳格に定義し、全員がショートカット(`S`キー)で迷わず遷移できるようにする。
- `Backlog`: 検討中
- `Todo`: 今スプリントで着手するもの
- `In Progress`: 開発中(同時に1人1個までのWIP制限を意識)
- `In Review`: PR作成済み・コードレビュー待ち
- `Done`: マージ完了
- `Canceled`: スコープ外
2. 絶対導入すべき公式連携・神プラグイン
Linear単体でも強力だが、外部ツールとの連携によって真価を発揮する。以下のインテグレーションはチーム必携だ。
- GitHub / GitLab連携:
- コミットメッセージやPRのタイトルに `ENG-123` を含めるだけで、Linear側のステータスが自動で `In Review` や `Done` に遷移するWebhookを設定する。これにより、ステータス更新の手間すら排除される。
- Slack連携:
- `/linear` コマンドをSlackに常駐させ、チャットの議論から即座にIssueを起こす。また、Linearからの通知を専用チャンネルに集約し、メンションがついたらプレビューから直接対応できるようにする。
- Linear Git Automation:
- コピーしたBranch名(Issue画面で `Cmd + Shift + .` でブランチ名をクリップボードへコピー)をそのままターミナルに貼り付け、`git checkout -b feature/ENG-123-fix-bug` のように即座にブランチを切るフローをチーム標準にする。
—
5. 【実践】開発フローを自動化する設定ファイル・ベストプラクティス
チームでの運用を自動化・コード化(GitOps的アプローチ)するため、LinearのAPI(GraphQL)やGitHub Actions、設定管理で活用できるベストプラクティス構成例を公開する。
ここでは、チームのカスタムラベルやワークフロー、GitHub ActionsでLinearと連携するための設定ファイルの構成例を示す。
① チーム標準ラベル定義ファイル (`.linear/labels.yml`)
LinearのAPIやCLIツール(非公式含む)を用いてチーム全体でラベルの命名規則を統一するためのYAML定義例。
.linear/labels.yml
チーム間で共通のラベル taxonomy を定義し、カオスなタグの乱立を防ぐ
version: “1.0”
team: “Engineering”
labels:
- name: “type/feature”
color: “#5E6AD2”
description: “新機能の追加・拡張(ユーザー価値の創出)”
- name: “type/bug”
color: “#EB5757”
description: “予期せぬ挙動・不具合の修正”
- name: “type/refactor”
color: “#F2C94C”
description: “外部の振る舞いを変えずに内部構造を改善するタスク”
- name: “type/tech-debt”
color: “#2F80ED”
description: “意図的な技術的負債の返済・インフラ整備”
- name: “priority/security”
color: “#EB5757”
description: “セキュリティ脆弱性に関わる最優先タスク”
- name: “priority/ux”
color: “#9B51E0”
description: “UI/UXのブラッシュアップ・アクセシビリティ改善”
② GitHub ActionsによるLinearステータス自動連携ワークフロー (`.github/workflows/linear-sync.yml`)
PRがマージされた際、自動的にLinear側のIssueを `Done` に進めるためのGitHub Actions設定。開発者が手動でステータスを変える手間を完全にハックする。
.github/workflows/linear-sync.yml
name: Sync Linear Issue Status
on:
pull_request:
types: [closed]
jobs:
update-linear:
runs-on: ubuntu-latest
steps:
- name: Check if PR was merged
if: github.event.pull_request.merged == true
uses: actions/github-script@v6
with:
script: |
// PRのブランチ名やタイトルからLinearのIssue ID(例: ENG-123)を抽出
const prTitle = context.payload.pull_request.title;
const branchName = context.payload.pull_request.head.ref;
const regex = /([A-Z]+-\d+)/;
const match = (prTitle + ” ” + branchName).match(regex);
if (!match) {
console.log(“No Linear issue ID found in PR title or branch name.”);
return;
}
const issueId = match[1];
console.log(`Found Linear Issue ID: ${issueId}`);
// Linear GraphQL APIを叩いてステータスをDoneに更新する処理
const linearApiKey = process.env.LINEAR_API_KEY;
// ※ 実際のプロダクションでは Linear SDK や fetch を用いて GraphQL mutation を実行
console.log(`[Mock] Updating Linear issue ${issueId} to Done…`);
env:
LINEAR_API_KEY: ${{ secrets.LINEAR_API_KEY }}
—
結び:エンジニアの時間は、思考のためにある
マウスを掴み、ウィンドウを行ったり来たりする時間は、創造的なエンジニアにとって「無駄な摩擦」でしかない。
Linearのショートカットを指に叩き込み、コマンドパレットを縦横無尽に操り、GitHub連携でステータス更新すら自動化する。そこまでやり切った時、あなたの開発環境は真の「フロー状態」に到達する。
思考のスピードと、コードを書き、タスクを消化するスピードが完全に一致した瞬間、開発は何よりもエキサイティングな体験に変わる。
さあ、今すぐマウスの電源を切り、キーボードに向かおう。
あなたのベロシティの限界を、今日、ここで突破しろ。