ウイルス性肺炎と診断されたエンジニアの約２か月の在宅勤務記。

# 序:某渡辺さんの手記を読んだ。
　4月1日実名公開の『[これで「軽症」と言うのか。新型コロナ感染で入院中、渡辺一誠さんの手記](https://forbesjapan.com/articles/detail/33415/1/1/1)』を読んだ。もちろん存じ上げない方だが六本木勤務らしい。いろいろと辛そう。。緊急宣言が出されることで、IT業界の方々も、これからいろいろな影響を受けることがあることだろう。
　ということで、参考になればと、参考情報として、2月下旬に自室で悶絶(もんぜつ)しつつも保健所で門前払いされたのち３週間後に、自費で受けたCTスキャンでウイルス性肺炎と診断された私(中年♂)のこの二月ほどを振り返るポエムを書くことにした。恥ずかしいのだけれども。。
　状況としては、病状が悪かったはじめの1月は在宅でいろいろとやらかした。回復後の1月弱で、いくつかを取り戻せたと思っている。勤怠については、(理解ある勤務先のおかげで)２か月間皆勤とさせてもらっている。

## (付記) CTによる診断と血液検査
(その他の検査での陽性反応を経て別途の投薬を受けるも)発熱してから１月たっても呼吸音がおかしいとのことで(通院4先目の病院で)CTスキャンをしてもらったところ、ウイルスが住み着く部位（以下のようなところらしい）に肺炎が残っているとのことで、ウイルス性肺炎と診断される(以下のような断面図を何枚か見ながら説明を受ける)。 => 免疫系のフルスキャン版の血液検査をするから、支払いヨロピクね、と、言われ、採血される。

![Image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16455/33c73cd9-7f61-8022-e617-8994c1e7b4d1.jpeg)
=>　医師から受けたアドバイスは割合と有り難かった。...結果、お金は減ったが、現在は完治と思われ。

## 今、なんとなく具合が悪い人へ。
...緊急なんちゃら宣言が出た今となってては、疑わしい体調であるとしても、コロナの検査に向かう際に業務が継続できる装備(PC/関連書籍等)を持参した上で、病院・保健所等へと向かうことをお勧めする。いったん検査に至るかもしれないラインと入ると、途中離脱は困難かと。


# はじまり
中年のデータエンジニアである私は、２月中旬に軽く発熱した。その後、数日在宅で過ごすことに。だいたいは布団にくるまり業務継続。毎日たらふく寝た後、遅れを取り戻そうと思っていた週末にさらに症状が悪化。日曜日にこれはまずいと思い、布団から「コロナ」と検索しその界隈に電話するも、よほどのことがない限りコロナのPCR検査をしてもらえない状況を知る。週明けからは電話自体がつながらず。...以下、委細略するが、動けるようになった後は、若干の発熱と逆の低体温に苦しむ状態が続く(要するに起きている間、たいてい、寒い)。あと、咳がないため、国の定める基準に微妙に届かず。

# 年度末のリリースを前にいくつかやらかした件と、反省記。
## ① デグレでリリース遅延

　体調はさておき、リリース予定は近づいている。一日に3時間くらいしか働かない頭で、残タスクをこなしつつ、単体テストで出たバグや指摘事項を直していく...体調が回復してから半月弱でリリースが迫る。受入環境でのデモ作成時で、バリデーション周りのデグレに気がつく。。。
　既にギリギリのタイミングであったため、平謝りし、リリース時期を週明けまで延期してもらう。落ち着いてみると、やらかしてました、私。

原因は、長年の私の癖。古にJavaを使っていた時代から、入力に対し、複雑なバリデーションをして、かつ、エラーレポートを出す際には、出てきたエラーは、コレクションにまるっと入れることにしていた。
つまり、バリデーション関数の返り値は、scalaの擬似コードとしてシーケンス(Seq)で書けば、

> ret = Seq("エラー理由1","エラー理由2"...)

といった風であり、Seqが空であれば、エラーなしとなる。はい、私は、ret.length == 0でチェックするのが癖なのでした（もちろん、バリデーション関数側では、retがnullとはならない手当てをしている）。

平謝りした翌朝、バリデーション周りのクソ長いコードをおそるおそる見てみると、`ret.length == 0`だったはずのコードの、一箇所が、`ret == 0`となっているではないですか。。。scalaではこの判定はコンパイルエラーとならず、常にfalseとなる。...デグレるわけだわ。
...私の同僚のコーダーには日本人はいないので、デグレ報告は、degradationではなく、どことなくregret(後悔)が頭に浮かぶ`regression`となる。委細を書くのも恥ずかしく、`silly regression(愚かなデグレ)`としてレポート報告することに。その後、遅まきながら、コレクションに対し、`xxx.lentgh == 0`と書いていたコードは、`xxx.isEmpty`と逐次置換したのでした。
=> qiita上にも、このあたりの記述はいろいろあります。気になる方は、`java list isempty"あたりでググりませう。


### 教訓１
　病気の時は、さまざまな能力が衰える。そうなった時になんとかなるように、手抜きをせず、安全に振ったコーディングを習慣づけるように。型安全とかnull安全とか、どこかの記事を読んで終わりにせずに、自身の日々書くにコードを安全に振ることを続けていくのが吉。
## ②　ヒアリングできないことを理由に、無駄な実装を行う。
　私は、ラージスケールスクラム(LSS)チームに属している。セキュリティが大事であるため、データセンターは具体的にどこに在るかは知らない。ただ、サーバはアメリカの東の方の標準時で管理されている。納期が迫る中、データは規約に従いUTCのタイムスタンプで保存していたのだが、ユーザー向けのログはどの時刻帯で確認してもらうのだったか...？
　私のチームのステークホルダーは日本人であるため、問い合わせるのだが、回答がない。どうやら、インフルに罹患されてしまったとのこと。時間もないし、出力は、UTCでもJSTでも出せるようにしておこう...と思ったが、提供されているライブラリにJSTへの変換は存在しない。。。むむ～、とりありず、JSTへの変換ロジックを追加...しようと思うのだが、規約で強制されているライブラリは継承が許されていない（すまんね、テヘペロ的なコメントだけがある）。大急ぎで、アメリカの東に方に問い合わせるのだが回答は帰ってこずに（あ～、頭痛いのに英語辛い）さらに開発サーバが応答しなくなり放置状態に(アメリカてコロナで云々が報じられていたころの週末だった...)。
　むむ～、これはまずい、なんとかせねば、とサーバ側の設定がことなる環境でJSTへの作成ロジックを念の為、作成。ローカルで走らせたが、その後にテスト環境で走らせたが、意図通り動作せず。...コードは恥ずかしいので記さない。...かなり焦っていたところ、ステークホルダーより連絡があり、そもそもJSTへの変換は必要ないことを知る。...結果、無駄に時間と体力を失い、①のデグレ修正に間に合わず。

### 教訓２
焦っている時ほど、平常心という奴ですね。あなたのその実装、本当に求められているのですか、と第三者的に問える己が欲しい。手を焦って動かす前に。

## ③　(私生活)熱にうなされたまま、リスクある投資を続け...
委細恥ずかしいので省きますが、平熱に戻る１０日ほどの間、コードを書く気力もないまま、気分転換にした、短期投資で、**とても高い確率**で失敗し、3桁万円の損を発生させました。。。肺よりも心が痛む。。

### 教訓３
コードを書けないからといって焦るな。焦って、溶かしたお金は戻らないが、焦りは倍以上になって戻ってくるぞ。。

### 救い
２ヶ月間在宅で皆勤賞なので、損失をぎりぎり上回る給与はいただけているので、生きてはいけます。

# 回復してからしたこと。
## ① 業務復帰
当然、すべきことは、デプロイとリリース。３日(+週末分)、遅れましたが。。。

## ② 焦る心のケア
　なんの病気にせよ、けっこう長く寝込んだあとに回復できた後は、たぶんかなりの確率で眠れない夜がある。だって身体の方は永らく寝過ぎているのですから。そのことに気がついてからは、定時後は、今後のキャリアアップのための勉強をすることにした。...別にキャリアアップを心がけなくてもいいのですが、回復期には、平常心を取り戻すために何をすべきかを考えるべき。
　元アプリケーションエンジニア(一時、webエンジニア)にして、最近は主にsparkを使うデータエンジニアである私。もう良いお歳なのだが、当然、周りからはDevOpsしろよと、言われている。...が、残念ながら、(特殊事情のJenkinsも)ansibleもterraformも(その他Hashicorp stackも)苦手意識があった。
　眠れない夜に、とはいえ、そこそこのお金を頂きながらこれらに食いついてきたのでから、と振り返り、改めて、webのエッジノードから裏方の機械学習までの範囲を担える`MlOps`なエンジニアになるには何が必要かを考え、自身のpros-consを作ってちょっとでも弱点を減らそうとする。
...主には、弱点(cons)の補いだが。

- 裏方のちょっとしたツール: Goでシングルバイナリ作るのがいいんだろうなぁ...golangは強制されないと書きたくない...気分転換にvlangでも書いておくか。
- 後に作る何かを作っておくか: (フロントエンド)+(エッジノード)+graphql+(バックエンド)かな。
- フロントエンド: 学ぶのが多いのは嫌なので、pureJSでいけるSvelteに極振り...したいが、スケールした際にはelmなのだなと再確認。
- エッジノード: SSR時代だしnodejs界隈を知っておこう。typescriptだと抽象度が高いnestなるのがあるのか...認証周りはfirebaseに任せるとすると
- バックエンド: neo4jは中も少し見たしなんとなりそう。が、graphqlと組み合わせるならば、間に枯れたRDBMSを噛ませるのが安全...となると、Postgresでgraphqlする、これかな...

...などなど、結局、MLOps周りは対して学習が進んでいない気もするがあまり気にしない(=> 現在進行形、そのうち何か書く)。意識して日常を取り戻すことが大事。

### 寝付けない夜には。
自身の今の職場とか、やらかしたことなどをいったん離れて、他方で、（確たる宗教心がない方には）謎な何かにすがってもたぶんいいことないので、自身の職業倫理と立ち位置を振り返るのが良いと思う。ITエンジニアである場合は、当然、エンジニアとしての自身の今後を見つめ直す機会だ。

# 今後に向けて。
　こんな風に迷走したのだが、それぞれの時刻帯で２４時間が続く開発チームらしく、会社にいようがどこにいようが開発もデプロイもできることは、やはりありがたかった。日中寝込んでいても、深夜とか早朝にコードをデプロイできるしね。
## ちょい付言。
　結果的にチームに救われた立場なのではあるのだが、チーム内に日本人エンジニアがいないのは寂しかった。ということで、最近のあんなこんなで在宅勤務に困難を抱えているなど、twitter界隈などで絡んでいただけるとちょっとうれしいかも。また、国内でSESな案件などをこなしていたエンジニアの方で、Scala/Javaの腕に覚えのある方は我々のチームに加わっていただける方はいないだろうか。外資だが、英語あんまりできなくても、コードが読めればなんとかなるよぅ。チームから人集めを頼まれ、人材エージェントにもお声がけしているのだが、`Scala ∩ 英語`では、ここまで日本人エンジニアの方にはヒットせず。...せっかく日本人エンジニアの方々にけっこう定着した技術メディアであるqiitaさんなんだからこうしたエンジニア人材問題、ビジネスとしてなんとかしてくれないかなと思ったり。あ、自分でサービス作ってみようかなと妄想してみたり。