Yak shaving(ヤックシェービング)とは?意味・由来・プログラミングでの具体例をわかりやすく解説

「Yak shaving(ヤックシェービング)」という言葉を聞いたことはありますか?

プログラミングやソフトウェア開発の現場では、本来やりたかった作業とは直接関係なさそうな細かい作業を次々とこなすうちに、本来の目的から遠ざかってしまう状態を「Yak shaving」と呼びます。

たとえば、次のようなケースです。

「Webアプリをデプロイしたい」

↓

Dockerを更新する必要がある

↓

Dockerを更新するためにOSを更新する

↓

OS更新の前にバックアップを取る

↓

バックアップ先の容量が足りない

↓

不要なファイルを整理する

↓

ファイル整理をしているうちにプロジェクト構成が気になる……

このように、最初の目的からどんどん離れていく状態がYak shavingです。

本記事では、Yak shavingの意味、由来、具体例、似た言葉との違い、プログラマーがYak shavingを防ぐ方法まで詳しく解説します。

Yak shaving(ヤックシェービング)とは?

Yak shavingとは、簡単にいうと、

「本来の目的を達成するために必要な作業を進めているうちに、次々と別の作業が発生してしまう状態」

を意味するIT・プログラミング用語です。

英語の「yak shaving」を直訳すると「ヤクを毛刈りする」という意味になります。

もちろん、プログラマーが本当にヤクの毛を刈っているわけではありません。

Yak shavingは、次の作業に進むために完了させなければならない、一見すると延々と続く小さな作業の連鎖を指す言葉として知られています。

日本語ではどういう意味?

日本語に完全に一致する言葉はありませんが、以下のような表現が近いでしょう。

  • 寄り道作業
  • 前提作業の連鎖
  • 細かい作業の泥沼
  • 本来の目的からの脱線
  • 作業の連鎖
  • 技術的な寄り道

特にプログラマーの間では、

「今日はずっとYak shavingしてた」

のように使われます。

Yak shavingの由来

Yak shavingという言葉は、MIT AI Labで活動していたCarlin J. Vieriが1990年代に使い始めたとされる言葉です。

由来として知られているのが、アメリカのアニメ作品「The Ren & Stimpy Show」のエピソードです。

この作品に登場する「Yak Shaving Day」という話が、Yak shavingという表現のきっかけになったとされています。

つまり、

目的を達成するために行動していたはずなのに、気がついたら「ヤクの毛を刈る」という、とんでもなく遠い作業をしていた

という状況を、ソフトウェア開発の作業にたとえたものです。

Yak shavingの具体例

Yak shavingは、プログラミングでは非常によく起こります。

例1:Webサイトをデプロイしたい

たとえば、

「今日中にWebサイトをVercelへデプロイしよう」

と考えたとします。

ところが、次のような状況になりました。

  1. GitHubリポジトリを確認する
  2. Node.jsのバージョンが古いことに気づく
  3. Node.jsをアップデートする
  4. npmパッケージが動かなくなる
  5. npmパッケージを更新する
  6. 依存関係でエラーが発生する
  7. package-lock.jsonを確認する
  8. 別のライブラリでエラーが発生する
  9. TypeScriptのバージョンを変更する
  10. TypeScriptのエラーを修正する

となり、気がつけば数時間経過。

まだデプロイできていません。

これが典型的なYak shavingです。

例2:Pythonプログラムを実行したい

Pythonで簡単なプログラムを実行しようとして、次のコマンドを入力したとします。

python test.py

ところが、次のようなエラーが発生しました。

command not found

そこで、

「Pythonをインストールしよう」

となります。

しかし、そこから次々と作業が発生します。

  • Pythonのバージョンを確認する
  • Homebrewを確認する
  • PATHを設定する
  • pipを設定する
  • 仮想環境を作成する
  • VS CodeのPythonインタープリタを設定する
  • 必要なライブラリをインストールする

最初は、

「Pythonを1本動かしたい」

だけだったのに、最終的には開発環境の大改修になっています。

これもYak shavingの典型例です。

Yak shavingと「必要な作業」の違い

ここが重要です。

Yak shavingは、必ずしも「無駄な作業」という意味ではありません。

本来の目的を達成するために、本当に必要な前提作業が発生するケースもあります。

たとえば、

「新機能をリリースしたい」

↓

「現在のライブラリでは対応できない」

↓

「ライブラリをアップデートする」

↓

「互換性問題を修正する」

という流れなら、寄り道に見えても必要な作業です。

つまり、

Yak shaving=無駄

とは限りません。

Yak shavingが問題になる理由

Yak shavingが問題になるのは、本来の目的を見失ってしまうことです。

1. 時間を大量に消費する

最初は5分程度の作業だったものが、気がつくと数時間かかっていることがあります。

特に開発環境の設定や依存ライブラリの更新は、作業が連鎖しやすい分野です。

2. 本来の仕事が進まない

たとえば、

「ログイン機能を実装する」

というタスクだったのに、

Node.js更新 → npm更新 → ESLint更新 → コードフォーマット修正

となれば、ログイン機能そのものは完成しません。

3. 作業の優先順位を見失う

Yak shavingでは、

「これも必要だからやらないと」

という心理が働きます。

その結果、本来の目的よりも目の前の問題を解決することが優先されてしまいます。

4. 完璧主義に陥りやすい

「せっかく環境を直すなら、最新バージョンにしよう」

「ついでにコードも整理しよう」

「この設計も気になる」

という考えが重なると、どんどん作業範囲が広がります。

プログラミングでよくあるYak shaving

本来の目的 発生する寄り道
Pythonを実行する Python・pip・PATHの設定
Webアプリを公開する Node.jsやnpmの更新
バグを修正する 関連コードのリファクタリング
APIを作る 開発環境・DB・認証設定
Docker化する Dockerfile・イメージ・依存関係の修正
AIアプリを作る APIキー・SDK・環境変数の設定
GitHubへpushする Git設定・SSHキー・認証設定
Reactを導入する Node.js・npm・ビルド環境の設定

このような「本来のタスクから枝分かれしていく作業」は、開発者なら一度は経験したことがあるでしょう。

Yak shavingと「Rabbit hole」の違い

Yak shavingと似た言葉に、rabbit hole(ラビットホール)があります。

Rabbit holeは、

「あることを調べ始めたら、関連情報を次々と追いかけて、どんどん深みに入り込んでしまう」

という意味で使われます。

たとえば、

「Pythonのエラーについて調べる」

↓

Stack Overflowを見る

↓

別のライブラリの記事を見る

↓

GitHub Issueを見る

↓

Pythonの内部仕様を調べる

↓

CPythonの実装まで読む

というケースです。

一方、Yak shavingは、

目的を達成するために別の作業が次々に必要になる

というニュアンスが強くなります。

Yak shavingとRabbit holeの比較

用語 意味
Yak shaving 作業が次々に派生して本来の目的から遠ざかる
Rabbit hole 調査・情報収集に深く入り込む
Bikeshedding 重要度の低い問題に時間を使う

Yak shavingと「bikeshedding」の違い

もう一つ、IT業界でよく使われる言葉に「bikeshedding(バイクシェディング)」があります。

これは、

重要度の低い細かい問題について、必要以上に時間を使って議論すること

を指します。

たとえば、

「変数名をuser_dataにするかuserInfoにするか」

について30分議論してしまうようなケースです。

Yak shavingを防ぐ5つの方法

Yak shavingそのものを完全になくすことは難しいですが、被害を小さくすることはできます。

1. 最初の目的を明確にする

作業を始める前に、

「今日何を完成させるのか?」

を明確にします。

たとえば、

悪い例

「開発環境をきれいにする」

良い例

「ログイン機能をローカル環境で動かす」

後者のほうが、余計な作業に脱線しにくくなります。

2. 「これは本当に今必要か?」と考える

新しい作業が発生したら、

「これは現在の目的を達成するために必須なのか?」

と考えます。

必須でなければ、後回しにします。

3. 作業を時間制限する

たとえば、

「このエラー調査は20分まで」

と決めます。

20分経って解決しなければ、次のような判断をします。

  • 別の方法を試す
  • 元の作業に戻る
  • 誰かに相談する
  • Issueとして記録する

4. 「ついでに」を警戒する

Yak shavingを悪化させる危険な言葉があります。

それが、

「ついでに」

です。

「このファイルを修正するついでにリファクタリングしよう」

「環境を更新するついでに全部最新版にしよう」

「このバグを直すついでに設計も変更しよう」

こうした「ついでに」が、作業範囲を爆発的に広げます。

5. 本来のタスクを別に記録する

作業途中で別の問題を発見したら、すぐに対応するのではなく、

「TODO:後で対応」

として記録します。

TODO
・Node.jsを最新版にする
・古いライブラリを更新する
・コードをリファクタリングする

と残しておけば、今やるべき作業に集中できます。

AI時代はYak shavingが増える?

生成AIやAIコーディングツールの普及によって、Yak shavingの形も変化しています。

たとえばAIに、

「このエラーを修正してください」

と依頼すると、AIが関連するファイルを大量に変更することがあります。

その結果、

  1. エラーを修正する
  2. 別のエラーが発生する
  3. そのエラーを修正する
  4. 依存関係を変更する
  5. テストが失敗する
  6. テストコードを修正する
  7. 別の箇所で問題が発生する

というように、AIによってYak shavingが高速化される可能性もあります。

AIコーディングでは、

「最初の目的は何だったのか?」

を常に確認することが重要です。

Yak shavingは悪いことなのか?

結論からいうと、必ずしも悪いことではありません。

ソフトウェア開発では、複雑な依存関係を持つシステムを扱うため、どうしても前提作業が発生します。

重要なのは、

「必要な寄り道」と「不要な寄り道」を区別すること

です。

たとえば、

「このライブラリを更新しないと機能を実装できない」

のであれば、Yak shavingは必要な作業です。

一方、

「せっかくだからコード全体をきれいにしよう」

となった場合は、本来の目的から外れている可能性があります。

Yak shavingを一言で説明すると?

Yak shavingを初心者に説明するなら、次のように説明すると分かりやすいでしょう。

「本来やりたかったことをするために別の作業を始めたら、その作業にも別の作業が必要になり、どんどん寄り道が増えていくこと」

プログラマーにとっては非常に身近な現象です。

まとめ

Yak shaving(ヤックシェービング)は、プログラミングやソフトウェア開発で使われるユーモラスな技術用語です。

ポイントをまとめると、以下の通りです。

  • Yak shavingは「作業の連鎖」を意味する
  • 本来の目的とは一見関係ない作業が発生する
  • その作業にも別の作業が必要になる
  • 結果として本来のタスクから遠ざかることがある
  • MIT AI Labで使われ始めた言葉として知られている
  • 「The Ren & Stimpy Show」が由来として知られている
  • 必ずしも無駄な作業とは限らない
  • 必要な前提作業と不要な寄り道を区別することが重要
  • AIコーディング時代にも注意したい概念

特にプログラミングでは、

「ちょっと環境を直すだけ」→「気づいたら半日経っていた」

ということが珍しくありません。

そんなときに、

「今、Yak shavingしてない?」

と考えるだけでも、本来の目的に戻るきっかけになります。

関連キーワード

Yak shaving、ヤックシェービング、Yak shavingとは、Yak shaving 意味、ヤックシェービング 意味、プログラミング 用語、プログラマー 用語、IT用語、ソフトウェア開発、開発者、生産性、Rabbit hole、bikeshedding

現場で使われる用語はプログラマー用語・俗語一覧にまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら