ふくふくHukuhuku Inc.
EP.01Handover 14分公開: 2026-05-11

データエンジニアが離任するときに解除・クリアするべきもの完全ガイド ── CLI クレデンシャル / git / SaaS トークンの綺麗な始末

業務委託・受託・転職で前職場から離れるとき、ローカルマシンに残るクレデンシャルや設定が「うっかり事故」の温床になる。AWS / GCP / Azure CLI、git config の email、Docker registry、kubectl、Keychain、ブラウザ ── データエンジニアが本当に消すべき項目とその手順を、検出スクリプト付きで体系化。

#離任#クリーンアップ#セキュリティ#業務委託#クレデンシャル
シェア

業務委託・受託・転職 で職場を離れるとき、サーバ側のクレデンシャル失効化 (revoke) はすぐ思いつく。しかし ローカルマシン側の整理 ── git の email、AWS/GCP の CLI 設定、kubectl の cluster、Docker のレジストリ、ブラウザの SSO セッション、Keychain に保存されたパスワード ── は意外と見落とされやすく、「うっかり事故」の温床 になる。本稿は、データエンジニアが離任時にやっておくべきローカルクリーンアップを 検出スクリプト + 個別コマンド で体系化する。

1. なぜローカル整理が必要か ── 3 タイプの「うっかり事故」

  1. 1個人 commit に元職場メアドが残る: git の global email が前職のままだと、退職後に書いた個人 OSS / 自社 repo の commit author が元職場メアドになる。公開 repo なら GitHub 上で誰でも見える
  2. 2CLI 補完で前職プロファイルが選ばれる: `aws --profile <Tab>` や `gcloud config configurations list` で旧プロファイルが残っており、深夜の作業で誤って前職リソースに接続・破壊する
  3. 3監査ログに離任後の自分の操作が残る: ブラウザの SSO セッションが切れていない、AWS SSO のキャッシュが残っている等で、CloudTrail / GCP Audit Logs / GitHub Audit Logs に「離任後の自分」が記録され、後から責任を問われかねない

2. 作業の全体像

#対象代表的な保存場所リスクの方向
1git config`~/.gitconfig`, repo の `.git/config`個人 commit に職場メアドが残る
2GitHub PAT / SSH / gh CLI`~/.ssh/`, gh の token store離任後の repo アクセス
3AWS CLI / SSO`~/.aws/`, `~/.aws/sso/`誤アクセス・操作監査
4gcloud / GCP`~/.config/gcloud/`誤アクセス・操作監査
5Azure CLI`~/.azure/`誤アクセス・操作監査
6Docker registry`~/.docker/config.json`誤 push、トークン漏洩
7kubectl`~/.kube/config`誤 apply / delete
8DB クライアント`~/.pgpass`, `~/.my.cnf`, BQ / Snowflake 設定誤接続
9SaaS API トークンshell rc, `~/.env*`, 各リポの `.env`Slack / Linear / Notion / OpenAI / Anthropic etc
10VPN / SSH`~/.ssh/config`, OpenVPN/WireGuard プロファイル誤接続
11macOS KeychainKeychain Access の Internet password / Application passwordブラウザ・アプリの自動ログイン残存
12ブラウザChrome プロファイル、Cookie、IndexedDBSSO セッション残存
13MFA / Authenticatorスマホアプリ (Google / Microsoft Authenticator / Authy / 1Password / Okta Verify / Duo Mobile)手動のみ。push 通知 / 紛失時の事故
14SSO / Security KeyOkta / Auth0 / Azure AD / Google Workspace の登録デバイス、YubiKey 登録先離任後の認証残存
15ローカルファイル`~/Projects/<元職場>`, ダウンロード、Documents情報持出に該当する場合あり
順序の鉄則: 「外向きに事故るもの」から先に

まず git config を個人メアドに戻し、PAT / SSH / 各種 CLI を revoke する。これで「離任後に動かしてしまう」事故の経路が大幅に減る。ローカルファイルの掃除や Keychain は後回しでよい (事故が起きにくい)。

3. git config を個人メアドに戻す

最も多発する事故が「離任後の個人 commit が元職場メアドで残る」。global config を確認・修正する。

git config を確認・個人メアドに戻す
Bash
# 現在の global 設定を確認git config --global user.namegit config --global user.email
# 個人メアドに戻すgit config --global user.name "Your Personal Name"git config --global user.email "you@example.com"
# 個別 repo に local config を持つものがないか確認# (~/Projects 配下の全 repo を走査)find ~/Projects -name '.git' -type d 2>/dev/null | while read d; do  repo=$(dirname "$d")  email=$(git -C "$repo" config --local user.email 2>/dev/null)  if [ -n "$email" ]; then    echo "[$repo] local email: $email"  fidone
includeIf でディレクトリ別の自動切替

複数案件を並走するなら git config の `includeIf` が便利。`~/.gitconfig` に `[includeIf "gitdir:~/work/clientA/"] path = ~/.gitconfig-clientA` と書き、案件ディレクトリごとに別の email / signing key を自動適用できる。離任時はそのディレクトリと `.gitconfig-clientA` を削除すれば完了。

4. GitHub: PAT / SSH キー / gh CLI / GPG

  • Personal Access Token (PAT): GitHub → Settings → Developer settings → Personal access tokens で 元職場 org 用に発行したものを全て revoke
  • SSH key: GitHub → Settings → SSH keys で 元職場専用に発行したものを削除。`~/.ssh/` 配下の `id_*_clientA` のような key file 自体も削除可
  • Deploy keys: 個別 repo の Settings → Deploy keys から削除 (admin 権限が要る)
  • gh CLI: `gh auth logout --hostname github.com` で hostname 別にログアウト (個人 token は残せる)
  • GPG/SSH signing key: 元職場用に発行したものは GitHub から removed + `gpg --delete-secret-key` でローカルからも削除
  • Codespaces / Actions secrets: 個人で持つものなし、org 側で revoke 任せ
ローカルの SSH キーと .ssh/config の確認
Bash
# 鍵ファイル一覧 (公開鍵だけ表示、秘密鍵の中身は出さない)ls -la ~/.ssh/
# .ssh/config の中で元職場のホスト名を grepgrep -E "Host |HostName |User " ~/.ssh/config 2>/dev/null
# 削除する場合 (例: clientA 用)# rm ~/.ssh/id_ed25519_clientA ~/.ssh/id_ed25519_clientA.pub# ssh-add -d ~/.ssh/id_ed25519_clientA  # ssh-agent からも削除

5. AWS CLI / SSO

AWS は configure ファイル + SSO キャッシュ + aws-vault キーチェーン + ECR ログインの 4 系統。全部見る。

AWS のクレデンシャル/プロファイルを列挙
Bash
# プロファイル一覧 (~/.aws/credentials, ~/.aws/config)aws configure list-profiles
# 各プロファイルの中身は ~/.aws/config と credentials にcat ~/.aws/config 2>/dev/null | grep -E '^\[|sso_|region|role_arn'cat ~/.aws/credentials 2>/dev/null | grep '^\['
# SSO キャッシュ (退社後も数時間有効なことがある)ls -la ~/.aws/sso/cache/ 2>/dev/null
# aws-vault を使っている場合 (macOS Keychain)aws-vault list 2>/dev/null
AWS の削除コマンド (個別判断で実行)
Bash
# 1. アクティブな SSO セッションをログアウトaws sso logout --profile clientA
# 2. configure からプロファイルを削除 (sed で section 抜き取り)#    自動 sed はリスクがあるので手動編集を推奨#    エディタで開く:$EDITOR ~/.aws/config$EDITOR ~/.aws/credentials
# 3. SSO キャッシュを物理削除rm -rf ~/.aws/sso/cache/
# 4. aws-vault のキーチェーン項目削除aws-vault remove clientA
# 5. ECR のログイントークン (~/.docker/config.json の auths) も忘れずにdocker logout 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

6. Google Cloud / gcloud

gcloud の設定とクレデンシャルを確認
Bash
# 設定中のプロファイル (configurations) 一覧gcloud config configurations list
# ログイン中のアカウント一覧gcloud auth list
# Application Default Credentials の存在確認ls -la ~/.config/gcloud/application_default_credentials.json 2>/dev/null
# 削除コマンドgcloud auth revoke you@clientA.com               # ユーザ認証 revokegcloud auth application-default revoke            # ADC revokegcloud config configurations delete clientA-prod  # configuration 削除
# キャッシュ全削除 (個人アカウントも消える点に注意)# rm -rf ~/.config/gcloud/

7. Azure CLI

Azure のサブスクリプション / アカウント整理
Bash
# 現在のアカウント一覧az account list -o table
# サインアウト (全アカウント)az logout
# 特定のテナントだけログアウトaz logout --username you@clientA.onmicrosoft.com
# 設定ファイルls -la ~/.azure/# 中身を捨てるなら:# rm -rf ~/.azure/

8. Docker / コンテナレジストリ

`~/.docker/config.json` の `auths` に各レジストリのトークンが暗号化されずに残る (Base64 のみ)。ECR / GHCR / GAR / Docker Hub に対して `docker logout` を打つ。

Docker レジストリ ログアウト
Bash
# 現在の auth 状態cat ~/.docker/config.json | python3 -m json.tool 2>/dev/null
# ログアウト (registry 単位)docker logout                                    # Docker Hubdocker logout ghcr.io                            # GitHub Container Registrydocker logout 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com  # ECRdocker logout asia-northeast1-docker.pkg.dev    # GARdocker logout clientA.azurecr.io                 # ACR

9. kubectl / Kubernetes

kubeconfig から元職場クラスタを削除
Bash
# 現在の context / cluster / user 一覧kubectl config get-contextskubectl config get-clusterskubectl config get-users
# 削除 (個別)kubectl config delete-context clientA-prodkubectl config delete-cluster clientA-prodkubectl config delete-user clientA-prod
# kubeconfig 全置換 (個人用だけ残す場合は別ファイルから KUBECONFIG=... で読込)
# OIDC キャッシュ (kubelogin / oidc-login)ls -la ~/.kube/cache/# rm -rf ~/.kube/cache/oidc-login/  # 退社後ログインしないなら削除

10. データベース・分析ツール

  • PostgreSQL: `~/.pgpass` を編集して元職場ホストの行を削除
  • MySQL: `~/.my.cnf` の `[client]` から password を削除
  • BigQuery: gcloud の ADC + `~/.config/gcloud/` (上記 6 と同じ)
  • Snowflake: `~/.snowsql/config` の connection を削除、`snowsql` の token cache (`~/.cache/snowflake/`) も
  • dbt profiles: `~/.dbt/profiles.yml` の元職場 target を削除
  • TablePlus / DBeaver / DataGrip: GUI クライアント側で接続を削除 (内部に保存される)
DB 設定ファイルの grep
Bash
# 元職場の host 名 (例: clientA, internal.clientA.co.jp) を grepgrep -rE "clientA|internal\.clientA" \  ~/.pgpass \  ~/.my.cnf \  ~/.dbt/profiles.yml \  ~/.snowsql/config \  2>/dev/null

11. SaaS API トークン (環境変数 / .env / shell rc)

Slack / Linear / Notion / OpenAI / Anthropic / Stripe / Sentry / DataDog / PagerDuty など、案件に応じて取得した API トークンが shell の rc ファイルや `.env` 系に散らばっている。

トークン系の環境変数・ファイルを検出
Bash
# zsh/bash の rc に書かれた export を grepgrep -nE "(TOKEN|KEY|SECRET|PASSWORD|PASS)\s*=" \  ~/.zshrc ~/.bashrc ~/.profile ~/.zshenv ~/.bash_profile 2>/dev/null
# ホームディレクトリ直下の .env 系ls -la ~/.env* 2>/dev/null
# プロジェクトディレクトリの .env (大量にあるので head で 20 件まで)find ~/Projects -name '.env*' -type f 2>/dev/null | head -20
# direnv の .envrc も忘れずにfind ~/Projects -name '.envrc' -type f 2>/dev/null | head

12. VPN / SSH config

  • OpenVPN: `~/Library/Application Support/Tunnelblick/Configurations/` (macOS) / Tunnelblick の GUI から削除
  • WireGuard: WireGuard アプリから tunnel を削除
  • Cisco AnyConnect: 設定ファイル + Keychain の証明書
  • SSH config: `~/.ssh/config` から `Host clientA-*` 等を削除、`~/.ssh/known_hosts` の bastion entry も `ssh-keygen -R hostname`

13. macOS Keychain (Mac の人向け)

ブラウザの自動入力やアプリの認証 token がここに残る。Keychain Access.app で検索するか、`security` コマンドで grep。

Keychain から元職場関連を grep
Bash
# Internet password (ブラウザ等) を検索security dump-keychain login.keychain-db 2>/dev/null | \  grep -E '"srvr"|"acct"|"svce"' | \  grep -i clientA
# 削除 (1 件ずつ) ── 慎重に# security delete-internet-password -s clientA.atlassian.net# security delete-generic-password -s "clientA Slack"
Keychain の自動削除は禁止

Keychain には個人サービスのパスワードも混在する。自動 delete は絶対にやらない。Keychain Access.app で 1 件ずつ検索 → delete が安全。

14. ブラウザ (プロファイル分離 / SSO セッション)

個別 cookie を消すより、プロファイルごと削除する方が確実。元職場用に独立プロファイルを作っていた場合、それを丸ごと消せば cookie / 履歴 / 拡張機能 / 保存パスワード / 同期データが一括で消える。

  • Chrome: `chrome://settings/manage-profile` で元職場プロファイルを削除 (Cookie / 履歴 / 拡張 / 保存パスワード一括除去)
  • Edge: `edge://settings/profiles` で同様にプロファイル削除
  • Brave / Arc / Vivaldi: 各ブラウザのプロファイル管理から削除
  • Safari: macOS Sonoma+ の Workspace 機能 (プロファイル分離) で元職場 Workspace を削除。古い macOS なら Cookie / Website data を Domain 単位で削除
  • Firefox: Multi-Account Containers の Container 削除 + `about:profiles` でプロファイル削除
  • Google Workspace: `myaccount.google.com` → 「セキュリティ」→ 「お使いのデバイス」 で離任端末のセッションをサインアウト
  • Microsoft 365: `mysignins.microsoft.com` → 「最近のサインイン」 + 「デバイス」 確認、不要なものを削除
  • 個別 cookie 削除 (プロファイル残す場合): DevTools (F12) → Application → Storage → Cookies / IndexedDB / Local Storage を元職場ドメインで削除
「最初からプロファイル分離」が最強の予防策

新規案件に入ったタイミングで Chrome / Edge の専用プロファイルを作るのがお勧め。離任時に「プロファイル削除」だけで終わるので作業が桁違いに楽。複数案件並走時の cookie 混線・誤ログインも防げる。

15. MFA / Authenticator / SSO デバイス (手動のみ・忘れがち)

ここは CLI で検出できない。スマホアプリや 1Password 等の vault を 目視で開いて確認・削除する 必要がある。事故率は低いが、漏らすと「離任後も push 通知が来る」「紛失時に元職場アカウントへ侵入される」など面倒なことになる。

  • Google Authenticator / Microsoft Authenticator / Authy: スマホアプリで元職場の TOTP エントリ (AWS / GitHub / Okta / SSO 等) を長押し削除。Authy は Settings → My Account → Devices で離任端末を delete
  • 1Password / Bitwarden / LastPass: vault 内の元職場用パスワード + TOTP + Secure Notes を削除 (or 元職場 vault から退会)
  • Okta Verify: アプリ内で元職場アカウントを削除 (退会後も push 通知が届くケースあり)
  • Duo Mobile: 元職場のアカウントを app から remove (Account → 元職場 → ︙ → Remove)
  • YubiKey / Security Key (FIDO2): GitHub / Okta / AWS IAM / Google アカウント等で 元職場用に登録した key を deregister。物理 key 自体は残しても、サービス側登録を消す
  • Touch ID / Face ID for sudo: 自前 Mac で `sudo` 用に登録した biometric は残してよい (個人用継続)。元職場貸与 Mac は返却で完結
  • バックアップコード: 1Password / 物理メモ等で元職場サービスの backup code を保存していたら削除

16. ローカルファイル (機密情報の物理削除)

契約・NDA に従う。一般的には離任時に元職場関連ファイルの返却・削除が求められる。

  • `~/Projects/<元職場>`: コードベース。git remote から復元できる場合でも、ローカル消去が契約上の前提
  • `~/Downloads`, `~/Documents`: 議事録 / 仕様書 / 顧客データ。grep で漏れがないか確認
  • Slack ダウンロード / メール添付: 案件チャットからの DL ファイル
  • スクリーンショット: `~/Desktop`, `~/Pictures/Screenshots` 等。秘密情報を含むものは復元不能な方法で削除
  • ゴミ箱の物理消去: macOS は `rm` でも APFS のスナップショットに残る場合あり、SSD では `srm` も非推奨。論理削除で十分なケースがほとんどだが、契約上「完全消去証明」が求められるなら専用ツール

17. 検出スクリプト (まとめて列挙)

削除はせず、検出だけする スクリプト。出力を見て個別に削除コマンドを実行する。

完全版スクリプトを GitHub で配信中

本記事の検出スクリプトは github.com/hukuhuku-inc/field-notes-scripts で公開しています (MIT ライセンス)。以下のワンライナーで取得・実行できます ── `curl -fsSLO https://raw.githubusercontent.com/hukuhuku-inc/field-notes-scripts/main/engineer-handover/handover-detect.sh && chmod +x handover-detect.sh && KEYWORDS='clientA client-a.co.jp' ./handover-detect.sh`。Issue / PR で改善歓迎。

handover-detect.sh ─ 離任前の検出スクリプト
Bash
#!/usr/bin/env bash# handover-detect.sh: ローカルに残る元職場関連の設定を列挙する。# 削除はしない。表示された項目を人間が個別に判断して削除する。## Usage: KEYWORD=clientA ./handover-detect.shset -uo pipefailKW="${KEYWORD:-clientA}"
print_section() { printf "\n\033[1;33m=== %s ===\033[0m\n" "$1"; }
print_section "git config (global)"git config --global user.namegit config --global user.email
print_section "リポジトリ local email (~/Projects 配下)"find ~/Projects -name '.git' -type d 2>/dev/null | while read -r d; do  repo=$(dirname "$d")  email=$(git -C "$repo" config --local user.email 2>/dev/null)  [ -n "$email" ] && echo "[$repo] $email"done
print_section "AWS profiles"aws configure list-profiles 2>/dev/nullls -la ~/.aws/sso/cache/ 2>/dev/null | head -5
print_section "gcloud configurations / accounts"gcloud config configurations list 2>/dev/nullgcloud auth list 2>/dev/null
print_section "Azure accounts"az account list -o table 2>/dev/null
print_section "Docker registries (~/.docker/config.json auths)"python3 -c "import json, osp = os.path.expanduser('~/.docker/config.json')if os.path.exists(p):    d = json.load(open(p))    for k in (d.get('auths') or {}): print(' -', k)" 2>/dev/null
print_section "kubectl contexts / clusters"kubectl config get-contexts 2>/dev/null
print_section "DB 設定の KEYWORD grep"grep -rE "$KW" ~/.pgpass ~/.my.cnf ~/.dbt/profiles.yml ~/.snowsql/config 2>/dev/null
print_section "shell rc の TOKEN/KEY/SECRET 系 export"grep -nE "(TOKEN|KEY|SECRET|PASSWORD)\s*=" \  ~/.zshrc ~/.bashrc ~/.profile ~/.zshenv ~/.bash_profile 2>/dev/null \  | head -20
print_section "ホーム直下の .env 系"ls -la ~/.env* 2>/dev/null
print_section "プロジェクトの .env (~/Projects 配下、上位 20 件)"find ~/Projects -maxdepth 3 -name '.env*' -type f 2>/dev/null | head -20
print_section "SSH config の Host 行"grep -E "^Host |^HostName " ~/.ssh/config 2>/dev/null | head -20
print_section "Keychain で KEYWORD を含むエントリ (macOS)"if command -v security >/dev/null; then  security dump-keychain login.keychain-db 2>/dev/null \    | grep -E '"srvr"|"acct"|"svce"' \    | grep -i "$KW" | head -20fi
echoecho "完了。出力を見て、個別に削除コマンドを実行してください。"
スクリプトは検出 only

自動削除は絶対にやらない。個人プロファイルと業務プロファイルがファイル内で混在しているケースが多く、一括 sed / rm では事故が起きる。人間が見て、判断して、消す

18. クリーンアップ後の動作確認

  • git: 個人 repo に空 commit `git commit --allow-empty -m 'verify' && git log -1 --format='%ae'` で author が個人メアドであること
  • AWS: `aws sts get-caller-identity --profile clientA` でエラーが返ること
  • gcloud: `gcloud auth list` に元職場アカウントが無いこと
  • Docker: `docker pull ghcr.io/clientA/private-image` でログイン必須の error が返ること
  • kubectl: `kubectl get pods --context clientA-prod` で context not found
  • ブラウザ: 元職場の社内ツール URL を開き、ログイン画面に戻ること

19. 関連エピソード (今後の予定)

  • EP.02 (予定): 新しい案件にジョインするときのセットアップ ── git includeIf、案件別 AWS profile、ディレクトリ分離
  • EP.03 (予定): 複数案件を並走するときの権限分離 ── direnv / mise / aws-vault / kubectx
  • EP.04 (予定): 引き継ぎドキュメントの書き方 ── 依存サービス / 当番表 / 暗黙知の言語化

次の話

次回は 「新しい案件にジョインするとき」のセットアップを取り上げます。git includeIf、案件別 AWS profile、ディレクトリ分離、aws-vault、direnv ── 「最初に綺麗にセットアップしておけば、離任時の片付けも楽になる」 という観点で書きます。

シェア

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

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

シリーズの外も探す:

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

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

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