<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Project Management · 仁才徳</title>
    <link>https://jared.lynskey.co.nz/ja/tags/project-management/</link>
    <description>ソフトウェアエンジニアリングと開発組織のリーダーシップについて。評価、採用とチームの拡大、CI/CD、DevOps モニタリング、エージェンティック AI。ソウルより。</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <copyright>© 2026 仁才徳</copyright>
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/ja/tags/project-management/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GitHub Issuesで意思決定とプロジェクト管理：Alanのやり方とissueテンプレート</title>
      <link>https://jared.lynskey.co.nz/ja/posts/2024/2024-01-04-githubforprojectmanagement/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/ja/posts/2024/2024-01-04-githubforprojectmanagement/</guid>
      <pubDate>Tue, 09 Apr 2024 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>GitHub</category>
      <category>GitHub Issues</category>
      <category>Project Management</category>
      <category>Decision Making</category>
      <category>Async Communication</category>
      <category>Remote Work</category>
      <category>Team</category>
      <description>フランスのAlan社は、会議のほとんどを文章で書くGitHubのissueに置き換えています。どんな決定ならissueを開くのか、LOCIの役割分担、書き方のルール、.github/ISSUE_TEMPLATEにそのまま置けるissueテンプレート、そしてGitHub Projectsを足すタイミングまでまとめました。</description>
      <content:encoded><![CDATA[<p>フランスの医療保険会社Alanの意思決定に関する<a href="https://alan.com/en/healthybusiness/media/a/asynchronous-decisions"  target="_blank" rel="noreferrer">この記事</a>を、何度も読み返しています。要するに、会議を予約する代わりにGitHubのissueを開いて、文章で議論を戦わせるという話です。自分もチームをマネジメントする立場になったので、今回はきちんとメモを取りました。以下は彼らの仕組みの要約に、私のコメントを混ぜたものです。</p>

<h2 class="relative group">Alanが会議を見限った理由
    <div id="alanが会議を見限った理由" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#alan%e3%81%8c%e4%bc%9a%e8%ad%b0%e3%82%92%e8%a6%8b%e9%99%90%e3%81%a3%e3%81%9f%e7%90%86%e7%94%b1" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>出発点は誰にでも覚えがあるはずです。誰も準備してこない、開始は遅れる、そして声の大きい人が正しかろうが間違っていようが議論を制する。1時間後には入室前より頭が混乱していて、鎮痛剤の残りを気にしている。</p>
<p>Alanもまず会議の改善を試みました。最大15分、明確なアジェンダ、必ず決定を出す。それでもダメでした。議論は脱線し、何が話されたか誰も覚えておらず、欠席者やリモートの人は蚊帳の外。それで、丸ごと文章に移すことにしたそうです。</p>
<p>彼らの主張には頷けるものがあります。書くとなると立ち止まって考えざるを得ないので、議論はより丁寧に、根拠のあるものになる。すべてが記録に残り、うろ覚えに頼らなくて済む。弁論大会でもなくなる。しかもフォーラムは全社に公開されているので、たまたま会議室にいた人だけでなく、誰でも議論に参加できます。</p>

<h2 class="relative group">社内フォーラムとしてのGitHub
    <div id="社内フォーラムとしてのgithub" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a4%be%e5%86%85%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a9%e3%83%a0%e3%81%a8%e3%81%97%e3%81%a6%e3%81%aegithub" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>フォーラムの正体はGitHubです。本来コードレビューのためのプラットフォームを、Alanは堂々と転用しました。仕組みは拍子抜けするほど簡単です。</p>
<ol>
<li>GitHubのアカウントを作る。</li>
<li>コードの入っていないプライベートリポジトリを作る（Alanでは「Topics」という名前）。</li>
<li>会話を分類するためのラベル体系を用意する。</li>
<li>Issuesタブを使う。openなissueは進行中の議論、closedは決定済み。</li>
</ol>
<p>彼らのissueは17,000件を超えました。開かれずに済んだ会議の数と考えると相当なものです。そして私が一番惹かれるのはここですが、すべての決定について「なぜそうなったか」を検索できる履歴が残ります。過去の決定を蒸し返したくなったら、前回どの議論が勝ったのかを先に読めるわけです。</p>

<h2 class="relative group">いつissueを開くか
    <div id="いつissueを開くか" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%81%84%e3%81%a4issue%e3%82%92%e9%96%8b%e3%81%8f%e3%81%8b" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>すべての決定がissueに値するわけではありません。彼らのフィルターは4つの質問です。誰が影響を受けるか？どれくらい可逆的か？どれくらい急ぎか？決めるためにもっと文脈が必要か？</p>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="image"
    width="1390"
    height="1213"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_9ca1837f8ecdf619.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_9ca1837f8ecdf619.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_8ecbad24825e93ec.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/decisionchart_hu_c84e7ceb7d35c8e2.webp"></span></figure>
</p>
<p>大まかには、影響が大きく後戻りしにくい決定はフォーラムへ、それ以外はSlackで済ませます。ワンウェイ・ツーウェイの区別も使っています。ワンウェイの決定（撤回に大きなコストや労力がかかるもの。例として挙がっているのは料金の値上げ）はフルコースの文章化。ツーウェイの決定（安く取り消せて、失敗しても多少エネルギーを失うだけのもの）には儀式は不要です。</p>

<h2 class="relative group">LOCI：誰が何をするか
    <div id="loci誰が何をするか" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#loci%e8%aa%b0%e3%81%8c%e4%bd%95%e3%82%92%e3%81%99%e3%82%8b%e3%81%8b" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>すべての議論に、LOCIモデル（Lead、Owner、Consulted、Informed）で役割を割り当てます。</p>
<p>Leadは決定の成否に責任を持ち、決定の背景がチームに正しく理解されるようにします。冒頭で自分がどこまで関与したいかを表明し、あとはOwnerを信頼してチームの成果に責任を持ち、強く反対のときだけ口を出します。Leadは議論ごとに1人だけ。</p>
<p>Ownerは最終決定を下し、プロジェクトを前に進めます。貢献者に情報が行き渡り、期限内に意見が集まるようにし、問題を調査し、issueを開いて閉じ、決定を共有します。自分で解決できない壁に当たったらLeadに相談します。Ownerも決定ごとに1人。</p>
<p>Consultedは、トレードオフの判断に本当に意見が必要な人たちです。期限内の貢献が義務で、「追加することはありません」の一言でも構いません。決定が大きく間違っていると思ったら警鐘を鳴らし、最悪の場合はLeadにエスカレーションします。Alanはこの人数を6人程度までに抑えています。それ以上はスケジュールが犠牲になるからです。</p>
<p>Informedは、たいてい決定後に知らされるだけの人たちです。コミュニケーションは一方通行で、何の貢献も期待されません。誰に知らせるかは、影響範囲を考えてOwnerが決めます。</p>

<h2 class="relative group">issueの解剖図
    <div id="issueの解剖図" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#issue%e3%81%ae%e8%a7%a3%e5%89%96%e5%9b%b3" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>どのissueも同じテンプレートに従います。思考が研ぎ澄まされるうえ、ジュニアメンバーへの「問題の分解の仕方」の教材にもなっています。</p>
<ul>
<li>Scope - 議論の「なぜ」。地味に効くのが「このissueは〜については扱わない」の一文</li>
<li>Context &amp; materials - 過去の議論や資料へのリンク</li>
<li>LOCI - 誰がLead、Owner、Consulted、Informedか</li>
<li>期限 - 貢献の締め切り、issueを閉じる日、解決策が必要になる日</li>
<li>解決策の提案 - 推す案をひとつ、または選択肢をいくつか</li>
<li>質問 - 特定の人に向けて、特定の仮定を確認・反証するための質問。issueを「海に流すボトルレター」にしないための工夫です</li>
</ul>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="image"
    width="1390"
    height="715"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_154de40eb6124f02.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_154de40eb6124f02.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_ab103b11817c0ef0.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/gitpreview_hu_aada79d3a582942a.webp"></span></figure>
</p>

<h2 class="relative group">議論を停滞させないための書き方のルール
    <div id="議論を停滞させないための書き方のルール" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%ad%b0%e8%ab%96%e3%82%92%e5%81%9c%e6%bb%9e%e3%81%95%e3%81%9b%e3%81%aa%e3%81%84%e3%81%9f%e3%82%81%e3%81%ae%e6%9b%b8%e3%81%8d%e6%96%b9%e3%81%ae%e3%83%ab%e3%83%bc%e3%83%ab" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>文章の議論も、口頭と同じくらいダラダラと長引き得ます。だからルールがあります。まず簡潔に。彼らはボワローの「よく構想されたものは明晰に語られる」を引いています。シンプルに書けないなら、まだ自分の主張に確信がない証拠です。それから、書いたものすべてに「So what?」テストをかけること。コメントの含意が自明でないなら、はっきり書き添えます。</p>
<p>Ownerにとっては、開いた後の運営も同じくらい重要です。議論を「100万ドルの質問」、つまり本当に重要なたったひとつの争点に向け続け、細部の海で迷子にさせない。合意できた点とまだ開いている点を定期的に整理して見せる。そしてSlackでの催促は最後の手段。貢献の遅延か、本当の緊急時に限ります。</p>
<p><figure><span class="mc-img"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="image"
    width="1390"
    height="910"
    src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_b208cd2844b5ba3a.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_b208cd2844b5ba3a.webp 800w, https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_f44bfed068b95993.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/2024/2024-01-04-githubforprojectmanagement/slackmessage_hu_3f37871d11c679c.webp"></span></figure>
</p>
<p>Ownerは会話を前に進めないコメントを非表示にすることもあります。また、見出し、脚注、表、キーボードショートカットといったGitHubの書式機能は全員が使いこなす前提です。文章では、中身と同じくらい見た目が物を言うからです。</p>

<h2 class="relative group">コンセンサスなし、傍観者なし
    <div id="コンセンサスなし傍観者なし" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%b3%e3%83%b3%e3%82%bb%e3%83%b3%e3%82%b5%e3%82%b9%e3%81%aa%e3%81%97%e5%82%8d%e8%a6%b3%e8%80%85%e3%81%aa%e3%81%97" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>この仕組みが「委員会による決定」に堕ちないよう、2つの歯止めがあります。</p>
<p>1つ目。Ownerは、Alanいわく「啓蒙専制君主」として決定します。アイデアを調査し、リスクを測り、同僚に質問はするけれど、コンセンサスは求めないし、言われたことを全部実装する義務もない。Alanは「うちは民主主義ではない」と言い切っています。全員が株主であり、チームや個人よりも会社の利益を優先する。とはいえ、孤立した拙速な決定を望んでいるわけでもありません。Ownerが「この賭けで行ける」とそれなりに確信したら決めて、みんなで試し、影響が見えてきたら振り返って次に活かします。</p>
<p>2つ目。貢献者の数を管理します。Jeff Bezosの「ピザ2枚ルール」は非同期にも当てはまります。人が増えるほど、1人あたりの貢献は減る。6人を超えたあたりから傍観者効果が顔を出し、参加の質が落ちるそうです。通知も同じ思想で、段階的に。全員が自分のGitHub通知を正しく設定している（Settingsで「Participating」と「Watching」の「Web and Mobile」にチェック）と信頼して、issueのQuestionsセクションでのタグ付けは最小限に抑えます。</p>

<h2 class="relative group">自分が持ち帰るもの
    <div id="自分が持ち帰るもの" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%87%aa%e5%88%86%e3%81%8c%e6%8c%81%e3%81%a1%e5%b8%b0%e3%82%8b%e3%82%82%e3%81%ae" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>会議の内容を、その場にいなかった人に完全に説明することはできません。でも、書かれた決定なら誰でも読めます。Alan自身、これが最善で唯一の仕組みだとは言っていません。ただ自分たちに一番合っていた、というだけです。割り込みが減り、傍観者効果が薄れ、一歩引いて事実ベースで決められるようになった。私もチームの決定を全部GitHubのissueに移すつもりはありませんが、下のテンプレートはさっそくうちのリポジトリに入れます。</p>

<h3 class="relative group">GitHubのissueテンプレートとして使う
    <div id="githubのissueテンプレートとして使う" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#github%e3%81%aeissue%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%81%a8%e3%81%97%e3%81%a6%e4%bd%bf%e3%81%86" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>フォーラムとして使うリポジトリに<code>.github/ISSUE_TEMPLATE/decision.md</code>として保存しておけば、誰かが新しいissueを開くたびに、GitHubがこのテンプレートを選択肢として出してくれます。セクションの構成はAlanのもので、LOCIの行とラベルは私が足しました。</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">意思決定</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">about</span><span class="p">:</span><span class="w"> </span><span class="l">決定を提案して、意見を文章で集める</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[意思決定] &#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">labels</span><span class="p">:</span><span class="w"> </span><span class="l">decision</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## スコープ
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> このissueの目標は...
</span></span><span class="line"><span class="cl"><span class="k">-</span> このissueでは...は扱いません
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## このissueを開いた理由
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## LOCI
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> Lead:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Owner:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Consulted:
</span></span><span class="line"><span class="cl"><span class="k">-</span> Informed:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 期限
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> 意見の締め切り:
</span></span><span class="line"><span class="cl"><span class="k">-</span> 決定日:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 背景と資料
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 提案
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## 質問</span></span></code></pre></div></div>

<h2 class="relative group">GitHub IssuesとGitHub Projectsの使い分け
    <div id="github-issuesとgithub-projectsの使い分け" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#github-issues%e3%81%a8github-projects%e3%81%ae%e4%bd%bf%e3%81%84%e5%88%86%e3%81%91" aria-label="アンカー">#</a>
    </span>
    
</h2>
<p>GitHubをもっと広くプロジェクト管理に使おうと考えているなら、この2つは役割が違うと押さえておくと楽です。Issuesには議論が残り、閉じたあとはそれがそのまま決定の記録になります。GitHub Projectsは、1つ以上のリポジトリのissueの上に重ねるボードや表で、ステータスや担当者、期限といった独自のフィールドを持たせられます。Alanのような意思決定フォーラムなら、ラベルとissue一覧で十分です。Projectsを足すのは、開いている決定を、決めなければならない日付順に1画面で並べたくなったとき。それから、開発の進捗も同じ場所で追い始めたときです。たいていのチームは、結局そこで両方を使うことになります。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-01-04-githubforprojectmanagement/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>Gitのグラフ表示（ターミナル・VS Code）で、マイクロマネジメントせずに進捗を追う</title>
      <link>https://jared.lynskey.co.nz/ja/posts/2023/2023-06-02-project-progress-git-graph/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/ja/posts/2023/2023-06-02-project-progress-git-graph/</guid>
      <pubDate>Fri, 02 Jun 2023 11:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Git</category>
      <category>Git Graph</category>
      <category>VS Code</category>
      <category>Project Management</category>
      <category>Engineering Manager</category>
      <description>git log --graphのコマンドとエイリアス、2つのブランチの比較、VS CodeのGit Graph拡張と標準のグラフ表示。そのうえで、チームを監視せずに進捗を追う使い方を紹介します。</description>
      <content:encoded><![CDATA[<p>Gitのグラフをいちばん手軽に見るならターミナルです。<code>git log --graph --oneline --all --decorate</code> を実行すると、すべてのブランチが線で描かれ、1行に1コミット、ブランチ名やタグ名もコミットの横に表示されます。VS Codeなら、ソース管理ビューに標準で入っている「Source Control Graph」を使うか、Git Graph拡張を入れれば、もっと大きくてクリックできるグラフが見られます。どちらも記事の最後で詳しく説明します。</p>
<p>「進捗どうですか？」と聞かれて嬉しい人はいません。とはいえ、仕事でプロジェクトを率いる立場としては、進捗を知らないわけにもいきません。私の妥協点がGitグラフです。誰かに聞く前に、まずグラフを見る。たいていの場合、答えはすでにそこにあります。コミットの動き、ブランチ、マージがひと目で分かり、そのために誰も会議に出る必要がありません。</p>

<h3 class="relative group">グラフから実際に何が読めるか
    <div id="グラフから実際に何が読めるか" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%b0%e3%83%a9%e3%83%95%e3%81%8b%e3%82%89%e5%ae%9f%e9%9a%9b%e3%81%ab%e4%bd%95%e3%81%8c%e8%aa%ad%e3%82%81%e3%82%8b%e3%81%8b" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p><figure><span class="mc-img" style="--lqip:url('data:image/webp;base64,UklGRqoAAABXRUJQVlA4IJ4AAAAQBgCdASogABgAPw1yrE0mIyIhKAqoxiGJ5QC3uywCxQFpuHEPXSkTd6B0z2RWZa4T7Y8RfsruOsAA/vd8+2CpyheBOdEz3RjVNYlC9RtFoqjOvb/UUWB572vAmnOtzv/AnG5mtp9GYAzXQce5Jk69dXACVLuYiXixGTwngnNtwm/gJSEGWEDi7N2CT1vDSW68w98W/Qmb3QPw7xAAAA==')"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Git Graphs"
    width="2560"
    height="1920"
    src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp 800w, https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_b6056380eece4a86.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_1c52b3c34db54258.webp"></span></figure>
</p>
<p>じっくり見たことがない方のために説明すると、ノードひとつがコミット、枝分かれした線がブランチで、全体がプロジェクトの時系列になっています。このレイアウトには驚くほど情報が詰まっています。</p>
<ul>
<li>一瞥するだけで、アクティブなブランチの数とコミットの頻度が分かります。</li>
<li>急に静かになったブランチや、何週間もマージされていないブランチは、たいてい誰かが詰まっているサインです。この早期警告には価値があります。</li>
<li>マージの頻度はチームのコラボレーションの形を映します。マージが頻繁なら作業がきちんと統合されている証拠で、長生きしすぎたブランチは、孤立した作業になっている可能性が高いです。</li>
</ul>

<h3 class="relative group">中断は減り、会話は良くなる
    <div id="中断は減り会話は良くなる" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ad%e6%96%ad%e3%81%af%e6%b8%9b%e3%82%8a%e4%bc%9a%e8%a9%b1%e3%81%af%e8%89%af%e3%81%8f%e3%81%aa%e3%82%8b" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>分かりやすいメリットは、誰の作業も中断せずに状況を把握できることです。それ以上に効くのは、いざ会話が必要になったときです。推測ではなく、グラフから話を始められます。「このブランチ、火曜日から動いてないけど、何か詰まってる？」は、「進捗どうですか？」よりずっとましな切り出し方です。</p>
<p>ルーチンを明示しておくのも効きます。私の場合は、ほぼ毎朝さっと眺めて、週に一度じっくり見る。チームもそのリズムを知っているので、誰も驚きません。</p>

<h3 class="relative group">監視ツールにしないこと
    <div id="監視ツールにしないこと" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%9b%a3%e8%a6%96%e3%83%84%e3%83%bc%e3%83%ab%e3%81%ab%e3%81%97%e3%81%aa%e3%81%84%e3%81%93%e3%81%a8" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>ここは自分にも言い聞かせ続けている部分です。コミット数は価値ではありません。よく考えられたコミット1つが、騒がしいコミット50個に勝つこともあります。すべてのコミットが見えるからといって、すべての判断に口を出していいわけではない。チームを信頼して、パターンが本当に怪しいときだけ介入する。そしてグラフを会話に持ち込むときは、フィードバックの出発点として使うこと。検察側の証拠にしてはいけません。</p>

<h3 class="relative group">ターミナルでグラフを表示する
    <div id="ターミナルでグラフを表示する" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%bf%e3%83%bc%e3%83%9f%e3%83%8a%e3%83%ab%e3%81%a7%e3%82%b0%e3%83%a9%e3%83%95%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>必要なのはGitだけです。</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git log --graph --oneline --all --decorate</span></span></code></pre></div></div>
<p>それぞれのオプションの意味は次のとおりです。</p>
<ul>
<li><code>--graph</code>：左側にブランチとマージの線を描きます。</li>
<li><code>--oneline</code>：1コミットを1行で、短いハッシュとメッセージの1行目だけ表示します。</li>
<li><code>--all</code>：今いるブランチだけでなく、リモートを含むすべてのブランチとタグを表示します。</li>
<li><code>--decorate</code>：ブランチ名やタグ名を、それが指すコミットの横に表示します。最近のGitは出力先がターミナルなら何もしなくても表示しますが、このオプションを付けておけば、パイプで別のコマンドに渡したときも消えません。</li>
</ul>
<p>毎朝これを打つのは面倒なので、エイリアスにしておきます。</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git config --global alias.graph <span class="s2">&#34;log --graph --oneline --all --decorate&#34;</span>
</span></span><span class="line"><span class="cl">git graph</span></span></code></pre></div></div>
<p>長く続いているリポジトリだと、グラフ全体はいつまでもスクロールが終わりません。絞り込む方法をいくつか挙げます。</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git graph --since<span class="o">=</span><span class="s2">&#34;2 weeks ago&#34;</span>    <span class="c1"># 直近2週間だけ</span>
</span></span><span class="line"><span class="cl">git graph -20                      <span class="c1"># 直近20コミットだけ</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline main..feature                <span class="c1"># featureにあってmainにまだないもの</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline --left-right main...feature  <span class="c1"># 両側を &lt; と &gt; で区別して表示</span></span></span></code></pre></div></div>
<p>最後の2つは2つのブランチの比較です。エイリアスではなく素の <code>git log</code> を使っているのは、<code>--all</code> が入っていると他のブランチまで全部戻ってきてしまうからです。ドット2つは「<code>feature</code> にあって <code>main</code> にないもの」を表示します。ドット3つに <code>--left-right</code> を付けると、お互いに相手にないものを両側とも表示するので、長生きしているブランチがどれだけ離れてしまったかをすぐ確認できます。</p>

<h3 class="relative group">VS Codeでグラフを表示する
    <div id="vs-codeでグラフを表示する" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#vs-code%e3%81%a7%e3%82%b0%e3%83%a9%e3%83%95%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>VS Codeにはグラフが標準で入っています。ソース管理ビュー（Ctrl+Shift+G）を開くと、そのパネルの中に「Source Control Graph」のセクションがあります。バージョン1.93（2024年8月）からの機能です。初期状態では今のブランチとそのリモートを表示し、グラフのタイトルバーにあるブランチ選択で他のブランチを追加できます。さっと眺めるだけなら、これで十分です。</p>
<p>すべてのブランチを一度に見たいなら、mhutchie氏のGit Graph拡張を入れます（拡張機能ビューで「Git Graph」を検索）。開き方は、ステータスバーの「Git Graph」、ソース管理ビュー上部のGit Graphアイコン、またはコマンドパレットの <em>Git Graph: View Git Graph (git log)</em> のいずれかです。コミットをクリックすると変更されたファイルが見られ、あるコミットをクリックしてから別のコミットをCtrl/Cmd+クリックすると2つを比較できます。ただ、この拡張は2021年からリリースが止まっているので、標準のグラフも知っておいて損はありません。</p>
<p>Git Graphのボタンが出てこない場合は、拡張機能がリポジトリを見つけられていない可能性が高いです。初期設定では開いたフォルダそのものしか探さず、サブフォルダまでは見に行きません。リポジトリのフォルダを直接開くか、設定で <code>git-graph.maxDepthOfRepoSearch</code> の値を上げてください。</p>

<h3 class="relative group">その他のツール
    <div id="その他のツール" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%81%9d%e3%81%ae%e4%bb%96%e3%81%ae%e3%83%84%e3%83%bc%e3%83%ab" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>たいていのGitツールには、どこかにグラフがあります。<code>gitk --all</code> はGit自身の履歴ブラウザです。GitHub、GitLab、Bitbucketには、リポジトリページに「ネットワーク」や「グラフ」のビューがあります。デスクトップクライアントでも、SourceTree（Atlassianの無料ツール）、GitKraken、Tower、WindowsならTortoiseGitに、どれもグラフ表示があります。</p>
<p>どれを選んでも、目的は同じです。進捗を理解すること。コミットを数えることではありません。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-06-02-project-progress-git-graph/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>プロジェクトのコミュニケーション計画書：ソフトウェア開発チーム向けのテンプレートとサンプル</title>
      <link>https://jared.lynskey.co.nz/ja/posts/2023/2023-06-02-project-frameworks-for-future-cto/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/ja/posts/2023/2023-06-02-project-frameworks-for-future-cto/</guid>
      <pubDate>Fri, 02 Jun 2023 11:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Project Management</category>
      <category>Communication Plan</category>
      <category>Communication</category>
      <category>Stakeholder Management</category>
      <category>Engineering Management</category>
      <category>Remote Work</category>
      <description>コミュニケーション計画とは、誰に何を、どのくらいの頻度で、どのチャネルで、誰が伝えるかを決めておくものです。計画書に入れるべき項目、そのまま使えるソフトウェア開発プロジェクトのサンプル、そして計画を形だけにしないための習慣をまとめました。</description>
      <content:encoded><![CDATA[<p>プロジェクトのコミュニケーション計画とは、プロジェクトについて誰が何を知っておく必要があるのか、それをどのくらいの頻度で、どのチャネルで、誰が責任を持って伝えるのかをまとめた短い表のことです。私のものは1ページに収まっていて、開発チームからCEOまで、伝える相手ごとに1行ずつ並べています。以下は、ソフトウェア開発のプロジェクトを始めるなら私が最初に用意する計画と、プロジェクトのコミュニケーションを本当に機能させるために書き溜めてきたメモです。</p>
<p>これまで巻き込まれてきたプロジェクトの混乱は、ひどいコードが原因だったことはほとんどありません。必要な情報が、手遅れになるまで必要な人に届かなかった——原因はたいていこれです。仕事でプロジェクトリードを任されるようになってから、「もし自分がCTOの席に座ることになったら、コミュニケーションをどう回すか」というメモを書き溜めています。今回はそれを公開してみます。</p>

<h4 class="relative group">誰に何を知らせるかを決める
    <div id="誰に何を知らせるかを決める" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%aa%b0%e3%81%ab%e4%bd%95%e3%82%92%e7%9f%a5%e3%82%89%e3%81%9b%e3%82%8b%e3%81%8b%e3%82%92%e6%b1%ba%e3%82%81%e3%82%8b" aria-label="アンカー">#</a>
    </span>
    
</h4>
<p>地味ですが土台になるのはコミュニケーション計画です。誰に知らせる必要があるのか、どんな情報を、どのくらいの頻度で、どのチャネルで届けるのか。プロジェクトの開始時に必ず作り、担当者の名前まで入れておくべきだと思っています。「全員の仕事」になったコミュニケーションは、結局誰の仕事でもなくなりますから。ステークホルダーも同じです。誰が本当にこのプロジェクトを気にかけているのかを整理し、それぞれが好む報告のされ方を把握しておく。CEOに、開発チャンネルと同じ内容の報告を送ってはいけません。それから、明文化したルールをいくつか。返信の目安時間、何を「緊急」と呼ぶか、どのチャネルを何に使うか。「コミュニケーションの問題」の正体は、口に出していない期待のすれ違いであることがほとんどです。</p>

<h4 class="relative group">ソフトウェア開発プロジェクトのコミュニケーション計画サンプル
    <div id="ソフトウェア開発プロジェクトのコミュニケーション計画サンプル" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e3%82%b3%e3%83%9f%e3%83%a5%e3%83%8b%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e8%a8%88%e7%94%bb%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab" aria-label="アンカー">#</a>
    </span>
    
</h4>
<p>私ならまずこれを用意して、プロジェクトに合わせて手を入れていきます。行は会議ごとではなく、伝える相手ごとに分けています。</p>
<table>
	<thead>
			<tr>
					<th>相手</th>
					<th>知っておくべきこと</th>
					<th>頻度</th>
					<th>チャネル</th>
					<th>伝える人</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>開発チーム</td>
					<td>進行中の作業、止まっている作業、コードに影響する決定</td>
					<td>毎日</td>
					<td>スタンドアップとチームのチャットチャンネル</td>
					<td>テックリード</td>
			</tr>
			<tr>
					<td>プロダクトオーナー</td>
					<td>スプリントゴールに対する進捗、スコープについての確認、新しく見えてきたリスク</td>
					<td>週2回、加えてスコープが変わるたび</td>
					<td>短い通話かチャットのスレッド</td>
					<td>プロジェクトリード</td>
			</tr>
			<tr>
					<td>経営層</td>
					<td>一行でまとめた状況、納期や予算へのリスク、経営層に判断してもらうこと</td>
					<td>毎週</td>
					<td>1段落の文章での報告</td>
					<td>プロジェクトリード</td>
			</tr>
			<tr>
					<td>営業・サポート・運用</td>
					<td>何がいつリリースされ、顧客にとって何が変わるか</td>
					<td>リリースごと</td>
					<td>リリースノート</td>
					<td>プロダクトオーナー</td>
			</tr>
			<tr>
					<td>ユーザー・クライアント</td>
					<td>新しくなったこと、これから入るもの</td>
					<td>リリースごと</td>
					<td>変更履歴かアプリ内のお知らせ</td>
					<td>プロダクトオーナー</td>
			</tr>
			<tr>
					<td>全員</td>
					<td>何が決まったか、その理由</td>
					<td>決まったとき</td>
					<td>課題管理ツールかwikiの意思決定ログ</td>
					<td>決めた本人</td>
			</tr>
	</tbody>
</table>
<p>表の下には、先ほどの明文化したルールを、できるだけ平易に書き添えます。「緊急」とはリリースか顧客を止めてしまうもののことで、そのときはメッセージではなく電話する。質問はチャットに、決定事項はトラッカーに。返信は1営業日以内。意思決定ログには<a href="https://jared.lynskey.co.nz/ja/posts/2024/2024-12-03-decision-docs/" >意思決定文書</a>を使っていて、作業のすぐ隣に置けるように<a href="https://jared.lynskey.co.nz/ja/posts/2024/2024-01-04-githubforprojectmanagement/" >GitHub Issues</a>で管理しています。</p>
<p>この手の計画がうまく回るかどうかは、2つの点で決まります。どの行にも最後の列に必ず誰かの名前が入っていること。そして経営層への報告を口頭ではなく文章にすること。文章なら、そのまま転送しても何も抜け落ちません。</p>

<h4 class="relative group">ツールとリズム
    <div id="ツールとリズム" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%84%e3%83%bc%e3%83%ab%e3%81%a8%e3%83%aa%e3%82%ba%e3%83%a0" aria-label="アンカー">#</a>
    </span>
    
</h4>
<p>ツールは、世間で議論されているほど重要ではありません。チャットはSlack、タスク管理はTrello、顔を見て話したいときはZoom。チームに合うものを選んだら、さっさと先へ進めばいい。それより大事なのはリズムです。アジャイルなら毎日のスタンドアップ、サイクルが長いなら週次の報告。そして決めたリズムをちゃんと守ること。あとは、書き残すことです。決定事項、変更、アクションアイテムをNotionやJiraへ、後付けの作業ではなくプロセスの一部として記録する。半年後、みんなの記憶に残っているのはドキュメントだけです。</p>

<h4 class="relative group">柔らかい部分こそ難しい
    <div id="柔らかい部分こそ難しい" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9f%94%e3%82%89%e3%81%8b%e3%81%84%e9%83%a8%e5%88%86%e3%81%93%e3%81%9d%e9%9b%a3%e3%81%97%e3%81%84" aria-label="アンカー">#</a>
    </span>
    
</h4>
<p>ここまでは仕組みの話です。難しいのはその先で、今のコミュニケーションが本当に機能しているかをチームに聞き、機能していなければ変えること。メンバーの育成もそうです。チームにはいろいろなバックグラウンドの人がいて、うまく回っているプロジェクトを見たことがない人もいます。話す順番を待つのではなく、きちんと聴くこと。衝突は小さいうちに早めに扱うこと。しかも、この手の問題は一度解決したら終わり、にはなりません。前の四半期にうまくいっていたやり方が、いつの間にか効かなくなる。定期的に見直すしかありません。</p>

<h3 class="relative group">分散・非同期の開発チームで働くということ
    <div id="分散非同期の開発チームで働くということ" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%88%86%e6%95%a3%e9%9d%9e%e5%90%8c%e6%9c%9f%e3%81%ae%e9%96%8b%e7%99%ba%e3%83%81%e3%83%bc%e3%83%a0%e3%81%a7%e5%83%8d%e3%81%8f%e3%81%a8%e3%81%84%e3%81%86%e3%81%93%e3%81%a8" aria-label="アンカー">#</a>
    </span>
    
</h3>
<p>リモートや非同期中心のチームなら、このトークは観る価値があります。
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/5lVijFaXaKs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
		</div>
</p>
<p>自分がこの全部を完璧にできているかというと、そんなことはありません。誰にもできないでしょう。ただ、これまでスムーズに進んだプロジェクトはこの大半が揃っていて、痛い目を見たプロジェクトは少なくとも3つは欠けていました。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-06-02-project-frameworks-for-future-cto/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
