速い開発者より、覚えなくていい開発環境が強い

Ryusei Nakamura

Hatched by Ryusei Nakamura

Aug 06, 2026

1 min read

64%

0

「リポジトリを作る」と「モノレポを管理する」は、別々の技術課題に見える。しかし実際には、どちらも同じ問いに答えている。

人間は、どこまで複雑な協働を、短いコマンドに圧縮できるのか。

gh コマンドでリポジトリを作る。pnpm でモノレポを管理する。表面的には、便利なCLIツールの話だ。けれども、その本質はコマンドの短さではない。プロジェクトの開始や複数パッケージの連携に必要だった判断を、再現可能な仕組みへ移し替えることにある。

この視点に立つと、開発効率とは「手を速く動かすこと」ではなく、毎回考え直していたことを、適切な境界の内側に閉じ込めることだと見えてくる。

短いコマンドの裏側には、長い意思決定がある

リポジトリを新しく作る作業を考えてみよう。ブラウザを開き、サービスにログインし、公開か非公開かを選び、名前を入力し、説明を加え、ローカルにクローンし、初期ファイルを作り、リモートを設定する。ひとつひとつは簡単でも、作業全体には複数の判断と転記が含まれている。

gh コマンドを使えば、この流れの多くをターミナルから一続きに実行できる。重要なのは、ブラウザを使わなくてよくなることだけではない。作業の開始地点と完了地点が明確になることである。

たとえば、プロジェクト作成を次のような一連の手順として定義できる。

gh repo create sample-app --private --clone
cd sample-app

この操作には、リポジトリの所有者、公開範囲、ローカルとの接続という判断が含まれている。コマンドは単なる省力化ではなく、判断を名前付きのオプションへ変換している。

ここで大切なのは、コマンドがすべてを自動化することではない。むしろ、人間が本当に決めるべきことだけを前面に残すことだ。公開範囲は人間が決める。しかし、ブラウザを開く順番やURLをコピーする作業まで、人間が毎回担う必要はない。

良い開発ツールは、仕事を奪うのではなく、判断と作業を分離する。

この分離ができると、開発者は「何を作るか」に集中できる。「どうやって環境を用意するか」という反復作業は、コマンドと設定に委ねられるからだ。

モノレポが減らすのは、ファイル操作ではなく調整コスト

モノレポも同じ構造を持っている。複数のアプリケーションやライブラリをひとつのリポジトリで管理すると聞くと、まずディレクトリ構成や依存関係の設定を思い浮かべる。しかし、モノレポの価値は、フォルダをひとつにまとめることではない。

本当の価値は、複数の成果物にまたがる変更を、ひとつの作業単位として扱えることにある。

たとえば、翻訳サービスを開発しているとする。そこには次のようなパッケージがあるかもしれない。

apps/
  web/
  api/
packages/
  ui/
  translator-core/
  config/

画面の変更、APIの変更、翻訳処理の変更、共通UIの変更が、互いに無関係とは限らない。translator-core の型を変えれば、APIも画面も影響を受ける。これらを別々のリポジトリで管理すると、変更の伝達にはブランチ、パッケージ公開、バージョン更新、レビュー依頼といった中継地点が必要になる。

モノレポは、その中継地点を減らす。pnpm のワークスペース機能を使えば、複数パッケージをひとつの依存関係グラフとして扱いやすくなる。共通依存関係のインストール、パッケージ間リンク、複数プロジェクトのスクリプト実行などを、同じ管理単位に置ける。

ここでも、便利さの本体はコマンドの数ではない。依存関係を人間の記憶から、機械が読める構造へ移すことである。

別々のリポジトリで管理していると、「この変更はどのパッケージに影響するか」を人間が把握し続けなければならない。モノレポでは、パッケージ名とワークスペース設定が、その関係を明示する。開発者の頭の中にあった地図を、設定ファイルとディレクトリ構成へ移すわけだ。

本当の敵は、作業量ではなくコンテキストの分断

ここで、リポジトリ作成とモノレポ管理をつなぐ、より深い概念が現れる。それはコンテキストの分断である。

プロジェクトを始めるたびに別の画面へ移動し、設定を探し、依存関係を確認し、複数の場所へ変更を反映する。このとき消費されるのは、キーボードを打つ時間だけではない。何をしていたかを覚え続けるための注意力も消費される。

人間の作業記憶は、複数の関係を長時間保持することが得意ではない。リポジトリのURL、ブランチ名、パッケージの依存関係、実行すべきスクリプト、レビュー対象を同時に覚えようとすると、ミスの確率が高まる。ツールの役割は、作業を速くするだけでなく、覚えておく必要のある情報を減らすことにある。

gh は、プロジェクトの外部サービスとの接続をターミナル上の操作へまとめる。pnpm は、複数パッケージの依存関係と実行方法をワークスペースへまとめる。両者は異なる問題を解いているようで、どちらも開発者の頭の中に散らばっていた情報を、ひとつの操作面へ集約している。

このことは、AIを使った開発にもつながる。AIにコードを書かせるとき、AIが何を知っているかは、生成能力そのものと同じくらい重要になる。リポジトリの構造、パッケージ間の関係、実行方法、変更の境界が曖昧なら、AIは局所的には正しいが全体として不適切な変更を提案しやすい。

つまり、よく整理されたCLIやモノレポは、人間だけでなくAIにとっても良い作業環境になる。構造が明示されているほど、誰がその環境を読んでも、次の一手を推測しやすいからだ。

圧縮には、必ず副作用がある

ただし、コマンドを短くし、管理単位をまとめればよいわけではない。圧縮には必ず、見えにくい副作用がある。

たとえば、リポジトリ作成を一行で実行できると、公開範囲を確認しないまま公開リポジトリを作ってしまうかもしれない。モノレポも、すべてをひとつに集めれば、依存関係が巨大化し、ビルド時間が伸び、変更の影響範囲が見えにくくなる可能性がある。

ここから、ツール設計についてひとつの原則を導ける。

複雑さを消すのではなく、複雑さを置く場所を選ぶ。

gh によって操作の複雑さは減るが、公開範囲や所有者という重要な判断は残るべきだ。pnpm によって依存関係の管理は容易になるが、パッケージの境界を設計する責任は消えない。

良い圧縮と悪い圧縮を分けるのは、次の三つの条件である。

  1. 判断が必要な部分は、明示的に残っていること
  2. 反復作業は、再現可能な設定に移されていること
  3. 失敗したとき、どこで問題が起きたか追跡できること

この三条件を満たさない自動化は、便利に見えても、単に複雑さを見えない場所へ移動しただけである。ボタン一つで動く仕組みが、失敗時に誰も説明できないなら、その仕組みは時間を節約していない。将来の調査時間を借金している。

開発環境を「記憶装置」として設計する

ここまでの議論を、実践的な設計原則に変えてみよう。開発環境を、コードを置く場所ではなく、チームの記憶を保存する装置として見るのである。

リポジトリ作成のコマンドは、プロジェクトの誕生手順を記録する。ワークスペース設定は、パッケージ同士の関係を記録する。スクリプトは、テストやビルドの実行方法を記録する。READMEや設定ファイルは、チームが暗黙に共有していた前提を記録する。

この発想で環境を点検すると、次の質問が有効になる。

  • 新しいメンバーは、最初の変更をどのコマンドで始めればよいか分かるか
  • 新しいパッケージを追加するとき、どの設定を変更するか明確か
  • 共通ライブラリを変更したとき、影響を受ける場所を調べられるか
  • ローカルで成功した手順を、CIでも再現できるか
  • 失敗したとき、誰かの記憶ではなく設定から原因を追えるか

回答が曖昧なら、問題は開発者の習熟度ではない。環境が、必要なコンテキストを十分に表現できていないのである。

具体的には、まずプロジェクト作成と初期設定をスクリプト化する。次に、ワークスペース内の命名規則と依存関係のルールを決める。そのうえで、ルートから全体を操作できるコマンドと、各パッケージ内部で局所的に操作するコマンドを分ける。

たとえば、ルートでは全パッケージの検査を実行し、個別パッケージではそのパッケージだけを高速にテストできるようにする。この二層構造があると、日常の小さな変更と、リリース前の全体確認を同じ仕組みで扱える。

Key Takeaways

  • コマンドの短さではなく、判断と反復作業の分離を見る。人間が決めるべき項目を明示し、それ以外はスクリプトや設定に移す。
  • 依存関係を記憶に置かない。パッケージ間の関係、実行方法、共有設定を、ワークスペースと設定ファイルで表現する。
  • 新しいメンバーの最初の一時間を基準に環境を評価する。プロジェクト作成からテスト実行までが再現可能なら、チームの暗黙知はかなり減っている。
  • 自動化の失敗経路を設計する。便利な一行コマンドほど、対象、権限、公開範囲、ログ、取り消し方法を明確にする。
  • 人間にもAIにも読める構造をつくる。ディレクトリ、命名、スクリプト、依存関係が明瞭な環境は、協働相手の種類を問わず強い。

リポジトリを作るコマンドと、モノレポを管理する仕組みは、開発の別々の局面に存在する。しかし、両者が教えることは同じだ。生産性を高めるとは、操作を速くすることではない。次に何をすべきかを、毎回ゼロから考えなくてよい環境をつくることである。

優れた開発環境は、開発者に多くを覚えさせない。その代わり、判断の境界、依存関係、再現手順を、コマンドと構造の中に保存する。

だから、次に新しいツールを導入するときは「何分短縮できるか」だけを尋ねるべきではない。

「このツールは、私たちが毎回頭の中で再構築している地図を、どこまで外部化してくれるのか」と問うべきである。

その問いに答えられるツールだけが、単なる便利機能を超えて、チームの思考そのものを拡張する。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣