考えたこと・気になったことリンク集
ソフトウェアエンジニアリング
API
-
RESTAPIのデザインについて
-
APIのエラーハンドリングのやり方調べておいたほうが良さそう #エラーハンドリング
-
システムパフォーマンスについて
- プロセスとスレッド
- Node.jsだとどうなっている?
- プロセス中に複数スレッドがあるけど、いくらでも作れるの?てかどうやって作られるんだろう
- コンテナって1コンテナ1プロセスだけど、中でマルチプロセスってどうやるの?
- メモリ管理
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Memory_management
- クラスが生成されるときのメモリの使われ方について見ておいたほうが良さそう
- I/Oについて
- 知っておいた方がいいおおまかな計算について
- システムデザイン
- SLAについて
- プロセスとスレッド
-
画像について
- ブロブに入れて引張る
-
QRコードのトランザクションについて
-
URLに状態をもたせる
-
ファイルアプロードの設計について
テスト
- priate constructorを持つエンティティをどうやってモックしていくのか
- アプリケーション層、ドメイン層のテストで最低限やっておくこと
- テストダブルの分類とかがうまく書かれている
- [B! テスト] ソフトウェアテストの古典から現在まで
- PlaywrightとGitHub Actionsを用いたE2Eテスト自動実行環境の構築と、リリース頻度向上の取り組み - M3Career Techblog
- 伊藤淳一が考える「コードレビューの観点とアプローチ」 - レバテックLAB
- 翻訳記事「AIコーディングツールによって加速するコード生成に品質保証活動はどう立ち向かうか」 - ブロッコリーのブログ
- runn と Skills ではじめる結合テスト
- Blog > Writing Good Unit Tests
- 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発、その全体像 ~Software Design 2022年3月号「そろそろはじめるテスト駆動開発」より | gihyo.jp
Javascript/Typescript
- TypeScript だけで安全に JSON 文字列内の値を読み取る | t28.dev
- 【TypeScript/JavaScript】配列操作reduce()を救いたい。 #ポエム - Qiita
- TypeScriptの設定の良し悪し
Framework
NestJS
- NestJSのDIを理解したい
- SWC (fast compiler) | NestJS - A progressive Node.js framework
- NestJSのヘルスチェック
- terminusの中身について
Fastify
BackEnd
- Web Socket #webSocket
- Graceful shutdown
- 決済サービス #決済
- バッチ処理
- 他社の事例
FrontEnd
- Webフロントエンド設計ガイドライン | フューチャー株式会社
- SSRとか、SPAとかマジでわからない
- How modern browsers work - by Addy Osmani - Elevate
- https://github.com/catnose99/timeline/tree/main
- ChromeDevTools/devtools-frontend: The Chrome DevTools UI
エラーハンドリング
- 5 Reasons Why Business Exceptions Are a Bad Idea
- エラーハンドリング
- Notification Pattern
- error handling
- 例外処理コードレビュー集
- Exception filters | NestJS - A progressive Node.js framework
- 例外処理についていくつかあるが状況に応じてどれを使うかを分析した方がいいかもしれない
- null を返す場合
- throw errorする場合
- return errorする場合
- Result型を使う場合
- findメソッドを書くときにnullを返すか?
- https://dev.classmethod.jp/articles/error-handling-practice-of-typescript/
- nullを返すのは基本的に良くない
- 後続の処理でnullチェックが発生する
- typescriptではnull ではなく、undefindが推奨されている
- MSのコーディングガイドより
- 解決策
- エラーを返す
- nullオブジェクトを返す
- TSだとNullオブジェクトってあるのか?
- PrismaとかでfindUnique使用時にnullが返る。このとき、findUniquメソッドをラップして、新しいfindメソッドを作成して、その中でエラーをかせせば良い
- Error型を作るのが一番良さそう
- カスタムエラークラスの作成
- 無効な引数やロジックのエラーを示す際
- Invalidから始まる名前にする
- InvalidEmailAdress
- Invalidから始まる名前にする
- 実行時例外を返す場合
- “Sorry, I … .” で終わるワードを名前にする
- CouldNotFindProduct, CouldNotStoreFile, CouldNotConnect
- early returnにもメリデメがあるぽい
- https://medium.com/swlh/return-early-pattern-3d18a41bba8
- 基本的には、早くフェイルパスを書いてしまい、ハッピーパスは最後に返すことになる
開発メモ
-
インフラ層の責務について
-
- DBを複数回叩く場合、インフラ層の責務はどうなるんだろう
- →基本的にアプリケーション層で書く
- DBを複数回叩く場合、インフラ層の責務はどうなるんだろう
-
クラスをステートレスに設計しろとは具体的にどういうこと?
- クラスが状態を、ライフサイクルをもたないということ。具体的には、毎回、new して新しいインスタンス化を行うということ
-
変数名に、オブジェクトの名前も加えるか?
- 例えば、求人タイトルとした場合、jobTitleのような命名にするか
- こうすれば、変数名単体としてはわかりやすいが、コードの中では、job.JobTitleのようになり冗長な気もする
-
現在、VOの実装としてDTOを定義しているが、これで正しいのだろうか?
-
DTOの変更容易性を高めたい #DTO
- どうすればいいのだろうか
- DTOをあたいオブジェクトで生成してしまっている
-
非同期処理について #asyncronous
- TypescriptのPromiseやasync/awaitとイベントソーシングによる非同期の違いがわからなくなってきた
- おそらく、そもそも、どうやって、非同期処理を受け取っているかをちゃんと理解する必要がありそう
- どういう時に非同期が欲しいのか、いらないのかを理解した方が良さそう
-
QR Code について #QRcode
- QRcodeにはhttpのメソッドとかも含めるの?
- System Design — QR code generation | by Krutsilin Siarhei | Medium
- Dynamic QR Code - PayPay Open Payment API Documentation
- QRコードのトランザクションについて
- QRコード生成パッケージ
- 画像のエンコード方法がわからないから、何を取ればいいかがわかっていない
- JWT(JSON Web Token)をQRコードに埋め込んで表示 / 処理してみる #QRcode - Qiita
-
アプリケーションで時間をどう扱うか?
DDD (Domain-Driven Design)
-
Modeling Relationships in a DDD Way · Enterprise Craftsmanship
-
- モジュラーモノリスの作り方として参考になりそう
エンティティ
- 状態遷移の設計
値オブジェクト
- 値オブジェクトと構造
- 再帰的な構造のデータの同値性判定はどうしたらいいか - 貳佰伍拾陸夜日記
- 値のコレクションクラスから取得するときに、readonlyで取得するやつ
集約
- 集約とトランザクション
イベント駆動
- ドメインイベントについて #ドメインイベント
- ドメインイベントはある出来事を時系列に保管するためのオブジェクト
- ドメインイベントはイミュータブルである必要がある、なぜなら、過去に起こった出来事は未来においてもその状態が不変でなければいけないから
- 集約間の通信について #集約
- [DDD] 戦術的設計パターン Part 4 整合性
- イベント発行はオブザーバーパターンを使うべきか
- イベント駆動について
- モジュラーモノリス
業務ロジックの実装
DB
DBの中身
- マイグレーションコンテナは一緒に書いて良い?
- compose.dev.yamlとかcompose.stag.yamlとかに書いたほうがいいかも
- マイグレーションする場合、どうやるか検討が必要かも
- DBとメモリのIOについて
- mysqlのcharとvarchrの違い
- 7文字を占有した場合に、なぜ8バイトが占有されるのか、1文字分は、ポインタとからしいが、仕組みが分からない
- 関連するキーワード
- メモリ
- allocate
- ポインタを引き回す
- javaのvmだとヒープに入る
- GCで遅くなる
- メモリ
- DBの自作とか面白そう
- Postgresqlの仕組みを知る
コネクションプール
インデックス
- 検索時のインデックスについて #index
- hashとか使うのだろうか?
- データベースのカラムにハッシュを持って検索効率を上げるのってない気がする
- なぜインデックスを使うと早くなるのか
- どの値にインデックスをつけるとよいのか
パフォーマンス
- How PostgreSQL Scans Your Data | Stormatics
- PostgreSQLがインデックスを使ってくれなくてスロークエリが発生していた件 〜 PostgreSQLのコスト計算ロジックを深掘りする 〜 - Hello Tech
Transaction
- トランザクション
- https://note.com/watanabe_kf1983/n/n41f57b690c56
- トランザクションで囲う範囲はどのように決めるのか?
- 2相ロックと楽観並行制御を使い分ける基準を見極められるようにしたい
- MVCC
- MySQLのネクストキー
- 合意アルゴリズム
- 2相コミット
- ある集約でトランザクションを貼るときを考える。そこでは、別の集約からreadを呼び出し検証してから、集約の更新などを行う。この時、別集約のreadはトランザクションの内部に入れるべきか?
- prismaのトランザクションの挙動が分からない
- rollbackってどうなっている?
- データベースのisolation levelをどうやって満たしている
- ACIDの亜種
- バッチについて
- とあるコドモン開発部の日常〜大規模データメンテナンスバッチの設計編〜 - コドモン Product Team Blog
- 非機能要件についても、イベントストーミングやるとうまくいきそう
- バッチとストリームの処理がわからない
- ストリームって何?
- バッチ処理の改善〜トランザクション範囲の最小化〜 - Timee Product Team Blog
- databaseでカウンタなどの実装について
- トランザクションそろそろ使いこなしたい、囲う範囲とロックをどこでかけるか
- コンピュータ・サイエンティストのための会計知識よさげ
- For Updateは修羅の道になるかもしれない
- 輻輳に着想を得たTransaction制御
- How Uber Conquered Database Overload: The Journey from Static Rate-Limiting to Intelligent Load Management | Uber Blog
- Adaptive Concurrency Control for Mixed Analytical Workloads | by Dan Kleiman | Klaviyo Engineering
- MySQL/Aurora/TiDBロック入門 – 第1回トランザクション分離レベル|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ
データベース (PostgreSQL)
- PostgreSQL: Documentation: 18: 13.2. Transaction Isolation
- 5.9. Serializable Snapshot Isolation :: Hironobu SUZUKI @ InterDB
分散システム
- DebeziumでCDCを構築してみた
- Google Code Archive - Long-term storage for Google Code Project Hosting.
- Sagas — Part 3: Choreography Instead?
- 2025年の振り返り(技術編) - 理念と共に、最も困難で狂気の選択を考え続けて諦めない
分散トランザクション
テーブル設計
- ステータスってDBのテーブルで管理するものなのだろうか?違う気がする
- https://zenn.dev/rsugi/articles/8a939d7bd2f60a
- https://amamanamam.hatenablog.com/entry/2023/09/21/192858
- 静的なenumをデータベースのテーブルで表現すんの本当にやめてほしい by nonakasan
- 「失敗から学ぶRDBの正しい歩き方」第5章 フラグの闇
- テーブルのカラム名に迷ったんで、英語圏で仕事しているエンジニアに聞いてみた | かきエンジン
- ユーザーテーブル作る際に参考になった
- updateするのと、delete insertどっちがいいのだろうか?
- upsertはアンチパターンなのか?どういうときに使うのか?
- updateをする場合と、createとdeleteでupdateする場合、どちらがいいのか
- 削除系について
- 論理削除
- 物理削除
- ゴミ箱テーブル 退会テーブルなど
ORM
Prisma
- prisma
- prismaのトランザクションの仕組みがよくわからない
- AsyncLocalStargeの仕組みがわからない
- 局所スレッドストレージみたいので調べればよい?
- prismaちょっとあぶないかも
- prismaのE2Eテストどうする門外
- prismaのトランザクションの仕組みがよくわからない
- Prisma 応用
- Prisma & データバリデーション
- Data validation with CHECK constraints (PostgreSQL) | Prisma Documentation
- Offset / Cursor Paginationについて - Speaker Deck
- Pagination (Reference) | Prisma Documentation
- Secure API file uploads with magic numbers | Transloadit
- File Validations Using Magic Numbers In NodeJS Express Server | by Sridhar - Medium
- コネクションプール
- prismaのエンジンをnodejs-postgresql
SQL
- SQL
- SQLが実行される順番がわかっていない
- SQLが書けない
- 実行計画
- CTEについて
検索
クラウド
AWS
ECS
-
SecretManagerを更新すると、サーキットブレーカーが動き、ロールバックが走るコレがあまり良くわからなかたので、メモ
Storage
- S3
- ウイルススキャンについて
- 署名付きURLについて
メッセージング
-
Review: Leases: An Efficient Fault-Tolerant Mechanism for Distributed File Cache Consistency
-
Amazon Simple Queue Serviceとは? - Amazon Simple Queue Service
-
SNSとSQSのFIFOについて
- Amazon SNS FIFO topic example use case - Amazon Simple Notification Service
- Amazon SNS メッセージの FIFO トピックの重複排除 - Amazon Simple Notification Service
- Amazon SNS デッドレターキュー - Amazon Simple Notification Service
- Fanout Amazon SNS notifications to Amazon SQS queues for asynchronous processing - Amazon Simple Notification Service
- Amazon SNS トピックへ Amazon SQS キューをサブスクライブする - Amazon Simple Notification Service
- Invoking a Lambda function asynchronously - AWS Lambda
- serverless/examples: Serverless Examples
-
Lambda SNS SQS Lambdaを行うために必要なこと
- SNS SQS間のセキュリティ
- terraformのdepends onがLambdaのロールで必要だったので
- power-toolsでログの取得も行った
ElastiCashe
- クラスタモードについて理解したいお気持ち
DynamoDB
- DynamoDBの細かい設定とかわからない
- DynamoDB + ElastiCashe
- DynamoのTTL対策
- DynamoDB TTL Best Practices | Aman | 2022 | Medium | Medium
- DynamoDBでできないこと
- AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜
- Scaling DynamoDB: How partitions, hot keys, and split for heat impact performance (Part 1: Loading) | AWS Database Blog
Aurora
- 設定もよくわかっていない
- 結局postgresqlな気がする
- AutoScaringとか、自動で落とす設定とか書けていない
ネットワーク
- Route53
- API Gateway
セキュリティ
IaC
- Terraform
セキュリティ
- Webブラウザセキュリティをあまり理解できていない
- 少しTrivyのMisconfigurationが気になる
- セキュリティエンジニアがビジネスに貢献するには
- Google Cloud が推奨セキュリティチェックリストを公開しました | DevelopersIO
脅威モデリング
- Threat modeling for OAuth 2.0 via Security by Design approach using the Microsoft Threat Modeling tool [Part 1] | by Ashish Shrivastava | Medium
- Threat modeling for OpenID Connect and OAuth 2.0 via Security by Design approach using the Microsoft Threat Modeling tool [Part 2] | by Ashish Shrivastava | Medium
- arXiv Authorization & Authentication — arXiv AuthN/Z 0.1 documentation
- S3の脅威モデリング
- リスク管理とは何か|きゅーい
認証認可
-
opt認証
-
フェデレーションとは何か?
-
OAuth
-
セキュリティエンジニアはこう見る。開発時に認可制御不備を怪しむべき実装パターン10選 - GMO Flatt Security Blog
-
JWT
認可の設計
DevOps
Git
- commit messageについて #git
- 一応推奨のルールが有る
- サマリーを命令形で50文字以内で書く
- それ以上のテキストを書く場合は、2行めを空行にする
- 好きなだけテキストを追加してよいが、幅が72文字以内になるようにフォーマットする
- 日本語で書く場合は半分にする
- 何をどのように変更したのかという質問に対する答えは他の場所で見つけられます。したがって、コミットメッセージはなぜその変更をしたのか、なぜその形になっているのかを説明する
- 次のように書いていけばいいかな
- 何をしたのか?
- それによって何が嬉しいのか?なぜそうしたのか?
- tbaggery - A Note About Git Commit Messages
- 過去形ではなく、命令形で書く
- 一応推奨のルールが有る
- pull Requests #git
- 10 tips for better Pull Requests
- プルリクエストの粒度を決めて、レビューを楽にしたい
CICD
- 増えすぎた GitHub Actions を「3 層アーキテクチャ」で整理した話
- action散らばりそうだから、層分けするのよさそう
- GitHub ActionsにおけるStep/Job/Workflow設計論
- GitHubの監査ログを定期的にexportして保存する - 10X Product Blog
コードレビュー
Observability
SRE
- Snowflakeがオブザーバビリティー分野に進出—「可観測性はデータ問題だ」 - ZDNET Japan
- 「SREは信頼性、PEは生産性」に引っかかったので、“信頼性”を考え直してみる - SRE Magazine
- Google SRE - Site Reliability engineering
SLO SLI
- Google SRE - SLO Documnets: Game Services API, HTTP, Score
- [PUBLIC] The Art of SLOs – Participant Handbook - JA
- 小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ - Speaker Deck
- 信頼性向上のためのSLI/SLO導入vol.3 - サービスへの導入事例
監視
OpenTelemetry
Lambdaのトレースについて
- AWS LambdaとAWS X-Ray - AWS X-Ray
- Visualize Lambda function invocations using AWS X-Ray - AWS Lambda
- Amazon EventBridge でスケジュールされたルール (レガシー) を作成する - Amazon EventBridge
- コンテナでデプロイした Lambda から OpenTelemetry でトレースを X-Ray に送る | Amazon Web Services ブログ
Logging
- ログ設計の方針
- まず、開発者目線、マーケ、営業、運用、セキュリティ、様々な関係者目線で、「自分たちが知りたい情報」をログにしていくべき
- レイヤごとに知りたい情報を決める
- インフラ / プレゼンテーション / アプリケーション / データベース
- 何が原因でエラーがおきたのかをわかりやすく表現する
- ログフォーマット(何を伝えるか?)
- ログ出力でやらないほうがいいこと
- 個人情報の出力
- 丁度ええ! ロギング - kawasima
- ロギング設計大全 - kawasima
- NestJSでCloud Loggingのための構造化ロギング
- Repeatable execution
- バッチ処理の通知・アラート管理 - CARTA TECH BLOG
- 構造化ログのタイムスタンプ形式 - methaneのブログ
- 構造化ログから構造化イベントへ - methaneのブログ
- AWSでの法令に則ったログ設計及び実装/分析 - Adwaysエンジニアブログ
- Amazon RDSの監査ログを保全する信頼性の高いソフトウェアの設計と実装について - Pepabo Tech Portal
- イベントログについて #ES
- Fluentd
- ログをどう転送しているかわかっていない
- fluent-bit これぐらいはやった方がいい設定
- Go のエラーにコンテキストを持たせていい感じにロギングする - カミナシ エンジニアブログ
- TypescriptにおけるLoggerの実装をどうするか?
- Proxy
- 「私たちのログ配送、コストかかりすぎ?」fluentdのログ配送に関するコスト削減に取り組んだお話 - freee Developers Hub
- Node.jsのプロセスレベルで起こるログについて
- main.tsで起こるレベルのログってどうやって処理すればいいかいまいちわかってねえ
- Window: unhandledrejection イベント - Web API | MDN
FEのログについて
- ブラウザのログをどう取るか
CS、低レイヤ
- 待ち行列で性能測るやつ
- Node.jsのパフォーマンスの測り方
- アルゴリズムマジで弱すぎるのでちゃんとやりたい
- What every SRE should know | Viacheslav Biriukov
正規表現
- 404 Blog Not Found : 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ
- 電話番号の正規表現はどうしたらいいのか - ノンカフェインであなたにやさしい
- 正規表現AIに書かせているので原理ぐらいは知っておきたい
- 正規表現のはなし | ドクセル
- 正規表現の話 @第25回日曜数学会 - ニコニコ動画
- Foundations of Computer Science
- %CPU Utilization Is A Lie - Brendan Long
- Goroutine はなぜ軽量スレッドと称されるのか
- 論理的思考の放棄
Document作成
ADR (Architecture Decision Record)
- 俺たちはこう ADR(Architecture Decision Record)を書いている - giftee Tech Blog
- Architecture 101 — Architecture Decision Record (ADR) | by Anji… | Medium
デザインドキュメント
- 175. 良いデザインドキュメントの書き方 - Today I Learned - Podcast on Spotify
- eugeneyan/ml-design-docs
- ユーザーストーリーを書くのがかったるいので「背景・目的・対応内容」に落ち着いた話
- How to Write an Effective Software Design Document · Refactoring English
技術記事
AI
- Figmaとかと連携できるようにしたいよね
- 学術的なやつ
- スマホとかipadでobsidianが見たい
- obsidianのスライドモードで報告するのよさそう
- GPT-5、開発に使うための基礎知識 | gihyo.jp
- Claude Code を開発チームに迎え入れるためにやっておきたい環境整備 | ドクセル
- Claude Codeに「QA専門エージェント」を組ませたらテスト内容が劇的に変わったお話 - kubell Creator’s Note
- The New Skill in AI is Not Prompting, It’s Context Engineering
- LLMとソフトウェア開発に関する考察 - Martin Fowler’s Bliki (ja)
- mizchi/ai-coding-guide-202507
- arxiv.org/pdf/2604.14572
- GitHub - addyosmani/agent-skills
- AGENTS.mdを自動で育てる仕組みを作った - 逆瀬川ちゃんのブログ
- [2511.12884] Agent READMEs: An Empirical Study of Context Files for Agentic Coding