traQ は、東京科学大学デジタル創作同好会traP で開発・運用している部内向けチャットツールです。
traP では日々、機能開発やバグ修正、サーバーの運用などを行っています。今回は、そんな traQ でこの一週間に起こった出来事を紹介します。
10/15: PROJECT: SUMMER FLAREの説明文が変更されてテストが落ちる

traQ に URL を含むメッセージが投稿された際、リンク先の概要を示す「OGP カード」が表示されます。
特に、VRChat のワールドの URL については、専用の API キーを用いてワールド概要を表示する機能が備わっています。


この機能が正常に動作しているか確かめるため、次のようなコードが書かれていました。
{
name: "success",
worldID: "wrld_aa762efb-17b3-4302-8f41-09c4db2489ed",
want: func(t *testing.T, res *VRChatAPIWorldResponse) {
assert.Equal(t, "PROJECT˸ SUMMER FLARE", res.Name)
assert.Equal(t, "Break the Summer․ Break the tower․ Complete the Meridian Loop․ A story about reality and humanity․", res.Description)
assert.True(t, strings.HasPrefix(res.ImageURL, "https://"))
assert.True(t, strings.HasPrefix(res.ThumbnailImageURL, "https://"))
},
wantErr: assert.NoError,
},
PROJECT˸ SUMMER FLARE のワールド説明が Break the Summer․ Break the tower․ Complete the Meridian Loop․ A story about reality and humanity․ と一致しているかを確かめるものです。
しかし、10/11 頃にワールド説明文が変更され、対応言語が追記されました。結果として、このテストは fail し、CI が落ちるようになります。


説明文が空でないことだけを確認するように修正し、解決しました。
10/19: traQ v3.33.0 リリース!
新機能を開発中の kaitoyama さんから、リリースの依頼があったので新バージョンをリリースしました。

DBマイグレーション v43_2 と v20261014 の適用を見守りつつデプロイ。
ところで、このマイグレーションの命名規則が迷走しています。複数の機能を並行して開発しているため、マイグレーションの作成順序と適用順序が一致しなくなってしまいました。具体的には、v43 → v43_2 → v20261014 → v43_1 → v44 の順番で適用される見込みです。もはや連番とは何なのか分からなくなってきたので、今後は日付で命名することにしました。
ちなみに、v44 は開発中のthread機能に使うマイグレーションで、まだ master に取り込まれる予定はありません。
……ありませんでした。
10/19: thread 機能が master に混入
traQ チームは、現在大規模な機能開発である thread 機能の開発に取り組んでいます。thread 機能は独立したブランチ feat/thread で開発が続けられており、feat/thread ブランチは定期的に master の変更を取り込んでいます。
CI が落ちる問題も起きていたので、master を thread に取り込む作業に取り組もうとしたところ、コンフリクトしています。私は「あーはいはい、いつものコンフリクトね」と思って thread を master に merge してコンフリクトを解決しました。


あれ?master から分離すべき thread の作業を master に混入させてしまいました

7年掛かった thread もついにリリースです。おめでとうございます!

そんなわけないですね。動かない不完全な thread 機能が取り込まれてしまい大惨事です。特に、dev 環境の DB は thread 機能用のマイグレーション v44を取り込んでしまったため、簡単には元に戻すことが出来ません。
とはいえ、もともと dev 環境は不正なデータが大量に混ざっていて良くないのでデータを吹き飛ばしたいという話が上がっていました。折角なのでこの機会に爆破しちゃいましょう。

幸いにも本番環境への影響はありませんでしたが、とはいえもし本番環境で意図しないマイグレーションが実行されたら重大インシデントです。緊急のセキュリティ修正などのために master に対する直コミットを私だけ許可していたのが原因なので、特権は剥がしておきました。

これでもう不正に thread がリリースされることはありませんね!

10/22: さくらのVPSメンテナンス
traP では、サーバーにさくらインターネット株式会社様からご提供いただいたさくらの VPS を利用しています。
さくらインターネットから、PwnEscape の対応のためにメンテナンスを行う旨の告知がありました。

一時間程度の障害とのことですが、traQ が止まると全部員 800 名のコミュニケーションに影響が及びます。出来れば止めたくないので、旧環境の ConoHa VPS に一時的に移行することを検討しました。しかし…

困りました。その辺にちょうど良い計算機資源落ちてないかな…
そういえば、手元に AMD 様からご提供いただいたパーツで構成されたサーバーがありますね。それを使いましょう。

旧環境の traQ を停止し、物理サーバーに新環境を構築します。幸い、移行作業は 10 分ほどで完了しました。
あとは誰かが間違えてサーバーの電源を落とさないように、注意書きをしておけば完璧です。

まとめ
サークル内でサービスを開発・運用していると、日々様々な出来事が起こります(これほどたくさん起こるのは珍しいですが…)この記事を通して、そんな開発チームに思いを馳せてもらえたら嬉しいです。
最後に、traQ の開発・運用に携わる皆さん、日々 traQ を使ってくださる traP・ex-traP の皆さん、そして traP の活動を支えてくださる企業の皆様、いつもありがとうございます!

