先週、妹夫婦が喧嘩した。
あかん、まだイライラする。
— y2m@元未経験エンジニア (@yusuke1225math2) 2024年12月1日
土曜に妹夫婦の喧嘩仲裁した。
男女の友情成立するから、俺から女友達奪うなとかいう自分本位の謎ロジックで、生後半年も経たない子供おる自宅に女友達呼んで、母子放ったかして昼間からワイン開けて、女友達と楽しんどるとか、頭おかしいやろ?
↓
そのことで、妹の話を聞いたり喧嘩を仲裁したりした。
仲裁してるときは、あくまでどっちの味方もせずに、二人が理性的に話し合いできるよう努めた。
でもそれが終わったあと、思い出すとイライラが止まらなくなってきて、Xに投稿してしまった。
挙げだしたらきりが無いが、とにかく身内である妹の尊厳が踏みにじられたように感じて、心底腹が立った。
義弟があまりにもガキで自分本位なロジックを展開すること
男として夫として父としての自覚が甘すぎること。
妹のことを、喧嘩の中で他人と言い放ったこと。
辛そうにしている妹に対して、何もできない自分が悔しくて、実は一人でちょっと泣いたりした。
その後、母と話す機会があったので、今回の妹夫婦の件についても、どう思っているのか聞いた。
ところが、自分の予想に反して母親はとても冷静で、ある意味ドライで冷たく感じた。
「人のことは変えられない。妹の旦那はそういう人なんだと思うことにした。」
自分の娘がひどい扱いを受けて、腹が立たないのか?と聞いた。
「もちろん腹は立つ。ムカつく。でも、怒りでぶつかっても、人が変わるわけではない。」
たしかにそうかもしれない。頭ではわかってる。でも、傷つけられて黙っていていいのか?
自分の身内を、ましてや娘を傷つけてくる存在に対して、泣き寝入りするのか?
「そもそも、相手が、こちらが思うタイミングで、こちらが思うように変わるなんて、宝くじ当てるより難しいこと。そういう人を選んだのは、娘自身だから、娘が乗り越えていく問題。」
このあたりまで聞いて、ある程度頭が冷えてきた。自分の考えは若すぎた。
怒りに任せて打って出ることは、簡単かもしれない。
でもそれによって、夫婦の問題に、嫁の兄という要素が入り込んできてしまうことになる。
さらに自分は結婚もしてないし子どももいない。
そんなやつに、文句言われても、聞こうとも思わないだろう。
それに、そういう人を選んだのは妹自身であり、妹が乗り越えていくべき夫婦の壁なのかもしれない。
だから私は、彼らを見守ることにしたし、彼らからヘルプ要請が来たときだけ応えることにした。
多分妹からしかヘルプ要請はこないだろうけど。
ガミガミ叱る以外の方法で、間接的に妹の負担を減らせないか。
義弟との関係をうまく築いていく方向で今後進めてみることにする。
話の通じないガキを変えるより、自分を変えて見守るほうが、精神的にも肉体的にもコスパがよいかもしれない。
少しずつリーダーから仕事を奪っている
多忙な若手のPM兼リーダー、彼自身の作業時間確保のためのミーティングをワシと設定し、その場で口頭でまとめてワシに指示したり、彼の権限でしかやれない俺が作業できない仕事片付けたり、他案件の質問を俺にしたり。
— y2m@元未経験エンジニア (@yusuke1225math2) 2024年12月3日
いいぞ!!!もっと俺を使え!!!俺を使い倒せ!!!この現場は俺に任せろ!!!
AWSもReactもspring bootも、なにそれおいしいの?状態だったが、1ヶ月仕事してみて少しずつ仕事が板についてきた。
雑務は全部拾うし、リーダーやサポートメンバーが知りたいことは、全部日報に書く。
そして自分のチケットもちゃんと消化する。
Reactも少しずつわかってきて、spring bootでAPIも作れるようになってきたので、年内に主要なチケットは全部片付けるのが目標。
ブラックフライデーセールで昇降式デスク買いました
Amazonのブラックフライデーが金曜23:59までだったので、アフィ記事を書いた。
yusuke1225math2.hatenablog.com
残り24時間ないので、急ぎましょう。
— y2m@元未経験エンジニア (@yusuke1225math2) 2024年12月5日
エンジニアがAmazonブラックフライデーで買うべきもの紹介(12/6 23:59まで) - キムチのきもち https://t.co/LGVIvFrDGK#はてなブログ #ブラックフライデー #amazon #エンジニア #ブログ #日記 #エッセイ
クソみたいな紹介記事を書いてしまったが、実際滑り込みで買いたいものを買えた方がいた模様。
いつも以上にクリックされたので、1時間ぐらいのやっつけ仕事だけど書いてよかった。
自分も、ずっと買おうと思っていた昇降式デスクを買ってみた。
なんかまだタイムセールやってて、今日の終わりぐらいまで13000円でした。気になる方はどうぞ。
備忘録
React
React v19の安定版がリリースされた
- React v19 – React
- 新しいHookが色々追加されていたぞ
React Router v7がRemixと合流したぞ
useEffectあるある「setHogehogeでstate更新してもstateが更新されてない」
- ReactでsetStateが即座に反映されない問題を解消する #useState - Qiita
- stateが更新されるのは、再レンダリングされたあとだから。
- 公式ドキュメントをもう一度読んだほうがよさそうだ
- そもそもそのuseEffectいらないかもしれない
レンダーのためのデータ変換にエフェクトは必要ありません。
ユーザイベントの処理にエフェクトは必要ありません。
- そのエフェクトは不要かも – React
- 過激派によるアンチパターン解説
- Reactの設計原則から教えてくれてるので、時間あるときに読んでみると良いかも
javascript
そもそもjsは、シングルスレッドでどうやって処理を走らせているのか。
- イベントループを理解しましょう。
- 実行コンテキスト: コードが実行される際に必ず生成される実行環境。
- コールスタック: 実行コンテキストの積み重ねスタック。
- タスクキュー: 実行待ちのタスク(非同期での実行が予約されてる関数)が格納されるキュー。
- イベントループ: タスクキューを順番に消化する仕組み。コールスタックが空のとき、キューから一つ取り出して実行する。
// 例
let val=0;
setTimeout(function task(){val=1;}, 0);
console.log(val);
// 実行結果
// > 0
となる。setTimeoutのコールバック関数taskは、グローバルコンテキストの消滅後に実行されるから。回避するには、コールバック関数を使えばいいが、コールバック地獄になりやすい。→Promiseを使おう。
Promiseとasyncとawaitをもう一度
- プロミスの使用 - JavaScript | MDN
- JavaScriptの非同期処理をしっかり理解する 〜async/await/Promise〜 #promise - Qiita
- asyncは、それを付けた関数内で、awaitが使えるようになり、その関数の返り値はPromiseでラッピングされる
- 複数の非同期処理を全部終わらせてから次にすすむなら、Promise.allする
java
javaのプリミティブ型
- Javaのプリミティブ型と参照型について #資格 - Qiita
- プリミティブ型: (int, boolean, floatなど8種類)、値型ともいう。メモリのスタック領域に値が入ってる。
- 参照型: Stringとか配列とかListとか、メモリのスタック領域に変数のポインタ、ヒープ領域にポインタが指すオブジェクト(インスタンス)が入ってる
- ラッパークラス: プリミティブ型をラッピングした参照型クラス
- オートボクシング: プリミティブ型→ラッパークラス への自動変換
- アンボクシング: ラッパークラス→プリミティブ型 への自動変換
- スタックとヒープについては、マニアックだが下記記事が参考になる
ArrayListとListがあるが、何が違うのか
- Listはインタフェースで、ArrayListはListインタフェースを実装したクラス
- インタフェースって何?
- インタフェースとはクラス仕様としての型定義をするもの
- 抽象クラスとか多重継承の可否とかについてもよく書かれていて、javaの言語仕様を背景から理解するのに役立ちそう
- 【詳解】抽象クラスとインタフェースを使いこなそう!! #Java - Qiita
- なぜ ArrayList は List 型で宣言するのか #Java - Qiita
- List型で宣言しておけば、あとから必要になったときArrayList以外の型も入れられるから
spring boot
- SpringBootでアプリを作成してみた【REST API開発入門】 #Java - Qiita
- コントローラー
- アプリケーション全体の制御処理を受け持つ
- リクエスト受付処理、入力データ受付処理、入力バリデーション、エラー処理、ビジネスロジックの呼び出し
- サービス
- ビジネスロジックに基づいて業務処理を担当する
- ビジネスロジックはここに記述する
- レポジトリ
- データ層
- コントローラー
- Spring MVC と 普段MVCと呼んでいるものは少し異なる模様
- Spring MVCは、フロントコントローラーパターン。フロントコントローラーが処理の中継・管理をする
- Spring Boot + Spring MVC ~サンプルアプリ実装~ #SpringBoot - Qiita
- Spring MVCの詳細は公式リファレンスへ
- Spring MVC と Spring boot も異なる模様
Azure AD B2C
- Azure Active Directory B2C のドキュメント | Microsoft Learn
- アプリと API に顧客をサインアップおよびサインインできるようにする顧客 ID アクセス管理 (CIAM) ソリューション
- Custormer Ientity and Access Management
- AWSなら Amazon Cognito→Amazon Cognito(ウェブ/モバイルアプリのユーザー管理)| AWS
- 技術と機能の概要 - Azure Active Directory B2C | Microsoft Learn
- IDエクスペリエンス: ユーザーがアプリケーションにアクセスするために従うビジネスロジックを定義できる
- ユーザーフロー または カスタムポリシー で構成できる
- チュートリアル→チュートリアル - ユーザー フローとカスタム ポリシーを作成する - Azure Active Directory B2C | Microsoft Learn
- UIのカスタマイズ(カスタムポリシー)
AWS
AWS Health Dashboard
- Service Health Dashboard と Personal Health Dashboardが 統合されて AWS HDになった
- AWS SHD
- AWS Personal Health Dashboard
- AWS環境に影響を及ぼすAWSイベントのアラートやガイダンスを提供してくれるもの
- 特定のイベントに対してアラートを設定できるため、変更予定を計画的に立てられる
- CloudWatch Eventsを使ってカスタムルールを構築し、Lambdaなどのターゲットを選択して、特定イベントについて自動化された改善措置を定義できる
- 追加料金なし
- AWS Health の具体的なユーザー通知設定方法
ECS/Fargate
- Fargate: サーバレスで従量課金制のコンピューティングエンジン
- インフラ管理が不要になりアプリ構築に集中できる
- AWS Fargate(サーバーやクラスターの管理が不要なコンテナの使用)| AWS
- 今さら聞けないAWS ECSとは?Fargateとは? #AWS - Qiita
- ECSは、コンテナオーケストレーションツール(コンテナをいい感じに管理してくれるサービス)
- EKS(Elastic Kubernetes Service)は、大規模ワークロード向けのKubernetesベースのサービス
- サーバレスでECSを稼働させるためにFargateを使う
- インスタンス管理が不要になる
- ECS (Elastic Container Service)
- 構成要素(IaC化してるなら.ymlに記述していく)
- クラスタ: ただの箱
- タスク: アプリの実行単位
- タスク定義: タスクの構成
- サービス: タスクの管理人
- コンテナの実行方法は、タスクから直接実行と、サービスから実行がある
- アプリ更新の方法
- サービスにて、リビジョン指定を更新する
- 構成要素(IaC化してるなら.ymlに記述していく)
- 公式Docs: Amazon Elastic Container Service とは - Amazon Elastic Container Service
- ECSは、コンテナオーケストレーションツール(コンテナをいい感じに管理してくれるサービス)
- Fargateタスクのメンテナンス
- Fargateタスクのメンテナンス通知がきたときの対応|datahaikuninja
- スタンドアロンタスクは、対象タスクがAWSによって停止されて、新しいタスクは勝手には起動されない
- サービスタスクは、対象タスクがAWSによって停止されるが、タスク必要数を維持しようとするため、新しいタスクが立ち上がってくる
- 対象がサービスタスクなら、放置しても致命的な問題はなさそうだが、スタンドアロンタスクなら、対応を忘れないようにする
- 対象がサービスタスクでも、事前に対応はしておくべき。デプロイタイミング等がメンテナンスと重なるとデプロイ失敗する可能性もある
- メンテナンス完了してもPersonalHealthDashboard(下記)には変化なし。期限日を過ぎると通知は消える。期限日より前にステータスはわからない。
- AWS Fargate タスクのリタイア通知による運用の可視性の向上 | Amazon Web Services ブログ
- タスクのリタイア通知をSlackやメールで補足する具体例が記載されている
- その他参考情報
- Fargateタスクのメンテナンス通知がきたときの対応|datahaikuninja
Sentry
導入にあたって色々調査をしている
Sentryを使って React のデバッグを改善する方法 - Ichizoku の 『Sentryを使って、Reactのエラーとパフォーマンスを監視する』が最も参考になりそう
- この記事にはReactのデバッグ方法も豊富に詳細まで書かれているので一読の価値あり
- Sentry の React SDK がある
- 『セッションのリプレイを見ることで、ユーザーがUIで行ったエラーの原因をビデオで見ることができます。』
- Slackに通知飛ばす連携方法の設定
- Spring Boot用のSDKもある
- AWS Lambda用も一応ある
RESTful API について、もう一度ちゃんと学ぶ
- RESTful API とは? - RESTful API の説明 - AWS
- ウェブAPIは、クライアント(ユーザー)とリソース(クライアントに提供する情報)のゲートウェイ
- REST: Representational State Transfer
- 統一されたインタフェース、ステートレス、階層型システム、キャッシュ可能性、オンデマンドなコード
- これによって、スケーラブルで柔軟で独立したAPIになる
- RESTは思想、RESTful APIはRESTに基づいたWebAPIの実装
- クライアントリクエストの内容
- URLで一意なリソース識別
- GET,POST,PUT,DELETEというHTTPメソッドで実装
- HTTPヘッダに、データとパラメータが含まれる
- RESTful APIサーバーのレスポンス
- ステータスライン (200など)
- メッセージ本文(jsonやxmlのリソース表現)
- ヘッダー
- AWSだと Amazon API Gatewayで作成、モニタリング、保護とかできる
- 実際にLambdaと組合せて作ってみるハンズオン記事
マイクロサービスからBFL、モノリポの探求
マイクロサービスについて
- マイクロサービスアーキテクチャってなんだ?
- 今注目される「マイクロサービス(Microservices)」とは - クラウドネイティブNow|ソフトウェア : 富士通
- なぜマイクロサービス?→顧客ニーズに素早く対応するためにGoodなアーキテクチャだから
- マイクロサービスはどういうアーキテクチャ?
- 何が嬉しいの?
- ビジネス機能ごとに開発チームを分けられる。開発チームが保守も責任を負える。
- サービスごとの変更管理が楽、要するに素早く開発が進んで顧客ニーズに対応しやすい。
- 注意点
- サービス分割を注意深くやらないと、分散的なデータ管理や疎結合なサービスにできない
- インフラ構築は自動化しましょう
- サービス間通信の異常対処の設計が必要
- サービス間通信のパフォーマンス改善が必要
CQRSとEventSourcing
- CQRSとEventSourcingの基本 #CQRS - Qiita
- CQRS Command Query Separation
- Command: オブジェクトのデータを変更して何も返さないかメタデータだけ返す
- POSTメソッド
- Query: 情報を返すが、オブジェクトのデータは変更しない
- GETメソッド
- 要するに、読み取りと書き込みを、明確に分離する。これによってマイクロサービスアーキテクチャによって嬉しいことがたくさんある
- Command: オブジェクトのデータを変更して何も返さないかメタデータだけ返す
- Event-Sourcing
- ドメイン駆動設計とCQRSでよく使用されるデータ保存メカニズム
- CRUDと異なる点
- UPDATEとDELETEを捨てて、CREATEとREAD(INSERTとREAD)のみを使用する
- すべての変更は新しいエントリとしてEvent-Store(データベース)に追加され、肥大化する
- DDDのdomein events と Event-Sourcingのeventは、いずれもビジネスロジックに関連するイベントを記述する
- CQRS & Event Sourcing モダンアーキテクチャにおける役割と実装
BFF
- BFF(Backends For Frontends)超入門――Netflix、Twitter、リクルートテクノロジーズが採用する理由:マイクロサービス/API時代のフロントエンド開発(1)(1/2 ページ) - @IT
- 『データベースや全文検索エンジンからデータを取得、更新する部分はデータの整合性や信頼性を担保しつつ管理することを目的とします。ページを構築する箇所やユーザーからの入力情報を得る箇所はユーザーインタフェース(UI)に該当し、ユーザー体験(UX)を向上させることを目的としています。
- 『前者をバックエンド、後者をフロントエンドとして役割を分担させつつ、専門領域に特化させることで集中できるようにするアーキテクチャ設計のことを「BFF」と呼んでいます。』
- 流行りのBFFアーキテクチャとは?|Offers Tech Blog
- 『マイクロサービス化における課題を解決するためにできたアーキテクチャ』
- 『BFF は、フロントエンド開発の補助をする形になるため、基本的にはフロントエンドエンジニアが開発を担当します。バックエンドエンジニアは API を始めとした BFF のリソース管理を担当します。』
モノリポvsマルチリポ
- モノリポとマルチリポの比較が浮き彫りにする開発能力を高めるための課題とトレードオフ - mtx2s’s blog
- モノリポ → 全部一つのリポジトリ
- マルチリポ → マイクロサービスごとにリポジトリ分ける
- Googleのモノリポについて書かれた論文の考察から、各リポジトリ戦略のトレードオフを考察している
- モノリポの利点(主にGoogleの話)
- コードベースの可視性が高まり、他の人のコードを真似したり、変更したりしやすい
- 依存関係に関する悩みから開発者が開放される
- Googleではトランクベース開発(開発ブランチを持たず、開発の変更はヘッドにコミット)
- プロジェクトはリポジトリのヘッドにある依存関係のバージョンを使う(単一バージョンルール)
- APIの更新によって影響を受けるすべての依存元コードは同時に更新される
- 課題: コミット権限の管理、エンジニアの実力
- マルチリポの利点
- コードのサイズが小さい、ビルドも短い
- 継続インテグレーションの文脈では有利
- 安定した依存関係
- 課題: コードの可視性、リポジトリを跨いだ依存関係の管理
- コードのサイズが小さい、ビルドも短い
- モノリポの利点(主にGoogleの話)