DIGGLEエンジニアのkishikawaです。最近業務でバグの原因調査を行う機会が多くありました。調査タスクに実際に取り組んでいく中で、実装タスクとは違った考え方・心構えが必要だと感じましたのでブログ記事として書いてみようと思います。
調査タスクに苦手意識、ないですか?
正直なところ私はありました(汗)。具体的には次の点です。
時間を浪費している感覚に陥ってしまうこと
調査タスクにおいて、必ずしも立てた仮説通りに進むとは限らず、ときには戻って調べ直すということも発生しうるので、間違っていた仮説の検証に時間を使ったことを浪費だと感じてしまうことがあります。
あまり詳しくない技術スタックが絡むとよくわからないまま解決できないのではという不安
当然なことかもしれませんが、得意な技術スタックと比較すると調査するのに時間がかかってしまうので、それで苦手に感じてしまうことがありました。
何を意識しているか
苦手意識に対して業務では次のことを意識するようにしています。
他の人の目に見える場所に、調査状況がわかるように簡単なメモ (確認したlogやソースコード、自分の考え)をアウトプットする
目に見えるところというのがポイントで、これによってチームに状況を共有しやすくなる点や、悩んだときに相談しやすくなる点があります。
また社内の他のエンジニアもメモを残すということはよくやっていますが、他の人のいいやり方を真似しやすい、いい文化だなと思っています。
どうしても分からなければ素直に聞く
自分でやってみてわからなければ素直に聞く他ないので聞きます。
私の場合の実例
調査を進めるにあたって、やみくもに進めるのではなく、仮説を立てて検証していくように進めるのがいいと聞きます。
今回いくつかの調査タスクの中で、仮説を立てる前提を取り違えそうになったことにより、ハマりかけたことがありました。
具体的には次のようなことがありました。
あるデータインポート処理が、バルクインポートの際、データベースのUnique制約(複合キー)によるエラーで失敗していました。複合キーを構成する一部のキーは、元データ上の文字列からキーに変換されるのですが、その文字列が似ているものが複数あり、一見すると文字列からキーへの引当に失敗したために発生した問題のように見えました。しかし実際は違いました。複合キーの一部は最終的なバルクインポート処理の前でまとめて作成し、メモ化しているのですが、インポートに関連するある設定が使用されていると、まとめてキーを作成する処理よりも前にキーを作成する処理が実行されてしまい、その結果メモ化の内容に一部重複が起こってしまったことが原因でした。
この事象の調査が解決できたポイントは、事象を再現し理解することでした。その結果、まとめてキーを作成する処理よりも前にキーを作成する処理が実行されてしまうという違和感に気づくことができたのです。
調査タスクは調査開始時点でわかる情報にばらつきがあります。現象が再現される条件までほとんど特定されていることもあれば、調査を進めてみないと、実際にどんなことが起こっていたか分からないこともあります。
今回の調査では、Unique制約によるエラーは事実ですが、入力データ自体に重複があるというのは前提事実ではなくあくまでも仮説であり偽でした。
どこまでが事実で、どこからが仮説なのか意識しようと改めて思いました。
調査タスクは楽しい!
調査タスクは難しいことも多いですが、以下にあげるような点もあって非常にやりがいのあるタスクだと思います!
原因がわかると達成感がある
もちろん原因がわかることはゴールではなく、次の対処タスクのスタートですが、わからなかったことを解決することの達成感が得られます。
ソースコードやログなどを深く読むことで理解が深まる
苦手意識についての段落に、よく知らない技術スタックが絡むと不安があると書きましたが、裏を返すと知らないことを知る機会になることだと思っています。
実例として紹介した事例においては、当初Unique制約を疑うあまりInsert文の実行自体を詳しく調べようとして、PostgreSQLのトランザクションの制約検査のタイミングを設定する SET CONSTRAINTS
というものがあることを知りました。
またRubyのコードで run_callbacks(:save)
を呼び出すと対象モデル自体は保存されないが、関連モデルの保存処理が実行されることがあることも知りました。
そして今回処理を詳しく追ったことで、どのタイミングでメモ化していて、いつメモ化した内容の削除をしているかの実装内容について詳しく理解できました。
課題解決につながったのもありますが、こういった理解が深まったこともあり取り組んでよかったと感じています。
We’re hiring!
DIGGLEではともにプロダクトを開発・運用をしてくれるエンジニアを大募集中です。 少しでも興味があれば、ぜひ下記採用サイトからエントリーください。 カジュアル面談も実施しているので、気軽なお気持ちでご応募いただければと思います!