ピックアップ記事
62 件の記事
JOSEとは?JWT・JWS・JWE・JWK・JWAの全体像と安全な使い方
JOSE(JWT/JWS/JWE/JWK/JWA)の全体像を解説する。JWTとJWSの違い、署名の3パートと暗号化の5パートの構造、alg混同やnone攻撃を防ぐJWT BCP(RFC 8725)まで整理する。
OAuth 2.1とは?OAuth 2.0からの変更点とSecurity BCP(RFC 9700)
OAuth 2.0から2.1への変更点と、RFC 9700 Security BCP・RFC 6819 脅威モデルが示すセキュリティ対策を整理する。PKCE必須・Implicit非推奨・Mix-Up対策など、現在のOAuthで守るべき点をまとめる。
OpenID ConnectのDiscoveryとメタデータとは?自動設定と鍵取得の仕組み
OpenID ConnectのID Tokenの役割と、Discovery(OpenID Connect Discovery / RFC 8414 AS Metadata)による自動設定・公開鍵取得の仕組みを解説する。jwks_uriによる鍵ローテーションまで整理する。
アクセストークンの検証と失効とは?Introspection・JWT AT・Revocation
アクセストークンの2方式(opaque + Introspection / JWTアクセストークン)の検証方法と、Token Revocationによる失効を比較する。RFC 7662・RFC 9068・RFC 7009を整理する。
OIDCのログアウトとSecurity Event Token(SET)とは?
OpenID ConnectのFront-Channel LogoutとBack-Channel Logout、そしてSecurity Event Token(RFC 8417 SET)によるセッション失効・イベント通知の仕組みを解説する。
動的クライアント登録(DCR)とは?RFC 7591・7592入門
OAuthクライアントをAPIで動的に登録・管理するDynamic Client Registration(RFC 7591)とClient Management(RFC 7592)を解説する。登録エンドポイント、registration access token、セキュリティ考慮まで整理する。
送信者制約トークンとは?mTLS(RFC 8705)とDPoP(RFC 9449)入門
bearerトークンの弱点を塞ぐ送信者制約(Sender-Constrained Token)を解説する。mTLS(RFC 8705)とDPoP(RFC 9449)でトークンを送信者に束縛する仕組み、audを絞るResource Indicators(RFC 8707)まで整理する。
サービス間認証の全体像とは?mTLS・Token Exchange・SPIFFE・ゼロトラスト
マイクロサービス間の認証を「ネットワーク層/トークン層/アイデンティティ基盤」の3レイヤで整理する。mTLS・Token Exchange(RFC 8693)・SPIFFE・ゼロトラスト(NIST SP 800-207)・BeyondProdまで解説する。
SPAのトークンをどこに置く?BFF+セッションで守る認証構成
SPAでアクセストークンをどこに保存するか(localStorageの危険性)、BFF+セッションでトークンをブラウザに渡さない構成、そして最初はトークンレスで十分な理由を解説する。
システム思考で読むプラットフォームエンジニアリング
プラットフォームエンジニアリングとシステム思考には親和性があるのではないか。その直感を言葉に落とすために、ストック・フロー・遅延・原型・レバレッジポイントという語彙で、プラットフォームの振る舞いと陥りやすい失敗の構造を読み直してみる。
システム思考の基本 ―世界をストックとフィードバックで捉える
ドネラ・メドウズ『世界はシステムで動く』を土台に、ストック・フロー・フィードバックループ・レバレッジポイントといったシステム思考の中心概念を一般向けに整理する。
偶有的複雑性と意思決定の記録不在
ソフトウェアの複雑性を本質的複雑性と偶有的複雑性に分けて捉え、偶有的複雑性が生まれる要因を整理した記事。ADRやDesign Docといった意思決定の記録が欠けると、「本質」と「偶有」を切り分けられなくなる問題を論じる。
分散トランザクションの代表的3パターン — 2PC・Saga・Outbox
マイクロサービスにおける分散トランザクション設計の代表的パターン、2PC・Saga・Outboxを比較し、それぞれの仕組み・長所短所・使い分けを整理する。
アーキテクチャ設計における共通化の罠
アーキテクチャ設計における「共通化」の罠を整理した記事。ドメインロジックの安易な共通化が数年後に解きほぐしにくい負債へ変わりうる一方、技術的関心事は安全に共通化できるという非対称性を、境界づけられたコンテキストの観点から論じる。
プラットフォームの成立条件
社内でプラットフォームを作るべきかどうかをどう判断するか。コア/支援/汎用サブドメインの区別、外部サービスとの比較、レバレッジ、体制などの観点から整理し、ドメイン分析でどこまで判定できるかを考える。
プロダクト開発とプラットフォーム開発は何が違うのか
「なぜ小さくリリースして検証しないのか」——プラットフォーム開発の意思決定に向き合うとき、この問いと頻繁に対峙する。判断基準・設計思想・投資観点の3つの観点から両者の違いを整理する。
エンジニアリングマネジメントを"デッキ"として設計する
1on1やOKR、レビュールールといったマネジメント施策を寄せ集めにしない。判断の質と再現性を軸に、一つの体系(デッキ)として設計する考え方と、施策が成果に変わる条件を紹介する。
bmf-tech.comの gobel → gohan 移行記—完全静的サイト化の流れ
自作ヘッドレスCMS(gobel)+ MySQL + Vue.js構成から、gohanによる完全静的サイトへ移行しCloudflare Pagesでホスティングするまでの全工程。700件超の記事、英語スラッグ生成、画像移行、リダイレクト、Go製プリフライトチェッカーまで。
AI時代のエンジニアリングについて考える
AI時代のエンジニアリングを考察。Golden Datasetによる検証、LLM-as-Judge評価、プロンプトインジェクション対策といったプロンプトガバナンスを紹介します。
GitHub Agentic Workflowを使ったLLMプロンプト管理・評価基盤
GitHub Agentic Workflowを使い、LLMプロンプトをコードとして管理する基盤を解説。Copilotによる自動化、golden dataset、評価の仕組みを紹介します。
キャリアポートフォリオ作成ガイド
自分のキャリアを戦略的に設計するための「キャリアポートフォリオ」の作り方を整理した記事。スキルや経験、目標を構造的に棚卸して市場価値を捉え、目標設定や日々の意思決定の最適化につなげる考え方を紹介する。
良いアーキテクチャ戦略・悪いアーキテクチャ戦略
アーキテクチャ戦略を立てても、形だけになったり実行に移されなかったりして機能しないことがあります。この記事では、書籍『良い戦略、悪い戦略』も参照しながら、課題分析・方針・施策という要素の観点から良い戦略と悪い戦略の違いを整理します。
なぜ・いつアーキテクチャ戦略を書くべきか
なぜ・いつアーキテクチャ戦略を書くべきかについて解説する記事です。「書く時間があるなら手を動かしたい」「書いても読まれない」といった声がある一方、戦略がないまま進めるとさまざまな問題が生じます。戦略を書く意義と、書くべきタイミングを整理します。
アーキテクチャ戦略・戦術・設計の書き分け
アーキテクチャのドキュメントを書く際に迷いがちな「戦略・戦術・設計」の書き分けを整理した記事。三層構造として捉え、Why・What・How・When・Where・Whoという5W1Hのフレームワークを使って、それぞれに何を書くべきかを明確にする。
要件と制約の違い
ソフトウェア設計における「要件(Requirements)」と「制約(Constraints)」の違いについて、ISO 29148の定義をもとに整理した記事です。設計を考える際に混同しやすいこの2つの概念を明確に区別することで、アーキテクチャのトレードオフ判断に役立てることを目指します。
ADRを書くときに抑えておくべきポイント
ADR(アーキテクチャ決定記録)を書くときに押さえておきたいポイントを、経験をもとに4つに整理した記事。意思決定を一つに絞るアトミック性、トレードオフの記録、チームでの議論、テクニカルライティングの原則に焦点を当てる。
チームトポロジーとは?エンジニアリング組織の構成方法
チームトポロジーの4チームタイプ(ストリームアラインド・プラットフォーム・イネイブリング・コンプリケイテッドサブシステム)と3つのインタラクションモード、コンウェイの法則・認知負荷を軸にした組織設計を解説します。
ソフトウェア開発チームがMVVを定めるべき理由
ソフトウェア開発において「技術的に正しいか」の議論は重要ですが、技術的な正解はトレンドや環境、ビジネスフェーズによって容易に変わってしまいます。この記事では、開発チームがMVV(ミッション・ビジョン・バリュー)を定めるべき理由を、目的の明確化やチームの方向づけの観点から解説します。
プラットフォームエンジニアリングとは?内部開発者プラットフォームの構築
プラットフォームエンジニアリングとは何かを解説する記事です。開発者の認知負荷を下げて生産性を高めるための内部開発者プラットフォーム(IDP:Internal Developer Platform)とはどのようなものか、その構築の考え方や、DevOps・SREといった近接する概念との関係を整理します。
TUI開発で役立つターミナル仕様の理解
TUI(Terminal User Interface)アプリケーションを開発する基盤となる、ターミナルの仕様について解説する記事です。既存ライブラリの裏でターミナルがどう動作しているのかに踏み込み、Line Disciplineやtermios、ANSIエスケープシーケンス、Raw Modeの動作原理を、Goでの実装を交えて紹介します。
アーキテクチャアドバイスプロセス(AAP)とは何か?
アーキテクチャアドバイスプロセス(AAP:Architecture Advice Process)とは何かについて、調べたことをまとめた記事です。意思決定を中央集権的にせず、関係者からアドバイスを受けたうえで決定者が意思決定を行うこのプロセスの考え方や、ADRとの関係、実践的な進め方を解説します。
技術的な意思決定において制約やトレードオフを明示することの重要性
技術選定や設計判断を行う際に、制約やトレードオフを明示することの重要性を解説した記事です。意思決定は限られた条件下で複数の選択肢から選ぶ行為であるという前提に立ち、判断の背景を明文化することが将来の再評価や組織の成長につながる理由と、その記録の残し方を紹介します。
キャッシュ戦略の基本的なパターンについて
Webアプリケーションや分散システムのパフォーマンス向上に欠かせない、キャッシュの基本的な活用パターンを整理した記事。Cache Aside・Read Through・Write Through・Write Back・Write Aroundという5つの戦略を、読み書きのフローや一貫性のトレードオフとともに解説する。
Webアプリケーションの処理モデルについて
Webアプリケーションの代表的な処理モデルであるイベントループ・マルチスレッド・マルチプロセスの3つを対比して解説する記事です。それぞれのモデルの特徴やメリット・デメリットを整理し、IOバウンド・CPUバウンドといったワークロードに応じてどう選定すべきかの基準を紹介します。
ACID vs BASE:データベースの一貫性モデルを徹底解説
ACID と BASE という2つのデータベース一貫性モデルの違いを比較し、CAP 定理との関係やどちらを選ぶべき場面かをわかりやすく解説します。
CAP定理とは?分散データベースのトレードオフを解説
分散システムにおける重要な理論であるCAP定理とPACELC定理を、具体例を交えてわかりやすく解説した記事。一貫性・可用性・分断耐性という特性のうち同時に2つまでしか実現できないというトレードオフを、分散データベースの文脈で整理する。
選択と集中を促す振り返りフレームワーク「bmf」
振り返りといえばKPT(Keep / Problem / Try)が定番ですが、自分なりのオリジナリティのあるフレームワークを考えてみたくなり、そのアイデアを記した記事です。Build・Miss・Focusの頭文字をとった「bmf」フレームワークで、選択と集中を促す振り返りの方法を紹介します。
凝集度と結合度とは|良い設計を支える2つの指標
ソフトウェア設計の指標である凝集度と結合度を解説。凝集度の7段階(偶発的〜機能的)と結合度の6段階(内容〜データ)を、具体例とともに整理します。
OPAを利用したアクセス制御のパターン
Open Policy Agent(OPA)を利用したアクセス制御の代表的なパターンを整理した記事。Allow/DenyやSQL生成、ASTを用いたアプローチなど複数のパターンを、特徴・適した用途・実装負荷の観点から比較し、責務分離をふまえて解説する。
RubyとRailsのIO・CPU特性について
Ruby・RailsのI/O特性とパフォーマンスチューニングについて整理した記事です。RubyのGVL(Global VM Lock)による制約や、Pumaサーバのスレッド・プロセス設計、見かけのI/O待ちの実態、IO/CPUバウンドの捉え方をふまえ、計測にもとづいた適切な最適化の方針を示します。
OPAにおけるページネーションへの影響と解決策に関する検討
OPA(Open Policy Agent)を使ったアクセス制御において、ページネーションがもたらす影響とその解決策を検討した記事です。Regoで記述したポリシーによる許可・拒否の判定と、オフセットやカーソルによるページネーション、アクセス制御でのフィルタリングをどう両立させるかを整理します。
設計の賞味期限を考える
システム設計に「正解」はなく、状況に応じた「最適な妥協」があるだけだという前提に立ち、「設計の賞味期限」という観点から設計の寿命をどう見積もるかを考えます。ビジネス・組織・プロダクト・技術の変化と制約、トレードオフを踏まえた意思決定のヒントを整理します。
スケーラビリティを計測する
スループット・レイテンシ・効率といった指標やアムダールの法則などの数理モデル、実践的なベンチマークで、システムのスケーラビリティを計測する方法を解説します。
アーキテクチャドキュメントを書くときに気をつけること
システム設計において重要な役割を果たすアーキテクチャドキュメントを書くときに、気をつけることをまとめた記事です。単なる設計情報の羅列ではなく、関係者に設計の妥当性を説明して合意を形成し、読者の理解と納得を導くための資料として、どう書くべきかを解説します。
自分的システムの仕様書の構成
システムの仕様をドキュメントに書き出す際、どのような構成であるべきかを考えてまとめた、自分なりのシステム仕様書の構成を記した記事です。概要・アーキテクチャ・データモデル・API・技術詳細といった階層構成を、mermaidでの図のコード化も交えて運用する方法を紹介します。
境界付けられたコンテキストとは
ドメイン駆動設計における「境界づけられたコンテキスト」を、開発者以外にも伝わるように説明を試みた記事。なぜそのように切り分けるのか、言葉の意味を明確にし責務を整理することがシステム設計をどう改善するのかを、わかりやすく解説する。
イベントストーミングとは
ドメイン駆動設計の文脈で生まれたイベントストーミングを解説。付箋を使ったワークショップで業務ドメインを高速に可視化し、開発者と業務担当者の共通理解を作る手法を紹介する。
OPAを使用したマイクロサービスのアクセス制御システムの実装
OPA(Open Policy Agent)を採用したマイクロサービスのアクセス制御システムのPOCに取り組んだ内容をまとめた記事です。Rego言語によるポリシー記述やポリシーエンジンの活用、リソースレベルでの細粒度なアクセス制御を実装するためのパターンを、公開リポジトリとあわせて紹介します。
クネビンフレームワークを活用したストーリーポイントの考え方
アジャイル開発における見積もりで使うストーリーポイントの基準を、どう考えればよいかについて浮かんだアイデアを書き残した記事です。クネビンフレームワーク(Cynefin Framework)を活用して、タスクの複雑さの度合いからストーリーポイントを見積もる考え方を紹介します。
アーキテクチャ戦略について考える
アーキテクチャ戦略について考えた記事。CTOやアーキテクトといった明確なポジションでなくても戦略の必要性を感じる場面を起点に、システムを構築・進化させるための方針として、ビジョンや原則、拡張性の計画といった観点を整理する。
負荷試験を始めるためのスターティングガイド
負荷試験を理解し、実際に始められるようになることを目指したスターティングガイドです。負荷試験とはシステムの性能を検証するためのテスト手法であるという基本から、システムが想定するキャパシティを確保できているかを確かめる進め方や実践的な知見までを整理します。
集合について
集合論の基礎についてまとめた記事です。特定の条件を満たす要素の集まりである集合とは何かという定義から、部分集合や和集合・積集合といった基本的な概念、そしてデータ構造やRDBの理論、論理表現への応用まで、ソフトウェアエンジニアの問題解決力を養う観点で解説します。
自作HTTPルーターから新しいServeMuxへ
自作HTTPルーターgoblinからGo 1.22で強化されたnet/http ServeMuxへ移行。新しいルーティングパターンや他ルーターとの性能比較、ServeMuxで十分なケースを解説します。
MySQLのロック解説:デッドロックの防ぎ方とパフォーマンス改善
MySQL のロック(行ロック・テーブルロック・GAP ロック)を解説。デッドロックの防ぎ方とトランザクション設計のベストプラクティスを紹介します。
データベースインデックスとは?仕組みと必要なタイミング
データベースのインデックスとは何かについて解説する記事です。テーブルのレコードを高速に取り出すための仕組みであるインデックスを、B-Treeやハッシュインデックスの内部構造、効果的に使える場面、そして作り過ぎることのデメリットといった観点から、具体例を交えて紹介します。
ソフトウェア開発のプロジェクトにおける不確実性への向き合い方
ソフトウェア開発における不確実性への向き合い方を、アジャイルな計画づくりの観点から解説。既知の未知と未知の未知を区別し、リスクを抑える方法を紹介します。
Goで始めるコードのパフォーマンス改善
Goのパフォーマンス改善の実践。pprofによるプロファイリング、ベンチマーク、エスケープ解析、メモリアロケーション削減を、自作HTTPルーターの最適化事例とともに解説します。
MySQLのトランザクション分離レベル:ダーティリード・ファントムリードを防ぐ
MySQL のトランザクション分離レベルを解説。ダーティリード・ノンリピータブルリード・ファントムリードと、それぞれを防ぐ設定方法を学べます。
トランザクション概観
データベースのトランザクションの基礎について解説する記事です。データを正しく保つための手法であるトランザクションを、多数のクライアントから同時アクセスが発生する状況などを念頭に、ACID特性や並行性制御、分離レベルといったデータ整合性を支える仕組みとあわせて紹介します。
システム設計関連の資料を読み漁った
システム設計に関連する資料をいくつか読み漁ったので、リンク集的にまとめた記事です。なぜ調べてみたのかというモチベーションとあわせて、システム設計を学ぶうえで参考になった記事や書籍などのリソースを整理して紹介します。
bmf-techを支える技術
Docker、Golang、Vue.js、Nginx、Prometheus、Grafanaなど、このブログのインフラと監視を支える技術を紹介します。
net/httpでつくるHTTPルーター自作入門
Golangのnet/httpでHTTPルーター自作を解説。ルートマップ、URLパス解析、メソッド別ルーティング、パスパラメータの仕組みをステップバイステップで実装ガイドします。