msksgm’s blog

msksgm’s blog

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

2022年5月の振り返り

概要

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

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

msksgm.hatenablog.com

目次

生活習慣

筋トレ

今月は以下になりました。 ベンチプレスを最初のセットで 3 回ぐらい持ち上げるとヘトヘトになって、残り 2 セットが 1 回しか持ち上げられないのが課題に感じています。

種目 重量
ベンチプレス 80kg
スクワット 90kg
デッドリフト 90kg

ランニングも継続してやっています。 やり方を変えて一度のランニングで 30 分走り切るようにしました。

勉強時間

今月から勉強時間を記録するようしました。 普段からポモドーロタイマーで計測していたのを、朝(平日、休日含む)の勉強時間、平日夕方の勉強時間、休日の勉強時間に区切って計測することしました。

結果、以下になりました。 毎週日曜日に 2、3 時間勉強会をしているので、あと+10 ポモドーロぐらいありますね。 あと、間違えて他の項目でタイマーを起動したりするので、数字にはブレがあります。 大体、121.6 時間になりました。存外、勉強しているようなしていないような時間でした。取り組んでいる割には進捗が悪い印象もありました。 GW があったので、普通の月よりも多かったと考えています。 6 月は祝日がないので、6 月の勉強時間の維持を目標になる予定です。

項目 ポモドーロ 時間換算
平日と休日の朝の勉強時間 134 約 55.8 時間
平日夕方の勉強時間 37 約 15.4 時間
休日の勉強時間 121 約 50.4 時間

勉強関連

勉強関連 概要

プログラミング言語

Go と Kotlin 以外にも、Next.js を学んでいました。

Go

1 週目は、GW 中に RealWorld の軽量版を Go で実装していました。 学んだことの振り返り的な意味で実装を試みました。 また、気が向いたときに再会予定です。 2 週目からはとりくんでいませんでした。

CS 系で以下の書籍に興味があるので、それら関連で Go に触れる可能性がありますが、Web アプリ用途ではしばらく使わない予定です。 他には、「Powerful Command-Line Application in Go」にも興味があります。

  • 「Go ならわかるシステムプログラミング」
  • 「RealWorld HTTP」
  • 「Go 言語による平行処理」

Kotlin

1 週目は、「Kotlin サーバーサイドプログラミング実践開発」という書籍を読んでいました。 Kotlin のシンタックスがまとめられており、有益でした。 ただ、DB との接続周りが手元の環境でうまく動かなかったり、MyBatis に良い思い出がないので、最後まで読み切ることはしませんでした。 2 週目から、Kotlin について詳しい知人にお願いして、簡単な JDBC を用いた CRUD ができるアプリの作り方について教わりました。 まだまだ序の口ですが、早く慣れて RealWorld を実装したいです。 少し実装してみただけでも、型システムや IDE のサポートが厚く開発体験の良さを実感しています。 しかし、Next.js に時間を割いているので進捗が悪いです。本格的に取り組めるのは 7 月以降になりそうです。

Next.js

実務で、Next.js を使う機会が発生したので緊急でキャッチアップしました。 GW 中に「Real-World Next.js」で勉強をしました。 Next.js に対して曖昧な認識や納得できていなかった部分を理解できました。 実務で既存のツールを Next.js で置き換える作業をしているのですが、うまくいっていません。 ディレクトリ構成にもさまざまなベストプラクティスが紹介されるので、うまく方針が決まらずに困っています。 あと、1 つのボタンに複数の機能を持たせようとすると、一気に複雑化するのも悩みどころです。

注力分野

ドメイン駆動設計

業務で、ドメインモデリングを継続しています。 チーム内でも理解が深まり、ビジネス職の方にも見てもらいました。 結果「エンジニアとビジネス職で認識を合わせられそう」と合意を得られました。 引き続きモデリングを続けていきます。 ただ、モデリングをやりすぎて、あまり戦術的なことができていないのが課題に感じています。 増田さんの「モデリングの費用対効果」で費用対効果を考えることの重要性を実感しました。モデリングは完成しないので、コスパを考えながら効果を実感できるように続けていきたいです。 偶然ですが、ドメインモデルをソースコードに落とし込む機会がありました。結果、納得感のある実装ができ、非常に満足しました。まだ正解かわからないので、改善を続けていきます。
他のインプット方法として、松岡さんが YouTube チャンネルで 10 分 DDD という動画を上げており、それを参考にして DDD に取り組んでいます。 DDD 有識者の間でも、松岡さんの方法に最も共感しているので、非常に参考にしています。

www.youtube.com

セキュリティ

4 週間かけて「認証と認可 Keycloak 入門」の勉強会を行いました。 Keycloak を元に、OIDC と OAuth のフローと SSO の基本知識を復習できました。Keycloak の専用の知識があったりしますが、認証認可まわりの知識を別角度から知ることができるので良い復習になりました。 特にチュートリアルの完成度が高く、実導入する際に考えるべきことを知れました。 他にも、IAM 周りを専門にして行く際に覚えておくべき名称も一通り紹介されており、技術面以外でも語彙力を増やすことができました。
最終週に徳丸本勉強会(2 回目)を始めました。徳丸実務試験の合格を見据えて準備をしていきます。 試験関連で言えば、6 月の第 1 土曜日が情報セキュリティマネジメント試験の受験日なので、頑張って合格します。

DB

今月は注力しない予定だったので特になし。

Computer Science

知り合いに勧められて GW 中に「プログラミングの基礎」を読みました。 OCaml という言語を用いて関数型プログラミングの特徴を学びました。 この書籍を読むまで、再帰関数は一歩間違えたら無限ループになるので、敬遠していました。 しかし、この書籍を読んだ際に、終了条件と部分問題にわけ確実に終了するような記述をすれば、for ループよりも簡潔な記述になることを知り印象が変わりました。 map、filter といった普段よく見ていた関数が、どのような実装をしていたのか知ることができました。 なぜ Go にジェネリクスが追加されると、map、filter が実装できるのか理解できました。 個人的には Either と Result 型の説明が欲しかったです。

読書

1 冊目 「Real-World Next.js」

msksgm.hatenablog.com

2 冊目 「『実践ドメイン駆動設計』から学ぶ DDD の実装入門」

msksgm.hatenablog.com

3 冊目 「プログラミングの基礎」

msksgm.hatenablog.com

4 冊目 「認証と認可 Keycloak 入門」

msksgm.hatenablog.com

5 冊目 「Design It!」

読んだのですが、感想を書けるほど理解できないので、感想記事を書きませんでした。 設計のコスパについて触れた図が印象的でした。

6 冊目「Web API The Good Parts」

msksgm.hatenablog.com

美術展

スコットランド国立美術館  THE GREATS  美の巨匠たち

msksgm.hatenablog.com

技術記事の作成

週 1 回の投稿(金曜日がある週を 1 週としてカウント)の目標を達成しました。 4 記事作成しました。2022 年になってから合計 21 記事書きました。

1 記事目 「react-testing-library v13 から React v17 のサポートされないことに起因するエラーについて」

zenn.dev

2 記事目 「『実践ドメイン駆動設計』の勉強会を開催して得られた勉強会の知見」

zenn.dev

3 記事目 「Google スプレッドシートから日付を読み込んで Slack に通知する GAS を作成する」

zenn.dev

4 記事目 「Go の大文字小文字による公開範囲とオブジェクト指向言語のアクセス修飾子の違い」

zenn.dev

その他

個人的に刺さった PHPerKaigi2022 のスライド

msksgm.hatenablog.com

connpass の勉強会

今月は以下に参加しました。DDD と Kotlin 関連を主に情報収集をしています。

ddd-community-jp.connpass.com

line.connpass.com

ddd-community-jp.connpass.com

まとめ

今月はセキュリティ(認証・認可、脆弱性、情報セキュリティマネジメント試験)に一番注力していました。 どれも一度学んだ内容でしたが、一度学んだだけでは理解できているとは思えず、今回再び勉強してよかったと思えます。 以前から勉強していた、「情報セキュリティマネジメント試験」の本試験が 6 月 4 日(土)にあります。合格したいです。
徳丸本の勉強会の 2 回目を開始し、徳丸本を 2 回目の熟読が始まりました。 一度学習したので、教える立場として取り組んでいます。 また、7 月から 8 月に「Web セキュリティ実務知識試験」を受験予定なので、合格を見据えて勉強していきます。

プログラミング言語は、Kotlin に注力していた予定でした。実際には Next.js に時間を割きました。 実務で Next.js を使う機会が多くなったので、頑張ってキャッチアップと実装を繰り返しています。 TypeScript の型システムに十分満足できているとは言えませんが、JavaScript 比べて圧倒的に開発体験がよくなっているのを実感しています。
Kotlin については当初勉強方法がわからなかったのですが、知人から勉強方法を教わりなんとかやっています。 モダンなシンタックスや型システム、Intellij の厚いサポートなどもあり開発体験が最高です。 Next.js は 6 月末まで取り組み、7 月から Kotlin に触れていきたいです。 Go は実務でも使っていないので、放置状態です。Go を学んでいた時期に思ったことを zenn にまとめています。 ただ、CS 分野を学ぶ目的や、CLI を作る為に「Powerful Command-Line Application in Go」に興味があります。

ドメイン駆動設計は、モデリングを実務で実践できています。 主にビジネス職とエンジニア職の共通認識を作るという目標です。 「議論に使えそう」という段階まできたのですが、ドメインモデルをソースコードに落とせておらず、まだ効果を実感できてませんでした。 そこで、試しに 1 つのプロパティをドメインオブジェクトを表現しました。 結果、実装したときに、あるべき場所に収まったかのような納得感があったので、当初の目的とマッチしており勉強してよかったと思えました。 まだまだ、実装するべき部分はたくさんあるので、これからも継続していきます。

5 月が終わり、社会人 2 年目の 2 ヶ月目が終わりました。 社会人 2 年目で業務において成し遂げたいことをいろいろ掲げているので、このペースで進めて行くと終わらなさそうなのが不安です。社会人 2 年目の 3 ヶ月目には、何かしらの目処をつけたいです。 なので、業務のことを考える時間を増やしたり効率を上げたりします。意識的に残業を増やしても効率が落ちるだけだったので、それには気をつけたいと考えています。
一方、引き続き個人的に目標に掲げていたことを淡々とこなすことができて嬉しいです。 しかし、割と入門書を読み終えたりビジネス書への興味関心がなくなってきたので、読書ペーズを月 5 冊から減らしたいと考えています。 月 1、2 冊読めたら妥当なラインだと考えています。あとは、受けたい資格が複数個あるので、そちらにも注力していきます。

色々目標と興味が変わってきました。 とりあぜ 6 月までは Next.js、Kotlin、資格のことを考えて、6 月末に 3 ヶ月の振り返りをおこない修正をします。

「Web API The Good Parts」感想

概要

Web API The Good Parts」を読みました。 「前提(設計関連・API の知識、目的)」「読了時間」「感想」「次に設計関連で勉強すること」「まとめ」を記述します。

前提

設計関連・API の知識

設計関連だとドメイン駆動設計を普段から勉強しています。 しかし、API 設計と根本的に対象が異なるので、ノーカンです。

API の知識は、Web API を何度か自作したり、業務で使っているので、何をするものなのか人並みにはわかっているつもりです。 ただ、REST の厳密な適切な定義を理解していないのは問題だと思っています。

目的

以下の効果を得られることを目的に読み始めました。

  • API 設計を勉強したことがなかったので、入門する

読了時間

薄い本だったので、大体 10 時間もしないうちに読み切ったと考えています。 だらだら読んでいたので、もっと短い時間でも読ます。

感想

API の設計だけでなく、機能、歴史的経緯、セキュリティの面からも Web API について知れる良書でした。 API の設計に関しては、さまざまな企業が公開している API を引き合いにだし、違いの長所短所を述べて最後に筆者の意見を述べる形式です。 設計は筆者の思想が大きくはいる印象ですが、本書はさまざまな例を引き合いに出してくれるので、納得感を持ちながら読み進めることができました。 物事を理解するときに歴史的経緯をストーリーとともに覚えるのが好きなので、つかわない可能性がある知識でも説明してくれるのはありがたかったです。 嬉しい誤算だったのが、セキュリティ周りについても触れてくれていたことです。セキュリティに興味があるのと、設計とセキュリティは切り離せないものだと考えているので、深掘りしてくれて助かりました。現在、徳丸本を読み直しているので、参考にしています。

ひとつ気になったのは、以外と API のパスの書き方は深掘りしなかった印象なことです。 その周辺は、筆者が紹介したように企業が公開している API を参考にして勉強した方と思いました。 あとは、以下のような量記事を探したいと思いました。

qiita.com

次に設計関連で勉強すること

「設計」という括りでは、DDD を引き続きキャッチアップと実践を繰り返します。

まとめ

  • 設計だけでなく、機能、歴史的経緯、セキュリティの面から API をしることができる本
  • 筆者の思想の押し付けではなく、さまざまな企業を引き合いに出してくれる
  • 薄くて読みやすいので、API を作る人 or 作りたい人におすすめできる内容だった

「スコットランド国立美術館 THE GREATS 美の巨匠たち」感想

スコットランド国立美術館 THE GREATS 美の巨匠たち

スコットランド国立美術館 THE GREATS 美の巨匠たち」にいってきました。 会場は東京都美術館でした。 会期は 2022 年 4 月 22 日(金)〜2022 年 7 月 3 日(日)です。

greats2022.jp

概要

以下は、公式サイトからの引用です。

スコットランド国立美術館は、上質で幅広い、世界でも指折りの西洋絵画コレクションを有する美の殿堂です。1859 年の開館以来、購入や地元名士たちの寄贈や寄託などによってコレクションの拡充を続け、世界最高峰の美術館の一つとなりました。 本展は、そのようなスコットランドが誇る至宝の中から、ラファエロエル・グレコ、ベラスケス、レンブラントブーシェ、スーラ、ルノワールなど、ルネサンス期から 19 世紀後半までの西洋絵画史を彩る巨匠たちの作品を展示します。 さらに、同館を特徴づけるゲインズバラ、レノルズ、ターナー、ミレイといったイングランド出身の画家に加え、日本ではなかなか見ることのできないレイバーン、ラムジー、グラントなどスコットランド出身の代表的な画家たちの名品も多数出品。 油彩画・水彩画・素描約 90 点を通じ、西洋美術の流れとともに、ヨーロッパ大陸と英国との文化交流から、英国美術がはぐくまれた様子を紹介する機会にもなることでしょう。 美術史に輝く巨匠たち(THE GREATS)の競演をお楽しみください。

「スコットランド国立美術館 THE GREATS 美の巨匠たち」より引用

スコットランドの」企画展ではなく、「スコットランド国立美術館の」企画展のため、スコットランド出身以外の画家が描いた作品もあります。 美術的な流行に焦点を当てた企画展ではないので、大域的な美術の変遷を鑑賞できます。

感想

特に観たい作品もなく観に行ったのですが、存外楽しむことができました。 個人的には風景画が好きなので、コンスタブルを初めて知り一人お気に入りの画家が増えました。 コンスタブルの風景画は、他の画家の風景画と異なり自然の爽やかさよりも、青々しさを表現している印象を持ちました。 絵の木々には苔が生えていて、「素手で触れたくないな」と印象を持つほどには、植物の表現の仕方が印象的でした。 以下の記事にコンスタブルについてまとめられています。

bijutsutecho.com

続いて、人物画に対しては興味がなかったのですが、ミレイの「古来比類なき甘美な瞳」という作品も興味を持ちました。 詩的なタイトル(実際にある詩)に対してシンプルな構成のこの絵は、物語性を感じる以上に作者の詩に対する解釈を感じて面白かったです。

news.yahoo.co.jp

最後に、この展示会の目玉とも言えるチャーチの「アメリカ側から見たナイアガラの滝」のスケール感が良かったです。 2m50cm 以上の作品で、滝の臨場感が満点です。 以下に比較をしている人がいます(ただし、http 通信なので注意)。

kaiga-date.com

正直、「〜美術館展」といった系統は、似たような構成が多く若干飽きてきてしまっています。 今回も、宗教画から始まり風景画、肖像画印象派の作品へと移っていくような構成でした。 画家も数多くの作品を残した、コロー、モネ、レンブラントブーダンの作品をよく見かけます。 それらが原因で新鮮味がなく飽きてきたのを実感しています。 特に宗教画の事前知識がないので、音声ガイドがないと意味を理解できない場合が多いです。 これらを解消するためには、目的意識を持っていくか、美術史に対する前提知識を増やす必要があると思いました。

「認証と認可Keycloak入門」感想

概要

認証と認可 Keycloak 入門」を読みました。 「前提(OAuth・OIDC・SAML の経験、目的)」「読了時間」「感想」「OAuth・OIDC・SAML で勉強すること」「まとめ」を記述します。

前提

OAuth・OIDC・SAML の経験

以下の関連書籍を読んだ経験があります。

Auth 屋の書籍のチュートリアルで手を動かしてフローを学んだ他、簡単な Web アプリケーションで Next-Auth や Auth0 で OIDC を導入したこともあります。

目的

以下の効果を得られることを目的に読み始めました。

  • OAuth2.0、OIDC の正しい理解を深める
  • Keycloak を用いた、実践的な OAuth(OIDC)のユースケースを学ぶ

書籍自体には、Keycloak の実践かつ応用的な利用方法も紹介されています。 その分野は今回の目的ではなかったので読みませんでした。 具体的には 1 章から 5 章を読みました。

読了時間

1 章から 5 章を 4 週間かけて読み、毎週末には知り合いと勉強会を開催し認識合わせを行いました。 1 週間に平均 2 時間ぐらいかけ準備し、勉強会も 2 時間ぐらいだったので、合計 16 時間ほどかけました。 ただし、勉強会参加メンバーは全員 OAuth・OIDC の前提知識を持っています。 もし知識がなかったら、もっと時間がかかると思いました。

感想

OAuth・OIDC の復習に最適な本で、当初の目的だった「OAuth2.0、OIDC の正しい理解を深める」を達成しました。 良かった点、気になった点をそれぞれ述べていきます。

良かった点

良かった点は 3 つあります。

1 つ目は言葉の定義が適切に行われているため知識の整理に役立つことです。 OAuth に限らない認証・認可や、IAM の領域の用語が出てくるたびに解説したり図で整理してくれうため、非常に参考になりました。 初歩的なところで言えば「認可」と「認可判断」の違いを解説します。自分は混合して認識しており、書籍を読んで区別したとき理解の甘さを実感しました。 IAM(Identity and Access Management)は、AM、IGA、IDM に区別され、普段の業務で認可周りの作業に名前がついてたり名前をつけられることがわかりました。 最も参考になったのは、RFC で定義されている OAuth の仕様を逐一、逐一 RFC 番号と一緒に解説してくれることです。それぞれの用語が登場するたびに RFC の番号とリンクを記述してあるため、書籍だけでなく原本を読むことでさらに理解を深められました。OAuth や OIDC の言葉の定義を RFC まで読み込んでいる人は少ない印象です。自分もその一人だったため自戒のため、RFC が記述されているときは RFC も見るようになりました。

2 つ目は OAuth・OIDC のシーケンス図わかりやすかったことです。 OAuth・OIDC はパラメータが多く混雑しがちです。 この本はさまざまな解説の中でも特に完結でわかりやすかったため、人に説明する際には参考にしようと思えました。 また、攻撃パターンのタイミングについて触れられているのもよかったです。 しかし、攻撃から守るためのパラメータを整理していないため、ちょっとわかりづらかったです。 これに関しては、Auth 屋さんの「OAuth・OIDC への攻撃と対策を整理して理解できる本(リダイレクトへの攻撃編)」がわかりやすく整理されているので推奨します。

3 つ目は、チュートリアルの完成度が非常に高いことです。 OAuth のチュートリアルは Auth 屋さんの書籍と「OAuth 徹底入門」で実践したことがありました。 たしかに、OAuth のフローを学ぶには、それらで十分でした。特に、「OAuth 徹底入門」のチュートリアルは OAuth の内部実装まで学ぶことができます。 しかし、それらはあくまで OAuth のフローのチュートリアルとし十分なだけで、OAuth・OIDC を実導入するときに考えることからは解離している印象です。 本書籍では、ユーザーの登録、ロールの設定、クライアントシークレット、シークレット ID の生成など、OAuth を導入するときに認識すべきことを GUI の操作によって、体感できます。 Keycloak 以外の認可基盤を使用するときにも、これらのフローは役に立つので、勉強用に最適だと思いました。

気になった点

気になった点は 1 つだけあります。

OAuth・OIDC の知識が皆無の人には向かない印象を持ったことです。 OAuth・OIDC のフローはたしかにわかりやすかったのですが、細かいところを理解したり具体的なリクエスト・レスポンスを学ぶには、もっと詳細な解説が必要に思えました。 Keycloak 専用の単語もあるので、書籍でも明示されていますが「OAuth 用語」「Keycloak 用語」を切り分けて読み進める必要性を感じました。 当初の目的の「Keycloak を用いた、実践的な OAuth(OIDC)のユースケースを学ぶ」も、途中から Keycloak 専用の概念になってくるため、達成できませんでした。 Keycloak を本番利用する or 本番利用しているといった動機がないと最後まで読むのは難しいと思いました。

以上を踏まえると、OAuth 初心者には Auth 屋さんの書籍を推奨しています。 Auth 屋さんの書籍で一通り学んだら、ローカルで動作する完成度の高いチュートリアルを学べる、この本を読むといいと考えました。 より深い内部実装を知りたければ「OAuth 徹底入門」のチュートリアルをおすすめします。

OAuth・OIDC・SAML で勉強すること

OAuth・OIDC・SAML 関連について勉強することは現状特に決めていません。 セキュリティ関連でいえば、「徳丸実務知識試験」を受験するために徳丸本を読み直そうとしています。

まとめ

  • 用語の説明、OAuth・OIDC のシーケンス図、チュートリアルの完成度が高く、OAuth・OIDC の復習に最適だった
  • ただし、OAuth・OIDC の初心者向けではないと思った
  • OAuth を学ぶアドバイスに、Auth 屋、「Keycloak 入門」「OAuth 徹底入門」の順番で読むことを推奨するようになった

個人的に刺さった PHPerKaigi2022 のスライド

概要

4/9(土)~4/11(月)の間に PHPerKaigi2022 が開催されました(前夜祭含む)。 そのスライドを有志の方が zenn に記事としてまとめていました。

zenn.dev

PHP に限らず(個人的に)素晴らしいスライドがまとまっていたので、個人的に刺さったスライドと感想を備忘録がてらにまとめます。

個人的に気になった PHPerKaigi2022 のスライド

予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント

speakerdeck.com

和田卓人さんのスライドです。PHP に限った内容ではなく、設計の観点からどうやって堅牢なコードを書けるのかに、まとめられています。 ドメイン駆動設計(DDD)という実践方法がありますが、 DDD に拘らず高凝集・低結合の観点から改善していくことの重要性が身に沁みました。

新卒 Laravel 初心者が成長していく中で感じたコレジャナイ感

speakerdeck.com

Laravel を触っていて実感する、疑問点を的確に表していると思いました。 フレームワークディレクトリ構成に対して一石を投じてくれるので、参考になりました。

今だから話せる PHP 8 バージョンアップの裏側 ~全 5 サービスの事例紹介~

speakerdeck.com

今年の 11 月 28 日に PHP 7.4 のセキュリティサポートが切れます。 PHP 7 系はこれで最後になり、PHP 8 系へのアップデートが必須になります。 このスライドは PHP 8 移行の注意したこと、人月について共有しています。 42.1 人月は途方もない工数に感じました。 勤務先の技術も PHP が多いので、このスライドを共有したら、盛り上がりました。

本当にあった怖い脆弱性の話

speakerdeck.com

怖くて笑えない話がまとまっています。 何も考えずにやったらこうなってしまうパターンもあると思ったので、気をつけていきたいです。

今まで生き残ってきた RDBMS とこの先 10 年戦えるデータストア戦略

speakerdeck.com

データベースの変化の歴史とこれからについてまとめられた記事です。 アプリにおいて重要な DB に、これからもどうやって付き合っていくのか、しれました。

メルカリ、巨大モノリスにおける複雑性をリリース 9 年目にしてどう解決するか

speakerdeck.com

複雑性をどうやって紐解いたのかについての記事です。 業務で複雑なコードのリファクタリングをしようとしています。 プロセスが書いてあるので非常に参考になりました。

本当にあった怖い PHP コード 7 選

speakerdeck.com

脆弱性的な意味じゃなくて、可読性と保守性の観点から怖いコードを紹介しています。 意図がわからないコードって確かに読めるようになると、ヒヤってします(今までよく動いていたな的な意味で)。