GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

2024/03 サービス開発部業務アピール会 #Autify #機械学習 #BERT #Flutter #GameWith #TechWith

こんにちは!GameWithサービス開発部です。

サービス開発部では月に一度、全体会にて どのように業務課題を改善したか をアピールする会を行っています。

今回は3件の内容をご紹介します!

2024年2月の発表内容はこちらです

tech.gamewith.co.jp

Autifyの利用推進を進めている話

GameWithではe2eテストを行う上で、Autifyを利用しています。 AutifyはGUIで簡単に、コードを書かなくてもテストが作成できるサービスです。 過去にもAutifyの記事を書いていますのでご興味あればご覧ください

tech.gamewith.co.jp

昨年Autifyの料金体系が変わり、実行シナリオ数のクレジット消費から実行ステップ数でのクレジット消費に変わりました。 その結果、かなりクレジットに余裕が出てきたため利用推進を行っているそうです。

利用推進する上で、課題として考えているのは下記の3点でした。

  • 1 範囲が明確では無く、機能によって内容が一貫していない
  • 2 運用フローの不統一による認識の食い違いがある
  • 3 実行率の低さ

課題解決する最初の一歩としてドキュメント化を進めています。 これは今後Autify以外のe2eテストに移行することがあってもスムーズにテスト移行の管理ができるようになるだけでは無く、テスト項目を確認するのが楽になるのがメリットとなりそうです。 この工程により、問題の1と2は解決できそうに感じます。

現在外堀を埋めているような段階ですので、焦らずに実行率の低さの課題も解決して行けたらと思います。

GameWithゲームレビューページは、5月末までにカバレッジ80%以上を目標としてシナリオ作成を進めているそうです!

BERTモデルを用いた荒らしコメント自動削除

BERTモデルを用いた多値分類による掲示板の荒らしコメント自動削除システムの構築とチューニングについての話でした。文脈の理解に優れた性能を示すBERTの事前学習モデルを用いて、荒らしコメントの自動削除システムを開発しました。

最初にNegative/Positiveの2値分類(通常コメントか荒らしコメントか)でのファインチューニングを検討しましたが、GameWithが持つ掲示板の種類によって荒らしの特性は多岐にわたるため多値分類でのファインチューニングを選択しました。

初期のモデルトレーニング(1掲示板の例)では、326万件の通常コメントと16万件の削除された荒らしコメントを使用しましたが、荒らしの認識精度は1〜2割と不十分でした。クラスの不均衡が起こっていたため、これを見直しました。目標とする通常コメントの認識精度98%を維持しつつ、最大限荒らしコメントを認識させるように荒らしコメントの数を基準としたアンダーサンプリングでクラスの不均衡を解消しました。

最終的には上記のように通常コメントを45万件に減らし、荒らしコメントとの割合を3:1に設定し再学習させました。また、同時に学習率・スケジューリング、その他Trainerの工夫により、通常コメントの認識精度98%、最大で荒らしコメントの認識が6割程度とモデルの性能が大幅に向上しました(2%の誤判定の場合でも、十分に荒らしと認識できるコメント)

また、多値分類モデルにおける出力確率を重み付けによって調整することで、システムの精度とコメント削除を実施しているCSチーム向けの適用性をさらに高めることができました。この調整により、実際の掲示板やコメントセクションでの荒らしコメントの自動識別と削除が現実的になりました。

CS業務が圧倒的に楽になりました!

Flutterで作ったアプリのSEO対策

Flutterで作られたGWパーティ募集(https://party.gamewith.jp/)のSEO対策の話についてでした。

GWパーティ募集はFlutterを採用しているのですが、FlutterはSEOに適した出力ではないということが公式でも明言されています。

検索エンジン最適化 (SEO) 一般に、Flutter は動的なアプリケーション エクスペリエンスを対象としています。 Flutter の Web サポートも例外ではありません。 Flutter Web はパフォーマンス、忠実性、一貫性を優先します。 これは、アプリケーションの出力が、検索エンジンが適切にインデックスを作成するために必要なものと一致していないことを意味します。 静的またはドキュメントのような Web コンテンツの場合は、 flutter.dev、 dart.dev、およびpub.devと同様に、 HTML を使用することをお勧めします。また、Flutter で作成された主要なアプリケーション エクスペリエンスを、 検索エンジンに最適化された HTML を使用して作成されたランディング ページ、マーケティング コンテンツ、 ヘルプ コンテンツから分離することも検討する必要があります。

この対策として

  • Googleにインデックスされたいページは静的なHTMLで作成する
  • Flutterの処理を通さずに高速で表示されるようにする

を行ったとのことでした。

GWパーティ募集はFirebase Hostingを使ってホスティングしており、Firebase Hostingにある Rewriteの機能を使いました。(https://firebase.google.com/docs/hosting/full-config?hl=ja#rewrites

静的ページを作り、検索上位に来て欲しい特定のパスに対して、Rewriteによってその静的ページを表示させるようにします。

また、これによって開発環境と本番環境でdeploy内容が変わることになり、 .firebaserc とfirebase.json を編集して dev prod というデプロイターゲットを設定して、コマンド一つで好きな環境をデプロイできるようにしたとのことです。

$ firebase deploy --only hosting:dev --project dev
$ firebase deploy --only hosting:prod --project prod
  • 実際にRewriteで表示している静的ページ

party.gamewith.jp

結果として、各取り扱いゲームのトップページが静的ページとして高速表示できるようになり、無事Googleにもインデックスされたとのことです。

ぜひGWパーティ募集を使ってみてください♪

最後に

今回もGameWithサービス開発部の裏側をお伝えしました。新たな発見に繋がっていれば幸いです。

こんなGameWithではエンジニアを絶賛募集中です!

サーバーエンジニアやフロントエンジニアの方、AIに興味がある方や、Unityでの開発に興味がある方もお気軽にカジュアル面談をお申し込みください!

github.com