$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

2023-01-01から1年間の記事一覧

入社半年から見るクラスターでのエンジニアの仕事の様子

この記事はクラスター Advent Calendar 2023 シリーズ2の20日目の記事です。昨日はMSA_iさんのClusterの会場アップロードを楽にしたいでした。 入社エントリで書いたとおり、7月にクラスター株式会社に入社し、その後ソフトウェアエンジニアとしてサーバーサ…

あるレポジトリを別のレポジトリのサブディレクトリへ履歴付きで移動する

あるレポジトリのサブディレクトリ配下を別のレポジトリへ履歴付きで移行する - $shibayu36->blog; の逆バージョン。 あるレポジトリでずっと開発していたが、やっぱりモノレポの中に入れたいとなって、履歴付きでモノレポの特定のサブディレクトリ配下に移…

Googleスプレッドシートで複数シートの内容を1つのシートに統合する

たとえばユーザー向け開発とリファクタリングなどの内部改善を、スプレッドシートの別シートで管理していたとする。これらを別シートに分けている理由は管理したい情報がそれぞれで違うためだ。 一方、それら進行状態については全部一覧で見たいことがあった…

多様性の力を知る - 多様性の科学を読んだ

タイトルを見てなんとなく興味が惹かれたので読んだ。想像以上に面白くてためになった。 多様性の科学作者:マシュー・サイドディスカヴァー・トゥエンティワンAmazon 自分はこの本から多様性が実際に何に役立つかを学ぶことができた。世の中では多様性が大事…

Goでtemplateファイルをembedして、コードとテンプレートを分離する

Goでtext/templateを使ってコードジェネレータを書いている時、コード内にテンプレート自体を文字列として埋め込むのはコードが見にくくなるため困っていた。例えばPerlのData::Section::Simpleみたいにコードとテンプレートを分離して、見やすくしておきた…

fzfを使ってgit stashを便利に扱えるように

git stashをもっと便利に扱いたいと思い、fzfを使って使いやすくしてみた。以下のURLに載っているものを参考にして自分にとって使いやすいように改変した。 fzfでGUI選択したファイルをgit stashするシェルスクリプト git-stash-explore できたこと 今の変更…

VSCodeのworkbench.activityBar.visibleをworkbench.activityBar.locationに移行する

僕はSettings Cycler - Visual Studio Marketplaceを使ってVSCodeのActivityBarの表示非表示を切り替えている。こういうやつ。 "settings.cycle": [ { "id": "zen", "values": [ { "editor.folding": false, "editor.glyphMargin": false, "workbench.activi…

Goでは-race付きでテストするとビルドキャッシュが完全に別になる

gotesplitにAdd -race to list when it is specified for test optionsというPullRequestを投げたのだが、この背景を書いておこうと思う。 まずGoでは-raceオプションについて、以下のような挙動を起こす。 -raceフラグをつけるとruntime/raceがおそらく一番…

セキュリティが満たされやすい設計を学ぶ - セキュア・バイ・デザインを読んだ

設計やアーキテクチャについて学び直したいと思い、今回はセキュア・バイ・デザインを読んだ。 セキュア・バイ・デザイン: 安全なソフトウェア設計 Compass Booksシリーズ作者:Dan Bergh Johnsson,Daniel Deogun,Daniel Sawanoマイナビ出版Amazon この本の作…

進化的アーキテクチャ読んだ

最近アーキテクチャ関連の知識を身につけようと思い、進化的アーキテクチャを読んだ。 進化的アーキテクチャ ―絶え間ない変化を支える作者:Neal Ford,Rebecca Parsons,Patrick Kuaオライリー・ジャパンAmazon 言葉の定義が独特で、正直この本は難しいな〜と…

git logの内容を検索する-Sと-Gの違い

ずっとgit logの内容を検索するときに-Sオプションを使っていたが、実は近いオプションに-Gオプションもあり、探したい内容によっては使い分けないとダメということを初めて知った... 詳しくはhttps://git-scm.com/docs/git-logの-Sと-Gのドキュメントを見て…

特定ファイルを更新したマージコミットを探す

あるファイルが最近どの程度の頻度で更新されたのか、マージコミット単位(≒PullRequest単位)で調べたいことがあった。git logのコマンドを使ったら簡単に調べられたのでメモ。 たとえば1年以内に https://github.com/x-motemen/ghq のレポジトリで .github/ …

より少なく、しかしより良く - 「エッセンシャル思考」読んだ

エッセンシャル思考 最少の時間で成果を最大にする作者:グレッグ・マキューンかんき出版Amazon 自分がなんでもやりたいタイプなので、この本に書いてあることは中々刺さった。幸福になるには「より少なく、しかしより良く」を追求すべきという本。プライベー…

スムーズに進行するためのエンジニアリングタスク分割の工夫

会社の振り返りで「エンジニアリングの作業タスクがうまく分割できていそうだったが、その知見を共有してほしい」と言われたので、自分がどう考えてタスク分割をしているかをこの記事で共有したい。 この記事のスコープとすること・しないこと タスク分割を…

Goで実際にどのパッケージがコンパイルされたかを確認する

Goでどのパッケージが再コンパイル予定か確認する - $shibayu36->blog;の続き。前回は大体のコンパイル計画を知る形だったが、今度は実際にどのpackageがコンパイルされたかを確認する方法についてメモ。 まずgoのコマンドは-xオプションを使うことで実行さ…

Goでどのパッケージが再コンパイル予定か確認する

build cacheがうまく使えているかを調べる必要があり、どのパッケージが再コンパイル予定かを確認するコマンドを調べたのでメモ。ちょっと自信がない部分もあるので間違っているところがあったら教えてください。 先に結論から言うと、go listを使った以下の…

ある特定のパターンにヒットする次の行が特定のパターンだった時に削除するワンライナー

あるディレクトリ以下で特定のパターンにヒットする行を全て削除する - $shibayu36->blog;に引き続き、やり方を模索してみた。 たとえばgolangを使っていて、ある処理をt.Cleanupに寄せたので対応するdeferを全部消したい時がある。 // StartHogeHelperの中…

優れたテストスイートの4本の柱を学ぶ - 「単体テストの考え方、使い方」を読んだ

良いテストケースの作成手法を学ぶ - 「はじめて学ぶソフトウェアのテスト技法」を読んだ - $shibayu36->blog;に引き続き、ソフトウェアテストの知識について言語化を進めたいと考え、「単体テストの考え方、使い方」を読んだ。 単体テストの考え方/使い方作…

良いテストケースの作成手法を学ぶ - 「はじめて学ぶソフトウェアのテスト技法」を読んだ

ソフトウェアテストに関する知識をもう少し言語化したいなと思い、「はじめて学ぶソフトウェアのテスト技法」を読んだ。 はじめて学ぶソフトウェアのテスト技法作者:リー コープランド日経BPAmazon この本では主に良いテストケースの作成手法について学べた…

妻が書いた「めんどくさがりやの自分の機嫌を取る暮らし」が発売されました

PRです。妻が書いた「めんどくさがりやの自分の機嫌を取る暮らし」が本日発売されました。 めんどくさがりやの自分の機嫌を取る暮らし (BAMBOO ESSAY SELECTION)作者:てらい まき竹書房Amazon 僕から見ても、妻はめんどくさがりやなのに「こんな生活がしたい…

Goでstruct内に定義されたタグの内容を再帰的に取得する

あるstruct構造の中のdbというタグの内容に何が含まれているかをすべて取得したい時があったため。 たとえばこういう構造があったとして type Timestamp struct { CreatedAt time.Time `db:"created_at"` UpdatedAt time.Time `db:"updated_at"` } type Json…

MQTTのトピックフィルターによる購読をトライ木を使って実装する

最近趣味でMQTTブローカーの実装をしてみている。その中でトライ木を使うとトピックフィルターによる購読の実装を簡単に行えるというのが面白かったのでブログにしておく。 なおトライ木はHTTP Routerの実装にも使われることがあり、そういう点でも一度実装…

MQTTプロトコルをブローカーを実装しながら学ぶ

clusterのリアルタイム通信サーバーの漸進的な進化 - Cluster Tech Blogを見て、リアルタイム通信の仕組みに興味を持った。しかし、MQTTプロトコルは使ったことがなく、どのようなプロトコルなのか、何がそんなに効率的なのか、なぜIoTなどでよく使われるの…

SPACEフレームワークを参考に開発生産性の可視化の改善方法を考える

GitHub Copilotについて調べていたときに見た Research: quantifying GitHub Copilot’s impact on developer productivity and happiness - The GitHub Blog の記事の中で、開発生産性を測るSPACEフレームワークを使って計測しているのを見かけた。SPACEフレ…

MySQL即効クエリチューニング読んだ

MySQL即効クエリチューニング ThinkIT Books作者:yoku0825インプレスAmazon 最近クエリチューニングの仕事があったので、少し深めに知ろうと読んだ。 MySQLの内部構造がどうなっているかは置いておいて、どうすればクエリの問題を把握できるかが素早く知れる…

MySQLでNested Loopなクエリはインデックスをどう辿っているか

タイムライン的なものをSELECTだけで実装しようと思った時に、Nested LoopなクエリでUsing temporary; Using filesortが出るようなそこそこ遅いクエリになる。その時にMySQLがインデックスをどう辿っているかを知りたかったので調べてみた。MySQLバージョン…

Goの学習のため書籍を三冊読んだ

A Tour of Goが終わり、もう少しGo自体の深掘りをしたいためGoの書籍をいくつか読んでみたのでメモ。今回読んだ書籍は以下の三冊。 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス作者:渋川 よしき,辻 大志郎,真野 隼記オライリージャパンAmazo…

あるディレクトリ以下で特定のパターンにヒットする行を全て削除する

例えばgolangを使っていて、ある処理をt.Cleanupに寄せたので対応するdeferを全部消したい時がある。 defer hogeHelper.Close() 単純に上のように特定のパターンにヒットする行を全て削除したいということであれば、findとsedを使うだけで出来る。Macの場合…

クラスター株式会社に入社しました

2023/07/01よりクラスター株式会社に入社しました。 corp.cluster.mu 今回もいくつかオファーをもらったが、次の理由からクラスター株式会社へ決めた。 とにかくクリエイターを応援したい 社内にもクリエイター気質の人が多そうだ リアルタイム通信サーバー…

あるレポジトリのサブディレクトリ配下を別のレポジトリへ履歴付きで移行する

Gitで開発していて、あるサブディレクトリ以下を別のレポジトリに移行したいと思うことがある。今回はそういうことをしてみたのでメモ。 まずGitHubにそのようなやり方の指南がある(Splitting a subfolder out into a new repository - GitHub Docs)。大体…