ふくふくHukuhuku Inc.
EP.39Data Fetch 9分公開: 2026-09-02

使われていない取得を止める ── 増やすより難しい

取得は増える一方で、減ることがありません。誰も使っていないデータを毎日取り続け、相手の負荷と自分の保守を消費し続けます。

#運用#棚卸し#設計
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

取得処理は増える一方です。新しい分析のたびに1つ増え、要らなくなっても消えません。使わなくなった分析のための取得が、毎日静かに動き続けます。

止めないことの費用は目に見えません。相手のサーバを叩き続け、保存先を消費し、仕様変更のたびに直す対象になります。動いている限り誰も文句を言わないので、放置されます。

この回では、止める判断をどう下すかを扱います。増やすより難しいのは、止めて困る人がいないことを証明できないからです。

使われているかを測る

まず、取得したデータが読まれているかを見ます。取得の回数ではなく、保存先が読まれた形跡です。読まれていないなら、少なくとも自動処理からは使われていません。

人が手元で読んでいる場合は記録に残りません。そこは EP.38 の一覧にある「誰のため」の欄で補います。記録と一覧の両方が空なら、止める候補として扱えます。

止めてよいかの判断
読まれた形跡一覧の用途欄判断
あり記載あり続ける
あり空欄使われている。用途を追記する
なし記載あり記載が古い可能性。確認する
なし空欄止める候補

使われているかどうかは、感覚ではなく記録で見ます。の呼び出し回数ではなく、保存した結果が読まれたかどうかです。読まれた形跡は、保存先の種類によって取り方が違います。ファイルなら最終アクセス時刻、データベースなら問い合わせの記録。をファイルとして置いているなら、読み込みの記録を自分で残す必要があるかもしれません。

に登録されているのに、参照している処理が見当たらない。こういう取得がいくつか見つかるはずです。動いていること自体が、必要である証拠にはなりません

止める候補を機械的に洗い出す
Python
from datetime import date, timedelta

def find_candidates(jobs, last_read: dict[str, date], unused_days: int = 180) -> list[str]:    """一定期間読まれておらず、用途も記録されていない取得を返す。
    どちらか片方だけでは判断しない。人が手元で読んでいる場合は    記録に残らないので、一覧の用途欄と合わせて見る。    """    threshold = date.today() - timedelta(days=unused_days)    out = []    for job in jobs:        read_at = last_read.get(job.name)        never_read = read_at is None or read_at < threshold        if never_read and job.is_orphan():            out.append(job.name)    return out

いきなり消さない

止める候補が見つかっても、いきなり削除してはいけません。四半期に一度しか使わないデータかもしれません。年度末にだけ参照されるものもあります。

段階を踏みます。まず取得を止めて、保存先は残す。しばらく様子を見て、誰も困らなければ保存先も片付ける。この間に「あのデータが更新されていない」と言われたら、戻せばよい。

止める前に、止めることを予告する期間を置く
Python
from dataclasses import dataclassfrom datetime import date

@dataclassclass Retirement:    """段階的に止める。いきなり消さない。"""
    job: str    announced_on: date          # 止めると伝えた日    stop_fetch_on: date         # 取得を止める日    delete_data_on: date        # 保存先を片付ける日
    def stage(self, today: date) -> str:        if today < self.stop_fetch_on:            return "予告中(まだ動いている)"        if today < self.delete_data_on:            return "取得停止済み・データは残っている(戻せる)"        return "片付け済み"
    def check(self) -> None:        if self.stop_fetch_on <= self.announced_on:            raise ValueError("予告なしに止めることになっている")        if (self.delete_data_on - self.stop_fetch_on).days < 90:            raise ValueError("停止から削除までが短すぎる。四半期の利用を拾えない")
止めたことを記録に残す

止めた取得の記録を消してしまうと、半年後に同じものをまた作ります。「いつ、なぜ止めたか」を残しておけば、再び必要になったときに、当時の理由を踏まえて判断できます。

戻せる状態を保つことも大事です。取得を止めてもに過去のデータが残っていれば、再開したときに欠けるのはその期間だけで済みます。の口が生きていれば、遡って埋め直すこともできます。

止めるときは、cronの設定を消すのではなく無効にするほうが安全です。設定そのものが残っていれば、戻すのが一瞬で済みます。消すのは、戻さないと確信できてからで構いません。

止めやすくしておく

そもそも止めやすい作りにしておくと、この作業が軽くなります。1つの取得が1つの単位として完結しているなら、止めるのは設定を1行消すだけです。逆に、複数の取得が絡み合っていると、止められません。

保存先も分けておいてください。1つの場所に複数の取得が書き込んでいると、どれを止めるとどのデータが消えるのかが分かりませんEP.05 で扱った配信元ごとの分離が、ここで効いてきます。

止める作業に目に見える成果はありません。それでも、放っておくと必ず溜まる種類の負債です。定期的に見る時間を確保しておくのが、結局いちばん安く済みます。

止める判断は、増やす判断より慎重になりがちです。止めて困る人が出るかもしれない、という不安があるからです。だからこそ、段階を踏んで戻せる形にしておくことに意味があります。

取得を止めた後も、しばらくは問い合わせが来ないかを気にしておいてください。誰も何も言わない期間が続いて、はじめて本当に不要だったと分かります。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp