msksgm’s blog

msksgm’s blog

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

2022年7〜9月の振り返り

概要

7月〜9月の振り返りをします。

7~9 月の振り返り記事

7~9 月の振り返りを欠かさずにできました。

7 月の振り返り記事

msksgm.hatenablog.com

8 月の振り返り記事

msksgm.hatenablog.com

9 月の振り返り記事

msksgm.hatenablog.com

7~9 月の目標の振り返り

3 ヶ月間の目標と振り返りをします。

生活習慣

筋トレを継続していました。 特に書くこともないので、来月からは項目を削除します。

勉強関連

勉強時間

7~9 月の勉強時間は以下の通りでした。 7 月から順調に勉強時間が減ってしまいまい s た。 8 月に入院したり、残業したりして減り始めて、9 月には残業が忙しかったため平日の勉強時間が激減しました。 得られるものがなかったわけではないので、次の四半期は下振れないように頑張ります。

7 月 8 月 9 月
約 152.4 時間 約 101.6 時間 約 95.3 時間

注力分野

Kotlin

7 月は、RealWorld を実装することで Kotlin の知識を深めていきました。 基本的な Web API の作り方は学べましたが、共同製作者の方に頼りっぱなしなので、技術的詳細や第 3 者に教えるには不安があります。 また、戦術的 DDD を実際にソースコードに落とし込もうとすると理解しきれていない部分で実装を迷う場合がありました。 もともとの目的だった、「実務でサーバーサイド Kotlin を導入する」が延期したため、時間的余裕はありますが、中弛みすると問題になるので、8 月を目処に完了させようと考えています。

8 月末完了をめどに RealWorld の作成に着手していましたが、結局終わりませんでした。 理由としては、モデリングが想像以上に時間がかかってしまったこと、残業が激増してしまったことが挙げられます。 9 月末完了を目標に立て直しました。 「Kotlin イン・アクション」も前半部分を読み切れました。

そして、9 月末に RealWorld が完成しました。 ここから更に推敲していきます。 さまざまな知見が得られたので、忘れないように Kotlin についての記事を書こうと考えています。 「Kotlin イン・アクション」も 8 割ぐらい読み切ったので、10 月には終えて他の Kotlin についての本を読んでいきます。

設計

7 月は、実務と個人の 2 つで実践できました。 実務では「設計標準」を議論する場を設けることで、設計意識の向上を目指せるようになったことです。長い間雰囲気で実装 or コピー&ペーストした部分を理由づけし、迷った際にも引用できるようにしました。この時点では運用が始まったばかりなので効果を実践できていません。数ヶ月かけてリターンを得ようとしています。
個人の勉強では「リファクタリング第 2 版」を読み切ったことです。名著からリファクタリングの基準、手法、考え方を学んだだけでなく、オブジェクト指向についても学べました。 リファクタリングこの資料からテスト分野にも興味を持ちました。設計の一環として学んでいきたいです。 「リファクタリング第 2 版」によって、オブジェクト指向をやりたかったことがわかったので、今後はオブジェクト指向の書籍にも目を向けていくと考えています。

8 月に「レガシーコード改善ガイド」の勉強会を開始し、4 回目を終えました。 「リファクタリング第 2 版」と異なり静的型づけ言語で interface が実装されている言語でリファクタリング方法が紹介されているため、実践しやすいです。 レガシーコードをリファクタリングする際の金言がまとめられており、普段の業務でリファクタリングを推し進めているので刺さる部分が多かったです。 ただ、出版されたのが古いのもあり、C++向けの部分は読み飛ばしています。

9 月に「レガシーコード改善ガイド」を読み切りました。 オブジェクト指向の部分や金言については得られるものが多かったのですが、古典的な印象で、個人的には強くはお勧めしないといった内容でした。 「ソフトウェアアーキテクチャの基礎」の勉強会を始めました。 ソフトウェアアーキテクチャは抽象的な部分が多いですが、言語化してくれています。

読書

3 ヶ月で 5 冊の感想文を書きました。 感想文を書かないで読んだ本もあるので、もう少し多いです。 しかし、8 月に 1 冊も読み切れなかったのが残念です。 読みたい本が技術詳細の書籍になってきているので、読むスピードが落ちている感もありますが、技術詳細以外にも読みたい本があるので頑張って時間を確保して読んでいきます。

msksgm.hatenablog.com

msksgm.hatenablog.com

msksgm.hatenablog.com

msksgm.hatenablog.com

msksgm.hatenablog.com

美術展

7 月と 9 月にはブルーピリオド展にいきました。 これで合計 3 回ブルーピリオド展にいきました。 大好きな作品なので、このような機会があったのは嬉しいですし、いい思い出になりました。 物語が次の区切りになったときら、再度やってほしいです。

技術記事の作成

この 3 ヶ月はやりませんでした。 やらない 3 ヶ月を振り返って思ったのは、やっぱりやった方がいいという感想でした。 やめた理由の 1 つに「週 1 回のノルマを目標に内容が薄くなっていた」がありました。 今回、インプットに注力したことで、Kotlin の知見が深まり以前よりは薄い内容にならないと考えているので再開しようと考えています。

その他

情報セキュリティマネジメント試験に合格しました。

その他記事

特になし。

connpass の勉強会

以下の勉強会に参加しました。

love-kotlin.connpass.com

server-side-kotlin-meetup.connpass.com

振り返りまとめ

勉強分野では、Kotlin と設計に注力した 3 ヶ月でした。
4 月~6 月の振り返りで、Kotlin と設計に注力することを決断しました。 その判断は間違っておらず、どちらも自分の目指していることに近づいている印象です。 特に、Kotlin は 5 月時点では全く初心者でしたが 9 月末には RealWorld を完成できてよかったです。 Arrow を用いた Either 型による例外の処理や、Kotlin におけるテストの方法を学べて知見が深まりました。実務でも導入したいです。 他には、「Kotlin イン・アクション」も読み進めることで言語仕様の理解も深まりました。
設計関連では、インプットは「リファクタリング第 2 版」「レガシコード改善ガイド」のみです。 RealWorld や業務のアウトプットで知見を深めていました。 ドメインサービスについて考えたり、イミュータブルデータモデルについて考えたりと、経験からくる疑問について考える機会が多かったと考えています。

読書は 3 ヶ月で 5 冊程度読みました。 以前は入門書ばかりだったので、このペースぐらいがちょうどいいと思いました。 しかし、技術詳細以外の知見も欲しくなってきたので来月以降は読むペースを増やしたいです。 また、WEB+DB Press や SoftwareDesign も消化したいと考えています。

美術展はブルーピリオド展のみいきました。

最後に 3 ヶ月の振り返り自体の振り返りです。

7 月時点では勉強時間が十分確保できていましたが、8 月と 9 月は残業が多く、想定よりも勉強できませんでした。 そんな中でも Kotlin をじっくりと学べたのは良かったです。 十分なインプットはできたので、記事を作成してアウトプットしていこうと考えています。 設計に関しては、設計に関する書籍を会社の知り合いと 2 人で意見を交換しながら読み進めることで知見を深めています。 設計は結局「場合による」パターンが多いので、1 人で読んでいると流し読みしてしまう場合が多いと考えています。 そこで、個人の体験談をもとに読み進めることで、実際に現場であったことを深堀しながら知見を深められています。
仕事面では、チームビルティング関連を頑張っています。 特定の人に依存している割合が多く、それらの依存度を下げようと注力しています。 うまくいっているかは判断できませんが、貴重な機会なので頑張りたいと考えています。 ただ、改善がなかったら今後の進退を考えます。

内容が薄いですが、三ヶ月間の振り返りは以上になります。 勉強時間確保の大事さと、限られた時間でも継続することの大事さを実感した 3 ヶ月でした。 今年も、残り 3 ヶ月なので頑張ります。年末には 1 年の振り返りも作成します。

2022年9月の振り返り

概要

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

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

msksgm.hatenablog.com

目次

生活習慣

筋トレ

今月から少ない数でしっかりこなせるように意識しています。 スクワットとデッドリフトはこなせそうで嬉しいです。 しかし、ベンチプレスは重量が増えずに困っています。1 人でやる限界を感じてきました。 他の部位も鍛えた方がいいのか考えます。

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

勉強時間

勉強時間の結果です。 今月は、約 95.3時間でした。 残業があまりにも多かったので仕方ないですが、先月の約 101.6 時間と比較しても更に減ってしまいました。 来月は残業が少ない予定なので、勉強時間を増やします。

項目 1 週目 2 週目 3 週目 4 週目 5 週目
平日朝の勉強時間 1.67 時間(4 ポモドーロ) 6.67 時間(16 ポモドーロ) 6.67 時間(16 ポモドーロ) 3.33 時間(8 ポモドーロ) 13.3 時間(32 ポモドーロ)
平日夕方の勉強時間 約 0.5 時間 0 時間 0 時間 0 時間 0 時間
休日の勉強時間 10.8 時間(26 ポモドーロ) 5.83 時間(14 ポモドーロ) 10.4 時間(25 ポモドーロ) 12.9 時間(31 ポモドーロ) 0 時間
RealWorld ペアプロ 4 時間 4 時間 4 時間 5 時間 2 時間
「レガシーコード改善ガイド」/「ソフトウェアアーキテクチャの基礎」勉強会 0 時間 2 時間 0 時間 1.5 時間 2 時間
connpass の勉強会 1.5 時間 0 時間 0 時間 0 時間 0 時間
合計 約 17.7 時間 約 16.5 時間 約 21.1 時間 約 22.7 時間 約 17.3 時間

勉強関連

勉強関連 概要

引き続き、Kotlin と設計関連に注力していました。 しかし、8 月の中頃から引き続き残業が多かったため、あまり時間を避けていません。 Kotlin は RealWorld が一旦完成したことと、設計に関しては「レガシーコード改善ガイド」を読み切れてよかったです。 Kotlin の RealWorld でさまざまな知見が得られたため、10 月には技術記事を書こうと考えています。

注力分野

Kotlin

今月も、RealWorld を Kotlin で実装することで知見を深められました。 特に、MockMVC と Database Rider を組み合わせることで、API テストの自動化を達成しました。 そして、一緒に取り組んでいる方の助力があり、なんとか完成できました。 ところどころ荒い部分がありますが、なんとか終わらせられてよかったです。 一旦、区切りがついたとして更に完成度を高めたり技術的な関心事がある方へシフトしていきます。

「Kotlin イン・アクション」も継続して読んでいます。 後半部分は難易度が高く感じますが、Kotlin の根幹的な部分を学べていると考えています。 来月には読みきります。

設計

3 週目に「レガシコード改善ガイド」の勉強会を終えました。 レガシーコードに取り組む際の金言がまとめられており、非常に参考になりました。感想も書きました。
4 週目に、「ソフトウェアアーキテクチャの基礎」の勉強会を始めました。 アーキテクチャにおいて重要な要素をさまざまな面から言語化されており、面白く読み進めています。 アーキテクトについて身に沁みる文言が多く、普段は紙の本に書き込まないのですが、いたるところにマーカーを引いています。

業務においては設計標準の策定を引き続きおこなっています。 決まってきて良かった部分もあるのですが、管理コストがかかっていることや、周囲が意見を出してくれないなどといった問題もあります。 コンウェイの法則では、「組織構造がそのままアーキテクチャ構造になる」のような言葉がありますが、その詳細はさらに人に依存しているので、悪くならないように改善したいです。

読書

読書概要

今月は、2 冊読み切りました。 設計関連とデザインパターン関連の書籍を読みたかったですが、読めませんでした。 しかし、忙しい中でも読み切れた本があって嬉しいです。 来月こそは、「Kotlin イン・アクション」を読み切ります。

読んだ本

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

msksgm.hatenablog.com

「Wizard Bible 事件から考えるサイバーセキュリティ」

msksgm.hatenablog.com

「Kotlin イン・アクション」

引き続き読み進めています。 既に終盤なので、10 月には読み切ります。
10 月以降には「Functional Programming in Kotlin」「Kotlin Design Patterns and Best Practices」などを読みたいです。

美術展

ブルーピリオド展

ブルーピリオド展にいきました(3 回目)。 大好きな作品なので、このような機会があって嬉しかったです。 また作品が一区切りしたら、開催してほしいです。

技術記事の作成

今月もなし。 残業続きの期間が終えたので来月から再度技術記事を書いていく予定です。 書くとしたら、Kotlin 縛りで書きます。

その他

connpass の勉強会

今月は、「Server-Side Kotlin Meetup vol.5」に参加しました。

server-side-kotlin-meetup.connpass.com

まとめ

残業が多く、インプットとアウトプットの両面において疎かになってしまった 1 ヶ月でした。 忙しい中でも継続してできている部分があり、最低限のラインを守れたのではないかと考えています。 特に、Kotlin の RealWorld 作成を終えたのは大きく、Kotlin の知見を深められました。 また、名著と呼ばれている「レガシーコード改善ガイド」を読み切り、設計のレベルも一段階向上したと考えています。 来月以降も引き続き Kotlin と設計について注力します。

仕事の面では、残業が多かったの一言に尽きる 1 ヶ月でした。 勉強内容と直結したら良かったのですが、あまりそういうわけではなく、途中からメンタル的にも厳しかったです。 しかし、自分から提案したことをやり遂げられそうなこと、その過程で得られた知見や限界などを知れて有益でした。 四半期の締めとしては悪くないと考えています。 チームビルディングまわりも引き続き行っており、来月からは人員も増えるので頑張ります。

まとめると、7 月 8 月ではリターンが少ない月でしたが、今月も多くはない 1 ヶ月でした。 しかし、継続してきたことに区切りがあり、ある程度満足感があります。 来月からは残業時間を減らすので、更に満足度の高い 1 ヶ月にしていきます。 今月は 9 月なので四半期の振り返りもおこないます。

「Wizard Bible事件から考えるサイバーセキュリティ」感想

概要

Wizard Bible 事件から考えるサイバーセキュリティ」を読みました。 「前提」「読了時間」「感想」「次に関連で勉強すること」「まとめ」を記述します。

peaks.cc

前提

目的

主な理由は以下です。

  • セキュリティの分野に興味があり、過去に脆弱性の勉強をしていた。さらに別視点からの知見が欲しかった
  • 今年(2022 年)、Coinhive 事件の最終判決が決まり話題になっていた
  • 書籍の名前は知っていたが手を出していなかった。技術書典 13 に参加したら出品されていたので、これを機に購入した

前提知識

セキュリティ関連では以下の書籍を読んでいました。 他に、日経新聞個人情報流出やサイバーセキュリティに関連する記事を毎日チェックしています。 事件についてまとめられた書籍を読むのは今回が初めてでした。

読了時間

平均して 1 日 30 分から 45 分読み、1 週間で読了しました。 法律などの詳細は一度読んだだけではわからなかったので、理解を諦めて読み飛ばしながら読んだ部分もあります。

感想

本書は「Wizard Bible 事件」「Coinhive 事件」「アラートループ事件」について当事者たちのインタビューによってまとめられた書籍です。 事件の概要だけでなく、家宅捜索、取調べ、その後の生活について記述されておりサイバーセキュリティに関する事件について詳細に学べます。

本書を読むことで、アプリを公開しているエンジニア(業務、個人関わらず)が容疑をかけられる可能性があることを実感させてくれました。 また、ここ数年の間に発生していた事件だということを知り、自分が日本の司法におけるサイバーセキュリティの状況についてキャッチアップできていなかったことに危機感を覚えました。

個人的に本書で印象に残ったのは以下です。

  • 「不正司令電磁的記録に関する罪」について
    • コンピュータウィルスを作成するのは犯罪であることを認識していましたが、具体的な名前と、その範疇についてはまったく理解していませんでした
    • 加えて、本書のような判例があると想定していませんでした
  • 家宅捜索、取調べ、前歴、裁判などについて
    • 法律について疎いため、まったく知見がありませんでした
    • 当事者たちのその後の生活も含め、全ての段取りが非常に印象残りました
  • 自衛策
    • 事件を踏まえた自衛策について記述されています
    • 「巻き込まれないためには」だけでなく、「万が一巻き込まれてしまった場合」も記述されていました
    • 本書を読まなければ知り得なかった情報です

これらを踏まえて、「法律の理解」「危機感」「自衛」に対する意識を高められました。 周囲のエンジニアにもセキュリティに興味がなくても(あったらなおさら)この書籍を推薦しようと考えています。

次に関連で勉強すること

現状、セキュリティに時間を割く優先度は低いですが、セキュリティ関連で勉強するとしたら以下になります。

  • 引き続き、サイバーセキュリティに関する情報のキャッチアップ
    • ソースは主に Twitter日経新聞になりますが、やらないよりもやった方がいいので続けます
  • 書籍によるインプット
    • 現状気になっているのは「ホワイトハッカーの教科書」「脅威インテリジェンスの教科書」「ハッキング・ラボのつくりかた」です
  • なにかしらのアウトプット
    • 技術記事の執筆を考えましたが、以前からセキュリティ関連はリスクが高いと判断して避けていました。今後も書くことはほとんどないと考えています
    • 他のアウトプットの方法として、CTF の過去問を考えています

まとめ

  • 「Wizard Bible 事件」「Coinhive 事件」「アラートループ事件」についてまとめられた書籍だった
  • 誰にでも巻き込まれるリスクがあることを認識し、巻き込まれないため(巻き込まれたときも)に対する意識を高められた
  • 日頃からのキャッチアップ、インプット、アウトプットを続けなければならないと思った

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

概要

レガシーコード改善ガイド」を読みました。 「前提(目的、前提知識)」「読了時間」「感想」「次に関連で勉強すること」「まとめ」を記述します。

前提

目的

主な理由は以下です。

  • 自身が興味のある設計やドメイン駆動設計の文脈でも紹介されることが多かった
  • 直前に読んだ、「リファクタリング第 2 版」でも紹介されていた
  • 業務のコードもレガシーコードと呼べるもので、どう改善すればいいのかきになっていた

前提知識

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

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

読了時間

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

感想

レガシーコードが生まれる原因や、それに対応する手法や金言についてまとめられた良書でした。しかし、原著が 2004 年に出版され前提が変わってきている部分もあり、個人的には万人に薦められないなと思いました。 よかった点、気になった点をそれぞれまとめていきます。

よかった点

よかった点は 3 つあります。 1 つ目は、リファクタリングに対する金言がまとめられていることです。 表紙の帯にも書いてある「テストがないコードはレガシーコード」のほかに以下のことが記述されていました。

  • システム変更の方法は、編集して祈る保護して祈る
  • コードを変更するためには、テストを整備する必要がある。多くの場合、テストを整備するためには、コードを変更する必要がある(レガシーコードのジレンマ
  • 変更をリファクタリングと呼べるのは振る舞いが変わらない場合だけ
  • よくメンテナンスされたシステムであっても、変更に対応する方法を見出すのはそれなりに時間がかかる(しかし変更は簡単で、レガシーコードはどちらも困難)
  • private メソッドをテストしなければならない場合、そのメソッドは public にするべきだ
  • 良い設計はテスト可能、悪い設計はテスト不可能
  • システムのストーリーを話す
  • 直行性とは、非依存を格好良く表現した言葉。コードのもともとの振る舞い変更したい時に、変更しなければならない場所が 1 つだったときのこと

2 つ目は、リファクタリングの戦術的な説明です。 今まで、「こうすれば上手くいくし今後にも役立つ」手法はなんとなく認識していたものの、言語化されたものが本書籍に載っていました。 また、具盾的な例をあげると以下になります。

3 つ目は、オブジェクト指向の良い部分を引き出しているリファクタリングをしていると思いました。 割と個人的な感想になりますが、責務をどうやって分割と集約をさせたりとか、interface を用いた DI がいかに疎結合にしてくれるかなどを繰り返し解説してくれます。 簡易的な、「なぜオブジェクト指向で書くのか」になっているので、共感を得られました。

気になった点

気になった点は 2 つあります。

1 つ目は、出版された年が 2004 年ということもあり、前提が古くなっていることです。 印刷してコードリーディングしませんし(コンプラ的にもギリギリ)、 現代の IDE は高機能なので Java でそこまで悲惨な状況になったりしないと思いました。ただし、IDE の今後については割と当たっている部分があり、既に予期していたのは凄いと思いました。 C++における解説も何度かありましたが、Web プログラミングで C++を用いることはほとんどないので、言語の使用人口的にも対象読者がずれてきているのかなと思いました(組込み系はもちろん別です)。
オブジェクト指向的なリファクタリングで、継承による差分プログラミングを用いたリファクタリングが紹介されていました。 しかし、Effective Java でも「継承のための設計および文書化する、でなければ継承を禁止する」と記述されているので、リファクタリングのファーストチョイスには入らないと考えています。少なくとも、継承のつかいどきを熟知していなければ、やってはいけないと思いました。

2 つ目は、ある程度のオブジェクト指向の知識が前提になっていることです。 DI、継承、凝集度をあげる方法は Java または C++オブジェクト指向の知識が前提になっていました。 これらがなければ理解が難しいと思いました。
近年では、モダンフロントエンド(React、Vue)や Go などのオブジェクト指向でない書き方が台頭しています。それらしか学んだことがない状態でこの本を読んでも、ソースコード的な面では得られるものが薄そうだと思いました。

次に関連で勉強すること

設計関連では以下の書籍を読もうと考えています。

まとめ

  • リファクタリングに関する金言や手法がまとまれており、良書だった
  • 前提が古くなっている部分が多く、その部分は残念だった
  • オブジェクト指向を使いこなしているが、継承に関しては現代でも同じ感覚でおこなえない

2022年9月の目標

概要

9 月の目標です。 業務の残業時間がおおいのでうまく目標を達成できない可能性がありますが、頑張ります。

生活習慣

ジム通います。引き続き、ベンチプレス、スクワット、デッドリフト全ての重さにおいて継続ですが、回数の目標を減らします。

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

勉強関連

以下を勉強していきます。「Kotlin イン・アクション」は読み切れるかわかりませんが、視野にいれています。

読書

設計関連(特にデザインパターン)、組織論関連の書籍を読みます。

美術展

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

技術記事の作成

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