Toilとは何か?SREがToil削減に取り組む方法|Google SRE流の自動化戦略を解説

SRE実務プラクティス

SRE業務の中に「毎回手で同じことをやっている作業」はないでしょうか。

「デプロイのたびにSlackで通知を送っている」「毎朝ログを確認してCSVに貼り付けている」「サービス再起動をSSHで手動実行している」——こういった作業は、エンジニアの時間を静かに蝕んでいます。

Google SRE本はこれをToil(トイル)と呼び、意図的に削減すべき作業として定義しています。Toilを放置するとエンジニアの時間がどんどん消費され、本来やるべき信頼性向上への投資ができなくなります。

この記事では、Toilの定義・計測方法・削減アプローチ・AWSでの実践例を解説します。

この記事でわかること
– Toilとは何か(Google SRE本の定義と6つの特徴)
– Toilを見極める判断基準
– Toilの量を計測する方法と「50%ルール」
– Toil削減の3つのアプローチ
– AWSでの具体的なToil削減実例
– Toil削減を組織として継続的に回す仕組み


Repetitive manual tasks piling up on an engineer's desk vs automated pipeline running smoothly, cont

Toilとは何か

Google SRE本の定義

ToilはGoogleのSREブック(Site Reliability Engineering)で提唱された概念です。原文の定義は以下のとおりです。

“Toil is the kind of work tied to running a production service that tends to be manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.”

日本語にすると:「本番サービスの運用に付随する、手動・繰り返し・自動化可能・戦術的・将来的価値がなく、サービスの成長に比例して増える種類の作業」

重要なのは、「忙しい」「大変」な作業がすべてToilというわけではないという点です。難易度が高い問題解決・システム設計・コードレビューは負荷が高くても「Toilではない」とされます。Toilかどうかは性質によって決まります。

Toilの6つの特徴

Google SRE本はToilを以下の6つの特徴で定義しています。

特徴 説明
① 手動(Manual) 自動ではなく人間が直接操作する必要がある
② 繰り返し(Repetitive) 同じ作業を何度も繰り返す
③ 自動化可能(Automatable) 機械やスクリプトに任せられる
④ 戦術的(Tactical) 割り込みで発生し、計画的に進めにくい
⑤ 永続的価値がない(Devoid of enduring value) やっても翌日にはまた同じ状態に戻る
⑥ 線形増加(Scales linearly) サービス規模が大きくなるほど作業量が増える

この6つのうち複数に該当する作業は、Toilとして削減対象にすべきです。


Toilを見極める判断基準

「やらなかったら何が起きるか?」で判断する

Toilかどうかを現場で素早く判断するには、「この作業をやらなかったら何が起きるか?」を考えます。

  • 「サービスが壊れる・障害になる」 → Toilではなく本質的な作業(ただし、なぜ手動なのかは問い直すべき)
  • 「翌日には誰かが同じことをまたやる」 → Toil
  • 「ログが取れないだけで実害はない」 → Toil
  • 「やらないと誰かがクレームを言うが、ビジネス価値は薄い」 → Toil

よくあるToilの例

現場でよく見かけるToilを具体的に挙げます。

監視・運用系
– 毎朝手動でログを確認してSlackに貼る
– CloudWatchメトリクスを毎週スクショしてレポートに添付する
– アラートを確認して「対応不要」とコメントし続ける(不要なアラートを止めていない)

インフラ操作系
– デプロイ前後にSSH接続して手動でサービス再起動する
– 毎月AMIのバックアップをコンソールから手動実行する
– 証明書の期限をスプレッドシートで管理して手動で更新する

開発支援系
– 新メンバーのAWSアカウントをコンソールで毎回手動作成する
– ステージング環境へのデプロイをSlackコマンドではなくコンソールで都度実行する


Toilの量を計測する

時間ベースで計測する

Toilが「どのくらい存在するか」を把握するには、エンジニアの作業時間に占めるToilの割合を計測します。

計測の手順:

  1. 1週間または2週間、作業ログをつける(時間単位で何をしたかを記録)
  2. 各作業をToilか否かに分類する
  3. Toilの合計時間 ÷ 総作業時間 を計算する
例)1週間の作業ログ(エンジニアAさん)

設計・実装: 12時間
コードレビュー: 4時間
ミーティング: 6時間
手動ログ確認・Slack転記: 3時間  ← Toil
手動バックアップ操作: 1時間    ← Toil
アラート確認(対応不要): 2時間 ← Toil

Toil割合 = 6時間 / 28時間 ≒ 21%

Google SREの「50%ルール」

Google SRE本は「SREの作業時間のうちToilが50%を超えてはならない」という指針を示しています。

“If you’re spending more than 50 percent of your time on toil, that’s a sign you’ve lost the balance between toil and engineering work.”

SRE本来の価値は「信頼性エンジニアリング」——システム設計の改善・自動化・モニタリング強化にあります。Toilが50%を超えると、SREが「運用オペレーター」になってしまいます。

Toilが50%に近づいているチームは、それ自体を問題として組織に見せる必要があります。


Toil削減の3つのアプローチ

アプローチ① 自動化(Automation)

最も直接的な削減方法です。繰り返し発生する手動作業をスクリプト・Lambdaなどで自動化します。

効果が高い自動化対象の見つけ方
– 「毎日・毎週必ずやる」作業
– 「やり方が決まっていて、誰でも同じ結果になる」作業
– 「5分でできるが毎週あるので年間40時間消えている」作業

自動化の優先順位は「頻度 × 所要時間 × 人数」で計算します。年間1時間しか使わないToilを自動化するより、毎日5分かかるToilを自動化する方が費用対効果が高いです。

アプローチ② セルフサービス化(Self-service)

依頼を受けるたびに対応するTolilは、依頼者が自分でできる仕組みを作ることで削減できます。

例:
– 「開発者がステージングデプロイをSlackコマンドで実行できるようにする」
– 「新環境のS3バケット作成をセルフサービスポータルから申請・自動作成できるようにする」
– 「Runbookをドキュメント化して、誰でも作業を実行できるようにする」

セルフサービス化は「自分が対応しなくていい」ことが目的ではなく、「依頼〜対応のリードタイムをゼロにする」ことが目的です。

アプローチ③ サービス設計の改善

ToilはサービスやシステムのDesign上の問題から発生することがあります。この場合は自動化ではなく、根本的な設計を変えることが解決策になります。

例:
– 毎回手動でサービス再起動しないと回復しない → ヘルスチェック + Auto Healingを実装する
– 証明書を手動更新している → AWS ACMを使って自動更新に変える
– 毎週ログを手動で集計している → CloudWatch Logs Insightsで定期クエリを実行する


AWSでのToil削減実践例

AWS Lambda + EventBridge:定期タスクの自動化

「毎朝決まった時間に実行する」系のToilはEventBridge(旧CloudWatch Events)+ Lambdaで自動化できます。

# Lambda関数例:毎朝9時にCloudWatchメトリクスをSlackに通知する
import boto3
import json
import urllib.request

def lambda_handler(event, context):
    cw = boto3.client('cloudwatch')

    # メトリクス取得
    response = cw.get_metric_statistics(
        Namespace='AWS/EC2',
        MetricName='CPUUtilization',
        Dimensions=[{'Name': 'InstanceId', 'Value': 'i-xxxxxxxxxx'}],
        StartTime='...',
        EndTime='...',
        Period=3600,
        Statistics=['Average']
    )

    avg_cpu = response['Datapoints'][0]['Average']

    # Slack通知
    payload = {'text': f'昨日のCPU平均: {avg_cpu:.1f}%'}
    req = urllib.request.Request(
        'https://hooks.slack.com/services/...',
        data=json.dumps(payload).encode('utf-8')
    )
    urllib.request.urlopen(req)

EventBridgeのcronルールで「毎朝9:00 JST」に起動するよう設定するだけで、手動確認・Slack転記という毎日のToilがゼロになります。

// EventBridge Scheduleルール(JST 9:00)
{
  "ScheduleExpression": "cron(0 0 * * ? *)"
}

AWS Systems Manager Automation:定型運用作業の自動化

インスタンスの再起動・パッチ適用・バックアップなどの運用タスクは、Systems Manager Automationで標準化できます。

AWSが用意しているRunbook例:
AWS-RestartEC2Instance:EC2インスタンスの安全な再起動
AWS-CreateImage:AMIバックアップの作成
AWS-PatchInstanceWithRollback:パッチ適用(失敗時に自動ロールバック)

# CLIでAutomationを実行する例
aws ssm start-automation-execution \
  --document-name "AWS-CreateImage" \
  --parameters "InstanceId=i-xxxxxxxxxx,NoReboot=false"

EventBridgeと組み合わせて定期実行にすることで、「毎月1日にバックアップを手動で取っていた」というToilを完全に排除できます。

AWS Certificate Manager (ACM):証明書の手動更新を排除

SSL証明書をスプレッドシートで期限管理し、手動で更新していた場合、ACMに移行することでToilをゼロにできます。

ACMで発行した証明書は:
90日前から自動的に更新処理が始まる
– ALBやCloudFrontに紐付けると更新作業が不要になる
– 期限切れ直前のアラートをEventBridgeで飛ばすことも可能

# CloudFormationでACM証明書を管理する例
Resources:
  SiteCertificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: example.com
      ValidationMethod: DNS
      SubjectAlternativeNames:
        - "*.example.com"

Terraform / CloudFormation:インフラ構築作業の自動化

「新しい環境を作るたびにコンソールを開いてポチポチ設定する」のは典型的なToilです。IaCで定義しておくことで、コマンド1つで同じ環境を再現できます。

# Terraform で環境を複製する
terraform workspace new staging
terraform apply -var-file="staging.tfvars"

IaCはインフラ構築のToilを削減するだけでなく、設定ドリフトの防止・レビュー可能性の向上・障害時の素早い再構築にも効果があります。


Toil削減を組織として継続的に回す仕組み

Toil計測を定期化する

Toilは「いつの間にか増える」性質があります。新しいサービスが加わるたびに手動運用が増え、気づいたら工数の半分を占めているという事態が現場では頻繁に起きます。

対策として、四半期に1回のToil計測を習慣にすることを推奨します。

チームで2週間の作業ログをつけ、ToilとNon-Toilに分類してパーセンテージを出すだけです。この数字を「Toil率」として可視化し、チームのOKRやスプリントの振り返りで共有します。

ポストモーテムとToil削減を連動させる

インシデントの振り返りで「なぜこの対応に時間がかかったか」を分析すると、Toilが根本原因になっているケースが多くあります。

  • 「Runbookがなくて手順を毎回調べていた」→ Runbook整備
  • 「証明書期限を手動で確認していて気づかなかった」→ ACM移行
  • 「デプロイを手動で実行していてオペミスした」→ CI/CD整備

ポストモーテムのアクションアイテムとしてToil削減タスクを登録し、スプリントに組み込む流れを作ることで、インシデントが自動化のトリガーになります。

エンジニアリング時間の確保

Toilを削減するには「削減するための作業時間」が必要です。Toilが多すぎると削減作業をする余裕がない、という悪循環に陥ります。

Google SREが実践する指針:
SREの20%の時間をToil削減・自動化プロジェクトに充てることをマネジメントと合意する
– スプリントに「Toil削減チケット」を1本以上含める
– 新機能開発と信頼性改善の比率をチームとして定期的に見直す

Toilを削減するために時間を使うことは、中長期的に見てチーム全体の生産性に直結します。


まとめ:ToilはSREが設計で解く問題

Toilの削減ポイントをまとめます。

項目 チェックポイント
定義の理解 手動・繰り返し・自動化可能・線形増加の4条件で判断
計測 作業ログから「Toil率」を四半期ごとに算出している
50%ルール SREのToilが50%を超えていないか確認している
自動化 「頻度×時間×人数」で優先順位をつけて着手している
セルフサービス化 依頼ベースの手動作業を依頼者が自己完結できる仕組みにしている
設計改善 Auto Healing・ACM・IaCなどでToilの発生源を根絶している
組織化 ポストモーテムとスプリントにToil削減を組み込んでいる

Toilは「ちゃんとやっている証拠」でも「頑張っている結果」でもありません。設計の隙間から生まれる余分なコストです。 SREはこれを意識的に計測し、削減し続けることで、本来のエンジニアリング——信頼性向上・アーキテクチャ改善・インシデント予防——に時間を使えるようになります。


Toil削減スキルを体系的に学ぶには

Toil削減・自動化設計・SLO運用などのSREプラクティスは、AWSのLambda・Systems Manager・CloudWatchを組み合わせながら実践的に習得するのが最も効果的です。

現役SREが設計した実践コースで、CloudWatchを使った監視設計・自動化の基礎から応用まで体系的に学べます。

📌 AWS×SRE入門〜CloudWatchで学ぶ監視設計の基礎〜を見てみる


関連記事

📌 インシデント対応フローの設計|検知から復旧・振り返りまでSRE流に解説

インシデント対応フローの設計|検知から復旧・振り返りまでSRE流に解説
本番環境で障害が起きたとき、「誰が何をすべきか」が曖昧なまま動いていませんか。 アラートが飛んでくる。Slackが騒ぎ始める。でも初動で5分・10分と時間を無駄にし、気づいたら「誰かが対応してると思ってた」という状況——これはフローが設計さ...

📌 ポストモーテムの書き方完全ガイド|blameless文化を現場に根付かせる5つのポイント

ポストモーテムの書き方完全ガイド|blameless文化を現場に根付かせる5つのポイント
障害が起きるたびに「誰が悪かったのか」を探す振り返りになっていませんか。 同じような障害が何度も繰り返される。振り返り会議が「責任の押し付け合い」になってエンジニアが発言しなくなる。形式的にドキュメントは書くが、アクションアイテムが誰も実行...

📌 オンコール設計のベストプラクティス|疲弊しない体制の作り方をSRE視点で解説

オンコール設計のベストプラクティス|疲弊しない体制の作り方をSRE視点で解説
オンコール対応が「特定の人に集中する」「深夜対応が続いて疲弊する」状態になっていませんか。 「またアラートが来た」「今週で3回目の深夜対応だ」「ちゃんと引き継ぎが完了していなくて障害の詳細を知らないまま対応しなきゃいけない」——こういった状...

コメント

タイトルとURLをコピーしました