モンストサーバーチームでは pandora という Go 製の自作 Slack Bot を利用しています。 昔、GitHub Slack App が全社 Slack で一時的に使えなくなる事故がありました。 そのときに pandora へ GitHub のコメントなどを Slack へ通知する GitHub Slack App のような機能を追加して対処しました。GitHub Slack App が使えるようになった以降も(惰性で)その機能を利用しています。

ただ、本家本元の GitHub 製 Slack Bot と比べるといくつかいまいちな振る舞いがありました:

  • 本家なら CI/CD の結果をあとで更新してくれる
  • 本家なら編集したコメントも反映してくれる
  • 本家なら Markdown を Slac …


モンストサーバーチームのメンバーの愛猫

2020年の11月ごろから約4ヶ月間SREグループのインターンとして@riita10069さんをお迎えして、『モンスターストライク(以下モンスト)』のサーバーサイドにいくつかのコミットをしてもらいました。本記事はそのうちの一つについて紹介します。

モンストサーバーでのプロファイリング

モンストサーバーでは、stackprof を使ったプロファイリングができるようにしてあります(これは SRE の神谷さんが用意してくれました)。常にプロファイリングする訳ではなく、専用のエンドポイントを叩くと、指定したAPIを指定した時間だけプロファイリングし、その結果をローカルに保存してくれます。安全面を考慮して、プロファイリングを開始するエンドポイントはローカルからのみ叩くことができます。

プロファイル結果は手元に持ってきて speedscope で閲覧していました。


『モンスターストライク(以下モンスト)』のインフラ構成はリリースして7年経った今でも定期的に変化しています。 新しいメンバーがサーバーチームに参加したときに、図を用いてこのインフラ構成の紹介したいのですが、特にどこかで管理されているわけではありませんでした。 そこで、diagrams を利用して GitHub 上でコードとして管理し、どこかに生成物の画像を上げておけば定期的に変化する構成も簡単に共有できるのではないかと思いつきました。

モンストのサーバーチームでは Bazel というビルドツールを多用しています。 そこで、diagrams のビルドにも Bazel を利用することにしました。そうすることで、diagrams のビルドをするのに特別なソフトウェアのインストールを必要としません …


今回も新刊の「mixi tech note #05」を技術書典10で出品します。

前回同様、電子版だけですが、あいも変わらず0円です!

mixi tech note #05

今回も各章をモチーフにアイコンを作ってくれました!

内容は次の通りです:

  1. Haskell から Elm コードを生成する
  2. SimCLR を TensorFlow2 で実装してみた
  3. KARASTA Android 版のデュエット機能のしくみ
  4. Go の interface と nil を理解する
  5. Unity DOTS 完全攻略ガイド
  6. 知見を届ける技術 ~そのアウトプット、届いてますか? ~

Haskellはいつも通り(僕の)趣味ネタです。2章は SimCLR という機械学習の手法について、「家族アルバム みてね」のMLエンジニアが紹介してくれています。3章は弊社の KARASTA というサービスの Android 版でリリースされたデュエット機能について、デュエットする同士がどうやって音楽の再生を同期しているかなど、その裏側を解説してくれてます。4章は Go 言語の interface と nil の挙動について、Go の仕様書(公式ドキュメント)を元に解説をする話です。5章は Unity DOTS(Data-Oriented Technology Stack)という比較的新しい技術について、メモリ空間の話から各種用語の解説まで網羅的にしてくれています。最後の6章では、DevRel という部署で日々エンジニアのアプトプットのサポートをしてくれている方が、その経験を元にアウトプット術についてまとめてくれたものです。

はい、いつにも増してキメラな本が出来上がりました 🎉

執筆環境の話(典10バージョン)

今回はそれほどありません。

mixigroup/techbookfest の更新

過去3回分ぐらいの更新を放置していたので更新しました。 他にも、前回導入した GitHub Actions の設定などもテンプレートに含めました。


モンスターストライク(以下モンスト)』では WebSocket サーバーや Slack ボットのような開発支援ツールなどを Google Kubernetes Engine (以下GKE) で動かしています。そして弊チームでは、 GKE で動かしているアプリケーションのマニフェストに Helm を利用しています。 Helm は、各環境毎に values.yaml というファイルを利用して環境ごとの差分を定義し、共通部分をテンプレート化します。

環境ごと、例えば production と staging で別々のイメージタグを指定する場合があります。そのため、イメージタグも values.yaml に記述します。しかし、アプリケーションをバージョンアップしてイメージタグを更新しようと思った場 …


モンストサーバーチームのメンバーの愛猫

2020年夏に1ヶ月ほどSREグループのインターンで @arailly をお迎えし、『モンスターストライク(以下モンスト)』で利用しているWebSocketサーバーに3つの機能を実装して頂きました。

  1. ログレベルを設定から渡せるようにする
  2. カナリアリリースの導入
  3. Subscribe 用の goroutine を減らす

本記事ではこれらについて紹介します。 また、彼自身もインターンシップについて記事を書いてくれています。ぜひ合わせて読んでみてください。

モンスト用WebSocketサーバー

その前にまず「モンスト用WebSocketサーバー」について、 本件を実質一人で実装したエンジニアが紹介している動画から抜粋して簡単に紹介します。


今回も新刊の「mixi tech note #04」を技術書典9で出品しました。

電子版だけですが、あいも変わらず0円です! もちろん、過去の頒布物も電子版のみですが出品しているので、ついでにダウンロードしてください!!

mixi tech note #04

今回も各章をモチーフにアイコンを作ってくれました!

内容は次の通りです:

  1. Haskellで簡単にCLIツールを作るために
  2. TIPSTARのアーキテクチャとCloud Spannerとの付き合い方
  3. 機械学習とGCPで作るTIPSTARワイガヤ順位
  4. Behavior TreeでゲームAIに取り組んで思う
  5. Gitのindex treeとは結局なんなのか

最近、弊社からリリースされた TIPSTAR というサービスの裏側について2本あります。 1つ目は、データベースとして Google の Cloud Spanner を使っていて、Span …


新刊として「mixi tech note #03」を応援祭に出品しました。

電子版だけですが、0円です! もちろん、過去の頒布物も電子版のみですが出品しています。

mixi tech note #03

今回も各章をモチーフにアイコンを作ってくれました!

内容は次の通りです:

  1. BigQuery ML で釣果データを分析
  2. アナログカードゲームの作り方
  3. カードゲームの対戦管理・分析アプリケーションを作った話
  4. Unity で作る競技型イベントの回答システム
  5. Haskell での Web API Client の作り方

各々好きなネタを書いたはずなんですが、まさかのカードゲームかぶりが発生しました笑。 「アナログカードゲームの作り方」はカードゲーム自体を自作する話で、「カードゲームの対戦管理・分析アプリケーションを作った話」は既存のカードゲームの対戦結果を分析するためのツールを作った話です。 …


続きました(その1はこちら)。

今回はスコアボードについてです。前半では第12回までの構成や仕組みについて紹介し、後半では第12回以降に追加した新機能(というかページ)について紹介します。

ちなみに、本記事は「ミクシィグループ Advent Calendar 2019」の1日目の記事です。

スコアボード

git challenge は各種問題に難易度が設定してあり、解いた問題の難易度に応じてチームに加点されていきます。 そして、制限時間内に最も多く点数をとったチームの勝利です。 Web からアクセスできるスコアボードには各チームの回答の状態と総得点を表示してます:

これは第12回の結果(ネタバレ防止のため問題名は隠してます)

スコアボードの実装

現在、このスコアボードのフロントエンドは Elm で書いています。Elm は The Elm Architecture という独自のアーキテクチャを表現 …


2019/10/26(土)に mixi git challenge #12 を開催しました。 ブログを書くまでが git challenge らしいので、書きます(?)。 本記事では、今回新しく取り組んだことと生じたアクシデントと対処について書きます。

新しく取り組んだこと

今回新しく取り組んだことはこちら:

  1. 採点サーバーのパフォーマンス改善・修正
  2. GitHub 組織アカウントの統一
  3. Perlスクリプトを無くす

1. 採点サーバーのパフォーマンス改善・修正

前回、第11回から新しく採点サーバーを刷新しました。 しかし、申し訳ないことに僕の実力不足でサーバーが重くなってしまったり、うまく採点が走らなくなってしまったりしてしまいました。 そのことの反省文がこちら:

さて、上の記事にある通り、それらの問題点は改修しました:

  • サーバーが重い問題については自作のキャッシュサーバーを導入
  • うまく採点が走らないのはスレッドアンセーフなシェルコマンドパッケージを利用したためだったのでスレッドセーフなものに交 …

松原信忠

I like Haskell 😉

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store