みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

だからメール送信する機能には関わりたくないのよね、というお気持ち

備忘。
戒めの意味を含めて記録しておく。
でも、半分は愚痴。

文中には一部フェイク入れています。

概要

お仕事で、ある操作を行った利用者に対してメールを送信する機能の新規追加/改修を行った。

その際に、いくつかの点でハマり、結果として想定よりも多くの対応時間を取られてしまった。

じゃあ、どういう点でハマったかいうと、主に以下の3点。

  • メールの文言が間違っている
  • メールが飛ばない
  • そもそも動作確認されていない

それぞれのケースの詳細を記しておく。

メールの文言が間違っている

こちら、既存のメールに新機能に関する文言を2-3行追加する簡単な作業...になるはずだったのですが...。

間違っていたんですよ... 修正元となるメール本文が(笑

修正対象の情報を頂いた時、「複数人で精査済み」「既存のメール文からの差分もわかるから」「少し多めに文章の言い回しを変えている箇所もあるから」という感じでした。

ただ、差分を見てみると、どうにも怪しげな修正内容がいくつか。

いや、複数人で精査したって言ってるし、言い回しも変えたって言ってるし... 何もお考えずにメール文言修正するか...いや、でもこの言い回し、別の機能で出すメール文になっているんだけど...

という感じで数分間の葛藤の末、差異を整理して依頼者へ確認。
すると、依頼者も判断ができず。
結果、精査した人たちに確認することに。

その後、驚きの一言。
参照先のメールがいくつか間違っていたので、もう一度、見直してきます

うん、知ってた(笑

ユーザ向けに出すメール文だったので「おかしな改修にならず助かった」と感謝はされた。
ただ、当初割り当てられていた改修工数は、確認も含めて2時間程度。
実際にかかった工数は精査/調整も含めて倍以上。
しかも、日付をまたぐ。

モヤモヤが湧き上がってきました。

メールが飛ばない

とあるバッチ機能で、ある条件に該当したユーザ宛にメールを送信する機能を作成。

メールが飛んでくるのを確認して、定期的に動作する設定を入れた。
しかし、ある時期を境に、メール送信がポツリと止まった。
だが、ログを見る限り、メールの作成は成功している。。。
不可思議。

メール送信自体は、あるクラウドサービスのメール送信サービスを利用していた。
この手のサービスにはありがちなのですが、一定数のメールを送りつけると、メールを送信できないようなったりする場合がある。
また、メール受信側がスパムと判定していればメールの受信はされない場合がある。
もしかして「この制限にひっかかったのか?」とも思ったが、他の機能からのメールは届く。

「なぜこの機能だけ...」と悩んでしばらく悩む。

ふと、メールが送信されなくなった時期に、バッチを動かすバッチ基盤が変わっていたなと気づく。 新しいバッチ基盤を確認すると、、、ビンゴ!

メールを飛ばさない設定になっていた。

どうやら、旧バッチ基盤から新バッチ基盤に移す際に、この部分の確認が漏れていたようで。
バッチ機能自体は動作していたので、バッチ基盤移行という視点では問題がなかったという感じ。

うーん、その通りではあるんだけど、やっぱりモヤモヤ。

そもそも動作確認されていない

とあるレガシーシステム*1へ、ある条件でメールを送信する機能を同僚が追加した。
なお、この機能のリリースはまだ先。

その後、仕様が一部変更となり、自分が引き継いで対応することになった。
仕様変更自体は大した者ではなかったで、ぱぱっと修正。
それでは動作確認を...としたら、想定と違う文面のメールが送信されてきた。

特定条件下の場合に付与される一文が、常に出力されている。。。

最初はテンプレートファイル中に入っていた分岐処理がバグってたのかと思ったがどうやら違う。

仕方なく、デバッグプリントを入れながら、デバッグ&動作確認。

ん?特定条件になるかどうかは、新規に作れられた内部APIの戻りを利用しているのね。
じゃあ、この内部APIの動作をSwaggerで確認して...よし!特定条件での判定結果が、True/Falseで戻されている。
あれ?でも、なぜか新機能では常にTrueで処理されている。
またしても不可思議な現象が。

...あれ、APIからのデータの受け取り方、おかしくない?
この受け取り方だと、APIの戻り値を正しく取得できていないぞ。

試しに、APIからの戻り値を正しく取得するように修正してみる。

...うまくいった。

でも、これって動作確認していればわかるよね。

機能作成者に聞いてみた。「動作確認した?」と。

回答は...まぁ、正しく動かなかったわけなので、そういうこと。

そこの前提を疑うのは、すぐにできなかったわ〜(涙

まとめ

この手の内容は、よくあることなのかもしれない。

後から思い出す分には笑話ですむが、作業しているタイミングでは悩まされるわけです。
実際、他にもやることてんこ盛りだったのに、この手のやつで想定以上の時間を取られてしまい進捗が著しくないと、「お前なんでそんな修正に時間かかってるの?」とみられるわけで...

出したプルリクが、「三時間かけて3行だった*2時の、なんとも言えないもどかしさ。

そんなわけで、タイトルの「だからメール送信する機能には関わりたくないのよね」というお気持ち表明につながりました。

ちゃんちゃん。

*1:テストコードがないという意味で

*2:実際には、3行のうち2行は大した時間もかけずに記述でき、残りの1行にまるまる時間を費やした