ホーム

CQRSについて調べたことをメモ

システムアーキテクチャ

概要 CQRSについて調べたことをメモ。 CQRSとは Command Query Responsibility Segregation CommandとQueryに責務分離するパターン Command データの更新を行う データではなくタスクにフォーカスしたコマンドを設計 DDDのドメインモデルを内包することが想定されている Query データの参照を行う ユースケースごとに最適化されたオ...

CQRS マイクロサービス

Sagaパターンについて調べたことをメモ

システムアーキテクチャ

概要 Sagaパターンについて調べたことをメモ。 Sagaパターンとは マイクロサービスにおいては、分散トランザクション(2phase commitなど)は推奨されていない 分散トランザクションを避け、整合性を担保するパターンとしてSagaパターンがある 長時間のロックを避け、結果整合性を利用する 補償トランザクション 一連のトランザクションの取り消しを行う操作 Sagaパターンでは単純なロ...

マイクロサービス Sagaパターン TCCパターン 分散トランザクション 2phase commit

Goのresponse.WriteHeaderの副作用について

アプリケーション

概要 Goのresponse.WriteHeaderの副作用についてメモする。 superfluous response.WriteHeader 以下は愚直な例だが、次のようにWriteHeaderを複数回呼ぶと、http: superfluous response.WriteHeader call from main.handlerというエラーが出る。 package main import ...

Golang Tips

GoでServeMuxの機能拡張を提案するProposalがAcceptedになった

アプリケーション

以前からウォッチしていたnet/http: enhanced ServeMux routing #61410がAcceptedになったので、それについてポエムをかく。 最終的な仕様がどうなるかはわからないが、静的なルーティングの機能(/foo/barのような固定値のルーティング)しか持っていないServeMuxに動的なルーティング(/foo/:idのようなパスパラメータを使ったルーティング)の機能...

Golang router HTTP

BFFについて

システムアーキテクチャ

概要 BFFについて調べたことをまとめる。 BFFとは Backends For Frontendsの略。Best Friends Forever(ズッ友だよ)ではない。 ‌ 名前の通り、フロントエンドのためのバックエンドサーバーのことで、フロントエンドのためのAPIやHTMLをレスポンスするなどUI・UXのための役割を担っている。 ‌ クライアント(サーバーの呼び出し側)の多様性に応えるのが難し...

BFF

通知基盤構築についてのメモ書き

システムアーキテクチャ

概要 通知基盤の構築に関してざっくりと考えたことや調べたことなどをまとめておく。 通知基盤とは ユーザーに通知(メール・プッシュ・SMS・音声など)を行うためのシステム基盤。 クライアント(通知を依頼するシステム)からリクエストを受けて、送信先・送信内容など通知に関する処理を担うシステム。 通知基盤の設計・実装における観点 考えることが一杯ありそうだと思ったので、思いついた順で雑に書いた。整理でき...

通知

Goのhttp.RoundTripperについて

アプリケーション

概要 Goのhttp.RoundTripperについてかく。 http.RoundTripperとは HTTPクライアントの通信を担っているインターフェース。 cf. pkg.go.dev - net/http#RoundTripper HTTPクライアントにおいてリクエストからレスポンスを受け取るまでの間の処理をカスタマイズすることができる。 HTTPクライアントにおけるミドルウェアというイメー...

Golang

Goでfan-inとfan-outを実装する

アプリケーション

概要 並行処理のパターンであるfan-in、fan-outをGoで実装する。 fan-in/fan-outとは fan-inは、複数の入力を1つにまとめる処理で、fan-outは、1つの入力を複数に分ける処理である。 fan-inはデータを集約させ、fan-outはデータを分散させる。 Goではchannelとgoroutineを使って実現することができる。 実装 ソースコードはgithubにも置...

fan-in fan-out

Template MethodパターンとStarategyパターンについて

アプリケーション

概要 GoFの振る舞いに関するパターンであるTemplate MethodパターンとStrategyパターンについてまとめる。 Template Methodパターンとは 大枠の処理を上位のクラスで決めておき、具体的な処理の流れを下位のクラスに任せる設計パターン。 package main type Game interface { Init() Start() End(...

Strategy Template Method

Go言語による分散サービス

アプリケーション

Go言語による分散サービスを読んだ。 Goでの分散サービスの実践について書かれた本。 マイクロサービス文脈でのモダンな技術、構成の背景や実践についても学べると思う。 ...

Golang

スライディングウィンドウの実装

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

スライディングウィンドウとは 配列のサブアレイを”ウィンドウ(サブセット)”をずらすしていくように探索するアルゴリズム。 ウィンドウサイズは固定または動的。 実例としては、レートリミッターで使われたりする。 実装 ソースコードは以下。 sliding_window 与えられた配列から合計がN以上になるサブアレイを探索する関数。 package main import "fmt&quot...

スライディングウィンドウ

multipassでk3sを動かす

インフラストラクチャ

概要 docker-composeで構成されている個人開発のアプリケーションをKubernetes(k3s)へ移行するという試みの際に、multipassを使ってみたのでそれについてメモを残す。 結局移行はしなかったが... k3sはCNCFに認証されたKubernetesディストリビューション。IoTやエッジコンピューティング用途向け。メモリを節約したい、Kubernetesほどのスケールは不要...

multipass k3s

モノレポについて

アプリケーション

概要 モノレポについてまとめる。 モノレポとは モノレポとは複数プロジェクトのコードを単一のレポジトリで管理したもの。対して複数のレポジトリで管理するものをポリレポ、またはマルチレポと呼ぶ。 マイクロサービスの管理方針の1つではあるものの、マイクロサービスを前提としたものではない。 モノリスとは同義ではない。 モノレポの観点 モノレポの運用における観点を整理してみた。 コードの自治 複数チームで運...

モノレポ

実用Go言語

アプリケーション

実用Go言語を読み終わったので読書メモを残す。 何年かGoを触っているが知らなかったり忘れていたことに気づけて大変勉強になった。 変数名 Errorインターフェースを満たすError型の変数名の接尾辞はError ex. NotImplementedError errors.Newで宣言されるエラーの変数名の接頭辞はErr ex. ErrNotImplemented := errors.Ne...

Golang

2分探索木の探索パターンについて

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

概要 二分探索木とは どのノードにおいても、左の子ノード<親ノード<右の子ノードとなるような木。 ex. 5 / \ 3 8 / \ / \ 1 4 6 9 探索パターン 深さ優先探索(DFS: Depth first search) それぞれのノード探索順はwww.momoyama-usagi.com - うさぎでもわかる2分探索木 後編 2分探索木における4つの...

二分探索木 DFS BFS

尺取り法について

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

概要 尺取り法についてまとめる。 英語だと、Two Pointer ApproachまたはTwo Pointer Techniqueと呼ばれる。 尺取り法とは データセット(数列や文字列など)の右端と左端のインデックスを保持して、条件によって左右のインデックスを移動させることで、条件を満たすデータを探索するアルゴリズム。 特定の条件を満たすデータを区間の中から探索したいような時に役立つ。 例題 配...

尺取り法 Two-Pointer Approach

認定スクラムマスター(LSM)になった

ソフトウェア工学

scruminc.japanのRegistered Scrum Masterの研修・試験を受けて認定スクラムマスターになったので感想とメモ。 ちなみに認定期間が1年らしいので、認定を継続するには年に1回小テストを受けて更新する必要があるらしい。 研修を受けた理由 普段、チームでスクラム開発を行っているが、開発者(というかチームリーダー)としてスクラムについて理解を深めて、チームのプロセス改善とプロ...

スクラム

アルゴリズムとデータ構造 - ハッシュマップ

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

概要 アルゴリズム図鑑を参考に、アルゴリズムとデータ構造を学ぶ。 実装はgithub - bmf-san/road-to-algorithm-masterにも置いてある。 ハッシュマップ ハッシュ値を添え字とした配列 ハッシュの衝突処理 開番地法 衝突が生じた際に、ハッシュ関数とは別の関数を使って別の番地を求める方法。 連鎖法 衝突が生じても新しい番地を求めずに、衝突した番地に衝突したキー同...

ハッシュマップ

隣接リストと隣接行列

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

概要 グラフを表現するためのデータ構造である隣接リストと隣接リストについてまとめる。 隣接リストや隣接行列は有向グラフでも無向グラフでも利用できる。 隣接リスト(Adjacency List) 各頂点(ノード)ごとに隣接する頂点をリストとして持つデータ構造。 // 無向グラフの例 A---B | / | | / | C---D // 隣接リストで表現すると、次のような形になる A: [B...

グラフ 隣接行列 隣接リスト

スタックとキューの実装

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

Goでスタックとキューをそれぞれ実装してみた。 スライスを使ったパターンと連結リストを使ったパターンをそれぞれ実装している。 個人的にはスライスを使ったパターンの方が実装は楽かなと思う。 スタックのpush、pop、キューのenqueue、dequeueの時間計算量はそれぞれO(1)で実装できるが、一部サボってO(N)になってしまっているものがある。 スタック ソースコード:stack 連結リスト...

スタック キュー

連結リストのランナーテクニック

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

連結リストの走査で役立つランナーテクニックについてまとめる。 世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法で紹介されていて初めて知った。 ランナーテクニックとは 連結リストの先頭から走査していくポインタと、そのポインタより先から走査していくポインタの2種類を用意して、同時に走査していく方法。 これが何に役立つかというと、例えば次のような例題を解くのに役立つ。 例題 単...

アルゴリズム データ構造 ランナーテクニック Tips

再帰処理の苦手なところ

アプリケーション

再帰処理はプログラマーの嗜み!エレガントにかけて当たり前!・・・と自信を持って言いたいところだが、自分は正直なところ苦手である。 日頃再帰処理を書く機会といえばコーディングクイズくらいで実際のところあまり書く機会がない.. 再帰処理はケースによってはメモ化や末尾最適化までエレガントにやらないと計算量が大きくなったり、メモリを食うだけのコードになってしまうが、アルゴリズムによってはシンプルなコードに...

再帰

アルゴリズムとデータ構造の基本の復習

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

概要 コーディングクイズを解く日課を再開するに当たって、リハビリを兼ねてアルゴリズムとデータ構造の基本について復習。 配列 連続した配置でメモリを確保する 単一のデータ型 サイズは一般的には固定だが、言語によっては動的(可変長配列) サブアレイ 配列内から連続した形で取り出される配列 [1, 2, 3, 4, 5] →[2, 3, 4] サブシーケンス 要素順を変更せずに、一部の要素...

アルゴリズム データ構造

プログラマ脳

アプリケーション

コードを読む能力も書く能力も高い人の頭の中はどうなっているのか?自分とは何が違うのか?ということはエンジニアであれば誰しも考えたことがあると思う。(たぶん) プログラマ脳という本は、認知科学のアプローチを用いて、コーディングという創造的なプロセスを科学していく本で、脳が筋肉でできている人が読むべき内容だった。 脳筋の下りは半分冗談として、最近コーディングクイズの日課を再開したのだが、データ構造やア...

認知科学 コードリーディング

カウントソートの実装

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

カウントソートとは ソートアルゴリズムの中でも比較を使わずにソートする変わった?アルゴリズム。 比較せずに要素をカウントすることでソートができる。 カウントしてソートすることができるというのは不思議!と思ったので調べてみた。 前提 累積和について知っておく必要がある。 cf. qiita.com - 累積和とは(超初心者用) 実装 ソースコードは以下。 count_sort package mai...

カウントソート

バックトラッキングの実装

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

バックトラッキングとは 指定された制約を満たすような組み合わせを探索するアルゴリズム。  重複しない組み合わせ(nCr)を全て探索するようなときに使える。 実装 ソースコードは以下。 backtrack 与えられた配列からN個の重複しないサブシーケンスを取得する処理。 以下は4C3の例。 package main import "fmt" func backtrack(rs...

バックトラック

Goで始めるコードのパフォーマンス改善

アプリケーション

Makuake Advent Calendar 2022の9日目の記事です! Goで始めるコードのパフォーマンス改善 自作HTTP Routerのgoblinのパフォーマンス改善をしよう思った際に、Goのパフォーマンス改善について取り組んでみたので、その際のアプローチと実践した取り組みについて書く。 前提知識 より奥深いチューニングをする上ではもっと必要な知識があると思うが、最低限必要なことだけリ...

Golang

MySQLのトランザクションのアノマリーについて

データベース

概要 MySQLのトランザクションのアノマリーについてまとめる。 MySQLのバージョンは8系を想定する。 検証環境 検証に使う環境はdocker-composeで用意した。(1コンテナだけなのでcomposeを使わなくも良いのだが..) . ├── docker-compose.yml └── initdb.d └── 1_schema.sql docker-compose.yml v...

トランザクション MySQL

トランザクション概観

データベース

概要 トランザクションについてまとめる。 トランザクション データを正しく保つための手法。DB固有の概念ではなく、一つの理論として独立している。 多数のクライアントからDBサーバーに対して同時アクセスが発生するような状況や、DBサーバーまたはアプリケーションが更新処理途中にクラッシュするという状況などからデータの整合性を守りたい時に必要とされる。 トランザクションが提供する機能は2点ある。 同時...

トランザクション

Google Cloud認定アソシエイトクラウドエンジニアを受験した

インフラストラクチャ

概要 Google Cloud認定アソシエイトクラウドエンジニアを受験して合格したので、再受験するときや別の試験を受けるときのために勉強した過程を振り返っておく。 前提 ソフトウェアエンジニア7~8年目くらい。 GCPの経験は2年くらいあるかな・・どちらかというとAWSのほうが触っている感じ。 モチベーション 業務でAWSとGCPの両方を触る機会があり、AWSの方はアソシエイトレベルの認定を取得し...

Google Cloud Platform

Githubでレジュメを管理するようにした

ビジネス

今までGoogle Driveで管理していたレジュメをGithubで管理するようにした。 これが個人的に良い取り組みだったので記事にしておく。 ここでいうレジュメは、自分のキャリアのあれこれがテキストベースでまとめられたものを指す。 モチベーション Google Driveでファイルをアップロードして管理していたが、イマイチ更新しづらかったり、更新する気力が沸かなかったりした。 差分がわかりやすい...

Git GitHub レジュメ

Road to ISUcon

システムアーキテクチャ

概要 ISUcon出場に向けて準備したことを記す。 目標・目的を定めた 目標 ISUconの予選の時間を目一杯使い切ってチューニングをする 勝つことが目標ではあるが、初参戦なので現実的なラインの目標を立てた 目的 インフラ周りの知見を高める パフォーマンスを考慮したアプリケーション構築のための知見を高める 社内のパフォーマンス・チューニングの業務に携われるようにする(頑張る) メン...

パフォーマンスチューニング ISUCON ISUCON8

コンテナ技術概要

インフラストラクチャ

概要 コンテナ技術についてのまとめ。 Dockerを使わずにコンテナをつくって触ってみる。 コンテナとは ホストOSからアプリケーションとランタイムをまとめて、分離した一連のプロセス。 コンテナの歴史 1979年 UNIX OSにchrootが登場。 2000年 FreeBSD jailsがFreeBSD 4.0に登場。chrootの発展系。 2001年 VServer Projectを通じて...

Docker libcontainer lxc lxd コンテナ

キャッシュの書き込み方式

インフラストラクチャ

概要 キャッシュの書き込み方式についてまとめる。 ライトスルー データがキャッシュに書き込まれると同時にメインメモリにも書き込む方式。 書き込み操作がキャッシュとメインメモリ両方に対して発生する。 データの一貫性を保ちやすいが、書き込みの遅延が発生する可能性がある。 ライトバック データがキャッシュに書き込まれた後、メインメモリに書き込みをするまでキャッシュ内にデータが保持される方式。 書き込み操...

キャッシュ

デプロイ戦略について

アプリケーション

概要 デプロイ戦略についてまとめる。 デプロイ・リリース・ロールバックの定義 デプロイ戦略の前提知識として言葉の定義を明確にしておく。 デプロイとは、「実行環境に実行可能なプログラムを配置すること」 リリースとは、「ユーザーがアクセスできる状態にすること」 ロールバックとは、「古いバージョンのリリースをリリースすること」 デプロイ戦略の種類 代表的と思われるものを取り上げる。 インプレースデプロイ...

デプロイ

シャーディングとパーティショニングの違い

データベース

概要 時々どっちがどっちか混乱してしまうので、メモを残す。 シャーディングとパーティショニングの違い 項目 シャーディング パーティショニング データの分割方法 水平方向(≒水平パーティショニング) ex. 行 垂直方向 ex. テーブル、データベース、カラム メリット パフォーマンスの向上、スケーラビリティの向上 パフォーマンスの向上、データの検索性向上 デメリット データや...

パーティショニング シャーディング

プロキシサーバー(フォワードプロキシサーバー)・リバースプロキシサーバー・ゲートウェイサーバーの違いについて

インフラストラクチャ

概要 プロキシサーバー(フォワードプロキシサーバー)・リバースプロキシサーバー・ゲートウェイサーバーの違いについてまとめる。 プロキシサーバー(フォワードプロキシサーバー)とは クライアントとサーバーの間に配置され、両者の通信を代理で行う(中継する)サーバー。 クライアントからのリクエストを代理をする。 クライアント→プロキシサーバー→インターネット→サーバー メリットは次のようなものがある。 ...

フォワードプロキシ リバースプロキシ ゲートウェイ

GCPについての覚え書き

インフラストラクチャ

概要 Google Cloud認定アソシエイトクラウドエンジニアの試験に向けた勉強をしている際の雑多な覚え書き。 考え方 責任共有モデル 最小権限の原則 組織全体でガバナンスを発揮する 権限の分譲 ステートレスなアプリケーションとイミュータブルなインフラ 自動化によるトイルの削減 スケーラブル・高可用性・堅牢性 モニタリングと自動的な通知 cf. https://blog.g-gen.co.j...

Google Cloud Platform

ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方

ビジネス

ユニコーン企業のひみつ ―Spotifyで学んだソフトウェアづくりと働き方を読んだ。 ユニコーン企業の組織論や文化について学べる。 役者あとがきに書かれているが、ユニコーン企業ではスクラムをやっていない。これについてどう捉えるかによって本書の読み終わりのイメージが変わるのではないかと思う。 自分としては守破離の離に達したスクラムを超えた先という捉え方をしているが、方法論は問わず成長性を支える文化や...

ユニコーン スクラム

ライト、ついてますか 問題発見の人間学

ビジネス

ライト、ついてますか 問題発見の人間学を読んだ。 名著に数えられる一冊だと思われる。 読み終わったときは何だかあんまり腑に落ちなかったというか、しっくりこなかったが、時間を置いて振り返ってみるとこの本のメッセージ性をちゃんと捉えることができるようになった気がする。 「問題は解くことよりも見つけることが難しい、解き方よりも見つけるべき問題を見誤ると意味がない。」というのは当たり前のことのように思える...

ロジカルシンキング

PyroscopeでContinuous Profiling

アプリケーション

概要 PyroscopeというContinous Profilingのツールを導入してみた。 Continous Profilingについてはこちら参照。 What is continuous profiling? 今年に入ってからGrafanaが買収したらしい。 Grafana Labs が Pyroscope を買収してコード プロファイリング機能を追加 買収してからは、Grafana Pyr...

プロファイリング

ファイルシステムの容量不足によるサービスダウン

障害報告

ステータス 解決 事象 2023年1月2日正午頃、https://bmf-tech.com/ にアクセスするとレスポンスが遅い、500エラーが常に返却されることに気づき、発覚。 grafanaにログインして調査をしようとしたが、ログインができなかった。 一部コンテナが何らかの原因でダウンした可能性を考慮して、デプロイを実施したが、no space left on device のエラーログを確認...

ポストモーテム

MySQLで全文検索

データベース

概要 MySQLにはだいぶ前から全文検索が使えるになっているが、最近まで全然触ってもいなかったので軽く素振りしてみた。 MySQLで全文検索を始める MySQLで全文検索を利用するのはElasticSearchよりも圧倒的に手間が掛からない。 検索対象としたいカラムにFULLTEXT INDEXを付与、MATCH (col1,col2,...) AGAINST (expr [search_modi...

MySQL

DefaultServeMux以外でpprofを使う方法

アプリケーション

概要 net/http/pprofをDefaultServeMux以外(Goの標準のルーター以外)で使う方法についてメモ。 ハマりどころ pprofをblank importするだけではだめ。 package main import ( _ "net/http/pprof" ) DefaultServeMux以外のルーターを使う場合はblank importするだけ...

Golang Tips

Goのhtml/templateでURLをエンコードさせない

アプリケーション

概要 html/templateを使っているときに、テンプレートに渡すURLをエンコードさせたくなかった。 template.URLを使う Goのhtml/templateを使って、URLをテンプレートに渡すとエンコードされてしまう仕様になっている。 cf. https://pkg.go.dev/html/template#hdr-Contexts セキュリティ上の理由でこのような仕様になっている...

Golang Tips

buildxを使ったGoアプリケーションイメージのクロスコンパイル

アプリケーション

概要 プライベートで開発しているアプリケーションのイメージをクロスコンパイルする必要性に駆られて(ローカルの開発環境と本番の環境でアーキテクチャが異なっていることが起因)対応したのでメモ。 buildx Docker Desktopにはbuildxが標準で備わっているのでそちらを利用する。 Docker Buildx buildxを使うことでマルチアーキテクチャ対応のイメージを簡単に作ることができ...

Golang Docker

NewSQL関連の資料を読み漁った

データベース

NewSQLについての色々と調べて読み漁ってみたので読んだものをまとめておく。 元々いくつかのNewSQLのDBについての比較をしてみたいと思って漁っていたのだが、内部で使われている技術について知っておく必要があったので、関連技術についての記事が多めになっている。 資料一覧 Hybrid Clock Hybrid Logical Clock (HLC) 本当は恐ろしい分散システムの話 分散処理シ...

NewSQL リンク集

FuelPHPの2023年3月現在の現況

アプリケーション

概要 2023年3月現在のFuelPHPの現況についてざっくり調べたことをまとめる。 独自に調べた情報なので正確性には欠けるかもしれない。 PHPのフレームワークはLaravelが圧倒的に人気があるように感じるが、FuelPHPもまだ現役で使っている人がいるかもしれないので、何か一助になれば嬉しい。 FuelPHPバージョン情報 独自に調べたFuelPHPの情報をまとめる。 Version ...

FuelPHP

システム設計の面接試験

システムアーキテクチャ

システム設計の面接試験を読んだ。 System Design Interview – An insider's guideの和訳本。 donnemartin/system-design-primerを読んでいるとある程度知っている内容ではあるが、この類の本は日本ではあまり出版されていないような気がするので、手元において置きたい一冊。 ByteByteGoは著者が運営しているサービス。一部無...

システム設計

ソフトウェアアーキテクチャ Hardparts

システムアーキテクチャ

ソフトウェアアーキテクチャ Hardpartsを読んだ。 分散システムにおけるアプローチは難しい問題について書かれた本。 ソフトウェアアーキテクチャの基礎 ―エンジニアリングに基づく体系的アプローチと進化的アーキテクチャ ―絶え間ない変化を支えるを事前に読んでおいたほうが読みやすいかもしれない。 アーキテクチャをどのように再構築していくかについての考え方やアプローチについて整理されている。 個人的...

システム設計

システム設計関連の資料を読み漁った

システムアーキテクチャ

システム設計関連の資料をいくつか読み漁ったので、リンク集的にまとめておく。 動画系は見れていないものが多い。 あとあんまり関係なさそうなやや離れたトピックに関してのコンテンツも含んでいたりする。 モチベーション なぜ色々と調べてみたかというと、システム設計について体系的に学ぶことができないか知りたかった、学んでみたかったからである。 もっというと、システム設計についての能力を高める糸口が欲しかった...

システム設計 リンク集

ストレスフリー超大全

ヘルスケア

ストレスフリー超大全を読んだ。 ストレスとどう向き合うか教えてくれる本。 良いマインドセットや考え方、行動など学ぶことができるのでおすすめ。 ストレスと良い関係性を持てるようになると人生の何%か良い時間の過ごし方ができると思うので、ストレスフル社会に生きる社会人は読んでおいて損がないと思う。 ...

健康

Datadog continuous testingについて調べたことメモ

ツール

概要 Datadog continuous testingについて調べたことのメモ。 Datadog continuous testingとは ノーコード 画面ポチポチでテストを用意できる 自己修復型E2E "回復力"のあるテスト 誤検出を最小限に抑える クロスブラウザテスト対応 主要なインテグレーションをカバー CircleCI、Github Actions、Jen...

Datadog

Goを学びなおす

アプリケーション

概要 仕事でもプライベートでも何年かGoを触っているが、今一度このタイミングで学び直してみると効果的ではないかなと思って色々学び直した。 その際に読んだ記事をリストアップしておく。 モチベーション 基本的なことの復習、仕様で拾い切れていなかった部分や新機能のキャッチアップ、tips周りを拾って、Goのコーディング力を上げるためのベースを鍛え直したい。 仕様理解 仕様理解に関連する記事をgo.dev...

Golang

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

ポエム

2022年の振り返りと来年の抱負 毎年恒例の振り返りと抱負について書く。 2021年の振り返りと来年の抱負 2020年の振り返りと来年の抱負 2019年の振り返りと来年の抱負 2018年の振り返りと2019年の目標 プライベート やれたこと 自分の中で大きめの課題であった、このbmf-techのリプレースを完了したことが一番達成感があったことかもしれない。ソフトウェアエンジニアリング総合格闘技...

振り返りと抱負

GoのHTTP Routerを比較するベンチマーカーを実装した

アプリケーション

Makuake Advent Calendar 2022の5日目の記事です! 概要 GoのHTTP Routerのパフォーマンスを比較するためのベンチマーカーを実装した。 bmf-san/go-router-benchmark 現在のところ以下のHTTP Routerを比較対象としている。 bmf-san/goblin julienschmidt/httprouter go-chi/chi gi...

Golang

オレオレTechnology Radarを作る

ツール

Makuake Advent Calendar 2022の7日目の記事です! 概要 オレオレTechnology Radarの作り方についてかく。 Technology Radarとは Technology Radarとは、ThoughtWorks社(ソフトウェア開発やコンサルティングをグローバル展開している企業。マーティン・ファウラー氏が所属している。)が発信しているソフトウェア開発における技術...

Technology Radar

アジャイルメトリクスを読んだ

ソフトウェア工学

Makuake Advent Calendar 2022の6日目の記事です! 概要 最近スクラムチームのプロセス改善について頻繁に思いを馳せており、カイゼンのヒントが何か得られないだろうかと思ってアジャイルメトリクスを読んでみた。 アジャイルメトリクス 原著は多分Agile Metrics in Action。何年か前に出版された本。 アジャイルメトリクスとは? アジャイルメトリクスとは、アジャイ...

アジャイル

「アジャイル式」健康カイゼンガイド

ヘルスケア

「アジャイル式」健康カイゼンガイドを読んだ。 健康×アジャイルという珍しい。 アジャイルの考えた方は色々なところで活きるが、健康を改善するうえでも役に立つ面が多いようだ。 健康のための習慣、行動パターンについて色々書かれているので、実践しやすい。 ...

アジャイル 健康

アジャイルメトリクス

ソフトウェア工学

アジャイルメトリクスを読んだ。 アジャイル開発における計測指標を教えてくれる本。 チームのパフォーマンス向上のための観察手法を学ぶことできる。 ...

アジャイル

SOAとマイクロサービスとの違いについて整理するために読んだ記事メモ

システムアーキテクチャ

SOAとマイクロサービスの違いについて整理したくなったときに漁った記事の雑メモ。 aws.amazon.com - サービス指向アーキテクチャとは何ですか? www.talend.com - マイクロサービスとSOA:の違い 適したユースケースとは ja.wikipedia.org - エンタープライズ・サービス・バス www.xlsoft.com - API インフラストラクチャ: ESB と...

マイクロサービス リンク集

homebrewで過去バージョンをインストールする

アプリケーション

概要 Homebrewでインストールするパッケージで過去のバージョンを指定してインストールしたいときがたまにある。 Homebrewは最新版のみ保持する方針になったらしく、過去バージョンをインストールするときはひと手間かかったのでメモ。 やり方 今回vim9系からvim8系のダウングレードをしたかったので、そのときの手順を例に上げる。 手順は以下。 brew tap-new bmf-san/vim...

homebrew vim

ADR(Architecture Decision Record)について

システムアーキテクチャ

概要 ADR(Architecture Decision Record)について調べた。 ADRとは 2011年にMichael Nygardによって紹介されたアーキテクチャに関する決定事項を記録したドキュメントのこと。 cf. cognitect.com - DOCUMENTING ARCHITECTURE DECISIONS フォーマット Michael Nygardは提案するフォーマットは次...

Architecture Decision Record

Design Docsについて

システムアーキテクチャ

概要 Design Docsについて調べてみた。 Design Docsとは Design Docsはソフトウェア設計のためのドキュメント。 決まった形式を持たず、プロジェクトにとって意味ある形で書くことをルールとしている Design Docsは開発プロセスにおいて、以下のようないくつかのメリットを持つ。 設計上の課題洗い出し、手戻りの軽減 設計について合意形成 横断的な関心事についての整理・...

Design Docs

Cloud Functionsを使ってSlack AppのSlash Commandを実装

アプリケーション

概要 Cloud Functionsを使ってSlack AppのSlash Commandを実装する。 今回作ったボイラープレートはこちら。 go-slack-app-on-cloud-functions-boilerplate Slash Commandの使えるSlack Appを作る方法は色々あるが、安く、簡単に、サーバーレスで作れるということでCloudFront Functionsを使って...

slack-bot Slack Golang Google Cloud Platform Cloud Functions

SLI・SLO・SLAについて

アプリケーション

SLI・SLO・SLAについて SLI・SLO・SLAについて色々調べてみたことをまとめる。 SLO・SLI・SLAとは何か SLO、SLI、SLAとは、サービスレベル(Service Level)に関わる指標、目標、合意のことである。 サービスレベルとは一定の期間内で提供されたサービスを特定の方法で測定して表したものである。 SLI(Service Level Indicator) サービスレ...

SLI SLA SLO

スクラムマスターとプロダクトオーナーの違いについて

アプリケーション

概要 先日認定スクラムマスターの研修を受けたのだが、スクラムマスターとプロダクトオーナーの違いについて改めて整理しておく必要があると感じたので、記事にする。 cf. 認定スクラムマスター(LSM)になった スクラムマスターとは 責任 スクラムの確立と有効性に責任を持つ スクラムが正しく実践されるようにスクラムの理論やプロセスをスクラムチームに理解してもらえるようにする スクラムチームがスクラム...

スクラム

GoでClean Architectureのレイヤーを静的解析する

アプリケーション

概要 GoでClean Architectureのレイヤーを静的解析する方法についてのメモ。 go-cleanarchを使う 静的解析のツールを自作しても良かったが、簡単に導入できるツールがあったのでこちらを使ってみた。 roblaszczak/go-cleanarch 自作CMSのgobel-apiに導入してみた。 cf. PR go install github.com/roblaszcza...

Golang Clean Architecture

マークダウン形式のファイルをPDFファイルに変換する(mermaid・emoji・toc対応)

アプリケーション

概要 マークダウン形式のファイルをPDFファイルに変換したいという要望に応えるための簡易的なドキュメント管理ツールを作った。 bmf-san/docs-md-to-pdf-example 特に深く考えることなくあり物のライブラリを活用して作ったので、あまりサステナビリティを感じない構成になっている。 モチベーション 単にマークダウン形式のファイルをPDFファイルに変換するだけであれば、md-to-...

markdown marked emoji mermaid JavaScript

bmf-techを支える技術

システムアーキテクチャ

bmf-techを支える技術 このブログ(bmf-tech.com)を支える技術スタックについてかく。 旧bmf-techの構成 まずは現行のbmf-techはよりも1世代前の構成について。 アプリケーションはLaravelをベースとしたモノリシックな構成 APIはPHPで、管理画面はReactでSPAを構築していた 当時触っていた技術を何となく採用しただけ Sakura VPSでホ...

Docker Docker Compose VPS Golang Vue.js Prometheus Promtail Loki Grafana Nginx

ブログのシステムを移行した

ポエム

ブログのシステムを移行したので記念投稿。 bmf-tech.comはWordpress→Laravel製自作CMS→Go製自作CMSと3世代目のアップデートをすることができた。 振り返りの記事をそのうち書く予定。 ...

CMS

PHP7.4からPHP8.1までの新機能をキャッチアップ

アプリケーション

概要PHPの知識が7.3から止まっているので8.1までの新機能を駆け足でキャッチアップする。 PHP 7.3.x - PHP 7.4.x新機能型付きプロパティ<?php class Person { public int $age; // 指定の型だけ代入できるように強制される public string $name; } ?> アロ...

PHP

legoでLet's encryptのSSL証明書をDNS-01方式で取得する

インフラストラクチャ

Conoha VPSでAnsibleを使ってLet's EncryptのSSL証明書の取得を行おうとしていた。 証明書の取得はDNS-01方式(ドメインのTXTレコードに認証局が発行したワンタイムトークンを登録して検証する)で取得したかったので、ConohaのAPIを使って、TXTレコードを登録、削除するようなスクリプトを組んで対応(cf. github.com - k2snow/lets...

Let's Encrypt Tips

Golangでロードバランサーを実装する

アプリケーション

概要この記事はMakuake Advent Calendar 2021の24日目の記事です。(大遅刻しました・・)ラウンドロビンで負荷分散するロードバランサーをGolangで自作してみるという話です。 ロードバランサーとは何かロードバランサーはリクエストを複数のサーバーへ振り分けて負荷分散する(ロードバランシング)機能を持ったサーバーです。 サービスの可用性を高めてくれるリバースプロキシの一種で...

Golang ロードバランサー ラウンドロビン

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

ポエム

2021年の振り返りと来年の抱負 去年のやつ。 2020年の振り返りと来年の抱負 今年も振り返りを書いておこうと思うが、年々面倒になってきたのでざっくりにかく。 良い買い物 2021は自分の人生で一番出費があった年だったと思う。 結婚式 引っ越し 車 M1 Macbook Air オフィスチェア あと何か色々細々としたものを買ったような気がする。 どちらかといえばケチなタイプだが、有意義な出費...

振り返りと抱負

コンテナで始めるモニタリング基盤構築

インフラストラクチャ

この記事はMakuake Advent Calendar 2021の17日目の記事です。 気づけば入社して丸3年が経ち、会社のアドベントカレンダーも3回目の参戦です。 ここ1年はRe-ArchitectureチームというMakuakeのサービス基盤の開発・運用を行うチームに所属し、色々と奮闘してきました。 来年もきっとあれこれと奮闘するでしょう。 Re-Architectureチームの求人はこちら...

Docker Docker Compose Elasticsearch Grafana Kibana Prometheus cadvisor efk fluentd node-exporter

StreamYardでKeynoteの発表者ディスプレイを表示しながら配信する方法

ツール

概要 StreamYardを使ってプレゼンする機会があったのでやり方をメモしておく。 Keynoteの発表者ディスプレイを表示しつつ、再生中のスライドだけをStreamYardで共有する方法について手順をまとめる。 必要なもの ディスプレイが2枚必要。 手順 Keynoteでプレゼン資料を開く。ウインドウで再生をクリック。 再生中のウインドウ画面右上、発表者ディスプレイをウインドウで表示。...

Keynote StreamYard Tips

net/httpでつくるHTTPルーター自作入門

アプリケーション

はじめに本記事では、Golangの標準パッケージであるnet/httpを用いて、HTTPルーターを自作する方法について解説します。 標準パッケージはあまり多くのルーティングの機能を提供していません。 例えばHTTPメソッドごとのルーティングの定義ができなかったり、URLをパスパラメータとして利用できなかったり、正規表現を利用したルーティングの定義ができなかったりします。 その為、実際のアプリケーシ...

Golang HTTP

ISUCON11に参加した

ポエム

今年もISUCONに参加してきた 去年に続き、今年も同じメンバーで参加してきた。 ISUCON参加はこれで3度目になる。 bmf-tech.com - Road to ISUcon bmf-tech.com - ISUCON10に参加してきた この1年間はメンバーと去年のKPTを元に、ボトルネックの調査までのフローやオペレーションの練習、全ISUCON過去問を見て出題傾向や解法のパターンなどの勉...

ISUCON ISUCON10

ECS on Fargate環境でDatadog APMを導入

インフラストラクチャ

概要ECS on Fargate環境でDatadog APMを導入したときの雑メモ。 PHPコンテナイメージの調整php-fpmのイメージをベースとしたカスタムイメージを使っている。datadog-php-tracerをが必要なので以下のような感じでイメージに組み込んでいる。 ENV DDTRACE_VERSION=0.65.1 RUN curl -Lo datadog-php-tracer.a...

Amazon Web Service Datadog ECS Fargate

textlintとreviewdogを使ってCircleCIでテキスト校正する

アプリケーション

概要長文の執筆をする際にテキスト校正を自動化しておきたかったのでやってみた。 構成テキストはGithub上で管理するようにしており、ディレクトリ構成は以下のようになっている。 ├── .circleci │ └── config.yml ├── README.md ├── documents │ ├── はじめに.md │ └── おわりに.md ├── images ├── .tex...

CircleCI npm textlint

Gitでコミットを分割する方法

アプリケーション

Gitでコミットを分割する方法のメモ。たまにやりたくなる。  // 分割したところを指定。対象commitをeditする。 git rebase -i HEAD~5 // 対象commitがunstageされる git reset HEAD~ // 任意の粒度でadd&commit git add ~ git commit ~ git rebase --continue ...

Git

M1 MacでMySQL8.0.17のコンテナが起動できない

データベース

M1 Macに買い替えたので手元の開発環境のためにmysqlコンテナを動かそうとしたら動かなかった。 エラーはこんな感じ。 runtime: failed to create new OS thread (have 2 already; errno=22) goのエラーだったので、アーキテクチャの何かしらの問題で動いていないのだろうと推測。 とりあえずdocker hubを見て8.0.17より最...

Docker Docker Compose MySQL M1 Tips