開発は生きもの

0時に寝て5時過ぎに起きた。

事例紹介

いまやっているお仕事の事例紹介の承諾をいただいたので掲載した。感謝。この事例紹介は私の自己満足なところも大きい。世の中に対して自社が貢献しているということを再確認するための手順の1つと捉えている。もちろん複合的に宣伝にもなるので自社にとってメリットもあるが、それ以上に自分に向けて書いているという思いがある。それはこれまで私にとっての、意義のない開発をし経験から、そういうお仕事はしないようにしようという戒めでもある。これまで組織の論理が自分の想いや方向性とズレてしまったときに退職してきたが、業務委託だと契約を終了できるので転職するよりは補正しやすいという側面もある。

ふりかえり

スクラムのふりかえりで pull request のルール適用による成果について共有した。ルール適用前まで pull request のレビューに正社員のレビューを必須としていた。開発チームは協力会社主体であり、正社員は1人しかいなかった。そのため、レビュー負荷がその正社員に集中し、その人が多忙だと pull request のレビューが2-3日停滞するというのが常だった。そこで協力会社の approve でもマージできるような条件を設定したり、そもそも approve を必要としない pull request の条件を追加したり、pull request を作らずに main に直接コミットしてよい内容なども作った。ルール適用の前後で1ヶ月間のチームの平均値を比較した。

その結果、findy teams の pull request の作成からクローズにかかる時間が30%に短縮された。3倍近くクローズが早くなった。私個人の「1プルリクあたりの平均マージ・クローズ時間」においても 14.7h → 4.1h に短縮された。平均で1日待たないと approve をもらえなかったのがその日中にもらえるようになったと言える。ふりかえりで成果を共有したところ、わりと成果の大きさに驚かれたのに私が驚いた。経験が浅いチームの当たり前には価値基準や手順などに乖離があるんだろうなと思えた。私にとっては当たり前のことをやって、当たり前の成果が出て、当然こうなるって話しでしかないのだが、開発を数字でしか把握できない人たちにとっては斬新にみえるのかもしれない。

本番環境反映の監督

昨日は思いっきり昼寝してしまったせいか、夜に眠れなくて3時ぐらいまで起きてて、寝たのか寝てのかよくわからない雰囲気で7時前に起きた。

インフラ作業の本番反映

先週対応した api gateway のコード化 を本番環境に反映した。手動で作成されていた api gateway, vpc link, セキュリティグループとそれに関連するリソース群を cdk 管理のコードで置き換える。既存のリソースを削除してから cdk でデプロイするため、失敗しても切り戻しできないのでプレッシャーがかかる。とはいえ、想定通りに作業が進捗して2時間ほどで完了した。それと並行してテスト環境では、手動で作成された rds を cdk 管理のコードで置き換える移行作業をしていた。これも一筋縄ではいかなくて右往左往しながら作業してた。これを本番環境でやるのもまた億劫だなぁと思いながら発生したエラーや事象を書き綴っていた。あと本番環境で行う大きな移行作業はこれだけ。

個人開発楽しい

0時に寝て7時に起きた。朝から雨降りだったのでだらだらしながら家を出たけど、オフィスに着いたのは9時頃だったと思う。午前中にコードを書いてテストして、それからお昼ご飯食べて、家に戻って、ちょっとゆっくりしてからオフィスに戻ろうと思ってたら3時間ほど寝てた。

backlog のコミット連携の反応

たまたまツィートしていたらこみやさんが関心をもってくれた。fix, close などでチケットのステータスを変えたいという要望をもらったので作ることにした。

3時間ほどとわりとすぐに実装できた。いまのプロジェクトでは使わない機能なので当初は乗り気ではなかったけど、やっぱり使いたいという人がいると開発のモチベーションになる。

機能拡張して、テストしたり、ドキュメント書いたりしてた。github discussions も積極的に使ってみようと思っていてちょっとした faq も書いてみた。

1-2週間ほど試験運用して問題なさそうだったら v1 のタグをつけて marketplace などに公開してもよいかもしれない。ブログにも書かないとな。まだまだタスクは残っている。

個人開発の日

0時に寝て6時に起きた。午後から昨日作った機能拡張のテストをしながらコードの修正やテストコードを追加したりしていた。

ストレッチ

今日の開脚幅は開始前161cmで、ストレッチ後161cmだった。先週はワクチン接種後にダウンして寝込んでいて数値が悪かったのが元に戻った感じ。それでもまだ復調にはいたらないのか、右の肩甲骨が硬いのと腰の張りもすごかった。3月からずっとだらだらした生活を送っているのでもうちょっと生活をびしっとしないといけない。インフラエのお仕事を引き受けてから深夜早朝に作業する機会が増えて生活のリズムを崩しているのもあるとは思う。歳をとって体調がよくない日が増えるという話しを聞いたけど、私もストレッチを始める前はそうだったような気がするけど、毎週ストレッチに通うようになってからそういう印象が解消した。もう1年以上通っているから間違っていないと思う。毎週どこそこが悪いといったことも書いたりはしているけど、それはストレッチをする上でのよくないところや前週よりも成果が出ないところの話しであって、日常生活を送る上ではまったく影響はない。ストレッチは正義。

Go Conference 2022 Spring Online

ストレッチを終えてから Go Conference 2022 Spring Online に参加した。いくつか発表を聞きながらコードを書いたりもしていた。一番よかったのはたいちさんの DBアクセスライブラリkra の発表かな。taichi/kra というライブラリも知らなかったので機会があれば今度使ってみようという気になった。私も sql 好きだし、orm の弊害の話しも共感できてよかったと思う。orm 使うなという話しではなく、それぞれの用途にあわせて使い分けたい。

カスタム action の開発再開

22時に寝て0時に起きて3時に起きて5時半に起きた。

ワーケーションのリトライ

オミクロン株の流行で延期していた開発合宿を行う。レンタカーと きのいえ の予約を6月3-5日で確定させた。3回目のワクチンを接種したばかりだし、世の中の雰囲気も with コロナへの取り組みになってきている気がする。行き先は同じなので前回作った旅のしおりをコピーしていくつか修正しながら再計画していく。Go To トラベル 再開が6月ではないかという噂もある。

backlog-github-integration-action の機能拡張

先日作った backlog-github-integration-action に push という新たなサブコマンドを追加した。コミットをリポジトリに push したときのイベントをフックしてカスタム action を実行する。インプットが github から取得できるデータになるため、GitHub Events 単位にサブコマンドを作ればトリガーと扱えるインプットデータが一致してわかりやすい機能分割になるんじゃないかと思えた。ひとまずそれでやってみる。今日のところはローカルで動かしてコミット連携ができることを確認して、いくつかテストを書いていた。また明日、結合レベルのテストをやってみる。

rds の再作成

23時に寝て5時半に起きた。久しぶりによく眠れた気がする。

rds を独立したスタックに分離

昨日の続き。ライフサイクルにあわせたスタックに分割し、スタック間の依存関係を適切に定義することで堅牢なインフラコードになる。最後に残った DatabaseStack を分離するところを朝からやっていた。

  • DatabaseStack
    • BackendStack
      • GatewayStack
        • FrontendStack

rds を壊して、バージョンを aurora postgresql 最新の 13.x にアップグレードして、cf のテンプレートで小細工をしながら既存の環境を移行したりしていた。pg_dump を使ってテキストに dump したデータを、psql を使ってリストアしたりもした。データ量が少なかったらこれで移行してもいいかもしれない。

$ pg_dump --host mydb.xxx.ap-northeast-1.rds.amazonaws.com --username user mydb > mydb.dump
$ psql --host mydb.xxx.ap-northeast-1.rds.amazonaws.com --username user --dbname mydb --file ./mydb.dump

堅牢なインフラコード

23時に寝て5時に起きた。

駐輪場の定期更新

3ヶ月ごとの更新。ちょうどいまのお仕事の契約と同じ更新月になっている。前回と同じ金額だったのでまだ駐輪場の料金は値上げされていない。世界的にインフレしているのに日本が全然インフレしていない理由の1つとして不動産が値上げしていないからというのを日銀の記事で見かけた気がする。どこかのタイミングで不動産関連の値上げも始まるのかもしれない。

インフラコードの抜本的リファクタリング

約2週間かけて、新規インフラ環境の構築、既存インフラの cdk/cf と同期されていなかったインフラ (rds, security group, croudfront, api gateway, waf) の同期など、インフラコードの大きな変更をやり終えた。一部 fromLookup でインポートしているリソースもあるが、いま完全に cdk/cf 管理なインフラとなった。ここからはせっかく cdk でコードを書いているので、モジュール化や共通化など、再利用可能なリソースとして定義して、複数の Stack でコードを再利用するといったリファクタリングをしていく。ひとまずこのことをボーナスステージと呼ぼう。いま完全に同期されたインフラがあるため、インフラ上のリソースの差分が出なければリファクタリングは正しいことが保証される。cdk は Stack 間の依存関係 も定義できるため、適切な依存関係を定義することでより堅牢なインフラコードとなるはずである。具体的には次のような依存関係になる。然るべき堅牢なインフラコードに書き換えていく。

  • DatabaseStack
    • BackendStack
      • GatewayStack
        • FrontendStack

api gateway のデプロイ検証

0時に寝て6時に起きた。

api gateway のデプロイ検証

昨日の続き。api gateway を再作成すると、当然、既存のテスト環境は疎通できなくなってしまう。他の開発者を妨害しないようにまた21時から深夜にかけて作業しようと考えていたら、いまは閑散期でテスト環境を使わないといけないような開発の状況にはないと他の開発者から教えてもらった。PO の人たちも検証は一段落しているとのこと。午後からテスト環境壊してもよいという確認が取れたので13時からインフラ作業をしていた。早ければ1時間ぐらい、遅ければ4時間と見積もって、実際にデプロイしてみると、あれやこれやの抜け・漏れ、手動で設定されていたリソースの弊害などもあって、3時間ぐらいかかった。もう2週間ほどインフラの作業ばかりやっているせいか、何が起こっても4時間ぐらいあれば調査とリストアを完了できるぐらいの自信がついてきた。最終的に cdk で再作成した api gateway を使って cloudfront の distribution 経由で web api 呼び出しが繋がった。当たり前の話なんだけど、繋がる瞬間、ローカルで web api のエンドポイントを叩いてレスポンスが返ってくるときが嬉しい。最後の大物だったインフラもたった2日でやっつけることができた。これからはボーナスステージ。

api gateway のコード化

1時に寝て7時に起きた。

api gateway のコード化

いま cdk で管理していない大きなインフラとして api gateway がある。さらに restful api ではなく http api という新しい仕組みを使っているため、cdk 側も experimental な機能として提供されている。experimental と言っても本番環境で使われいるので十分に production ready と言える。弊害としては cdk のサンプルコードが少なく、公式の api reference に付いているサンプルコードぐらいしか参考になるものがなく、適当にコードを書いてでデプロイし、管理画面で意図した設定になっているかを確認するといったトライ&エラーみたいなやり方しかない。今日の時点では pr まで作ってデプロイと検証は翌日にまわることにした。

さらに cdk の v2 系では -alpha というパッケージが experimental 向けの機能を提供している。バージョン番号ではなく、パッケージ名に alpha が付くという分かりにくさに拍車をかけている。お手伝い先で使っている設定は次の3つのパッケージを使うことで実現できた。api gateway, vpc link, integration, route, authorization, stage など、複数のリソースを連携して設定しないといけないのでちょっとややこしい。

草稿書き

0時に寝て7時に起きた。昨日もだらだらしていたので体調は完全に回復した。

事例紹介の草稿作成

お仕事で手伝っている会社の開発を事例紹介として紹介してよいという許諾をいただいた。草稿を提出して確認してもらわないといけないが、もう2週間前から放置してしまっていた。若い人には信じられないことだと思うけど、やろうと思った作業を後回しにしていると2週間ぐらいすぐに経つ。別にやる時間がないほど忙しいというわけではなく、なんとなく気乗りしないとか、割り込みでやるのが面倒くさいとか、今日は疲れたからまた明日やろうとかの延長で2週間が経ってしまう。若い人からみておっさんは仕事が遅いとか思われるわけだと思う。放置している2週間のうちに2回ほどちょこちょこ文章を書いたり、資料集めしたりはしていたので何もしていないわけではないが、本気を出せば2-3時間で終えることに2週間かかるのがおっさんのスピード感だと言っていいのだろうと思えた。

病み上がり

半日寝込んでいて3時に起きて7時に起きた。午後から、昨日寝込んでいたときに届いていたレビュー依頼の内容をレビューして、コードのリファクタリングをした。その後、病み上がりで調子が出ないので今日は気分転換しようと決めた。ストレッチを受けているときの、トレーナーさんの同じ体勢でいるのはよくないという言葉を思い出して、自転車でちょっとサイクリングして、その後、漫画喫茶に行って漫画読んでた。

ストレッチ

今日の開脚幅は開始前158cmで、ストレッチ後160cmだった。昨日は発熱でずっと寝込んでいたせいか、体が硬くなってしまっていていつもよりストレッチを受けていて辛い部位が多かった。トレーナーさん曰く、ずっと同じ体勢でいるのが体にとってよくないとのこと。普段よりも肩甲骨まわりの筋肉が硬くなってしまっていたらしい。病み上がりで体調が整っていないときにストレッチを受けるのも復調させるための準備としてちょうどよかったのかもしれない。