ホーム

OPAを使用したマイクロサービスのアクセス制御システムの実装

システムアーキテクチャ

OPAを使用したマイクロサービスのアクセス制御システムの実装 OPAを採用したアクセス制御システムのPOCに取り組んでみたので、その内容についてまとめておく。 POCの設計や実装は以下のリポジトリで公開しているため、そちらも合わせて参照されたい。 bmf-san/poc-opa-access-control-system 1. はじめに 1.1 背景と課題 まず、本記事で扱う重要な概念として「権限...

権限管理 Open Policy Agent RBAC マイクロサービス

要件最適アーキテクチャ戦略

システムアーキテクチャ

要件最適アーキテクチャ戦略を読んだ。 ビジネス戦略を理解すること ドメイン駆動開発でアーキテクチャを実装していく 最初からマイクロサービスは厳しい といった内容が印象に残っている。 続編として実装編があるらしいが、現在のところ和訳はまだ出版されていない模様。 ビジネスと戦略のつなぎの話よりもDDDの実践的な内容とアーキテクチャの実装パターンについてもページが割かれているように見える。 ...

アーキテクチャ戦略 アーキテクチャ

実務で役立つ バックアップの教科書 基本の考え方からツール活用・差分管理・世代管理・データ保全・リストア・リカバリー・可用性の確保まで

データベース

実務で役立つ バックアップの教科書 基本の考え方からツール活用・差分管理・世代管理・データ保全・リストア・リカバリー・可用性の確保までを読んだ。 バックアップについての基本的な考え方や知識が書かれている本。 割と知っていることが多かったので、データ保護完全ガイド —あらゆるデータの保全と回復を可能にするも読んでみてもいいかもしれないと思った。 ...

バックアップ

PostgreSQL インストール時の 'configure' エラーに関するトラブルシューティング

データベース

PostgreSQL インストール時の 'configure' エラーに関するトラブルシューティング 1. はじめに PostgreSQL のソースコードをコンパイルする際に、make を実行した際に You need to run the 'configure' program first. というエラーが発生した。 トラブルシューティングをメモしておく。 2. ...

PostgreSQL Ubuntu CentOS

PostgreSQLのCOLLATEとglibcのバージョン差によるソート順の違い

データベース

PostgreSQLのCOLLATEとglibcのバージョン差によるソート順の違い 同じCOLLATE設定を指定しているにもかかわらず、環境によってソート順が異なる問題に遭遇したので、その時の調査記録をメモしておく。 事象 Cloud SQLとローカル環境のPostgreSQLコンテナでCOLLATEが同じでもソート結果が違う Cloud SQL for PostgreSQL 17上でテーブルの文...

PostgreSQL

PostgreSQLにおけるCOLLATE(照合順序)について

データベース

PostgreSQLにおけるCOLLATE(照合順序)について調べたことをまとめる。 1. COLLATE(照合順序)とは COLLATEとは、文字列の並び順や比較の仕方(大文字・小文字の扱いやアクセント、濁点など)を指定する仕組みである。たとえばORDER BYによる並び順や比較演算子の結果にも影響するため、日本語環境下でのアプリケーション開発においては正しいCOLLATEを設定しておくことが推...

PostgreSQL

FuelPHPの2025年2月現在の現況 by 生成AI

アプリケーション

FuelPHPの2023年3月現在の現況という記事を書いた。 最近の近況はどうだろうと思って、ChatGPTのdeep research機能を使って調査してみた。(去年からPHPから離れてしまったので、あまり時間をかけて調査するモチベーションはなかった..) 結論だけいうと、前回の調査からあまり大きな変化がないといえそう。 あと引用が自分の記事ばかりになっている...w 以下はChatGPTの出力...

FuelPHP PHP

オープンアドレスハッシュテーブルとスイステーブル

アルゴリズムとデータ構造

オープンアドレスハッシュテーブルとスイステーブル go.dev - Faster Go maps with Swiss Tablesを読んでいたら、オープンアドレスハッシュテーブルとスイステーブルについての説明があったので、調べてみた。 1. オープンアドレスハッシュテーブルとは オープンアドレスハッシュテーブル(Open Addressing Hash Table) は、ハッシュ衝突(異なるキー...

オープンアドレスハッシュテーブル スイステーブル データ構造

Nontemporarl・Unitemporal・Bitemporalの特徴と設計

データベース

データモデルには、時間軸(履歴や有効期間など)をどのように管理するかによって、いくつかのパターンが存在する。 Nontemporal(ノンテンポラル) Unitemporal(ユニテンポラル) Bitemporal(バイテンポラル) それぞれは「時間情報をどの程度細かく、どのような意味で管理するか」という点で異なる。 これらのデータモデルの特徴や設計例、メリット・デメリットについて解説する。 ...

Bi-Temporal Uni-Temporal Non-Temporal DB

クネビンフレームワークを活用したストーリーポイントの考え方

ソフトウェア工学

ストーリーポイントの基準を考える方法についてアイデアが浮かんだので、それについて書き残しておく。 もしかして世界初では!?とは思ったが、Demystifying Story Point Estimation Using the Cynefin Frameworkという記事を見つけたのでそうではなさそう。 ストーリーポイントとは何か ストーリーポイント(Story Points)とは、作業の「相対的...

アジャイル スクラム

大規模モノリスをどう分割するか? - ソフトウェアアーキテクチャ・ハードパーツに学ぶ

システムアーキテクチャ

本記事ではソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析の第1章~第4章をベースに、モノリスからのサービス分割を検討するときに役立つポイントを整理する。 すべての組織に当てはまる“銀の弾は存在しないが、「どんなトレードオフを見極めるべきか」を理解することで、より納得感のあるアーキテクチャを設計できるかもしれない。 1. 「ベストプラクティス」は存在しない —...

アーキテクチャ戦略 モノリス マイクロサービス

アーキテクチャ戦略について考える

システムアーキテクチャ

アーキテクチャ戦略について考える ソフトウェア開発において、必ずしもCTOやアーキテクトといった明確なポジションにいなくても、「アーキテクチャ戦略の必要性」を感じ、考える機会がある。 「現場で技術的な方針をまとめたいが、どこから手をつけたらよいかわからない」 「将来の拡張性や組織の成長を踏まえたアーキテクチャにしたい」 「既に蓄積した技術的負債にどう向き合えばよいか知りたい」 本記事では、こう...

アーキテクチャ 組織設計 設計 システム設計 アーキテクチャ戦略

脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニック

アプリケーション

脳に収まるコードの書き方 ―複雑さを避け持続可能にするための経験則とテクニックを読んだ。 タイトルからプログラマ脳を彷彿して認知科学的な話が交えられているかなと思ったが、そうではなかった。 この本は脳内メモリに収まるコードを書くための実践的なプラクティスが語られている。 全体的に自分の経験則から共感を得る部分が多かった。著者はコンピューターサイエンスの学部ではない出身でソフトウェアエンジニアのキャ...

コーディング

実践Redis入門 技術の仕組みから現場の活用まで

データベース

実践Redis入門 技術の仕組みから現場の活用までを読んだ。 タイトル通り実践的な内容ではあるが、タイトルに詳解もつけたくなるくらいRedisについてのあれこれが書かれている。 Redisについて日本語で書かれている本は意外と少なく、本書は貴重な一冊だと思う。 特に運用管理についてしっかり書かれている点が良かった。自分の理解は浅いが内部実装について書かれている点も良い。 Redisについて困ったら...

Redis キャッシュ DB

本を読む本

ビジネス

本を読む本を読んだ。 本の読み方というのを今一度勉強してみようと思って手にとって見た。 本の読み方も学べるが、読み手としてあるべき姿勢について教えてもらえる本。 この本で語られている点検読書という本の読み方が印象に残っている。 私は本を読むときはタイトルと概要や目次を眺めて、あとはパラパラを順番に捲って、必要そうなところは入念に、そうではなそうなところはテクニカルに(速読のような手法)読むことが多...

GraphQL federationについて

システムアーキテクチャ

GraphQL federationについて調べたことをまとめる。 GraphQL Federationとは GraphQL Federationは、複数のGraphQLサービスを統合するための方法である。 GraphQLのマイクロサービスのようなもので、単一のGraphQLエンドポイントとして複数のGraphQLサービスを利用することができるようにするアーキテクチャパターンである。 GraphQ...

GraphQL GraphQL federation

Rubyにおけるシングルトンパターンの実装方法

アプリケーション

Rubyにおけるシングルトンパターンの実装方法についてまとめる。 シングルトンパターンとは シングルトンパターンは、インスタンスが1つしか存在しないことを保証するデザインパターンである。 Singletonモジュールを作成する方法 RubyにはSingletonモジュールが用意されており、これを使うことでシングルトンパターンを実装することができる。 require 'singleton&...

Ruby

Rubyのインスタンス変数とクラス変数とクラスインスタンス変数の違い

アプリケーション

Rubyのインスタンス変数とクラス変数とクラスインスタンス変数の違いについてまとめる。 インスタンス変数 インスタンスごとに異なる値を保持する変数で、@で始まる変数名を使う。 主にクラス内部で宣言されたオブジェクトごとの状態を管理するために使われる。 class Person def initialize(name) @name = name # インスタンス変数 end d...

Ruby

絵で見てわかるLinuxカーネルの仕組み

OS

絵で見てわかるLinuxカーネルの仕組みを読んだ。 Linuxカーネルの仕組みについて初心者にも分かりやすいように書かれている。理解が及ばないものもあったが・・。 Linixカーネルについて知らないことばかりなので、これを入口にもう少し勉強しておきたい。 ...

Linux カーネル

ソフトウェアアーキテクチャメトリクス ―アーキテクチャ品質を改善する10のアドバイス

システムアーキテクチャ

ソフトウェアアーキテクチャメトリクス ―アーキテクチャ品質を改善する10のアドバイスを読んだ。 ソフトウェアに関するメトリクスの観点について複数の著者が語っている。副題の通り各著者ごとのアドバイスであり、それぞれの章ごとで詳細までには深入りされてはいないが、アーキテクチャのメトリクスについて観点を知る取っ掛かりとして良い。 メトリクスの定義をするためのアプローチとしてGQMアプローチを紹介している...

アーキテクチャ メトリクス

スタッフエンジニアの道 ―優れた技術専門職になるためのガイド

ビジネス

スタッフエンジニアの道 ―優れた技術専門職になるためのガイドを読んだ。 チームやプロジェクト、組織をリードするような能力を発揮する機会にあるソフトウェアエンジニアにとって羅針盤になるような内容であった。 ビジョンや戦略の描き方といった部分にも触れており、アーキテクトやCTOといった立場を目指していく意向のある人にとっても充実した本。 思考の仕方やコミュニケーション、振る舞いなど組織をリードしていく...

キャリア

アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築

システムアーキテクチャ

アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築を読んだ。 タイトル通りまさに教科書といった内容で、アーキテクトが知るべき領域について網羅されている。 ソフトウェアアーキテクチャに焦点を当てた話が割合として多い。 注釈や良書紹介、参考文献が充実しているので、この本を起点に学びを広げることができる。 ...

アーキテクト アーキテクチャ 設計 基本情報技術者

メタプログラミングRuby 第2版

アプリケーション

メタプログラミングRuby 第2版を読んだ。 メタプログミングを使いこなせたら魔法使いになれると思った。 使い所は分かったような気がするが、使いこなすのが難しいという感想を持った。 kinoppyd/reading-metaprogramming-rubyを後日やろうと思っている。 ...

Ruby

Tidy First? ―個人で実践する経験主義的ソフトウェア設計

システムアーキテクチャ

Tidy First? ―個人で実践する経験主義的ソフトウェア設計を読んだ。 130ページしかないのですぐに読める。 コスト・収益・結合・凝集の観点で、"整頓"をするか?を考えさせてくれる本。 主張が端的でわかりやすいと感じた。 個人的にはコスト・収益の見積もりが難しく、技術者としての手腕が問われるなぁと思った。 特に、貨幣経済のアプローチで考えを示しているいくつかの章が面白か...

ソフトウェア ソフトウェア開発 設計

2024年の振り返りと来年の抱負

ポエム

2024年の振り返りと来年の抱負 今年も1年を振り返って来年の抱負を記す。振り返りブログを書き始めて今回で7回目になる。 2023年の振り返りと来年の抱負 2022年の振り返りと来年の抱負 2021年の振り返りと来年の抱負 2020年の振り返りと来年の抱負 2019年の振り返りと来年の抱負 2018年の振り返りと2019年の目標 プライベート 今年は念願の住宅購入をした。家計簿やライフプランニ...

振り返りと抱負

ソフトウェアアーキテクトのための意思決定術 リーダーシップ/技術/プロダクトマネジメントの活用

システムアーキテクチャ

ソフトウェアアーキテクトのための意思決定術 リーダーシップ/技術/プロダクトマネジメントの活用を読んだ。 この本は訳文レビューに参加していた本で、献本を頂いてから再度読み直した。 アーキテクトの意思決定という部分にフォーカスを当てているところが画期的であり、アーキテクチャの設計に向かう人にとって学びがある内容になっている。 本書では、アーキテクチャの不確実性に立ち向かうためのツールとなる5つの質問...

アーキテクチャ アーキテクト システム設計 設計

思考の整理学

ビジネス

ワイド新版 思考の整理学を読んだ。 インターネットが普及する少し前くらいの時期に初版が発行されているのだが、コンピューターに対する考え方が現代にも通ずるところがあり、興味深く感じた。 自分の頭で考える、知識に頼らない姿勢を持つという大切さが感じ取れる本。 エッセイ調でビジネスライクな文体ではないではないが、思考を整理するための思想が語られている。 ...

思考法

チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計

ビジネス

チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計を読んだ。 組織設計とアーキテクチャのあり方についてチームファーストな考え方を示している本。 組織におけるチーム設計のパターンが示されているが、チームのコミュニケーションやチーム間のインタラクションをどう捉えるかというのが要点だと理解した。 組織によって最適な体制は異なるので、ここで示されているパターンはあくまで一例のように捉えて...

組織論 組織設計

Cloud SQLとAlloyDBの比較

データベース

Cloud SQLと比較したAlloyDBの優位性について知りたかったので簡単に調査してみた。 前提 Cloud SQLについてはCloud SQL Enterprise editionを対象とする。 Cloud SQL vs AlloyDB 仕様について単純比較する。 Cloud SQL AlloyDB サービス形態 マネージド型RDBMS PostgreSQLベースの分散型に近い...

AlloyDB Cloud SQL Google Cloud Platform

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング

ビジネス

エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリングを読んだ。 組織論というタイトルだったので、経営目線の話が多いかなと思ってしばらく手に取っていなかったのだが、サブタイトルにある"不確実性"が主題の本であった。 チームでメンバーとしてエンジニアリングをする立場であっても、アーキテクトのような立場であっても学びのある本だと思った。というかソフトウェア...

組織論

イシューからはじめよ[改訂版]――知的生産の「シンプルな本質」

ビジネス

イシューからはじめよ[改訂版]――知的生産の「シンプルな本質」を読んだ。 義務教育では大抵"問い"が与えられるが、仕事では"問い"を自ら立てる必要がある。 どちらも問題を理解することは重要だが、問題が適切か?それは本当に問題であるか?など問題の質を深く考えなければならない点に大きな違いがあると思っている。 ソフトウェアエンジニアであっても、目の前の課題の本質...

知的生産

freee 技術の本 freeeにおけるマルチプロダクト開発

システムアーキテクチャ

freee 技術の本 freeeにおけるマルチプロダクト開発を読んだ。 業務系SaaSだと、共通業務(申請・承認)というドメイン領域で切り出せるのか、なるほど。申請・承認といってもコンテキストが違うとワークフローが違ったり、扱うデータも当然違うと思うので、難しそう。権限や通知と比べると抽象化が難しそうな機能分割っぽさがある。基盤としては申請に関する内容は扱わないようにしているらしい。扱わないよう...

設計 システム設計

いかにして問題をとくか

ビジネス

いかにして問題をとくかを読んだ。 だいぶ昔の本ではあるが、数学を題材とした応用の効く問題に対する思考法について書かれている。 最近の本ではないため少々読みづらい。 問題をとくにはまず問題を良く理解すること、問題を様々な角度から捉えて試行錯誤することが大事であることを十分に思い知らされる。 ...

思考法

マスタリングAPIアーキテクチャ ―モノリシックからマイクロサービスへとアーキテクチャを進化させるための実践的手法

システムアーキテクチャ

マスタリングAPIアーキテクチャ ―モノリシックからマイクロサービスへとアーキテクチャを進化させるための実践的手法を読んだ。 冒頭の章でC4ダイアグラムやADRの解説が入っているのが良かった。この本で語られるアーキテクチャの話はそれらの手法を使って説明されている。 APIアーキテクチャのパターンやテスト、運用、セキュリティなどについて書かれている。 WebにおいてAPIに触れないということは皆無だ...

API マイクロサービス アーキテクチャ

信頼性のパターンについて

システムアーキテクチャ

概要 信頼性のパターンについてAzure、AWS、GCPの提唱するパターンに基づいてまとめる。 信頼性とは ユーザー(システムやアプリケーション)が期待する機能を提供し続けることができる性質のことである。 信頼性を支える特性 信頼性は次のような特性によって支えられる。 可用性:システムが利用可能であること 耐久性:データが失われないこと 耐障害性:障害が発生してもシステムが機能し続けること 回復...

信頼性 アーキテクチャ 設計 システム設計

研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフ

アプリケーション

研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフを読んだ。 仕事でRubyを使い始めて、入門的な書籍も一通り読み漁って、ある程度知識が身についてきた段階でより実践的なことが知りたくて読んでみた。 Rubyの実践的な知識はもちろん、Rubyの魅力についてもこの本から感じ取ることができたような気がする。 プログラミングという観点では、Rubyに依らない考え方も拾うことができた。 ...

Ruby

分散SQLクエリエンジンTrino徹底ガイド

データベース

分散SQLクエリエンジンTrino徹底ガイドを読んだ。 SQLクエリエンジン ANSI SQLをサポート フェデレーテッドクエリ 同じSQLで異なるシステムからデータベースとスキーマを参照および使用する データベースではない OLTPを処理するために設計されていない OLAP向けなので、あくまで性能目標はOLAP水準なのではなかろうか   分散システムとしてコンピューティングリソースを...

Trino

punditのコードリーディング

アプリケーション

概要 punditのコードリーディングをする。 準備 punditのリポジトリをクローンする git clone git@github.com:varvet/pundit.git コードリーディング 権限を適用するときに使うauthorizeメソッドを見ていく。 authorize varvet/pundit/blob/main/lib/pundit.rb#L75 モジュールのクラス...

pundit Ruby

Ruby コードレシピ集

アプリケーション

Ruby コードレシピ集を読んだ。 Ruby初心者がRubyでできることやよくあるパターンをインプットするのにちょうど良い本。 これからRubyを学ぶのであれば、本書を読んでおいて損がないと思う。 分かりやすく簡潔に書かれているので読みやすい。 ...

Ruby

relineのコードリーディング

アプリケーション

概要 relineのコードリーディングをする。 準備 relineをクローンする git@github.com:ruby/reline.git サンプルコードを作成する $LOAD_PATH.unshift(File.expand_path('lib', __dir__)) require "reline" prompt = 'prompt&...

reline Ruby

irbのコードリーディング

アプリケーション

概要 irbのコードリーディングをする。 準備 irbのソースコードをクローンする git clone git@github.com:ruby/irb.git エントリポイントを細工する 元の状態だとRubyインストールディレクトリにあるirbを実行してしまうので、ローカルのirbを実行するようにする。 #!/usr/bin/env ruby # # irb.rb - intera...

irb Ruby

RSpecのコードリーディング

アプリケーション

概要 RSpecのコードリーディングをする。 準備 RSpecのリポジトリをクローンする。 https://github.com/rspec/rspec-core コードリーディング RSpecの呼び出し rspec/rspec-core/blob/main/exe/rspec#L4 エントリーポイント lib/rspec/core/runner.rb#L43 Runnerクラス...

RSpec Ruby

カーソルページネーションとオフセットページネーションについて

アプリケーション

概要 オフセットページネーションとカーソルページネーションの比較についてまとめる。 オフセットページネーションとは SELECT * FROM table LIMIT 10 OFFSET 20 のように、OFFSET と LIMIT を使ってページネーションを実現する方法。 比較的実装が容易で、任意のページに直接アクセスすることができる。全体のページ数が把握しやすいが、データセットが大きい場合、パ...

オフセットページネーション カーソルページネーション

Sidekiqのコードリーディング

アプリケーション

概要 Sidekiqのコードをさらっと読んでみる。 準備 sidekiqをクローン https://github.com/sidekiq/sidekiq redisを起動 docker run --name redis-server -p 6379:6379 -d redis デバッグしたいところでbinding.pryを仕込む sidekiqを起動 bundle exec ...

Ruby Sidekiq

PostgreSQLとPgCatをローカルで素振りできる環境を作った

インフラストラクチャ

PostgreSQLとPgCatをローカルで実験できる環境を作った。 bmf-san/postgresql-pgcat-example PostgreSQLやPgCatのパラメータをチューニングしてローカルで負荷検証することできるようになっている。 構成は、 Web Rubyで雑APIサーバー PostgreSQL MySQLも同じだが、volumeにデータが存在するとinit.sqlが走ら...

負荷試験 PgCat PostgreSQL Grafana Prometheus

権限管理基盤についての事例

システムアーキテクチャ

権限管理基盤については開発事例を調べてみた。 developers.freee.co.jp - freee 権限管理基盤を開発するチームの今を語ろう! 基盤開発チームの体制について developers.freee.co.jp - freee 権限管理基盤を開発するチームのこれまでを語ろう! 基盤を設計していくうえでの課題を整理するアプローチについて共感するところが多い(自分の経験にも近しい...

権限管理 設計

セキュア・バイ・デザイン: 安全なソフトウェア設計

アプリケーション

セキュア・バイ・デザイン: 安全なソフトウェア設計を読んだ。 ソフトウェア設計からセキュリティを向上させていくアプローチについて書かれた本。 特徴的なのは、設計のアプローチとしてDDDを中心に据えている点。 セキュリティはドメインのモデリングを誤ると生じるリスクの一つでもあると思うが、その重要性が語られている。 具体的な脆弱性に対する対応方法については多くは語られていない。 セキュリティを実装す...

セキュリティ 設計 DDD

API設計について学べる本

アプリケーション

最近API設計について学び直そうと思って数冊ピックアップして読書したので、読んだ本をリストアップしておく。 API設計の本リスト おすすめの読書順でリストアップする。 Web API: The Good Parts 一般的なAPIの設計における基本的な考え方を学ぶことができる API設計本におけるリーダブルコードのような教科書的立ち位置の本(だと感じている) Web APIの設計 Web A...

API 設計

APIデザイン・パターン

アプリケーション

APIデザイン・パターンを読んだ。  APIの設計原則に始まり、豊富なAPIのデザイン・パターンを紹介している。 リソース指向 単一のリソースに対して、標準メソッド(ex, Create/Get/List/Delete/Update)をかけ合わせて処理を決める RPC指向 メソッドを指定して特定の手続きを呼び出して処理を決める API設計を良くするため観点 実行可能であること 表現力があ...

API 設計

負荷試験を始めるためのスターティングガイド

システムアーキテクチャ

概要 負荷試験を理解し、負荷試験を始めることができるようになるためのガイドとなるような内容をまとめます。 負荷試験とは システムの性能を検証するためのテスト手法である。 「システムが想定しているキャパシティ(性能の許容値)を確保できているか」、「過剰な負荷によりどのようなシステム影響が発生するか」、「性能に関わるボトルネックがどこにあるか」などを明らかにするためのテスト手法となる。 ※ この記事で...

負荷試験

C4モデルとは

システムアーキテクチャ

概要 アーキテクチャ図を書くときにいつも粒度に迷っていたが、C4モデルという技法があることを知ったので、調べてみた。 C4モデルとは ソフトウェアアーキテクチャのモデル化技法の一つ。 C4はContext、Containers、Components、Codeの略で、システムをこれらの要素に分解することでソフトウェアアーキテクチャを記述する。 C4モデルは抽象度の高い順に以下の4つのビューを提供する...

C4モデル アーキテクチャ

クリティカルユーザージャーニーとは

ソフトウェア工学

概要 SLOの文脈でクリティカルユーザージャーニーについて知りたくなった。 クリティカルユーザージャーニーについて調べたことをまとめる。 クリティカルユーザージャーニーとは サービスのユーザーにとって最も重要な体験や、特定の目的を達成するための主要経路を示すものである。 ユーザーが目標達成する過程で重要なタッチポイントや障害を特定することができる。 ユーザーが達成すべき目標を明確にし、タスクやサブ...

クリティカルユーザージャーニー SLO

良い戦略、悪い戦略

ビジネス

良い戦略、悪い戦略を読んだ。 事例について書かれている部分が多い。面白い事例もあった。 良い戦略には取るべき行動指針が含まれている 戦略の基本は弱みに最大の強みをぶつけること、最も伸びしろがある部分に最強の武器を使うこと 戦略を立てるときは「何をするか」と同じくらい「何をしないか」が重要 悪い戦略の原因は誤った発想とリーダーシップの欠如 悪い戦略の特徴 空疎である 重大な問題に取り組まない 目...

New Relic実践入門 第2版 オブザーバビリティの基礎と実現

ツール

New Relic実践入門 第2版 オブザーバビリティの基礎と実現を読んだ。 New Relicの機能を一通り網羅している。活用方法についても半分近くページが割かれているので、実践方法について知ることができる。 NRQLの仕様とかも書いてあると良いなと思ったが、足りないところはドキュメントで補完したり、実際に触ってみるのが早そう。 テレメトリデータについて次のように定義している メトリクス 定期...

New Relic

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hack

ヘルスケア

ヘルシープログラマ ―プログラミングを楽しく続けるための健康Hackを読んだ。 全体的にエクササイズの紹介が多めにある。 本書で紹介される研究は科学的なエビデンスに基づいているものが多い。とはいえ10年近く前の書籍であるため、エビデンスにアップデートはありそう。 ただ、10年前から変わっていないなぁと思うことも多く、一見の価値があると思った。特に健康は習慣から育むという考え方はずっとある考えなのだ...

健康

Web APIの設計

アプリケーション

Web APIの設計を読んだ。 API設計の視点を与えてくれる本。 API設計のインターフェースだけでなく、もっと手前の入り口から書かれている。 API設計は、仕組みではなくユーザーが何をできるかに焦点を当てて設計すると良い。仕組みに焦点を当てると複雑化する APIのゴールを洗いだすアプローチとしてゴールキャンパスというフレームワークの解説があったが、良い方法だと思った APIバージョニングのパ...

API OpenAPI 設計

SLOを始めるためのスタートガイド

ソフトウェア工学

概要 SLOについて理解し、SLOの運用を始めることができるようになるためのガイドとなるような内容をまとめる。 SLOの導入から運用までのステップ 組織やチームにSLOの導入を行い、運用を開始していくためには幾つかの段階を踏む必要がある。 SLOの知識について共有する SLOの導入目的について合意する SLOの運用方針について合意する SLOの設計を行う SLOの運用を開始する SLOを組織に...

信頼性 SLO

契約テストとPactについて

アプリケーション

概要 契約テストとPactについて調べたことをまとめる。 契約テスト(Contract Testing)とは コンシューマ(サービスを呼び出す側)とプロバイダー(サービスを提供する側)の間の動作をテストするテスト手法のことである。 コンシューマーとプロバイダー間での合意を契約として記述し、その契約に基づいてテストを行う。 コンシューマーが契約を発行し、プロバイダーはその契約に従ってテストを行う形式...

契約テスト Pact プロデューサー駆動契約テスト コンシューマー駆動契約テスト

TypeScriptの基本を学び直す

アプリケーション

概要 TypeScriptの基本について学び直す。 JavaScriptの復習 変数のスコープ(scope) グローバルスコープ windowオブジェクトのプロパティとして定義されるスコープ。 const a = "Hello"; console.log(window.a); // Hello ローカルスコープ 関数スコープ 関数内で定義された変数はその関数内でのみ有効。 f...

TypeScript

SLO サービスレベル目標 ―SLI、SLO、エラーバジェット導入の実践ガイド

ソフトウェア工学

SLO サービスレベル目標 ―SLI、SLO、エラーバジェット導入の実践ガイドを読んだ。 サービスやユーザーの定義について語られている SLOを考える時は特にユーザーについての解像度を高めておく必要があると思った 解像度が低いとサービスの信頼性を過剰に高めようとしたり、無意味な指標になってしまいがちになると感じた サービスが信頼できるか?というのはサービスはユーザーが必要とする動作を実行して...

SLO

Jestのスナップショットテストのデメリット

アプリケーション

Jestのスナップショットテストを避けたほうが良いかもしれないデメリットについて雑メモ。 デメリット テストが脆くなってしまう スナップショットテストはUIの変更を簡単に検知することができる反面、テストの関心事ではないような変更(ex. class名のリネームだけで見た目は変わらない変更)であってもテストがFailしてしまう。 アサーションの期待が不明確 スナップショットテストではtoMatchS...

JavaScript jest

Web APIテスト技法

アプリケーション

Web APIテスト技法を読んだ。 API設計のテストで5w1hを使って問いを考える話があったが、具体例が分かりやすく、示唆に富んでいた 現場のテスタビリティについて理解するフレームワークとして挙げられていた10個のPモデルが良かった。テスト戦略や計画を考える前提の整理に役立ちそう テスト計画の整備と文書化について書かれているテスト計画のフォーマット例も考えやすいシンプルなもので良かった。戦略と...

API

集合について

数学

概要 集合の基本についてまとめる。 集合とは 集合論における集合とは、特定条件を満たす要素の集まりのこと。 集合に含まれる要素のことを元という。(当記事内では要素と表記する。) ソフトウェアエンジニアと集合 ソフトウェアエンジニアにとって集合は、データ構造やアルゴリズムの基礎概念である。配列やマップ、グラフ理論や組み合わせ理論など集合の概念が関係している。 RDBにおいては、集合論が非常に重要な概...

離散数学 集合

健康のために行っている習慣について

ヘルスケア

自分が健康のために行っている習慣について書き留めておく。半分くらいはポエム。そのうち将来振り返ることがあるかもしれないので、いつかの改善のために。 自分が健康のために行っている習慣について書き留めておく。半分くらいはポエム。そのうち将来振り返ることがあるかもしれないので、いつかの改善のために。 免責 この記事で書いていることの正しさ(≒エビデンスがある)については保証できません。自分が調べたこと、...

健康

大規模データ管理 ―エンタープライズアーキテクチャのベストプラクティス

システムアーキテクチャ

大規模データ管理 ―エンタープライズアーキテクチャのベストプラクティスを読んだ。 データ管理そのものというよりもアーキテクチャの話に興味があって手にとってみた。 データ管理を中央集権的に行うとデータ管理のトレンドの変化について行くことが難しくなるので、そのためにスケーラブルなアーキテクチャにしていきましょうという話。 データウェアハウスはサイロ化しがちなので避けたほうが良いというのは学びがあった。...

アーキテクチャ

マイクロサービスアーキテクチャ 第2版

システムアーキテクチャ

マイクロサービスアーキテクチャ 第2版 を読んだ。 マイクロサービスに取り組んでいる、マイクロサービスを検討しているなら読んでおきたい一冊。 分散システムに求められるアーキテクチャの特性(非機能要件)についてもよく触れられており、マイクロサービスオンリーな観点に囚われず読んでも良さそう。 マイクロサービスの概念についてサッと確認したい場合には第一章がよくまとまっているので参照したい。 一部モノリス...

モノリス マイクロサービス

GoReleaserを使ってDocker Imageをbuild&pushする

アプリケーション

以前、GoReleaserを使ってのGoのアプリケーションを配布するというタイトルの記事でGoReleaserを使ったバイナリ配布の方法について書いたが、Dockerhubへのイメージプッシュもやってみたのでまとめておく。 ソースコードの全体像はbmf-san/gondolaを参照。 .goreleaser.yamlを設定 ockers: - image_templates: - ...

Golang GitHub Actions

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

システムアーキテクチャ

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイドを読んだ。 モノリスからマイクロサービスへの移行アプローチについて書かれている。 最もページが割かれている第4章はマイクロサービス化への1番の砦と思われるデータベースの分割について書かれている。時間がない、振り返りだけしたいならこの章だけは目を通しておきたい。 この本はタイトル通りアプローチに特化している内容であるので、マイクロサ...

モノリス モジュラモノリス マイクロサービス

Bitemporal Data Modelについて

データベース

概要 Bitemporal Data Modelについて調べたことをまとめる。 Bitemporal Data Modelとは Temporal Data Modelsという分野で扱われるデータモデルの1つで、時間軸を取り扱うデータモデルのうち、2つの時間軸を持つデータモデルのことを指す。 ノンテンポラル(Non-Temporal) 現在の状態のみを保持する 過去の履歴や将来の変更に関する情報は...

Bi-Temporal Uni-Temporal Non-Temporal 履歴 Temporal Data Model

セキュアで信頼性のあるシステム構築 ―Google SREが考える安全なシステムの設計、実装、保守

システムアーキテクチャ

セキュアで信頼性のあるシステム構築 ―Google SREが考える安全なシステムの設計、実装、保守を読んだ。 前半部分に興味の中心があったのでメモしておく。 セキュリティと信頼性は創発特性、単純に実装されるものではなく、デプロイや運用における複数の要因(仕組みやテスト、検証状態などから)から創発される特性である。 プロジェクトの初期段階からセキュリティと信頼性について考えておいたほうがよい。プロ...

セキュリティ 信頼性

間違いだらけのソフトウェア・アーキテクチャ―非機能要件の開発と評価

システムアーキテクチャ

間違いだらけのソフトウェア・アーキテクチャ―非機能要件の開発と評価を読んだ。 2010年に初板が発売された割と古い本ではあるが、今にも通ずるソフトウェア・アーキテクチャの話がかなり砕けた表現で書かれている。 この年代では自分はまだ学生だったので時代背景はわからないが、アーキテクトという存在がこの10年で結構変わったんだろうなぁという印象を持った。 技術書というよりエッセイ本なので、技術的な要素のみ...

アーキテクチャ システム設計

権限管理の設計について調べてみた

システムアーキテクチャ

概要 権限管理の設計について事例を調べてみたのでメモしておく。 調査メモ 調査した情報を整理してみたが、わかっていないこともあるのでちゃんと整理しきれていない。 権限を構成する要素 権限は次の要素で成り立つものと考えられそう。 誰が(Principal) 何に(Resource) 何を(Action)していいか(ALLOW)、いけないか(DENY) 権限設計の手法 設計手法としては次のようなも...

ABAC ACL RBAC 権限管理 システム設計 リンク集

単体テストの考え方/使い方

アプリケーション

単体テストの考え方/使い方を読んだ。 質の高いテスト設計の為に必要な考え方やアプローチがまとめられている。テスト手法に留まらないテスト設計の本であり、テスト関連の本の中でもあまり類を見ないものだと思われる。 良いテストは、リグレッションへの保護、リファクタリング耐性、フィードバックの迅速さ、保守性を備えているが、これらを全て満たすのは難しいため費用対効果を考える必要がある。本書はその考え方を示す実...

テスト 設計

ソフトウェア設計のトレードオフと誤り ―プログラミングの際により良い選択をするには

システムアーキテクチャ

ソフトウェア設計のトレードオフと誤り ―プログラミングの際により良い選択をするにはを読んだ。 トレードオフはドキュメントには書かれないことがある。何かを選択した理由は書かれていても、選択していなかった理由を示していないことは結構あるのではないだろうか。  この本では、設計判断のトレードオフを対照的に考えることの重要さと、ソフトウェア設計におけるトレードオフ事例を学び得ることができる。 後半はトレー...

アーキテクチャ 設計 システム設計

Rubyを学ぶ

アプリケーション

概要 PHPやGoを触ってきた人間はRubyを学ぶ際に取り組んだことを書く。 取り組み 公式ドキュメント 何はともあれはまずは公式ドキュメント。 Rubyとは Rubyの特徴を端的に記している 個別に深く調べておきたい仕様についてはここを参照すれば良さそう。 他言語からのRuby入門 Rubyの言語仕様で特徴的な部分を記している。他言語にはない部分で学ぶべきポイントがまとまっている。 個別に...

Ruby

RubyのModuleについて

アプリケーション

概要 RubyのModuleについてかく。 Moduleとは クラスや他のモジュールに共通のメソッドや定数を提供するための仕組み。 # モジュール定義 module Hi def say_hi puts "Hi!" end end Moduleはクラスと異なり、インスタンス化できない。また継承もできない。 モジュールにはクラスメソッドやインスタンスメソッドを定...

Ruby

Rubyの特異クラス・特異メソッドについて

アプリケーション

概要 Rubyの特異クラスと特異メソッドについてかく。 特異クラス 特異クラスとは、特定のオブジェクトに対してのみ有効なクラスのことを指す。 class Greet def say_hi puts 'Hi' end end greet = Greet.new # 特異クラス class << greet # シングルトンメソッド def ...

Ruby

RubyのProcとlamdaについて

アプリケーション

概要 RubyのProcとlamdaについてかく。 Procとは ブロックをオブジェクト化したもの。ブロックはオブジェクトではない。 このオブジェクトは手続きオブジェクトと呼ばれ、Procクラスのインスタンスとして表現される。 Proc.newまたはprocによって手続きオブジェクトを生成できる。 # Proc.new proc_object = Proc.new { |x| puts x } ...

Ruby

Rubyのブロック構文について

アプリケーション

概要 Rubyのブロック構文についてかく。 ブロック構文とは 他メソッドにコード断片を渡すことで、そのメソッド内で処理を実行させることができる構文。 do..endまたは{}を使って定義する。ブロックは引数を受け取ることができる。 # do..end [1...3].each do |number| puts number end # {} [1...3].each { |number| p...

Ruby

Rubyのシンボルについて

アプリケーション

概要 Rubyのシンボルについて書く。 シンボルとは 任意の文字列と対に対応するオブジェクト。 内部実装では、整数として管理されている。 :symbol :'symbol' %s!symbol! シンボルはSymbolクラスのオブジェクトであり、文字列はStringクラスのオブジェクトである。そのためメモリ効率が良い。 文字列と違い、シンボルは同一のオブジェクトである。 # ...

Ruby

マスタリングTCP/IP―入門編―(第6版)

アプリケーション

マスタリングTCP/IP―入門編―(第6版)を読んだ。 例えが分かりやすくて読みやすい。 TCP/IPの基本からネットワークについての理解を進める入門書として良い教科書だと感じた。 ネットワークはつい苦手意識を持ってしまっておざなりになっているが、この本は読みやすくて良かった。 ...

TCP IP

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワーク

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識を読んだ。 入門者向けのようだが、内容をスッと理解するのはハードルが高いかもしれない。他の基本的な知識を理解できる本を読んだ後で読むほうが流れがしっくりくるのかも。 ...

IP TCP HTTP

健康になる技術 大全

ヘルスケア

健康になる技術 大全を読んだ。 エビデンスを強く意識した健康についての本。 エビデンスについての捉え方や考え方を前提として整理されている。参考文献の量に圧倒される。 食についての章に最もページを割かれているが、食事は健康にとって最も重要な要素の一つなのでこれは有り難い。 食については、一概に健康に良い・悪いではなく、リスクが高い・低い程度に捉えるのが良いのだろうと感じる部分が多かった。エビデンスに...

健康

PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで

データベース

PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用までを読んだ。 PostgreSQLを触ったことなかった自分にはちょうど良い入門書だった。 アプリケーションの実例の章が割と多めにページを割かれているが、PostgreSQLの基本的なことはカバーされている。 ...

DB PostgreSQL

パーフェクトRuby

アプリケーション

パーフェクトRubyを読んだ。 パーフェクトシリーズは他にはPHPとJavaScriptしか読んだことないが、安定のパーフェクトシリーズといった感じ。 ...

Ruby

たのしいRuby

アプリケーション

たのしいRubyを読んだ。 オブジェクト志向の経験や他言語の経験があるほうが読みやすい部分も多いが、Ruby初心者向けの本。 ...

Ruby

コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識

コンピューターアーキテクチャ

コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識を読んだ。 改訂版が出ていたので読み直した。 ハードウェアからソフトウェアまでの流れを理解することができる。 プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識もセットで読むと良い気がする。 ...

ソフトウェア ハードウェア

退職エントリ

ポエム

5年5ヶ月勤めた現職を退職しました。 私のキャリアにおいて1番長く勤めた会社でした。 入社前はアプリケーションエンジニアとしての経験しかなかった私にとって、この会社で経験したことや挑戦したことは自分の成長を大きく支えてくれたと思います。 会社の上場フェーズを経験し、組織や事業の成長を間近で体感することができたので大変貴重な経験だったと思います。 プライベートでは、初めての一人暮らしに始まり、妻と出...

退職 転職

自作HTTPルーターから新しいServeMuxへ

アプリケーション

概要 これまでgoblinという自作HTTPルーターを自分のアプリケーションで使っていたが、Go1.22でServeMuxの機能が拡張されてからはServeMuxを使うようになった。 この記事では、Go1.22で追加されたServeMuxの機能や性能について整理し、これからのGoのHTTPルーター選定について考えてみる。 Go1.22で追加されたServeMuxの機能 Go1.22rcの公開時にS...

Golang router

図解 人材マネジメント 入門 人事の基礎をゼロからおさえておきたい人のための「理論と実践」100のツボ

ビジネス

図解 人材マネジメント 入門 人事の基礎をゼロからおさえておきたい人のための「理論と実践」100のツボ 人事の関心事について知ることができる本。人事担当者でなくとも読みやすい視点で書かれている。 ...

人事 労務

改訂2版 最新 知りたいことがパッとわかる 社会保険と労働保険の届け出・手続きができる本

ビジネス

改訂2版 最新 知りたいことがパッとわかる 社会保険と労働保険の届け出・手続きができる本 を読んだ。 社会保険・労働保険についてパッと学べることができる本。各種手続きや書類の数、法改正など大変そうだ... ...

人事 労務

正しいものを正しくつくる

ソフトウェア工学

正しいものを正しくつくる プロダクトをつくるとはどういうことなのか、あるいはアジャイルのその先についてを読んだ。 プロダクト開発のプロセスのあれこれが言語化された本。気になったことをメモしておく。 プロダクトづくりのマネジメントを操作する2つのレバーは関係性がある リスクマネジメント 要求リスク、技術リスク、要員リスク、政治リスクをいち早く検知・対処する 期待マネジメント ステークホルダー間...

アジャイル スクラム