2023年1月

育児

2 歳 2 ヶ月になった。

  • お年玉をあげて即開ける
  • 近くの神社に初詣にいった
    • 手をパンパンできた
  • おせちは栗きんとんだけたべた
  • 親戚の家に遊びにいった
    • 叔母にすっかり懐いていた
    • ひよこ饅頭たべてテンション爆上げ
  • パパにスリッパを持ってきてくれる
  • 「みかん」という
  • YouTube 観てる時に無理やりお風呂に連れてってギャン泣き
  • 手洗い中にシャンプーする
  • 「ハイ」という
  • みかんにハマる
    • 「きーかー」と言ってみかんを指差す
    • パパママが薄皮を剥いてあげる
  • 「よいちょ」という
  • ハンドソープの泡出して「アワ!アワ!」という
  • しまじろう観てテンション爆上げ
    • 雪のシーンだった
    • 去年は雪見てテンションあがってたなぁ
    • 今年も降ってほしい
  • 園帰宅後に手洗ってる時に吐いた
  • ジャカジャカじゃんけんぽんでテンション爆上げ
    • グーを挙げた
  • 今まで食べなかったいちごを美味しそうに食べた
    • お裾分けでいただいた栃木のいちご
  • 「コロッケ」が言えるようになった
  • 「よいちょ」が言えるようになった
  • 自分の名前が言えた!
    • あとはママだけ
  • 「ギュー!」って言えた
  • 歯医者で歯の模型みて怖がる
    • 手で顔をかくす
  • 車のおもちゃをパパの頭にぶん投げる
    • めっちゃキレた
    • めっちゃ痛かった打撲
  • 「いたい」が言えるようになった
  • 参加型保育参観に参加した
    • めちゃ楽しかった
    • みんな可愛い
    • 保育士さんの子どもとの接し方が参考になった
    • みんな似たような行動してたので安心(?)した
      • ぐずって後ろにのけぞる
      • ぐずって後ろに倒れる
      • 机や棚にあるおもちゃを下に全部おとす
    • 公園にもいけた
      • お腹が痛いマネをしてうつ伏せに倒れる
      • 誰も来なかったら自分で起き上がる
  • 保育園の保護者懇親会に参加した
    • パパ参加オレだけだった
    • 茶菓子たべながらおしゃべりした
  • 信号待ちの時に「あか!」と言う
    • 絵本みて「きーろ」も言えるようになった

喋れる言葉が増えた。嬉しい。今月は保育園イベントも多くて、参加型保育参観と、保護者懇親会があった。保育参観は園内や公園、公園に向かう道中の息子氏を見れて新鮮だった。家にいるときとちょっと違う一面だった。懇親会はパパ参加者がオレだけで少し寂しかった。なんか参加してて偉いって雰囲気だったけど少しモヤモヤ。パパの育児参加が当たり前になってほしいな。

仕事

2022年振り返り

今年も振り返っていく。

enokawa.hatenablog.jp

子育て

昨年に引き続き全力で子育てに奮闘した。保育園に通い始めた年で、最初の半年は毎週といっていいほど風邪をもらってきていて、ほぼ毎週小児科にかかっていた。まさに入園の洗礼を受けた形だ。 園に通ってから食べられるものが増えたり、嫌なことがあったらイヤと言えるようになったり、少しずつ喋れるようになったり、思いやりができたり、道行く人に愛想を振りまいたりできるようになった。本当に成長速度がすごいと思う。

もちろん良いことばかりではなく、思い通りにいかないことがあったらかんしゃくを起こしたり、道端で座り込んだりうつ伏せ(笑)をしたり、偏食がすごかったり、いろいろ大変。 都度園の先生にも相談しているのだが、これも成長過程とのことで、じっくり付き合うようにしている。例えば道端で座り込んだりしたら一緒に座ったり、うつ伏せしたら待ったりという具合。かんしゃくを起こした時はどうしようもないので別のモノに興味がいくように仕向けたりしている。

相変わらず夜はぐっすり寝てくれているのでありがたい。就寝後 2 ~ 4 時間は夫婦の時間やご飯のつくり置き、仕事、勉強、ゲームなどに費やしている。それだけ時間もあれば大学の勉強できるやんと思う時もあるが、今の方が気持ち的に楽だし好きなことをやれるのでそれで良いと思っている。大学には退学届を出すつもり。

仕事

インフラエンジニアからアプリケーションエンジニアになった。主に Web API や非同期で動作する Queue Worker をサーバーレスで開発している。リーダーやチームメンバーにも恵まれ、設計からリリースまでの工程に携わることができた。色々と課題が生まれていくなかで、インフラエンジニアとして培った経験を活かすことができたと思う。特に、負荷試験を行う工程では自分で負荷試験環境を構築して負荷を掛け、計測し、ボトルネックを特定した上でリファクタリング・チューニングをしたりなどができて、とてもやりがいを感じた。

他にも Swagger UI を Amplify でホスティングして CI/CD したり、GitHub Actions で自動テストを構築したりなど、できることは自動化していく精神で進めた。テスト自動化はまだうまく行っていないので、引き続き改善していきたい。

難しかったのが、メンバーや PM とのコミュニケーションだった。見知らぬメンバーとの開発だったので、それぞれのバックグラウンドや得意としていること、苦手なことなども分からないため、テキストコミュニケーションが難しかった。オフラインで会ったことも数回しかなくて、最近自分の経歴を話す会をデイリーの MTG でやったりして徐々に打ち解けてきているような気がしている。自分をさらけ出していかないとなと思う。オフラインで会っても持ち前の内気な性格であまり話せないのもどうにかしたい。

勉強

本は以下の 3 冊を読んだ。3 冊目のはまだ読み進めている途中。

  1. SCRUM BOOT CAMP THE BOOK【増補改訂版】
  2. ソフトウェア品質を高める開発者テスト
  3. APIを作りながら進むGo中級者への道

GitHub の活動はこんな感じ。TIL 系や検証のためのレポジトリの Commit と、最近はじめた Go の学習ログがほとんど。友人と始めた個人開発は進められていない。。

2021年どうする

変わらず家族最優先でいく。仕事もプライベートも充実されるぞい!

ということで

来年から本気だす。

2022年12月

育児

2 歳 1 ヶ月になった。

  • 食事の時ハイチェアに座りたがらない
    • 無理やり座らせようとするとギャン泣き
  • 自分で鼻くそをほじって投げる
  • パパとよぶ
  • パパが投げキッスしたらキャッチする
  • お風呂場に車のおもちゃをもっていく
  • 保冷剤を当てるのを嫌がらなくなった
  • パトカーが言える
    • パートーカー
    • コロッケが言える
    • イヤが言える
  • ベイビーバスとトーマスと働く車の YouTube にハマる
  • 園で噛まれる(何回目!?)
  • 中耳炎が治った!
  • コロッケもらってもいい?と聞くと「ううん」と言って首を横に振った
  • クリスマスイブに初ケンタッキーを食べる
    • ナゲットだけ
    • ケーキは食べず
  • クリスマスプレゼントに大喜び
  • テラスモールにイルミネーション見にいった
    • 光に顔を近づけすぎる
  • 湯船に顔からダイブ
    • すぐ引き上げた大丈夫そうだった
    • 気をつけよう
  • うがいの練習をはじめた
    • まずはお風呂場で飲める水で
    • めっちゃ飲む
    • 続けたらガラガラのマネをするようになった(飲む)
  • 鎖骨くすぐると笑う
  • 自分がかわいいことを分かっている
  • ジーユーグレナをはじめた
    • ジーはヨーグルトと一緒だと食べるけど飲まない

今月も保育園休まずに通えた。ありがとう。パパと呼んでもらえるようになってとても嬉しい。お家に返ってくるタイミングとか、園にお迎えにいったタイミングで呼んでくれて疲れが吹っ飛ぶ。

仕事

いろいろやった。

その他

2 年ぶりくらいに Advent Calendar を書いた。

enokawa.hatenablog.jp

Go で Web API を構築する方法を勉強している。

techbookfest.org

RDS Data APIのテスト手法について

こんにちは。@enkw_ です。AWS LambdaとServerless Advent Calendar 2022 の 14 日目の記事です。

qiita.com

テストが遅い

とあるプロジェクトで Amazon Aurora Serverless v1 の Data API(以下 Data API)を利用した API 開発を行っていて、pytest で単体テストを書いていました。API やモジュールが増えるにつれてテストの量も増えていき、最終的に 100 を超えるテストケースが存在し、自動テストの実行に 10 分以上掛かっていました。

テスト実行に 10 分以上掛かる理由は、テストケース毎に以下の手順を踏んでいたためです。

  1. テスト実行に必要なテーブルを pytest.fixture(scope="function", autouse=True) で作成
  2. テスト実行
  3. (1) で作成したテーブルを削除

一見「こんなにかかるもの?」と思いがちですが、Data API を利用してインターネット経由でクエリを実行しているため通信コストが高く、特に Fixture setup / teardown に時間が掛かります。Docker を利用して MySQL コンテナを立ち上げられれば楽なのですが、Data API を利用している都合上 Docker でのシミュレートは難しい状況でした。

また、(1) については各テストモジュールにベタ書きしており、リポジトリ内に存在するスキーマ( schema.sql など)とは別で記載しているため、例えばスキーマに変更があった場合はテストモジュールも修正しなければならずメンテナンスコストが高い状態でした。またテストモジュールに記載したスキーマの更新を忘れ、実際のスキーマとの差異でバグが発生する問題もありました。

更にテストモジュールの行数が多く、テーブルの作成と削除、INSERT 処理なども含まれており、合わせて 1000 行を超えるテストモジュールが多数存在し、可読性が低い問題もありました。

これらの問題の一部はまだ解決できておらず、毎日自動テストが timeout している状況なのですが「こういう風に実装したらコストを低く、かつ信頼性のあるテストを書くことができるかも」という考察を書いていきたいと思います。

前提

  • APIAPI Gateway と Lambda(Python3.9) で構築
  • Aurora は MySQL-Compatible
  • テストは pytest で実施
  • 開発環境の Aurora に pytest 用 DB を作成

セッション毎に Fixture setup を行う

前述した通り、テストケース毎にテーブルの作成と削除を行っているためテスト時間が掛かります。 そのため、1 pytest 実行あたり 1 回のみテーブルの作成を行い、テストが終了したタイミングでテーブルを削除します。 pytest を利用する場合、conftest.py で全テストの共通処理を書けるため、以下のような Fixture を用意することでテスト開始時に DB やテーブルの作成、テスト終了時に DB を削除するといった処理が可能です。

# tests/unit/conftest.py

@pytest.fixture(scope="session", autouse=True)
def db_name():
    prefix = "test_"
    letters = "".join(choice(ascii_letters) for _ in range(10))

    return prefix + letters

@pytest.fixture(scope="session", autouse=True)
def create_schema(db_name):
    execute_statement(sql=f"CREATE DATABASE IF NOT EXISTS {db_name}")

    with open(SCHEMA, "r") as f:
        sqls = f.read().split(";")

    for sql in sqls[:-1]:
        execute_statement(sql=sql, database=db_name)

    yield

    execute_statement(sql=f"DROP DATABASE IF EXISTS {db_name}")

DB 名は db_name Fixture でランダムに生成してその名前で DB を作成、スキーマが定義されたファイルを open で読み込んで配列に格納します。最後に forSQL 単位でテーブルを作成し、テストが終了したら DB を削除します。実際の DB に適用されているスキーマを利用しているため、先に挙げたテストモジュールと実際の DB との差異が発生する問題は解消しました。

DDL は for を使わずに一発で流せるとスマートなのですが、Data APIExecuteStatement API で試すと BadRequestException (SQLState: 42000) が発生します。現状は 1 DDL ずつ実行する必要がありそうです。

並列でテストを実行する

並列でテストを実行することでテスト時間の短縮が見込めます。ただスレッド A のテストとスレッド B のテストが同じ DB に対してクエリを実行してしまう恐れもあるため考慮が必要です。今回の例では、先ほど定義した create_schema Fixture で、動的に DB 名を生成したため、今のところ競合は起きなさそうです。

現在 pytest-xdist を利用した並列テストを検証中で、テストケースによっては TRUNCATE の処理が必要になってくるかもしれません。その際は、以下のように TRUNCATE を実施する Fixture を用意しておくと便利そうです。

github.com

# tests/conftest.py

@pytest.fixture(scope="function", autouse=False)
def truncate(db_name):
    def _truncate(table: str):
        execute_statement(sql=f"TRUNCATE TABLE {table}", database=db_name)

    return _truncate

@pytest.fixture(scope="function", autouse=False)
def truncate_all(truncate, db_name):
    records = execute_statement(sql="SHOW TABLES", database=db_name)
    tables = [record[0].get("stringValue") for record in records["records"]]

    for table in tables:
        truncate(table)

こちらは id:mizdra さんの記事を大いに参考にさせてもらいました。ありがとうございました。

www.mizdra.net

pytest-xdist は pytest で -n オプションを指定することで、並列でのテスト実行が可能です。以下はテストの実行例(上が並列なし / 下が並列あり)で、gw0 と gw1 という worker が作成されていることが分かります。テストケースが 5 件と少ないため、worker を作成するオーバーヘッドもあってか並列なしのテストの方が実行速度が若干速いですね。テストケースが多くなればなるほど、並列テストの恩恵が受けられると思います。

pytest-xdist

統合テスト

handler の単体テストを書くことで Lambda 関数全体でのテストは可能ですが、実際の環境で API Gateway 経由のリクエストとなる場合は統合テストを実施した方が良いです。「handler の単体テストを書いたけど、デプロイしたら想定しないバグが発生した」という経験があり、やはり提供する API は HTTP での動作確認を行った方が手戻りは少ないです。handler の引数に渡す event の Request payload は自分たちで書く必要があり、どうしても typo や型の指定ミスが発生します。

統合テストを書くことで、「API が仕様通りに動作しているか」を確認できますし、より信頼性の高いテストとなるはずです。

# tests/integration/test_get_user_api.py

import requests

def test_api():
    response = requests.get(f"{BASE_URL}/user/john")

    assert response.status_code == 200
    assert response.json() == {"message": "hello john"}

自動テスト

GitHub Actions で自動テストを実施しています。以前書いた以下の記事を参考に、OIDC を利用して AssumeRole しています。

enokawa.hatenablog.jp

後述するサンプルコードには記載していませんが、最低限、以下の権限があればテストは実行できます。

# template.yaml

Policies:
  - PolicyName: !Sub "pytest-policy"
    PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "secretsmanager:ListSecrets"
            Resource: "*"
          - Effect: Allow
            Action:
              - "secretsmanager:DescribeSecret"
              - "secretsmanager:GetSecretValue"
            Resource: !Sub "arn:aws:secretsmanager:{AWS::Region}:{AWS::AccountId}:secret:<secret-name>"
          - Effect: Allow
            Action:
              - "rds-data:ExecuteStatement"
            Resource: !Sub "arn:aws:rds:{AWS::Region}:{AWS::AccountId}:cluster:<cluster-name>"

CI 用に DB のユーザと、Secrets を作っておいて、特定の DB のみ操作可能な権限を GRANT すると安心ですね。

CREATE USER 'pytest'@'%' identified by 'password';
GRANT ALL ON `test_%`.* to 'pytest'@'%';

おわりに

t_wada さんのこのツイートを見て、ハッとさせられました。「Data API のテスト遅いし、もう mock でいいのでは..」と思っていた時に目にして、このままではいけないなと。自作自演のテストを書いて信頼性のないテストを書いて満足するよりも、テスト時間もそこそこ速くして信頼性を上げるテストを書くように思考した方がカッコいいよなと思いこの記事を書きました。

少しタイトルの趣旨とズレた記事となってしまいましたが、この記事で「いやこれは違う」とか「このツール使えば解決では?」みたいなものがあれば教えてもらえると喜びます。

サンプルコード

github.com

参考

ありがとうございました!

www.mizdra.net

devblog.thebase.in

github.com

zenn.dev

2022年11月

育児

2 歳になった!

  • お風呂場で自分の頭をゴシゴシする
  • セルフ「いいこいいこ」する
    • パパママにもいいこいいこしてくれる
  • 一緒に皆既月食を見た
    • 指差ししてた
  • 夕食後にトイレにいくようになった
    • 今はおまるに座るだけ
    • 半裸でリビングでおしっこぶちまける
  • 富士急ハイランドにいった
    • 長時間車乗れた偉い
    • 車中でチョコチップパンを食べる
      • 初チョコ
    • FUJIYAMA にバイバイした
    • 色々アトラクション乗った
    • アトラクションは基本真顔
    • 待ち時間はグズグズして大変だった
    • 他のパパママも大変そうだった
    • 富士急いる時間より車に乗ってる時間の方が長い
    • 次は泊まろう。。
  • 笑いかたが変わった
    • 「フフフフゥ」って笑うようになった
  • 散歩中に落ちてる犬の糞をつかむ
    • 硬かったっぽいからたぶん日が経ったやつ
    • 触った手を口に入れる
  • 久しぶりに夜泣きした
    • ママの抱っこですやぴー
  • 救急車のおもちゃ持ちながら走って転けて怪我
    • おもちゃが口に当たって血ドバドバ
    • 救急車が血に染まった
    • 洗い流して止血できた
  • 歯磨きのときに「ブーっ」って吹き出す
    • そして自分で笑う
    • つられてママパパも笑う
  • YouTube で踏切をみて「カーカーカーカー」と言う
    • 踏切のおもちゃをもってくる
  • 口に手を当てる🤭
  • 「しー🤫」ができる
  • 鼻吸い機を自分で鼻にいれる
  • 転んだママを労る
    • ママにハイハイでついていく
  • 「イヤ」って言えている気がする
    • 「アンニャ」とか
    • バナナを「ナナナ」
    • アンパンマンを「アンマンマン」
  • いないいないばあのピカピカブーを踊る
  • パパが踏ん張ると真似をする
    • 「んー...!!」ってする
    • 口を窄める
  • 誕生日はアンパンマンミュージアムにいった
    • あんがい電車で横浜までいけた(びっくり)
    • 入ってすぐにレストランでご飯たべた
      • 誕生日ケーキたのんだらスタッフさんが祝ってくれた嬉しい
    • ミュージアム入る前にうんち漏らした
    • ミュージアムは子どもが好きそうな仕掛けや場所がたくさんあってすごい
    • ショーは見なかった
    • 見知らぬ他のママと手を繋ぐ
    • 息子氏はほんとに楽しんでて来てよかったしパパママも楽しかった
    • ミュージアム出たらグズグズ
      • アイス食べて元気でた
      • パパママと 3 人で交互に食べた
        • 食べたら安心したのか寝た
      • 帰宅後は前日からママが仕込んだトーマスのカレーを食べた
      • ケーキも一緒に食べた
      • ハッピバースデーの歌を歌うと手拍子する
        • ろうそくの火はまだ消せない
  • 園でテーブルに目の下らへんを打った
    • 打撲で2,3日後に青たんが目尻から目頭まで広がった
  • トーマスのおもちゃでママの髪を巻き込んだ
    • 結局ほどけずに髪切った
    • パパは指を巻き込まれた息子氏はまだ無傷
  • 「たっちしできる?」って言ったら立ってくれた
  • 園の送迎の時にお友達と一緒に手を振ってくれた
  • 園の送迎の時にお友達が息子氏の名前を呼んでくれた
    • そしてオレにおもちゃをくれた
  • パパと遊びたいけど仕事(作業)中で会えずギャン泣き

誕生日おめでとう!今月も初めてできたことが多くて、ほんと子どもの成長は速いなぁって思う。 富士急いったり横浜いったり、アクティブな月だった。あと今月保育園休んでないんじゃないかな?たぶん入園してから初めて。 イヤイヤすることも増えて、どんどん自我が芽生えてきているのだと思う。親も大変だけど頑張って楽しもうと思う。

仕事

いろいろやった。

2022年10月

育児

1 歳 11 ヶ月になった。

  • 水族館にいった
    • お魚さんに興味津々
    • 海にも入った
      • 波打ち際で軽く水浴びする予定がズブ濡れに
      • 波に押されるのがとても楽しそうだった
  • ツバメダンスを踊る
  • 毎日見かける幼稚園のバスにバイバイする
    • 手を振ってくれた運転手さんありがとう...!
  • 園の親子遠足にいった
    • ミニゲームとかやったりして楽しかった
    • 他の子のパパママとは自前のコミュ症で話せず
    • 早起きして弁当つくって外で一緒にたべた
    • 親子も先生もパパママもいて戸惑っていた
  • くるくるまわる
  • 一緒にお風呂はいってシャワーかけてくれる
  • 初めて電車にのった
    • 先月のったのはモノレール
    • 駅は人が多くて戸惑っていた
    • 階段いっぱい登って降りた
    • 車掌さんにバイバイできた
      • 手を振ってくれた車掌さんありがとう...!
  • 同じ階に住んでる子に頭ナデナデしてもらった
  • 登園中見かける園バスに乗ってる子たちにバイバイする
    • 園で散歩する時もバイバイするらしい
  • よく園でお友達に噛まれる
  • 急に抱っこして海老反りしてママの前歯に後頭部直撃
  • 休日 3 時間昼寝した
    • 午後 3 時にお昼ごはん
    • リズムが崩れたのかグズグズ
    • パパママ疲弊
  • 園でお昼前に先に寝る子を見て眠くなる
    • カゴから自分のバスタオルをとって寝る準備する
    • 本格的に寝る体勢に入ったところでお昼ご飯で連行される
    • 先生曰くこの一連の流れのテンポがよかったらしい
  • エスカレーターの乗り降りが上手になった
  • 救急車のことを「きゅきゅちゃ」と言った
    • たぶん初めて言えた言葉
    • 「マンマン」とか言うけどママのことなのかわからない
    • 「ピーポーピーポー」も言う
  • 保育園でお友達と握手してた
  • 朝元気だったけど昼に園で発熱
    • お迎えいって病院いったら喉にできものがあるとのこと
    • 手足口病ヘルパンギーナで起きる症状らしい
    • 無理やりお風呂に入れたらギャン泣き
      • 無理に入れるのはよくなかった反省
    • 翌日は休んでその日にたまたま届いた救急車のおもちゃにどハマり
  • お風呂の時間になってもすぐ来なくなった
    • 以前はすぐ飛んできた
  • 朝っぱらから洗濯かごをくぐる
    • 脚がついてる洗濯かごなので息子氏ならくぐれる
  • インドカレー屋さんでカレーをテイクアウト
    • 店員さんからうまい棒(めんたいこ)もらった
    • カレーは食べないけどナン爆食い
    • おやつにうまい棒ニコニコ食べた
  • 西松屋でローチェアを買った
    • 今まではハイチェア
    • ちょこんと座る
    • けどあまり自ら座らない
  • お風呂の時に椅子に座る
    • 今までは立ってた
    • 足が地面につかないのでタライで足をつく
    • 洗いやすくなった
  • 消防車のことを「しょーしょ」という
  • 日が落ちて暗い時に帰ると空に星があることに気づいた
    • 星を指して「あっ!あっ!」と何か伝えたそう
    • 夜のマンションや車のライトに「ピカピカ」と反応する(手も一緒に)
  • 園でお友達が喧嘩してた時に仲裁(?)なのか車のおもちゃを渡したらしい
    • 先生たちもほっこりしたらしい

今月は初めて喋った記念月!「きゅきゅちゃ」が言えた時は嬉しかった。先月よりも意思疎通できるようになった気もするし、すごい。(語彙) いよいよ来月は 2 歳。特に変わらず、毎日家族みんなで楽しく過ごしたい。

仕事

今月は異動して初の評価面談があった。メンバーとも 1on1 を行い、相互評価できたのでよかった。上長含め、概ねポジティブなフィードバックだったので一安心。引き続きやっていく。

業務では FAIL し続けている CI のジョブと戦っていた。DB に Aurora Serverless v1 Data API を使っていて、そのテストに掛かる通信コストが高く、テストが timeout してしまう。 GitHub Actions の timeout 値を伸ばせば PASS するが、特定ブランチへ push する度に走るジョブのため Actions の実行時間に対する料金が高くつく。 今の実装が Aurora Serverless のテスト DB に対して直接クエリを発行している状況のため、何かしら対策を打つ必要がありそう。まだ解決していなくて、引き続き対応していく。

2022年9月

育児

1 歳 10 ヶ月になった。

  • 両人差し指をほっぺにつけて「おいしー」ポーズ
  • 一緒にスイカ食べた
    • 最初はおそるおそるかじった
  • 一緒にミートソースパスタ食べて「おいしー」ポーズ
  • 風邪ひいた
    • パパがつくったおにぎりを1口で食べようとする
      • 息子氏の名前を強めに呼んだらギャン泣き
        • びっくりしたねゴメンよ。。
  • 夕飯前にアイス食べたくておねだり
    • あげなかったからかんしゃく起こした
  • 玄関ドアの鍵を開けるのにハマる
  • 自分で洋服を脱ぐようになった
    • パパママが手伝いながら
    • うまく脱げないと怒る
    • 脱いだら洗濯機やカゴに入れるそして押す
      • オムツもw
    • 靴や靴下も
  • かんしゃく起きがち
  • 叔父からもらったぶどうにハマる
  • はじめてお風呂で湯船に浸かった
    • ビビってる感じ
    • いままではシャワーだった
  • コメダ外食
    • お子様プレートたべた
    • ゼリーとアップルジュースにご満悦
    • アップルジュース飲むのめちゃ早い
  • 電車デビュー
    • 1 番目の電車は湘南モノレール
    • キョトンとしてた
    • 車掌さんにバイバイできた
  • 「コップちょうだい」って言ったらくれた
  • 「ごはんおいしいひとー?」って言ったら手を挙げた
    • しかも両手w
  • 初イケア外食
    • ぜんぶ美味しそうに食べた
    • いっぱいイケアの中あるいた
  • 歩いてる時にこけて唇切った
  • 園の先生が息子氏のことを自慢する
    • 「今日はこれができるようになったんですよ〜やってみよう息子氏くんおいで!」みたいにw
    • いつも我が子のように接してくれて本当にありがたい
  • 「えのかわ〜息子氏くーん!」って言ったら手をあげる
  • イヤなことはイヤと意思表示できるようになってきた
    • まだ「イヤ」と発言することはないが進歩
  • よくおしゃべりするようになってきた
    • まだ理解できないことばだけど進歩
  • 涼しくなってきて家から駐車場までの距離(300mくらい?)は一緒に歩くようになった
    • いままでは抱っこひもかベビーカーを使ってた

今月は初めてのできことがたくさんあった。特に、よく息子氏語でよくおしゃべりをするようになって、少しずつだけど意思疎通できるようになってきた気がする。 「ブーブー(車のおもちゃ)とって」って言ったらくれたり、「えのかわ〜息子氏くーん!」って言ったら手をあげたりしてビックリした。まだ発語はないけど、こちらも理解するように心がけよう。

あと気になったのが、世の中のパパママは割と子どもを急かすのだなと思った。例えば保育園の送迎で「はやく(車/自転車から)降りて」とか。もちろんそれが悪いってこととは思っていないし、オレもたまにあるけど、子ども最優先で考えてあげないとなと思った。急かす理由はおそらくパパママの仕事があるからとかいろいろあると思う。もっと早起きして余裕もって登園させるとか考えよう。つらいけど。

仕事

今月もテストコードをいっぱい書いた。先月よりもレベルアップしている気がしなくもない。先月みた AWS さんのライブセッションを観てから、関数ごとに以下のようなイテレーションを回せるようになった気がする。これが TDD なのだろうか。TDD 本読もう。はい。

  1. 実装する前に機能を実装するために必要なことをチェックリスト形式でまとめる
  2. 要件をもとにテストコードを作成
  3. テストが FAIL する明白な実装をする(例えば Boolean を返す関数なら return True するだけ)
  4. リファクタリングする
  5. チェックリストを Done にする

なんか、テストコード書くのって設計っぽいなと思った。要件を確認してそれをコードに落とし込むみたいな。TDD 本読もう。

あとは CI を自動化するための検証をしたり、SQL 書いたり、API を実装したりリファクタをしたりした。少しずつコードを書くのに慣れてきて、楽しいと思う時間が増えてきた。良いことだ。

その他

開発チームに異動して半年経つので、そろそろブログにまとめよう。