$shibayu36->blog;

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

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

SwiftUIでテキストを連続入力させたい時、ソフトウェアキーボードが一瞬閉じる問題に対処する

SwiftUIでテキストの連続入力を実装したいと思ったが、iOSで一瞬ソフトウェアキーボードが閉じてしまう問題があった。そのあたりの解消の工夫をしたのでブログに書いておく。 やりたかったことと課題 以下のように、入力 => done => 入力 => doneと繰り返し…

AIによる開発は楽しすぎるが、基礎学習が疎かになりそうで怖い

最近Claude Codeなどのコーディングエージェントによる開発が非常に便利になっていて、何か作りたいなと思ったら今までにないスピードで開発ができるようになった。自分だと https://github.com/shibayu36/mysql-schema-explorer-mcp はCursor AgentやClaude…

Claude Code + Opus 4でmysql-schema-explorer-mcpの機能改善をしてみた

一度ClaudeのMax Planで定額課金状態で、Claude Code + Opus 4を体験してみようと思い、https://github.com/shibayu36/mysql-schema-explorer-mcp で以下の2つをVibe codingしてみた。 e2eテスト作成 データベース固定モード機能開発 結論としては、この規模…

コーディングエージェントの挙動を理解するためReActの動きを追いかける

前回の自分の知りたい領域をDeep Researchでハンズオン資料を作って学ぶの記事でDeep ResearchでReasoningを理解するためのハンズオン資料を作った。その実践の中でReActの動きを深掘りしたら、ClineやCursor Agentのようなコーディングエージェントの動きの…

自分の知りたい領域をDeep Researchでハンズオン資料を作って学ぶ

CursorやClineなどで生成AIを使ってコーディングをしていると、Reasoningモデルとか、Thinkingモードとか、そういったワードに出会うことが多い。これらが意味することについて理解できてないと感じていた。 何かを学ぶとき、資料を読むだけではなく手を動か…

AIによりコードレビューや対話による新しい発見のような学習が増えた

ソフトウェアエンジニアリングの学び方には、書籍を読む、サンプルコードを写経するなど色々とある。その中で、同僚とのコードレビューや対話による新しい発見も1つの学習方法として非常に役立っていた。他人との対話による学習は、他の学習と違って自分が想…

MySQLのスキーマ情報を返すMCPサーバーをVibe Codingで作った具体的な流れ

前回紹介したMySQLのスキーマ情報を圧縮して提供するMCPサーバーは、かなりの部分をVibe Codingで作った。その時にVibe Codingのやり方を調べていたのだが、Tipsは色々出てくるものの、具体的にどうAIと会話していったかなどはあまり分からず困っていた。 そ…

クロマ・サブサンプリングについて調べた

複数のpngを全部pdfに結合する処理を書いていて、その中でJPEG圧縮について興味が湧いた。JPEG圧縮全体はまだ全く理解出来てなかったけど、その工程の中のクロマ・サブサンプリングについて調べたのでメモしておく。間違ってる可能性も高いので、ツッコミあ…

mysql-schema-explorer-mcpを英語化した

MySQLのスキーマ情報を圧縮して提供するMCPサーバーを作ったの記事で紹介したmysql-schema-explorer-mcpを英語化してみた。 https://github.com/shibayu36/mysql-schema-explorer-mcp/pull/1 機能としてはtool callの説明文や出力を英語にしたとしても、普通…

最近エンジニアリングにどうAIを活用しているか

最近CLINEに全部賭けろのような記事もあったように、AIエージェントによるコーディングが非常に話題になっている。一方自分は色々試してみるものの、仕事上ではなかなかAIエージェントによるコーディングをうまく使いこなせていない。 ただAIエージェントに…

MySQLのスキーマ情報を圧縮して提供するMCPサーバーを作った

AIを使ってMySQLのクエリを書くときは、自分が関わっているプロジェクトのスキーマ情報を読み込ませることが必須である。ただし超巨大プロジェクトに携わっていると、特定データベースのテーブル数が数百規模になってしまう。この場合スキーマのダンプ情報を…

Cluster ScriptをJavaScriptで書くときに型の補完が効くように

Cluster Scriptを書く時は、TypeScript用の型定義ファイルが用意されていて、それを使うことで型チェックや補完が効くようになる。型定義ファイルは https://docs.cluster.mu/script/index.d.ts にある。 これをJavaScriptからそのまま使ってVSCodeで保管で…

OSS向けに英語を書くためにChatGPTのProjectsを活用している

GitHub上のOSSにcontributeするためにcommitメッセージやPullRequestのコメントを英語で書くことがある。もう自分で英語を書くのは無理なので自動翻訳を活用したい。この時DeepLなどを使ってもいいのだが、もう少しチューニングを加えたい。たとえば 英語非…

リアルタイムに2次元位置を同期するサーバーで爆弾を置けるようにした

clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみている。今回はリアルタイムに2次元位置を同期するサーバーでプレイヤ…

Google Spreadsheetで他のマスターデータを読み込んでいるとき列追加で壊れにくくしたい

Google Spreadsheetを使っているとき、別のマスターデータシートから特定列だけ読み込みたい時がある。この時簡単に読み込む方法としてはIMPORTRANGEやQUERY関数を組み合わせて使う方法がある。 ただこのやり方だと、マスターデータシートに列が追加された時…

「Go言語で学ぶ並行プログラミング」を読んだ

最近はGoの並行プログラミングを学んでおり、ちょうど「Go言語で学ぶ並行プログラミング」という本が出たばかりだったので読んでみた。この本は自分にめちゃくちゃ刺さって面白かった。 Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプ…

「Go言語による並行処理」を読んだ

最近Goの並行処理を理解する必要が出てきたので、「Go言語による並行処理」を読んだ。 Go言語による並行処理作者:Katherine Cox-BudayオライリージャパンAmazon 並行処理とはそもそも何か、goroutineやsyncなどの並行処理のためのパーツ、さらにchannelの基…

golangのcontextのcancel伝播の仕組みを学ぶために自作してみた

並行プログラミングを学ぶ一環で、「Contextを完全に理解する」というテーマでGo Conference 2021 Autumnに登壇しました の記事を見つけ、contextのcancel伝播の実装方法が気になった。そこで自分でcontextのcancel部分だけを自作することで伝播の理解を深め…

リアルタイムに2次元位置を同期するサーバーのe2eテストを作った

clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いている。今回はリアルタイムに2次元位置を同期するサーバーでプレイヤーか…

git grepで除外パスを指定しやすくする

git grepにはさまざまな便利グッズがあるのだけど、どうやっても覚えられなくて困っていた。たまに使いたいものとして、特定ファイルは除外する方法があるが、この記法が覚えられない... 例えば、golangでテストファイルとgen/ディレクトリ以下にあるもの以…

リアルタイムに2次元位置を同期するサーバーでプレイヤーから弾を発射できるように

clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみている。今回はリアルタイムに2次元位置を同期するサーバーにアイテム…

リアルタイムに2次元位置を同期するサーバーにアイテム情報を追加した

clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみている。今回はMQTT+Protocol Buffersを使ってリアルタイムに2次元位置…

新規プロジェクトにgolangci-lintを導入したメモ

MQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみたで作ったレポジトリにgolangci-lintを導入したのでメモ。 以下の資料を参考にした。 golangci-lint の enable-all で コーディングルールを明確にする試み | ドクセル K…

terminalの256色のカラーに何が設定されているか手軽に見る

terminalの256色のカラーに何が設定されているか手軽に見たかった。ChatGPTに聞いたらめっちゃ良いコマンドを教えてもらえたのでメモ。 こういうコマンドを実行する。 for i in {0..255}; do printf "\033[48;5;%sm %3d \033[0m" "$i" "$i" if [ $(( (i+1) %…

MQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみた

clusterのリアルタイム通信サーバーの漸進的な進化のような仕組みを理解したいなと思い、手習い用にMQTT+Protocol Buffersを使ってリアルタイムに2次元位置を同期するサーバーを書いてみた。 できたもの 簡単にclientも書いて、こういうものを作った。 termi…