ホーム

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

Ruby

パーフェクトRuby

アプリケーション

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

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

人事 労務

All for SaaS

ビジネス

ALL for SaaS SaaS立ち上げのすべてを読んだので気になったことをメモする。 ASPとSaaSの違い シングルテナントなのがASP、マルチテナントなのがSaaS と語られることもある リカーリングレベニュー 繰延収益 企業の売上の内、継続可能性のあるもの ユニットエコノミクス Unit ecnomics = Life time value/Customer Acquisi...

SaaS

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

ソフトウェア工学

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

アジャイル スクラム

カスタマーサクセス

ビジネス

カスタマーサクセス――サブスクリプション時代に求められる「顧客の成功」10の原則を読んだ。 カスタマーサクセスとは? 顧客の”成功”を支援する業務。 顧客のクレームや問い合わせに対応するカスタマーサポートとは異なる。 サブスクリプション型の事業において、LTVを最大化することが重要な要素の一つとなる。カスタマーサクセスは顧客の分析や支援を通じて事業の売上に貢献するプロフィットセンターとなる。 Th...

カスタマーサクセス SaaS

ザ・モデル

ビジネス

ザ・モデル: マーケティング・インサイドセールス・営業・カスタマーサクセスの共業プロセスを読んだ。 普段、この手を本をあまり読まないので、筆が進まないが感想を書き残しておく。 The Modelとは、顧客獲得やカスタマーサクセスなど営業活動のあれこれを体系化し、仕組みとしたもので、セールスフォース・ドットコムで活用されてきたものらしい。 セールスの経験がなく、一般的な用語くらいしかインプットがなか...

セールス SaaS

カイゼン・ジャーニー

ソフトウェア工学

カイゼン・ジャーニーを読んだので感想をメモする。 感想 ストーリー調なのが読みやすいような読みにくいようなという印象を持ったのが、読み終わってみると「越境」というものを追体験するには分かりやすい形式だなと感じた。 登場するアジャイルのプラクティスは、他で学んだことがあるので目新しさは個人的にはなかった。 ただこの本ではそうしたプラクティスの詳細よりも「越境」することの目的や意義にメッセージ性を強く...

アジャイル

ISUCON環境で学ぶシステムメトリクス入門

システムアーキテクチャ

概要 ISUCON環境を利用してシステムメトリクスをちゃんと見れるようなろうという勉強会を定期的に行っているので、そのまとめを残す。 Webエンジニアが知っておきたいインフラの基本 インフラの設計から構成、監視、チューニングまでを参考図書とし、第5章以降の内容を実際に手を動かして確認するような形で行っている。 環境はConohaでISUCON8のイメージを利用してサーバーを立てている。 プラン:メ...

ISUCON

CFPを書く技術

ビジネス

概要 カンファレンスなどの登壇イベントでCFPを提出することがあるが、自分がどのようにCFPを書き上げ、提出しているかについてポエムを書いておく。 これまでの実績 過去CFPを提出した回数が7回、採択率は100%(うち1件は諸事情により辞退)であった。 登壇したイベントは、PHPのカンファレンスとGoのカンファレンスで、PHPのカンファレンスのほうが登壇回数が多い。 cf. https://spe...

テクニカルライティング

PHPCompatibilityを使ってPHP8.2の互換性チェックを行う際にハマったこと

アプリケーション

PHPCompatibilitiyを使ってPHP8.2の互換性チェックを行う際にハマったことのメモ。 ハマったこと 2023年10月現在、latestである9.3.5をインストールしてもPHP8.2の互換性チェックはできない。 9.3.5は2019年リリースで、最近のPHPのバージョンにまだ対応していないらしい・・・ 解決策 もしかして開発止まってる?と一瞬思ったが、その様子はない。 develo...

PHP CodeSniffer PHPCompatibility

MySQLのロックについて

データベース

概要 MySQLのロックについてまとめる。 MySQLのバージョンは8系を想定する。 検証環境 検証に使う環境はdocker-composeで用意した。(1コンテナだけなのでcomposeを使わなくも良いのだが..) . ├── docker-compose.yml └── initdb.d └── 1_schema.sql docker-compose.yml version: &#x...

MySQL トランザクション ロック

エンジニアが学ぶ金融システムの「知識」と「技術」

システムアーキテクチャ

エンジニアが学ぶ金融システムの「知識」と「技術」を読んだ。 システム的な話より金融のドメイン知識が多めの印象。銀行、保険、証券、クレジットカード会社などの業務やシステムについて説明されている。決済システムに関わるような人でも役立つ本かなと思った。 ...

金融

正規化理論について

データベース

正規化とは データの重複をなくし、データの論理的不整合を防ぐように設計すること。 前提 キー 主キー 行を一意に識別する識別子 複合キー 複数の属性を組み合わせて構成される主キー 外部キー 別のテーブルを参照するためのキー 候補キー 行を一意に識別できる性質を持つ属性の集合で、既約であり、極小(必要最小限の属性数)であるもの スーパーキー 行を一意に識別できる性質を持つ属性と余分...

正規化理論 正規化

Indexとはなにか

データベース

インデックスとは テーブルに格納されているレコードを高速に取り出すための仕組み 以下のようなO(n)問題を抱えたクエリがあるとする。 SELECT * FROM users WHERE first_name = ‘Tom’ このクエリのパフォーマンスを上げるためには、以下のようにIndexを貼る。 ALTER TABLE users ADD INDEX (first_name) メリット・デメリッ...

DB インデックス MySQL

理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL

データベース

理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus)を読んだ。 理論から学ぶことでRDBに対する向き合い方、考え方を整理することができる。集合論や論理学は理解しきれていないので今後の課題。 ...

DB sql

初めてのSQL 第3版

データベース

初めてのSQL 第3版を読んだ。 SQL入門書として分かりやすい。駆け出しの時に読んでおけば良かった。基本的なことを振り返るにもちょうどよい。 ...

DB sql

SQLアンチパターン

データベース

SQLアンチパターンを読んだ。 定番of定番。分かりやすい解説でアンチパターンが紹介されている。 ...

DB sql

DB設計におけるNULLについて

データベース

NULLとは 「値が存在しない」または「値が不明」ということを示す。 値ではないため値のように比較できない。 空集合(要素が0個の集合)ではなく、存在しない集合と見なされる。 リレーショナルモデルに反するNULL リレーショナルモデルは閉世界仮説(真であると判明しないものは全て偽であると仮定すること)に基づいており、NULLはこれに反する。 リレーショナルモデルでは2値論理が元となっているため、真...

DB

キャパシティプランニングについて

システムアーキテクチャ

キャパシティプランニングの目的 システムのリソース管理を目的とし、リソースを効率的に利用することを目指す。 キャパシティプランニングのプロセス キャパシティプランニングは概算と詳細を使い分ける。不必要に詳細に踏み込まないようにし、必要な時に適切な詳細を用意する。 アプリケーションのパフォーマンス要件を定義する レスポンスタイム、スループット、同時接続数、負荷性能など。 現在のインフラの稼働状...

キャパシティプランニング

DB設計におけるID設計について

データベース

IDとは あるものを一意に特定するもの。 集合論において、あるものと属性が1:1で対応することを全単射と呼ぶ。 全単射になっているものはIDとして機能とする。 IDを考えるときは、単数に対するものか、複数(グループ)に対するものか、複数であればどのような粒度であるのか?などを考慮する必要がある。ex. カニという属性を考えるとして、どんな種類なのか?何科目なのか?色は?名称は? 一見一意性を持たな...

DB

キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置

システムアーキテクチャ

キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置を読んだ。 古い本ではあるが、キャパシティプランニングについての基本的な考え方を学ぶことができる。 オンプレが前提とはなっているが、クラウドにおいても転用できる考え方があると思う。 ...

キャパシティプランニング

Kubernetesの各コンポーネントについて

インフラストラクチャ

Kubernetesの各コンポーネントについて Control Plane Components kube-apiserver クラスタを操作するためのKubernetes APIを提供するサーバー。水平スケールが可能な形に設計されている。 etcd 全てのクラスタの状態管理を行うための高可用性のキーバリューストア。 kube-scheduler ノードが未割り当ての新しく生成されたPodをどの...

Kubernetes

ジョブ理論

ビジネス

ジョブ理論 イノベーションを予測可能にする消費のメカニズムを読んだ。 エンジニアは課題解決する生き物だが、時にユーザーにとって解決したい課題は何か?について真摯に向き合うシーンがあると思う。 そのような時に頭に思い浮かべたい、参考にしたい理論だと思った。 ワードメモ ジョブ 顧客が解決したい課題 ジョブ理論 顧客がどのようなものを買い、どのようなものを買わないかを説明する 片付けるべきジ...

ジョブ理論

Spannerの知見メモ

データベース

概要 Cloud Spannerの知見を漁ったのでメモ。走り書きなのでカテゴライズしていない。 メモ 計画メンテナンスやスキーマ変更のためのダウンタイムなし、最大99.999%の可用性を保証 Cloud SQLはダウンタイムありの計画のメンテナンス Cloud Spannerのアーキテクチャ構成 クライアント R/Wするコードが実行されているサーバーやコンテナ クライアントライブラリを使うと...

Spanner

NGINXのbuffer関連ディレクティブのメモ

インフラストラクチャ

bufferサイズを記録したかったときに調べていたのでメモ。 large_client_header_buffers ngx_http_core_module モジュールに含まれるディレクティブ 構文: large_client_header_buffers number size; デフォルト: large_client_header_buffers 4 8k; コンテキスト: http, s...

Nginx

SaaSのアーキテクチャについて知るためのリスト

システムアーキテクチャ

SaaSなんもわからん!からSaaS完全に理解した!に近づくために参考になりそうな資料をまとめておく。 資料 docs.aws.amazon.com - SaaS アーキテクチャの基礎 docs.aws.amazon.com - SaaSレンズ docs.aws.amazon.com - SaaS Tenant Isolation Strategies: Isolating Resources ...

アーキテクチャ SaaS

実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策まで

ネットワーク

実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策までを読んだ。 メール技術について体系立てキャッチアップしたことがなかったので大変役に立った。 ...

メール

Goのrune型について

アプリケーション

rune型とは int32のエイリアス型で、Unicodeのコードポイントを表す。 Unicodeは符号化文字集合や、文字符号化方式などを定めた文字コードの標準規格で、世界の多様な言語や書式、記号に番号を割り当てたもの。 符号化文字集合とは、コンピューター上で扱う文字や記号を重複しないように集めた文字セットのことであり、文字と文字に割り当てられた番号の対応表を指す。文字符号化方式は、文字に割り当て...

Golang

Goでオレオレ証明書がほしいときの一手

アプリケーション

GoでHTTPサーバーを書いているときなどオレオレ証明書がほしいときに役立つワンライナー。 go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -rsa-bits 2048 -host localhost cert.pemとkey.pemが用意できる。 openssl使ったりmkcert使ったりしていたけどGo使っていたらこれで良さそう...

Golang Tips

入門 考える技術・書く技術――日本人のロジカルシンキング実践法

ビジネス

入門 考える技術・書く技術――日本人のロジカルシンキング実践法を読んだ。 クリティカルシンキングとかロジカルシンキングとかそのへんのテーマの本も一読しておくと理解が深まりそう。昔読んだその手の本が割と役立った。 ...

ロジカルシンキング

Goで指数バックオフとジッターを実装してみる

アプリケーション

指数バックオフ(Exponential backoff) リクエストの遅延を乗算的に増加させる(リトライ間隔を遅延させていく)形で失敗したリクエストを定期的に再試行(リトライ)する手法。 ex. 1回目のリトライは1秒後、2回目は2秒後、3回目は4秒後、4回目は8秒後... リトライ設計においては、バックオフのみに依存するのではなく、リトライ上限やタイムアウト(接続タイムアウトとリクエストタイムア...

指数バックオフ リトライ ジッター

FuelPHPとPHPのアップデートプロジェクトレポート

アプリケーション

この記事はMakuake Advent Calendar 2023の24日目の記事です。 概要 10年以上運用しているサービスのPHPとFuelPHPのアップデートを行ったプロジェクトのレポーティングをする。 アップデート対象 メインサービス(会社が運用する主要なサービス)のアプリケーション FuelPHP利用 メインサービスが利用している社内ライブラリ(2つ) PHP製 メインサービス...

PHP FuelPHP

Go1.22rcで変更されるServeMuxの仕様

アプリケーション

この記事はMakuake Advent Calendar 2023の19日目の記事です。 なんでこんな大遅刻かというと、唯一埋まっていなかった19日の枠を急遽埋めようと思って投稿したため。元々掴んでいた枠ではないので遅刻ではない。 概要 去年くらいからGoのnet/httpに含まれるServeMuxの機能拡張の提案が出ていてウォッチしていたのだが、最近Closedになったらしい。 cf. net/...

Golang

gRPCとProtocol Buffersについて復習するためのリンク集

アプリケーション

概要 gRPCとProtocol Buffersについて改めておさらいしておきたかった。 リンク gRPC grpc.io 公式ドキュメント zenn.dev - 作ってわかる! はじめてのgRPC まだ読んだことなかったので読んでみたのだが大変勉強になった。日本語情報はまずこれ読んでみると良いかも。 www.wantedly.com - gRPC Internal - gRPC の設計...

gRPC Protocol Buffers リンク集

モブプログラミングについて

ソフトウェア工学

最近モブプロを人生で初めて経験したので、その体験の良さを忘れないようにメモ書きしておく。 モブプログラミングとは 3人以上のメンバーで1台のコンピューターを共有してプログラミングする手法のこと。 通常コードを書くドライバーと、それを支えるナビゲーターの二手に分かれて作業をする。 Pros / Cons Pros ナレッジ共有がしやすい 同期的なフィードバックを得ることができる 認識を合わせやすい...

モブプログラミング アジャイル

OpenAPIを使ったスキーマ駆動開発

アプリケーション

OpenAPI Specificationとは 言語依存のない形でHTTP APIの仕様を定義するためのフォーマット。YAMLまたはJSONで記述する。 Swagger SpecificationはOpenAPI Specificationの前身である。 OpenAPIを採用するメリット・デメリット メリット REST APIの標準化されたフォーマットであり、開発者間のコミュニケーションコストを...

OpenAPI スキーマ駆動

Goのマルチモジュール構成でWorkspace modeを使ってみる

アプリケーション

Go1.18から追加されたWorkspace modeを使ったことがなかったので、使ってみた。 Workspace modeとは Goのマルチモジュール構成を便利するための機能。 Workspace modeの使い方 次のような構成を用意する。 . ├── bar │ └── bar.go └── foo └── foo.go // foo.go package foo func ...

Golang

世界一流エンジニアの思考法

ビジネス

世界一流エンジニアの思考法をちょっと前に読んだのでメモ。 この本で書かれていることはどこかで聞いたり学んだりしたことが多かったので個人的にはあまり目新しいことがなかったのだが、2つほど頭に留めておきたいことがあった。 1つはBelazyであれということ。より少ない時間で価値を最大化しようという考え。 これは一人でも実践できるマインドセットだが、周りの環境もBelazyであることがより大事かなと思っ...

思考法

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

ポエム

2023年の振り返りと来年の抱負 今年も1年を振り返って来年の抱負を記す。 2022年の振り返りと来年の抱負 2021年の振り返りと来年の抱負 2020年の振り返りと来年の抱負 2019年の振り返りと来年の抱負 2018年の振り返りと2019年の目標 プライベート 昨年やれなかったことを今年はやれたか振り返ってみる。 Kubernetes→CKAの取得には至らなかったが、勉強にはある程度時間を...

振り返りと抱負

開発生産性についての記事漁り

ソフトウェア工学

開発生産性についての記事を漁った。 記事リスト github.com - dora-team/fourkeys fourkeysを計測するためのツール dl.acm.org - The SPACE of Developer Produtivity SPACEについての論文 www.atlassian.com - 5 つの役立つアジャイル KPI 指標 bliki-ja.github.io...

開発生産性 リンク集

アーキテクチャ設計と組織設計についての記事漁り

ソフトウェア工学

ソフトウェアのアーキテクチャと組織の設計に関して記事を漁ってみたので、読んだものをリストアップしておく。随時読んだものを追加していこうと思う。 記事リスト logmi.jp - 状況に合わせたトレードオフで“ベター”を目指す 組織設計における、書籍『ソフトウェアアーキテクチャ・ハードパーツ』の活用 engineer.crowdworks.jp - 変化に適応するソフトウェアアーキテクチャと組織構...

設計 アーキテクチャ リンク集

Aurora Serverlessについて調べた

データベース

Aurora Serverlessについて興味を持ったので記事を漁ってみた。 チェックした記事 aws.amazon.com - Amazon Aurora Serverless techblog.zozo.com - Aurora Serverless v2を本番導入した話 〜検討や導入時のポイント・得られた効果について〜 www.plan-b.co.jp - Aurora Serverles...

Amazon Web Service

GrafanaでContact PointsとPoliciesをプロビジョニングするようにする

インフラストラクチャ

概要 GrafanaでContact Pointsがプロビジョニングがいつの間にかできるようになっていたので、プロビジョニングを設定してみる。 環境 grafana-oss 10.0.1 Docker Docker Compose 設定方法 雑メモなのでDocker Composeを使ったビルド周りの説明は割愛する。bmf-san/gobel-exampleを参照。 provisioning/...

Grafana Docker

ソフトウェア開発のプロジェクトにおける不確実性への向き合い方

ソフトウェア工学

この記事はMakuake Advent Calendar 2023の22日目の記事(ポエム)です。 概要 ソフトウェア開発のプロジェクトにおける不確実性について、自分が日々どのように向き合っているかを言語化してみる。 アジャイル関連の本を読み漁ったり、PMBOKの勉強をしたりと体系的に学んできたわけではないので、経験に基づいた主観的な話になる。 前提 自分がどのような環境で不確実性に向き合っている...

アジャイル

モニタリングシステムにおけるPull型とPush型のアプローチの違い

インフラストラクチャ

概要 モニタリングのシステムにおけるPull型とPush型のアプローチの違いについてまとめる。 Pull型 監視サーバー側で監視対象ホストについて設定をし、監視サーバーから監視ホストにデータを取得しにいく。 ex. Prometheus、Nagios、Zabbixなど PrometheusはPull型の欠点を補うかのように、exporterというPush型のようなアプローチのような仕組みがある。e...

モニタリング

アーキテクチャ設計の進め方

システムアーキテクチャ

概要 構成図レベルでのアーキテクチャの設計をする時の進め方として個人的に良いと思ったやり方を1つ取り上げてまとめておく。 進め方 事前に要件定義や調査がある程度済んでいるという状態を前提として、アーキテクチャの構成図を書きながら設計を進めていく作業の取り組み方法について書く。 といってとても単純で、「最初からゴールの絵を描こうとせずに、段階を踏んで設計する」というだけである。  上図のように...

アーキテクチャ 設計

GoReleaserを使ってのGoのアプリケーションを配布する

アプリケーション

GoReleaserを使ってGoのアプリケーションをクロスコンパイルしてバイナリ配布をやってみた。 GoReleaserとは GoReleaserは、Go言語で書かれたアプリケーションのビルド、パッケージング、およびリリースを自動化するツール。 クロスコンパイル、バイナリの圧縮、アーカイブの作成、GitHubなどのプラットフォームへのアーティファクトのアップロードができる。 GitHub Acti...

Golang GitHub Actions

GraphQLについて

アプリケーション

概要 GraphQLの素振りをしていたので調べたことについてまとめておく。 親切なチュートリアルが用意されており、始めやすい。 cf. www.howtographql.com GraphQLとは Meta社によって開発されたWeb API開発のためのクエリ言語。 GraphQLはGraphQL Foundationによって管理されており、Meta社はその一員である。 GraphQLの仕様と全ての...

GraphQL

HTTP Routerの自作で参考にした資料

アプリケーション

goblinの開発で参考にした各種ソースや自分の記事をリストアップする。 いくつかの自分のブログ記事に参考リンクを貼ったりしていたせいで分散していたので集約した。 参考 HTTP Routerの開発で参考にした資料リスト。 GitHub jba/muxpatterns importcjj/trie-go julienschmidt/httprouter gorilla/mux gowww/rou...

router HTTP URLルーティング リンク集

サービスメッシュについて

インフラストラクチャ

概要 サービスメッシュについて調べたことをまとめる。 サービスメッシュとは サービス間(分散システム)の通信を管理するためのネットワークインフラストラクチャのこと。 一般的にはサービスにプロキシをサイドカーとして追加することで構成する。 サービスメッシュが解決すること 可観測性の向上 サービス間の通信の管理・制御 サービス間の通信のセキュリティ向上 サービスメッシュの機能 サービスディスカバ...

サービスメッシュ

slogを使ったContextual Logging

アプリケーション

概要 Goでlog/slogを使ったcontextual loggingについてまとめる。 log/slogとは Go1.21で追加された構造化ロギングのためのパッケージ。 構造化ロギングとは、ログを構造化されたデータとして出力すること。 今まではGoで構造化ロギングをする場合はサードパーティのパッケージを利用するか、自前でスクラッチするかしか手段がなかったが、今後は標準パッケージも視野に入るよう...

slog contextual logging

More Effective Agile

ソフトウェア工学

More Effective Agileを読んだ。 アジャイルを実践するためのプラクティスがまとめられた本。 アジャイルワークショップの教科書として活用させてもらった。 ...

アジャイル

モジュラモノリスについて調べたことをメモ

システムアーキテクチャ

概要 モジュラモノリスについて調べたことをメモする。 モジュラモノリスとは モジュール分割をしたモノリス モジュール分割はドメインによる分割が一般的に見えるが、機能分割や技術分割など様々なパターンを検討することができる モノリスと同じく単一のデプロイメントパイプラインを持つ メリット モジュールが分割されているのでモジュール単位で開発を独立して行うことができる マイクロサービスへの移行が容易...

モジュラモノリス

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