経営者が交代したサービスや、開発者が離任したシステムを引き継ぐ依頼が定期的にあります。
ドキュメントは無い、作った人にも聞けない。この状態から始めるときの手順です。
0. コードより先に「止まらない状態」を確認する
いきなりコードを読み始めたくなりますが、順番が逆です。
まず今動いているものが止まらないかを確認します。
systemctl list-units --type=service --state=running # 何が常駐しているか
systemctl is-enabled <service> # 再起動で自動復帰するか
crontab -l ; ls /etc/cron.d/ # 定期処理の有無
df -h ; free -m # ディスクとメモリの余裕
引き継ぎ案件では Restart= が設定されていない、
enable されていない(サーバー再起動で上がってこない)ケースが本当に多いです。
ここを先に直すだけで、引き継ぎ直後の事故がほぼ無くなります。
バックアップも同様です。「取れているつもり」で実は失敗し続けている、
あるいは復元したことが一度もないのが定番です。必ず復元まで試します。
1. 依存とバージョンを固定する
pip freeze > requirements.lock.txt
python -c "import django; print(django.VERSION)"
まず現状を凍結します。EOL を過ぎていても、この時点では上げません。
仕様が分からないまま上げると、壊れたときに原因の切り分けができなくなります。
2. モデルから読む
Django ならビューより先に models.py です。
テーブル構造とリレーションが分かれば、そのサービスが何を扱っているかは大体つかめます。
python manage.py graph_models -a -o schema.png # django-extensions
図にして眺めると、中心にあるモデル(=サービスの本体)がすぐ分かります。
3. URL から機能の全体像を出す
python manage.py show_urls # django-extensions
画面数と機能の粒度が一覧で出ます。
このリストをそのまま引き継ぎドキュメントの目次にしています。
4. 危ない箇所を先に洗い出す
grep -rn "DEBUG = True" .
grep -rn "SECRET_KEY" . # ソースに直書きされていないか
grep -rn "ALLOWED_HOSTS" .
python manage.py check --deploy
check --deploy は引き継ぎ初日に必ず流します。
HTTPS 関連やクッキー設定の抜けが一覧で出るので、優先度をつけやすくなります。
5. ここまでやってから見積もる
この4ステップ(半日〜2日程度)を終えてから、
「何ができて、何が危なくて、どこから直すべきか」をお伝えするようにしています。
先に見積もりを出してしまうと、後から必ず想定外が出てきます。
調査そのものを最初の小さな依頼として区切るのが、結局お互いにとって安全でした。
まとめ
- 止まらない構成か(自動復旧・自動起動・バックアップの復元)
- 依存を凍結(この時点では上げない)
- モデル → URL の順で全体像を把握
check --deployで危険箇所を洗う- ここまで終えてから見積もる