msksgm’s blog

msksgm’s blog

Webエンジニアです。日々の勉強記録、技術書感想、美術観賞感想を投稿します。

2022年8月の振り返り

概要

2022 年 8 月の振り返りです。

以下を目標に掲げていました。

msksgm.hatenablog.com

目次

生活習慣

筋トレ

今月も継続していましたが、ベンチプレス、スクワット、デッドリフトの全てにおいて重量継続でした。 3 ヶ月ぐらい同じ重量なので、向上がみられずこまっています。

種目 重量(今月トライする重量) 結果 8 月時点の目標
ベンチプレス 80kg * 8 回 * 3 セット 80kg * 1~3 回 * 3 セット 85kg * 8 回 * 3 セット
スクワット 90kg * 8 回 * 3 セット 90kg * 3 回 * 3 セット 90kg * 8 回 * 3 セット
デッドリフト 90kg * 8 回 * 3 セット 90kg * 3 回 * 3 セット 90kg * 8 回 * 3 セット

勉強時間

勉強時間の結果です。 今月は、約 101.6 時間でした。 先月は約 152.4 時間時間だっため、だいぶ勉強時間が減ってしまいました。 理由は連休を利用して旅行に行ったこと、3 週目に 2 日間入院していたこと、残業が増えていたことが重なったためです。
来月は旅行の予定もないので、安定して勉強時間を確保したいですが、残業が 9 月いっぱいまで続きそうなので、来月もこのような勉強時間になると考えています。

項目 1 週目 2 週目 3 週目 4 週目 5 週目
平日朝の勉強時間 約 13.3 時間(32 ポモドーロ) 約 7.5 時間(18 ポモドーロ) 約 9.17 時間(22 ポモドーロ) 約 5 時間(12 ポモドーロ) 約 3.33 時間(8 ポモドーロ)
平日夕方の勉強時間 1 時間 0.5 時間 1.5 時間 1 時間 0
休日の勉強時間 約 10.0 時間(24 ポモドーロ) 約 4.58 時間(11 ポモドーロ) 約 5 時間(12 ポモドーロ) 約 8.33 時間(20 ポモドーロ) 0 時間
RealWorld ペアプロ 7 時間 5 時間 4 時間 7 時間 2 時間
「レガシーコード改善ガイド」勉強会 0 時間 1.5 時間 1.5 時間 1.5 時間 1.5 時間
connpass の勉強会 0 時間 0 時間 0 時間 0 時間 1 時間
合計 約 31.3 時間 約 18.6 時間 約 21.2 時間 約 22.8 時間 約 7.68 時間

勉強関連

勉強関連 概要

今月も Kotlin と設計に注力しています。

注力分野

Kotlin

今月も RealWorld を Kotlin で実装することで Kotlin の知見を深めていました。 8 月末完成を目指していました。 しかし、DDD とテストの観点から仕様以上に考慮すること増えたのと、残業が増えたため、結局終わりませんでした。 進捗的には、9 月末ぐらいに終わりそうなので引き続き取り組んでいきます。

上旬ぐらいまで、「Kotlin イン・アクション」を読んで Kotlin の本質的なことを学んでいました。 前半部分を読み切り、Kotlin ではなぜそうなっているのかを知ることができて有益でした。 優先度的に一旦積読していますが、後半部分も読みたいと考えています。

設計

「レガシーコード改善ガイド」の勉強会をしており、全 6 回中の 4 回目を終わりました。 「リファクタリング第 2 版」と異なり静的型づけ言語で interface が実装されている言語でリファクタリング方法が紹介されているため、実践しやすいです。 レガシーコードをリファクタリングする際の金言がまとめられており、普段の業務でリファクタリングを推し進めているので刺さる部分が多かったです。 普段何気なく使っている用語をまとめたり、やっていることを言語化できたりと得られるものがおおいです。アーキテクチャ図の作成やストーリーの説明など明らかに効果があるのにやってこなかったことは反省しました。 しかし、C++や C 向けのリファクタリングは読み飛ばしてしまいました。

読書

読書概要

設計関連と Kotlin の書籍を読んでいましたが、今月はあまり読めませんでした。 来月から、デザインパターンの書籍を読みたいです。

読んだ本

「レガシーソフトウェア改善ガイド」

他の書籍に紹介されていたので、読み始めました。 リファクタリングの戦略的な部分の説明ですが、章で書いてある内容が薄かったり、逆に具体的すぎて参考にできなかったりしたため、正直読まなくてもよかったなと思いました。 あくまで現段階の感想なので、今後読み返してみると何か得られる可能性があります。

「レガシーコード改善ガイド」

勉強会の課題図書のため読み始めました。 9 月に読み終わります。

「Kotlin イン・アクション」

Kotin の勉強のために読みました。 非常に読みやすい本で、内容も本質的なので気に入っています。 あまり売れなかったのか、絶版になっているのが残念な点です。 今月中に読み切りたかったですが、残業のため読み切れませんでした。 9 月から 10 月を目処に読み切りたいと考えています。

美術展

バーバリー X ブルーピリオド

美術展ではないですが、表参道でブルーピリオドがバーバリーコラボをしていたため、行きました。 2 年前ぐらいから追い続けている作品がさまざまな垣根を超えたコラボをしていることが感慨深いです。

jp.burberry.com

目的の 1 つでもあった、ブックレットも貰えました。 記念にどれか商品を購入しようと考えましたが、価格的に手がでませんでした。またリベンジしようと考えています。

技術記事の作成

今月も作成していないです。 現在は書くことを目的にしていないので焦りはありませんが、「書けたら書こう」だと本当にかけないなと実感しています。

その他

connpass の勉強会

以下の LT 会に参加しました。

love-kotlin.connpass.com

まとめ

仕事の比重が重く Kotlin と設計の両方において、あまり時間をかけられなかった 1 ヶ月でした。 食物アレルギーで入院してしまったのも、勉強時間が減る原因になってしまいました。 そんな中でも、業務では使わない Kotlin を継続的に学ぶことができていますし、設計も名著の勉強会によって知見を深められていると考えています。 来月いっぱいまで似たような状況になるため、進捗があまり良くない状況になりますが、継続が途切れないようにしていきたいです。

仕事の面では、改善活動を引き続き続けています。 フィードバックの機会を増やすために朝会やレトロを追加したり、設計標準によってコーディング的な指針を決めたりと正しい方向には向かっていると考えています。 ただ、短期的なスパンではスピードが落ちているため、現状は苦しい状態です。 中長期的には投資コストを回収できるはずなので、めげずにやっていきます。

まとめると、7 月時点でリターンが少ない 1 ヶ月だと記述しましたが、今月はさらにリターンが薄い状態になってしまいました。 来月は仕事の期末評価でもあるので、プライベートと仕事の両方で区切りをつけたいです。

2022年8月の目標

概要

8 月の目標です。

生活習慣

ジム通います。引き続き、ベンチプレス、スクワット、デッドリフト全ての重さにおいて継続です。 回数を持ち上げられるようにします。睡眠時間や睡眠の質も大事に思えるので、そこらへんも意識します。

種目 重量(今月トライする重量)
ベンチプレス 80kg * 8 回 * 3 セット
スクワット 90kg * 8 回 * 3 セット
デッドリフト 90kg * 8 回 * 3 セット

勉強関連

以下を勉強していきます。特に「Kotlin イン・アクション」は少しずつでも読み進めて完読を目指します。

  • Kotlin
    • RealWorld の作成
    • 「Kotlin イン・アクション」
  • 設計
    • ドメイン駆動設計
    • 「レガシーコード改善ガイド」
    • 「レガシーソフトウェア改善ガイド」

読書

「レガシーコード改善ガイド」「レガシーソフトウェア改善ガイド」と設計関連、組織論関連の書籍を読みます。

美術展

  • 「ブルーピリオド展」(3 回目)

技術記事の作成

余力があれば 1 記事ぐらい作成。

2022年7月の振り返り

概要

2022 年 7 月の振り返りです。

以下を目標に掲げていました。

msksgm.hatenablog.com

目次

生活習慣

筋トレ

ジム通います。ベンチプレス、スクワット、デッドリフト全ての重さにおいて目標を達成できなかったです。 やり方を変える必要性を実感してきました。

種目 重量(今月トライする重量) 結果 7 月時点の目標
ベンチプレス 80kg * 8 回 * 3 セット 80kg * 1~3 回 * 3 セット 85kg * 8 回 * 3 セット
スクワット 90kg * 8 回 * 3 セット 90kg * 3 回 * 3 セット 90kg * 8 回 * 3 セット
デッドリフト 90kg * 8 回 * 3 セット 90kg * 3 回 * 3 セット 90kg * 8 回 * 3 セット

勉強時間

勉強時間の結果です。 今月から 1 週間ごとに計測結果を出しました。 今月は、約 152.4 時間でした。
土日に予定もあまりなく、1 日平均 5 時間程度だと考えると、だいぶ勉強時間を確保できました。 先月は予定が詰まっており勉強時間 100 時間程度だったことを考えると十分勉強できたと考えています。 無理に勉強する月を作らずに安定して、勉強時間を確保していきたいです。

項目 1 週目 2 週目 3 週目 4 週目 5 週目
平日朝の勉強時間 約 3.33 時間(8 ポモドーロ) 約 12.5 時間(30 ポモドーロ) 約 13.3 時間(32 ポモドーロ) 約 10 時間(24 ポモドーロ) 約 11.7 時間(28 ポモドーロ)
平日夕方の勉強時間 0 時間 0 時間 約 1 時間 約 0.5 時間 0 時間
休日の勉強時間 約 13.3 時間(32 ポモドーロ) 約 11.3 時間(27 ポモドーロ) 約 9.17 時間(22 ポモドーロ) 約 21.1 時間(2 時間 + 47 ポモドーロ) 13.8 時間(33 ポモドーロ)
RealWorld ペアプロ 約 4 時間 約 7 時間 約 4 時間 約 6 時間 約 4 時間
リファクタリング 第 2 版」勉強会 0 時間 約 1.5 時間 約 1.5 時間 約 1.5 時間 約 1.5 時間
connpass の勉強会 0 時間 0 時間 0 時間 0 時間 0 時間
合計 約 20.6 時間 約 32.3 時間 約 29.0 時間 約 39.1 時間 約 31.5 時間

勉強関連

勉強関連 概要

7 月から基本的に Kotlin と設計に注力しています。 たまに、Next.js にも時間を割いています。

注力分野

Kotlin

RealWorld の実装によって、サーバーサイド Kotlin を学びました。 主に学べたことは以下です。

  • DDD を意識した実装(エンティティ、値オブジェクト、リポジトリ、UseCase 層から返す型、QueryModel、etc...)
  • DBRider を用いた DB テスト
  • arrow を用いたエラーハンドリング
  • GitHub の Squash and Merge、Git の rebase、ブランチ戦略

逆に以下のことがわからなくなってしまいました。

勉強の一環として、ドメイン駆動設計 サンプルコード&FAQを読み返しました。 今まで Kotlin を用いた戦術的 DDD の実装をしていなかったため、初めて読んだときにはよくわからなかったんですが、Kotlin を学んだ後に読み返すと参考になる部分がおおかったです。

Kotlin のシンタックスを学べても Kotlin の本質を学べていない気がするので、「Kotlin イン・アクション」を読もうと考えています。

設計

今月は主に 2 つの取り組みをしました。 1 つ目は、職場での「設計標準」の導入です。 設計標準とはログラスさんが実践している取り組みで、以下の定義がされています。

  • あくまで守られるべき「規約」として強制するのではなく、軸として考えるための「標準」
  • チーム全体で考えて意思決定の結果と根拠を残していくことが目的

引用: チームで高品質なコードを追求するための「設計標準」の育て方

導入理由は、DDD のためのドメインモデリングをしているうちに、DDD 以前に根本としてチームの設計意識を高める必要があると考えたからです。 導入した結果、開発側のステークホルダー全員を議論に参加させる場を作ることに成功しました。 こういった、DDD の書籍に載っていないプラクティスを行なっていると、DDD はあくまで手法の 1 つなんだと、改めて実感しました。 最初は参加や発言しづらい雰囲気がありましたが、現在では改善がみられています。 週 3 日程度で実践していますが、運用して 1 ヶ月も経過していないので効果は実感できていないです。しかし、議論することがなくなるまで、そして設計意識を高めるために継続します。

2 つ目は、「リファクタリング第 2 版」の勉強会が終了しました。 5 週間かけて、リファクタリングを体系化し、根拠と名前づけが可能になったので、積極的に活用していきたいです。 しかし、書籍を読んで自分にはリファクタリングに必要なテスト能力が足りないと思いました。 プログラミング言語に対するコードの理解力や、テスト設計の考え方が足りないと実感することが多いです。設計力を向上させるために、それらの方向にも注力していきたいです。 特に以下の資料を参考しようと考えています。資料に触発されて、バイザーの「ソフトウェアテスト技法」を読み始ましたが古典的ないいまわしや内容が非常に読みづらく積読してしまいました。

note.com

他に実感したことは、設計の勉強を通じて、自分がやりたかったことや実現したいことはオブジェクト指向だったことです。 そのため、以下の本を読み直しました。

どれも実用的でしたが、さらにレベルアップするには、将来的に「ThoughtWorks アンソロジー」と「オブジェクト指向入門第 2 版原則・コンセプト」の読破が必要になることがわかりました。 それを踏まえた上で次の段階にいきたいです。 現段階で次にやることは以下の書籍を読むことです。

読書

読書概要

設計や組織論の本を読みました。 特に「エクストリーム・プログラミング」は感銘を受け、チームに導入しようとしています。

感想文を書いた以外で、軽く読んだ本は以下があります。

来月も引き続き、設計と組織論の本を読んでいきます。

読んだ本

「1on1 大全」

OJT のメンターになったため、1on1 を学ぶために購入しました。 非常に参考になる部分が多く、上長との 1on1 を向上させるために、上長にも読んでもらい 1on1 の質向上に役立てました。

「プリンシプルオブプログラミング」

msksgm.hatenablog.com

エクストリームプログラミング

msksgm.hatenablog.com

リファクタリング 第 2 版」

msksgm.hatenablog.com

美術展

ブルーピリオド展

2 回目いきました。1 回目は知人といったので、今回は 1 人で音声ガイドも購入していきました。 1 つの音声ガイドに 2 種類用意されていました。1 つ目が通常パターンで、2 つ目が登場人物(アニメ版の声優がキャラクターとして喋ってくれる)のパターンです。 全ての項目で 2 つとも聞きましたが、前者はより客観的に見ることができ、後者は没入感を持って楽しむことができました。 特に、登場人物の解説だと漫画とアニメの両方で描かれなかった感情を知ることができ、また 1 つブルーピリオドに詳しくなれました。

技術記事の作成

今月は特にありませんでした。 Arrow の使い方はそのうちまとめたいと考えています。

その他

connpass の勉強会

今月は不参加でした。 Server-Side Kotlin Meetup に参加しそびれてしまったので、次回は参加しようと考えています。

資格

情報セキュリティマネジメント試験に合格しました。 合格感想を zenn にまとめようと考えています。

まとめ

Kotlin に時間をかけられた 1 ヶ月間でした。 基本的な Web API の作り方は学べたと考えています。 共同制作している方に頼りっぱなしなので、トランザクション込みの DB テスト、Spring の仕様、Kotlin の本質的な部分をあまり理解できていないです。 また、DDD を実践していく際に詰まった部分も多く、話し合っても解決できないです。 10 月から予定していた業務での PHP から Kotlin リプレイスが延期してしまったため時間的余裕はあるのですが、第 3 者に説明したり実装できるか不安な状態になってしまいました。

設計に関しては、設計標準を導入することで一定の共通認識を持てたり、課題を話しやすい場を作ることに成功しました。XP をチームに導入しようとしており、「インクリメンタルな設計」を達成しつつあるのではと考えています。
個人的な勉強では、「リファクタリング第 2 版」を読み終えました。 言語は JavaScript ですが、オブジェクト指向の要素が強く、高凝集疎結合ソースコードオブジェクト指向と関係があることを再認識できました。 現在、職場のコードをリファクタリング中なので引き続きリファクタリング関連の書籍を読んでいきます。

先月と比較して、勉強時間を増やせました。 zenn に週 1 記事投稿もやめたので、ソースコードへのアウトプット時間も増えました。 しかし、目標にコミットできているかと言われたら微妙なラインです。 RealWorld を Kotlin で実装するのも、中弛みしたらよくないので来月を目処に完成を目指します。
設計は個人的なインプットにおいては順調なんですが、仕事に活かせていません。 設計標準も決めていけているので 1 つのタスクに対してリファクタリングを盛り込みたいです。

まとめると、勉強時間を伸ばすことができましたが、リターンが少ないと実感した 1 ヶ月でした。 8 月にかけてリターンを得られるように方針を決め、9 月は期末なので知識をまとめられただけでなく、職場にコミットできるようします。

2022年7〜9月の目標

概要

7 月の初めに投稿するのを忘れていました。 7 月〜9 月の目標です。

7〜9 月の目標

生活習慣

早寝早起きとジム通いとランニングをします。 ベンチプレス 80kg、スクワット 90kg、デットリフト 90kg の重量を継続して何回も持ち上げられるようにします。 ランニングは可能な限りやっていきます。

勉強関連

以下を勉強していきます。

読書

勉強と同様に Kotlin と設計です。他にはテストや設計も読んでいきます。

美術展

月 1 で行く予定です。

技術記事の作成

特に、目標を決めずにまとまりそうだったら、まとめて行きます。

まとめ

7 月と 8 月の終わりに随時更新します。

「リファクタリング第 2 版」感想

概要

リファクタリング第 2 版」を読みました。 「前提(目的、前提知識)」「読了時間」「感想」「次に関連で勉強すること」「まとめ」を記述します。

前提

目的

主な理由は以下です。

  • さまざまな書籍で紹介されるため、読みたかった
  • 自身が興味のある設計やドメイン駆動設計の文脈でも紹介されることが多かった
  • 業務でリファクタリングが必要なコードと遭遇することが多く、リファクタリングそのものを学びたかった

前提知識

設計関連(主に DDD)では以下の書籍を読んでいました。

リファクタリングについて時間をとって勉強しようと思ったのは以下の書籍などがきっかけです。

読了時間

5 週間かけて勉強会を開催しており、毎週 4 ~ 6 時間の準備時間と当日は 1.5 時間かけていました。 そのため、だいたい 32.5 時間ぐらいかけて読み切りました。

感想

リファクタリングができるパターン(不吉な臭い)と、一般的なリファクタリング方法が網羅されており非常に参考になりました。 当初の目的を達成し、リファクタリングについては、どの本よりもまず最初にこれを読むべきだとおすすめできるぐらいになりました。 しかし、オブジェクト指向OOP)について関心がなかったり普段使用している言語が OOP じゃなかったりすると、読み進めるのが難しかったり参考にならなかったりする可能性があります。 よかった点と気になった点について記述します。

よかった点は 3 つあります。
1 つ目は、リファクタリングを単に紹介するだけでなく、適用するための周辺知識や逆パターンなども記述されていることです。 一般的な記事や書籍では「このような場合は、こうやったらできます」で終わってしまうパターンが多いです。この書籍では、「なぜ」を深堀しており、やりすぎてしまったら逆に戻すパターンも紹介されています。 カタログのサンプルコードも長すぎず、解説が理解できなかったら簡単な写経で解説に沿った手順でリファクタリングを理解できます。 「一旦試す」「相談する」「確定する(or 戻す)」の流れをこの本を読むことで可能になると思いました。 これはリファクタリングに明確な対処法があるわけではなく、時間経過と共に再度設計し直さなければならないことを認識できました。 個人的には、式を変数で定義またはインライン化なのか迷う場面が多かったんですが、「「変数の抽出」を検討するのは、コードないの式に名前を付けたいときです。」と記述されており 1 つの基準を持てました。
2 つ目は、リファクタリングだけでなくソースコードを書くときに意識するべき金言がいたるところにあることです。リファクタリングの言葉の定義(外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変化させること)だけでなく、以下のような言葉が記述されていました。

  • すばらしいコードもリファクタリングを必要とする
  • リファクタリングは、コードベースがどれだけ美しいかだけではなく、純粋に経済的な基準で測られるものです
  • (不吉な臭いに「コメント」を上げた理由として)ここでコメントについて言及しているのは、コメントが消臭剤として使われることがあるからです
  • (いつコードを独立した関数として取り出すかという議論に対して)しかし、最も納得できるのは意図と実装の分離です
  • etc

ほんの一部抜粋で、他にも核心をついた言葉がたくさん紹介されています。 これらを意識するだけでも、意識する前とソースコードに質が変わることは間違いありません。

3 つ目は、OOP についてです。言語は JavaScript ですが、途中から実践していることが手続き的な書き方から OOP による高凝集疎結合な設計になります。 具体的にはカプセル化、オブジェクトの受けた渡し、サブクラスの作成、条件分岐の明確化、ポリモフィズムなどです。 Martin Fowler による OOP を意識した設計は、リファクタリングに限らないコーディングの指針になります。 DDD を長い期間にわたって学んできたことから、OOP に強い興味をもっているため、予想していない部分で知見を得られました。

気になった点は 3 点あります。
1 つ目は、テストコードがないことです。 振る舞いが変わらないことを確認するためにはテストコードが必要ですが、序盤を除けば中盤以降のカタログの部分にテストコードがありません。 カタログの内容が途中で正しく写経できているのかわからなくなったときにテストコードで確認できないため、リファクタリングの効果が半減していると思いました。
2 つ目は、JavaScript についてです。本書は第 2 版により Java から JavaScript になったため、手元で再現しやすくなっています。ただし、JavaScript じゃない静的型付け言語だったら(Java でも)もっと楽にリファクタリングできたり、不吉な臭いがするコードにならないのではないかと思ってしまう部分が多かったです。具体的には以下です。

  • 動的型付け言語であること。型がないのでリファクタリング後も見通しがよくなっても、安心できない部分が多かった。静的型づけ言語であれば、もっと簡単にリファクタリングできると思えてしまった(それも含めてカタログにはテストコードも欲しかった)
  • interface がないこと。途中でポリモフィズムを意識したコードが紹介されますが、どれも継承を使っていました。interface があればもっと綺麗に解決できるたり、interface の強力さを実感できたりできるので、interface について言及がなかったのは残念でした
  • 現在 JavaScript を実践している層は、OOP の書き方ではなく、モダンフロントエンドの宣言的な書き方を使用している場合が多いこと。そのため、普段「(フロントエンドで)JavaScript を使っているから読みました」という人向けではなさそうだし、メリットや OOP の書き方に理解できなさそう

逆に言えば、JavaScript みたいな動的な言語でも、実践できることを証明しています。 また、型がある言語の場合は、本書を読めば簡単にリファクタリングできるようになる(テストコードの実装を除けば)と思いました。

3 つ目は、OOP 前提なことです。 前述しましたが、途中から OOP による高凝集疎結合ソースコードを目指していきます。 個人的には共感できる部分が多かったんですが、OOP のメリットを理解できていなかったり、Go やフロントエンドなどの OOP 以外のやり方を採用していたりすると、理解が難しい部分もあったと思いました。 その点では、「現場で役立つシステム設計の原則」や「なぜオブジェクト指向で作るのか」などを一読して、OOP のメリットを簡単に触れてから読んでほしいと思いました。

次に関連で勉強すること

この本を読んで、設計とオブジェクト指向に興味を持ったので、以下の本に着手していきます。

まとめ

噂通り、リファクタリングについて知見(手法、思想など)を深められる名著でした。ついでに、OOP に対する知見も深められます。 気になった点(サンプルコードにテストコードがない、JavaScriptOOP 前提)については他の書籍で軽く触れたほうがいいと思いました。 この本をベースに他の本も読んでいきます。