はじめに
本番環境でのデバッグは、間違いなくミッションクリティカルなプロセスです。事前の準備、優れたデプロイメントの慣行、100%のコードカバレッジ、あるいは手動テストを行っていたとしても、それは常に起こり得ることです。
多くの場合、本番環境でバグが発生すると、最初に浮かぶのはそのバグをローカルで再現し、修正して再度デプロイするという発想です。しかし、問題がソースコードに起因するものでなかったらどうでしょうか。たとえば、マシン上で使われているサービスが原因である場合もあります。
本番環境でのデバッグが難しいのは、開発時には開発者が環境を完全にコントロールでき、シナリオもよくわかっており、コードのどこにでもブレークポイントを置いてアプリケーションの状態を止めて調べる方が簡単だからです。
さらに、開発用データベースをダンプして、特定のバグを取り除くこともできます。
そのため、問題のシナリオが発生した際に、本番環境で安全かつシンプルにデバッグできるプロセスを持っておくことは非常に重要です。
なぜ本番環境でデバッグするのか?
とはいえ、なぜ本番環境でデバッグするのでしょうか。実は、いくつかの利点があります。
- 開発スピード: 根本的な問題を見つけて修正するための適切なツールがあれば、ローカルでエラーを再現する必要がなくなり、開発速度の面で大きなアドバンテージになります。これは、開発者がサーバーに直接アクセスして行うリモートデバッグ(詳しくは後述)によって実現できます。
- 迅速な問題解決: 多くの人々がテクノロジーサービスを利用する世界では、わずか10分間のダウンタイムでも多くの顧客と収益を失うのに十分です。効率的なデバッグ戦略を持つことで、できる限り早く問題に対処でき、ビジネスにとって多くの価値を守ることができます。
5つの安全対策のヒント
本番環境でデバッグする必要がある場合、以下のヒントに従うとよいでしょう。
- ノンブロッキングなデバッガーを使う: 本番環境でデバッグする際は、マシン上で稼働しているサービスをブロックしないことが重要です。サービスをブロックしてしまうと、ユーザーやクライアントがサービスを利用できなくなるだけでなく、ユーザー体験にも悪影響を及ぼします。
- ロギング: 本番環境で素早くデバッグする最良の方法のひとつがログを取ることです。しかも効果的にログを取ることが重要です。ビジネスの内容によっては、ロギングによってサービス上で発生しているイベントを素早く把握し、問題を特定できるようになります。
- デバッグ範囲を定義する: たとえば、Dockerコンテナ内でアプリケーションを稼働させているサーバーがある場合、バグの発生元となっているサービスを実行しているコンテナのみをデバッグ対象にしたいはずです。
こうすることで、他の重要なサービスを中断させてしまうリスクを減らせます。
たとえばSentryやBugsnagは、問題を素早く特定するために解析できるトレースバックを提供してくれます。状態やリクエストなど、さらに多くの情報も得られます。
remote.itでどうデバッグするか?
ロギング
remote.itでは、マシン上で発生しているイベントを記録したイベントログや接続ログ、さらにはデバイスとそのステータスの一覧など、多くの情報にアクセスできます。
これらの情報は、マシンが実際にどのように稼働しているかをより深く理解するうえで非常に有用です。たとえば問題を抱えている可能性のあるマシンを特定することで、デバッグの範囲を絞り込み、より速く簡単に対応できるようになります。
バグを見つけるために多数のシステムやマシンを行き来しなければならないというのは、問題対応のストレスをさらに増やすだけです。
SSH
本番環境でデバッグしようとしているのであれば、おそらくマシンへのアクセスが必須になるでしょう。remote.itは、SSHキーを管理する必要もなく、単一の有効期限付きリンクを通じてマシンへの接続を簡単にする手助けをします。
これにより、マシンへ素早くアクセスできるだけでなく、メールアドレスを使うだけでチームの他のメンバーにこれらのリソースへの権限を付与することもできます。
そして最大のメリットはセキュリティです。このアクセスを実現するのにポートフォワーディングは一切必要ありません。つまり、ハッカーに対する攻撃対象領域が存在しないということです。
サービスの稼働状況
remote.itを使えば、デバイスのステータスなどの情報にアクセスできます。
これは非常に便利です。デバイスの1台がダウンした際に通知を受け取れるからです。さらにWebhookを設定すれば、ニーズに応じてより詳細な情報を含むイベントを受け取ることもできます。
まとめ
バグのないアプリケーションを顧客に届けることは、決して完璧にはできないプロセスです。開発やテストの段階で見落とされたニュアンスが原因で、予期しないシナリオが発生することは今後もあり得ます。
結局のところ、本番環境でのデバッグはひとつのことに懸かっています。それはデータです。価値あるデータを多く持っていればいるほど、問題を解決するスピードは速くなります。
チーム内に本番環境デバッグの戦略を持つことは必須です。そして、remote.itをデバッグツールの一部として活用することで、その取り組みは間違いなく加速するでしょう。