Yuki Watanabe's Blog

Yuki Watanabe's Blog

エンジニアリングと子育てについて

『データベース・リファクタリング』を読んだ

『データベース・リファクタリング』を読んだ。 最近は書籍の感想をXに投稿することが多いのだけど、本書はあまりにも良い内容だったので感想記事も書くことにした。

読み初めの動機

業務でCloud SpannerやBigQueryのスキーマ設計について検討する過程で、データベース関連の書籍を読み漁っていた。 この過程で読んだ(こちらも良書だったのだが)『失敗から学ぶRDBの正しい歩き方』にて本書『データベース・リファクタリング』が紹介されており、興味を持った。

本書は既に絶版であり売価は定価の2倍ほどで購入するか少し迷ったものの、以前8,800円で購入した『リファクタリング:Rubyエディション』は価格以上の価値をもたらしてくれたことを思い出し、購入に踏み切った。

感想

本書を読んで一番良かった点は、データの移行業務(スキーマの更新、データのマイグレーションどちらも移行業務と表現する)を自信を持って行えるようになったことである。 ソフトウェアエンジニアとして働く上で、データ移行の業務を行うことは誰しもあると思うが、この移行作業は一定のリスクを伴うものでもある。 私はこれまでデータ移行に関して体系だった情報を得たことがなかったため、都度移行方法を調べながら手探りで行っていた。

このデータ移行に関して、『データベース・リファクタリング』はあらゆるパターンとその解法が解説されている。 具体的には、大半のリファクタリングパターンについて以下の構成で記されている。

動機やトレードオフについても記されているため、自分が関わる案件と比較しながらどういった方法がベストかを判断するのに活用できる。少なくとも、本書を読む前と比べると自分の考えに自信が持てるようになった。

一方で私が関わる案件とは親和性が低い技術も多く紹介されていた。トリガーやストアドプロシージャ、計算カラムの利用はそもそもRDMSによって使えなかったりする。使えたとしても、アプリケーション側の責務と捉えることもできるため、使わないケースも多いだろうと想像する。

最後に

リファクタリング系の書籍は、『リファクタリング(第2版)』、『リファクタリング:Rubyエディション』に続いて、『データベース・リファクタリング』が3冊目だったが非常に良い内容だった。 マーティン・ファウラーさんの書籍はどれも学びが多いため、他にも読んでいきたい。とはいえ日本語訳されている書籍は多くはないため、いずれは原著を読む必要があるため少し腰が重い。

エンジニア4年目 2023年振り返り

33歳になりエンジニア4年目を終えた。 例年通り1年の締めくくりとして、2023年の振り返り記事を書いていく。

過去の振り返り

開発

本業

1年前にプロダクトをリードできるエンジニアになりたいという目標を立てたのだけど、この1年間で近づけて来たように思う。 7月からシニアメンバーが異動したため、その後の自分の役割や担当領域が広がっている最中であり、必死にキャッチアップしている。 技術的にはバックエンドを中心に、アプリケーション領域からSRE領域まで少しずつ広げてきた。

今年の新たなチャレンジとして、インターン生のメンターをした。 インターン中は毎日の1on1に加えて、振り返りやペアプロを交えて、なるべく効率よくエンジニアリングスキルややコミュニケーションスキルを伝達できるように努めた。

あと、テックブログを書けたのも良かった。バズったりしたわけではないけど、エンジニアの知り合いから「あの記事見たよ!/良かったよ!」といってもらえて嬉しかった。

engineering.mercari.com

それ以外にも新たなチャレンジをたくさんさせてもらった。特にGCPのコスト削減は1年がかりのプロジェクトであり、完遂できたことは大きな自信となった。結果としてHDの月間表彰に選んでもらうことまでできた。

今年やった主なことは下記。

  • GCPのコスト削減
  • Cloud FunctionsのランタイムをNode.jsからGoへ移行
  • GitHub Actionsを利用したマニュアルDBクエリの効率化
  • Dependabot Grouped Updatedを利用したDependency Updateの効率化
  • 監視からの様々な改善提案(適切なアラートの閾値の再設計等)
  • 採用、メンター

副業

エンジニアになった頃から副業をやってみたいと思っていたのだけど、ついに9月から副業を開始した。 Goを使えることを必須要件にして、追加の条件としてGCPKubernetesも加えて案件を探し、結果として4社様からお声掛けいただいた。 その内一番事業領域として興味のある会計SaaSを提供する会社で業務委託として働かせてもらっている。

懸念だった時間の捻出も意外と余裕であり、平日の夜や土日の朝を活用して月におよそ40時間くらいの稼働をしている。

4ヶ月を終えた現在での感想としては、良い経験をさせて頂いている。 副業先の使用技術は本業と非常に近く、Go,GCP,Kubernetes,Terraformを採用しているため、本業と副業のシナジーが高い。 加えて、自分の知見がそこまで深く無い領域の課題についても設計から担当させてもらっているため、かなりのスキルアップが出来ている。

OpenTelemetryの導入をした際には、当時考えたことを記事に書いたりした。

zenn.dev

今のところ担当した業務はこんなところ。

  • golangci-lintの導入
  • Dependabot Grouped Updatedを利用したDependency Updateの効率化
  • bufを利用したprotoのLint, コード生成環境の導入
  • OpenTelemetryを利用したログの改善

個人サービス

個人で開発している企業情報サイトの技術スタックをリプレースした。 元々はサーバーをRuby、フロントエンドをNuxt.jsにしていたのだけど、仕事で使用機会の多いGoとNext.jsへ移行した。ついでに多言語対応(日+英)もした。

移行とはいえゼロから作るのは大変だったけど、その分学びも多くて楽しかった。

総仕上げとして書いた記事はそこそこ読んでもらえてよかった。

zenn.dev

OSS Contribution

今年は初めてOSSにContributionできた。

golangci-lintやOpenTelemetryのリポジトリに3つのPRを送り、すべてマージしてもらえた。

github.com github.com github.com

ドキュメント修正や簡単なソースコードの修正ではあるのだけど、マージされて全世界の人の目に触れると思うとちょっと嬉しくなる。

英語

今年1番の成長は英語かもしれない。 昨年の11月に学習を開始し、現在まで継続している。

まず、昨年末から発音を中心とした英語学習を開始したら、短期間でリスニング力の向上を実感できた。 それならばと、今まで大の苦手意識があったTOEICも克服できるのではないかと考え早速申し込み、2月に受験した。

前回2020年11月受験時は530点(L225/R305)だったが、今回は740点(L365/R375)まで伸ばすことができた。 長年苦手としていたことを克服できたので、大きな自信に繋がった。

yuki0920.hatenablog.jp

テスト以降は、ビジネス英会話を中心にスピーキングを中心とした学習スタイルに移行している。

7月からは、会社の言語学習プログラムの一環として半年間の英語のコーチングサービスを受講させてもらった。 毎日英文を作成し、音声を録音してコーチに送付し、フィードバックをもらう形式だったが、これによって英文作成力とスピーキング力が底上げされた。

最近は英語の技術ドキュメントや翻訳ツールを使わずに読めるようになり、英語の技術書も4-5冊読めた。英語学習によって技術のインプット効率も上げられたのは良い誤算だった。

yuki0920.hatenablog.jp

英語学習のざっくりとしたタイムスケジュール。

  • 1-2月: オンライン英会話、TOEIC対策
  • 3-6月: オンライン英会話、シャドウウィング
  • 7-12月: 英語コーチン

プライベート

育児

子供が2歳になり、やっと歩けるようになった。(少し成長遅め) これによって、行動範囲が広がり旅行にも何度か行けて、新たな楽しみを見出している。

こちらは11月の横浜旅行の時のアンパンミュージアムの写真。

ゲーム

昨年から変わらずスプラトゥーン3を毎日やっている。 恐ろしいことに、昨年9月に発売されたにも関わらず総プレイ時間が700時間を超えている。

どうやら自分は1回5分程度で終わるスプラトゥーンのようなゲームが好きらしい。 来年はこうした短時間で完結するアクションゲームを他にも試してみたいな。

まとめ

今年は開発や英語において多くの新しいチャレンジができた。 来年も楽しみながら色々な技術を学んでいきたい。

2023年買ってよかったもの

2023年に買ってよかったもの、使ってよかったサービスを書く。

デスク用品

FILCO 分割キーボード

元々使っていた分割キーボード「Mistel BAROCCO MD770」からFILCOの新作分割キーボードの「FILCO Majestouch Xacro M10SP」に乗り換えた。 前のキーボードはかなり気に入っていてそこまで不安はなかったのだけど、他のも試してみたいという理由で買い替えた。 感想としては、生産性に変わりはほぼ無いが、打鍵感が良くなった気はする。

今回は、Functionキーや矢印キーが省略されている70%のキーボードであり、FNキーと組み合わせることでフルサイズのキーボードと同等の入力を可能にしている。そのため打鍵になれるのに3日程度かかあったが、今ではなんてこともなくタイピングできている。

BenQ スクリーンライト

読書時に手元が暗いのが気になっていて、モニターにつけられるライトをほしいと思っていた。 できるだけ配線はなくしたかったので、スイッチが無線タイプのBenQのライトを購入した。

スクリーンを中心に手元まで明るくなるため、作業の快適度が非常に上がった。 特に、自分は43インチと大きめのモニターを使っていて、四隅の暗さが気になることがあったが、このライトによって隅まで照らされていていい感じ。

M1 Macbook Air

個人用PCとしてメルカリでMacbook Airを購入した。

  • 13 inch
  • メモリ: 16G
  • SSD: 512G

16GBのメモリだと、43インチディスプレイに接続時にメモリ不足とならないか不安だったけど、なんとかなった。 同じメモリ容量のIntelMacを使っていた際はディスプレイに接続すると露骨に動作が遅くなっていたことを考えると、さすがM1といった所。

Dockerを起動してのフロントエンド、バックエンド開発も卒なくこなせていい感じ。欲を言えば、M2のメモリ24GBのMacbook Airが欲しかったが、今のところは満足している。

Xiser Pro ステッパー

知人の勧めで、ハイグレードなステッパーを購入した。 負荷を調整できたり、なめらかにステップを踏めたりと効率的かつ快適に使用することができている。

こういったトレーニンググッズはお蔵入りになる可能性が高いが、購入後半年経っても未だに週に2回以上は使用している。 仕事の合間のリフレッシュしたい時や休日運動不足のときなどに、英語を聞きながらステップを踏むのが日課となっている。

その他

パナソニック食洗機

今年ダントツで一番買ってよかったのは食洗機だった。 食洗機を購入したことで、1日30分以上の時間が生み出されている。 食器洗いは毎日2回行っているけど、食器を洗う時間、乾かす時間がが激減した。

ちなみに、電源はキッチンにはないため、(業者いわくグレーではあるが)延長ケーブルを使用している。 購入したモデルはスリムモデルであるため賃貸の我が家の手ざまなキッチンにもなんとか収まった。

ヒゲ脱毛

ヒゲが似合わないため毎朝剃っていたが、この頻度を減らすためにヒゲ脱毛へ通い始めた。 初回から大きな効果を感じており、6回通った現在はヒゲ剃りの頻度が3~4日に1度まで減っている。 5回通った後は3ヶ月に1度の頻度で3年間通えるコースに入会したため、まだ10回程度は行く予定。

ちなみに、口コミや立地を調べ上げた上でメンズエミナルというところに通っている。 知人紹介キャンペーンのクーポンがあるので、気になる方は連絡ください。

エクスプロージョン プロテイン

プロテインは毎日飲んでいて、もともとMyProteinを愛飲していた。ただ、MyProteinの価格が高騰していることと梱包が雑であることを理由に、別のプロテインへの乗り換えを検討していた。 Amazonのセールの際に比較的安価で高評価のエクスプロージョンのプロテインを購入してみたら最高だった。溶け残りが無いし、味も良い。

2023年に読んで良かった書籍

2023年に読んでよかった書籍の感想をまとめて書く。 基本的には個別の読書感想記事に書いているのだけど、多読をしている都合で記事にしそびれた書籍が多かったため、この記事にて供養する。

英語上達完全マップ

  • 読んだ時期: 2023年1月
  • きっかけ: 英語の学習を本格的に始めるに当たり、体系的に英語学習法を知るために読んだ。

TOEICのスコアは本質的な英語力に連動して高くなるものであり、小手先のテスト対策に注力すべきではないと知れた。元々英語の勉強は好きだったのだけど、TOEICのテスト対策が嫌いだったので、本書の考え方を信じて本質的な英語力向上にフォーカスしてみようという気にさせてくれた。

Go言語プログラミングエッセンス

  • 読んだ時期: 2023年5月
  • きっかけ: 当時は現職でGoを書く機会が少なったため、Goの基本をおさらいするために読んだ。

Goの基本・ベストプラクティスがまとまっていて良い書籍だたった。Goの基本の書籍だと『初めてのGo言語』や『スターティングGo言語』など読んだことがあったけど、読みやすやさと最新であることを考慮し、本書が一番適していると感じた。Go初学者の方にはまっさきに本書を読むことを勧めている。

TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発

  • 読んだ時期: 2023年6月
  • きっかけ: 個人開発のフロントエンドをNuxt.jsからNext.jsへリプレースしたいと思い立ったが、TypeScript, React, Next.jsを業務で使用したことがないため、これらのキャッチアップのために読んだ。

TypeScript, React, Next.js全部入りなのが良い。その分それぞれの内容が濃いわけではないので、ドキュメントによるキャッチアップは必要である。また、Next.jsは Page Router による解説がされているが、最新のNext.jsでは App Router が推奨されている。そのため、App Router を使う場合は別途学習が必要となる。

人が増えても速くならない ~変化を抱擁せよ~

  • 読んだ時期: 2023年8月
  • きっかけ: 前から同ジャンルで有名な『人月の神話』を読みたいと思っていたが、Kindle版では固定レイアウトでしか読めないため買い渋っていた。著者の倉貫義人さんはブログを度々拝見し、勉強させていただいていたので、ぜひ読みたいと思った。

専門用語を使わずに、ソフトウェア開発の難しさを理解するために適した本だと感じた。エンジニアとして、ビジネスサイドの方と折衝する場合などに、非常に役立つと思う。

世界一流エンジニアの思考法

  • 読んだ時期: 2023年11月
  • きっかけ: エンジニアとして成長するには優秀なエンジニアのスキルや所作を学ぶのが一番と考えている。そのため、一流企業(Microsoft)のエンジニアの思考法について興味を持った。

トップ企業のプリンシパル、シニアソフトウェアエンジニアの思考プロセスを知れ、自分の仕事の進め方に活かせる点が多かった。例えば、エラーが起きた際にシニアなエンジニアはログを注視して仮説を立ることに時間を使うなど。自分の場合、すぐに手を動かしてしまう悪癖があることをしれたので目下改善中である。

こののエピソードはこちらの記事で触れられている。

プログラミングというより物事が出来るようになる思考法|牛尾 剛

オブザーバビリティ・エンジニアリング

  • 読んだ時期: 2023年11月
  • きっかけ: 携わっている開発案件でログに関する課題がありOpenTelemetryの導入を決めた。OpenTelemetryをより効果的に使うため視野をより広げたいと考えて、オブザーバビリティのキャッチアップをするために読んだ。

従来のモニタリングとオブザーバビリティエンジニアリングが異なるというのが繰り返し述べられているのが印象的だった。従来の手法は既知の問題にしか対応できないが、分散システムにおいてはオブザーバビリティエンジニアリングによって未知の問題にも対処しやすくなる、と記されていた。より具体の話だと、高ディメンションなトレース情報が有用であるということを知れ、OpenTelemetryの計装に活かすことが出来た。

Python Distilled

  • 読んだ時期: 2023年11月
  • きっかけ: 携わっている開発案件でPythonを触る機会があり、言語仕様のキャッチアップをするために読んだ。

Distilled(蒸留された)のタイトルにある通り、Python特有の言語仕様にのみフォーカスされていて、まさに知りたいことがピンポイントで書かれていた。一般的なPythonの書籍はかなり基本的な内容にページ数を割いている事が多く、イチから読むには効率が悪すぎると感じていたので、本書は正しく求めていた本だった。

ChatGPT/LangChainによるチャットシステム構築

  • 読んだ時期: 2023年12月
  • きっかけ: LLMを使ったソフトウェア開発について今更ではあるがキャッチアップの必要性を感じて読み始めた。ChatGPTやGitHub Copilotの支援を受けて開発はしているが、もっと踏み込んでLLMを使ってみたくなった。

統計や機械学習の知識がなくても通読でき、OpenAI API/LangChainを用いたサービス開発の基礎知識を得られた。サンプルのソースコードの解説が非常に丁寧であり、挫折しないように工夫されている点がとても良かった。

番外編) 感想を書いた書籍

まとめ

今年はアウトプットが多めの年だったので、例年より読書量が減ってしまったかなと思っていたけど、書き出してみると意外と多かった。 来年もアウトプットとインプットのバランスを大切にしながら、たくさん本を読んでいきたい。

『Go言語 100Tips』を読んだ

『Go言語 100Tips ありがちなミスを把握し、実装を最適化する」を読んだので感想を書く。

読み初めの動機

本書を読み始めた動機は、業務でGoを1年以上書いているもののGoを使いこなせている感がなく、より深い知識をほしいと考えたからだ。 ここでいう"使いこなせている"とは、複数の書き方が考えた上で柔軟性・堅牢性が高い、書き方を知っている、くらいの感覚で使っている。

思い返すと以前の職場ではRubyを書いていて、ある程度使いこなせている感を得られていた。 おそらく仕事の傍らでRubyの言語仕様やベストプラクティスに関する本を何冊も読んだからであり、具体的には、『リファクタリング: Ruby エディション』や『Effective Ruby』、『メタプログラミングRuby』などの通読より一定の知見を得られていた。

1年前に原著『100 Go Mistakes and How to Avoid Them』の存在を知り、会社のSafari Booksを利用して少し読んでみたのだけれども、難易度の高いテーマを英語で理解するのに挫折してしまった。 内容が良いことは知っていたので、日本語訳版である『Go言語 100Tips ありがちなミスを把握し、実装を最適化する」の存在を知り、購入に至った。

感想

まず感想を一言で述べると、非常に良かった。 書籍のタイトルの通り100のTipsが紹介されているが、それぞれのTipsごとにおよそ下記のように構成されている。

  1. Bad practice
  2. Badである理由の解説
  3. Good practice
  4. Goodである理由の解説

そのため、解説を見る前に、なぜBadなのだろうか?なぜGoodなのだろうか?の思考をするStepを挟むことができ、その後の解説を読んだときの答え合わせ感がとても楽しいし、記憶に残りやすく感じた。

そして、タイトルには100のTipsとあるが実際にはメインの100Tipsに関連した豊富な豊富なサブTipsがある。

例えば、5つめのTipsである「インターフェース汚染」に関しては、下記の3つのサブTipsから構成されている。

  • インターフェースの概念
  • インターフェースを使う場合
  • インターフェース汚染

個人的に一番面白かった章は、第12章の「最適化」だった。難しい内容が多かったが、例えば構造体のFieldの順番によって確保されるメモリ量が異なるというのはなるほど、となった。 この章は主にCPUヘビーな処理をする際の最適化について述べられており、自分の関わるプロダクトではそこまでCPUヘビーな処理はないのだが、もし今後そういったタスクをやることになったらある程度自信を持って取り組めるのではないかと思う。

著者のTeiva Harsanyiさんは、AmazonのプロフィールによるとGoogleのSenior Software Engineerのようだ。GoはGoogle発であるため、Googleのエンジニアが書いているとなると、本書の信頼度は非常に高いように思う。

最後に

通読後には、コードを書く際やレビューする際に、テストしやすいか?パフォーマンスがよいか?と自問し、他のオプションも検討できるようになってきた。 これは元来感じていたGoを使いこなしている感を少しずつ得られているとも言える。こうした書籍は実際の課題と対峙することでより一層定着する面もあるため、1年後くらいにまた読み返してみたい。

『Web APIテスト技法』を読んだ

『Web APIテスト技法』を読んだので感想を書く。

読み初めの動機

本書を読み始めた動機はいくつかある。

  • Web API(マイクロサービスのバックエンド)の開発に携わっているため業務に活かせそうな点が多い
  • ソフトウェア開発の中で特にテスト領域に関心があり、中長期のキャリアでSETのキャリアに興味がある

私はテストの分野に強く興味を持っている。開発する際は大半のケースでテスト駆動開発を採用しているし、業務ではテスト基盤の改善を行い、記事を書いたりもしている。

engineering.mercari.com

最近、Software Engineer in Test(SET)というキャリアがあることを知りひっそりと興味を持っている。職務としては、

  • テストの自動化
  • CI/CDの構築
  • テスト基盤の整備

など幅広いようだ。

中長期でのキャリアのためにテスト分野に関するインプットをしておきたいと考えて、本書を手に取った。

感想

『Web APIテスト技法』は自分にとって良い書籍であった。

狭義のテスト技法ではなく、Web APIに必要とされるあらゆるテストをカバーしている。

  • テストを上流からと捉え、テスト戦略の立案に多くのページが割かれている
  • 広範なツールの紹介とその扱い方についても触れている

一番強く印象に残った一節はこちら。

品質とは、ある大切な人にとってのある時点での価値のことである。

テストとは品質を担保するための手段であるため、その品質とはなにか?という点から問う必要があることを知れた。 引用にある通り品質とは評価者に依存するため、ユーザー理解がとても必要であるということとも言える。

ユーザー理解まで範疇を広げると、もはやプロダクトマネジメントの領域にも近くなってくるし、テストに関わる領域は幅広くて面白いなと感じた。


翻訳者は「長尾 高弘」さんという方。訳書にありがちな違和感が全く無くて読みやすかった。

ちなみに、長尾さんは非常に多くの訳書を手掛けられている。 私はこの方の書籍を何冊も読んだことがあり、良かった書籍を紹介しておく。

  • 『Effective Ruby
  • リファクタリング:Rubyエディション』
  • 『SOFT SKILLS ソフトウェア開発者の人生マニュアル』
  • 『CAREER SKILLS ソフトウェア開発者の完全キャリアガイド』
  • 『モブプログラミング・ベストプラクティス ソフトウェアの品質と生産性をチームで高める』

今後

Web APIのテストには広範な知識が必要であることを認識できた。 本書ではセキュリティテストやパフォーマンステストについても触れられていたが、特にパフォーマンステストは知見が少ない分野であり強化していきたいと考えている。

『みんなのフィードバック大全』を読んだ

『みんなのフィードバック大全』を読んだので感想を書く。

ソフトウェア開発には組織の成長が重要であり、その観点からソフトウェアエンジニアとしてこの書籍を読めたのは大きな財産とった。

読み初めの動機

所属のチームには8月からインターン生を受け入れる予定であり、自分がメンターを担当する。 メンターにはフィードバック力が欠かせないとのことで、チームのEM(Engineering Manager)から奨められたため、読み始めた。

感想

良かった点は、フィードバックを「する」側の視点はもちろんのこと、フィードバックを「される」側の視点も学べたこと。

フィードバックをする際には、2つの側面から相手の反応を見ながらするのが良いというのは学びだった。

  • ポジティブフィードバック: 良い言動に対して称賛
  • ギャップフィードバック: 現状と理想のギャップに対してのアドバイス

どうしてもフィードバックというとギャップフィードバックに偏りがちであり、これからはポジティブなフィードバックもしていくべきと感じた。

また、自分の成長のためには他者からのフィードバックは非常に重要であるとの気づきを得た。 できるだけ自分にフィードバックしやすい雰囲気を作るべく、たとえ耳が痛いフィードバックをもらっても、感謝の意を示すことを忘れないようにしようと思った。

今後

『みんなのフィードバック大全』を通読し、フィードバックに関する知識を得ることができた。 これからは日々の1on1や振り返り等での自分の振る舞いに活かしながら、自分とメンバーの成長のサイクルをつくていきたい。