$shibayu36->blog;

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

tech

最近エンジニアリングにどう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…

MacでYouTube用にclusterの録画を撮る

下記のイベントで、MacでYouTubeアーカイブ用の録画をしたので、どのように設定したかをまとめておく。 cluster.mu 最終系 以下のように録画したい。 YouTubeのアスペクト比である16:9となるように clusterのアプリケーションのヘッダー部分は映さない clust…

Macでコマンド一発で特定のアプリケーションのウインドウを指定サイズにする

cluster.mu clusterでこちらのイベントスタッフをやることになり、そこでYouTube用のアーカイブ動画を撮る役割を担うことになった。うまくYouTubeにアップロードするために、OBSを使ってclusterをYouTubeに適切な16:9サイズ + ヘッダー無しで録画したいと考…

【cluster】スイッチで風景とスクリーンを出しわけする

clusterの推しアバター展示場で作業配信をすることがありスクリーンを設置しているのですが、初めからスクリーンが出ているのは展示場としては不恰好で嫌だなと思っていました。 そこで最初は風景が出ているけどスイッチを押すとスクリーンが出るようにして…

Unity Editorで子オブジェクトでもWorld Positionをインスペクタで表示したい

Unity Editorで子オブジェクトにするとインスペクタ上でLocal Positionしか出なくなってしまう。World Positionだけをコンポーネントとしてコピーする方法もあるのだけど、他のオブジェクトをこのオブジェクトとX軸だけ合わせたいんだよな〜と思った時には難…

はじめてのライトベイク挑戦 - clusterの推しアバター展示場のライトを調整しました

自分の推しアバター展示場の部屋の隅が暗くて悲しいなーと思っていた。そこでライトのことを学習して、はじめてのライトベイクに挑戦をしてみた。 対応したワールドは以下のリンクから入れるので、良ければ入ってみてください。 cluster.mu before / after …

clusterの推しアバター展示場の写真から写っているワールドへ移動できるようにしました

cluster.mu 自分の推しアバター展示ワールドの写真から写っているワールドへ移動できるといいな〜と思ったのでやってみました。 こんな感じで写真の近くに行くとワールドへ移動する確認が出て移動できる。3D系のマリオみたいな感じで良い! やり方 以下の資…

clusterのワールドでコメントがあったら音が鳴るようにしたい

ワールド内で作業しているとコメントがあったことに気づきにくいなと思ったので、コメントがあったら音が鳴るようにしたい。これはt_furuさんのチャットコメントを音で通知するアイテムがちょうどやりたいことだったので、こちらをそのまま活用させてもらい…

clusterで推しアバター展示ワールドを公開しました

1回目、2回目、3回目と制作していた推しアバター展示ワールドを公開しました。 cluster.mu 自分が好きなかわいい・おもしろい・魅力的なアバターを8体展示しています。どういう部分が推しなのか、写真と紹介文を一緒に飾っているので、ぜひ見にきてみてくだ…

特定ユーザーがインタラクトした時だけ横にアイテムを生成するclusterギミックを作った

たとえばマグカップなどの限定アイテムを作ってもらった時に、ワールドに飾りつつ自分がやりたい時だけ持てるアイテムとして生成できたら嬉しいなと思い、特定ユーザーがインタラクトした時だけ横にアイテムを生成するclusterギミックを作ってみた。 https:/…

clusterで推しアバター展示ワールド作る制作日記その3

今回も進捗状況と学びを共有する。 1回目 2回目 現在の様子 8展示分の写真と紹介テキストの設置を終えた。 親子関係を使って位置設定を行うときは中心となるオブジェクトを0にしておく 展示セットとして、ディスプレイアバター・写真・テキストの3点セットで…

「カスタマーマニアになろう」を読んだ

UXリサーチ学ぼうシリーズ。今回は「カスタマーマニアになろう」というスライドを読んだ。 speakerdeck.com 顧客の深い理解の手法として、顧客インタビュー・没入・同化の手法があると述べた上で、特に顧客インタビューについて詳しく教えてくれるスライドだ…

事前にアイデアを検証する方法を学ぶ - 「NO FLOP!」を読んだ

施策のヒット率を高める方法について学んでいる。今回は「NO FLOP!」を読んだ。 Google×スタンフォード NO FLOP! 失敗できない人の失敗しない技術作者:アルベルト・サヴォイアサンマーク出版Amazon 定性調査・定量調査の両方で参考になりそうな…

clusterで推しアバター展示ワールド作る制作日記その2

現在の様子 ライトを少し調整し、自分の推しポイントをテキストで表示するようにした。 ライトの設定 Light機能でワールドに陰影をつくる - Cluster Creators Guide|バーチャル空間での創作を学ぶならを参考にしながらライトの設定を軽く行った。まだあんま…

clusterで推しアバター展示ワールド作る制作日記その1

最近clusterで他の作者さんが出品しているアバターを推すワールドを作ってみている。cluster内でイベントを立てて作業配信しながら色々教えてもらえているので、Unity作業で学んだことをメモしておく。教えてくれた方、感謝です。 現在の様子 初心者でも展示…