🔍

2022年の振り返り

2022/12/30に公開約4,400字

はじめに

自身の 2022 年の活動を振り返って、その活動履歴等を記録するための備忘録に近い何かです。昨年も振り返りしてますので、ご興味あれば御覧ください。

自己紹介

  • ゲーム業界に身を置くサーバーサイドエンジニア
  • Kotlin/Go でサーバーサイドアプリを書いてる
  • 趣味はサービス開発大好きマン
    • 作るものに合わせて技術を学ぶスタイル
  • SocialMedia (SNS) 大好きマン

今年の活動

Twitter のバズってるイラスト集める君

https://tw-gallery.vercel.app/

Zenn にも記事を出したので、もしかしたら知っている人もいると思うが、今年の中旬に唐突に作りたいサービスが頭をよぎったので作成したもの。Twitter で一定以上いいねを獲得したイラストを収集して、ギャラリー形式で表示してくれるサイト。もうかなりの数の画像が集まっていて、無限スクロールで実装しているが、スクロールしているだけでもそのイラストに圧倒されるので、是非見てほしい。 自分が作成した Web サービスとして初めて AI を導入したサービスになっており、Twitter で引っ張ってきたイラストが、プロのイラストかどうか? の二値判定を行っている。二値判定のモデルについては、Teachable Machine を使って作成しており、ほぼ AI に知識がなくても作れるようになっている。また、このサイトはイラスト情報は JSON で外部から引っ張ってくるようになっているが、その JSON を作成するのは全て GitHub Actions 上で行っている。そこで Twitter を検索して情報を引っ張ってきて、TensorFlow が動作してイラストの判別を行い JSON を生成する、という一連の手順が実行されている。

AI イラスト

今年も AI で世界が大きく変わった年だと言って過言はないと思う。 Midjourney をはじめとする AI イラスト生成器が一般に公開され、クオリティーの高いイラストが一般に汎化された。その後も、Stable Diffusion により、その仕組み自体がオープンソース化され、様々なモデルが作られクオリティーの高いアニメ調のイラストなども作成することが可能になりました。

https://zenn.dev/uakihir0/articles/221113-anything3

しかし、実行には相当なスペック (特に GPU 性能) が求められるため、オープンソース化したとはいえ試すのは難しいという問題がありましたが、Google Colab では、機械学習の環境をある程度無料で提供してくれているので、それで試すことが可能です。自分は、色々試してみたりと、あくまで利用する側の立場ではありましたが、かなり色々なことを試したので、一応今年の活動としました。

BDD (振る舞い駆動開発)

エンジニアは、効率化を求める職種であり面倒くさがりな性格の人が多い(要出典)。一方で、ドキュメントとかテストコードを書くのは非常に面倒で、できればあまり書きたくない、という方もきっと多いハズ。テストを書くことは将来的には、コードの品質が担保ができるので足回りが早くなり、結果的には色々な面倒を回避できる、という利点があるのは分かるのですが。本業ではしっかりテストを書いているけど、個人開発では最低限の人とかも多いと思ってます。そこで個人的におすすめしたいのが BDD です。

BDD とは、(すごくざっくりと説明すると) TDD (テスト駆動開発) を拡張した概念でアプリケーションとかの振る舞い自体をテストするもので、要するにアプリケーション自体の挙動をテストするものです。振る舞い自体を自然言語で定義していき、その自然言語の振る舞いに対応するテストコードを準備していくことによって、その振る舞いを実行することができ、その振る舞いが正しく動作することを確認していくテストになります。テストの実装自体は E2E テストと似たような形にはなるのですが、BDD テストフレームワークを謳っているものは、自然言語でテストを定義するレイヤーと、自然言語とテストコードを対応させるレイヤーを分けて持っている場合が多いです。ここで、注目すべきは、自然言語でテストを定義しているレイヤーが、そのアプリケーションのドキュメントになっているということです。よくテストコードはドキュメントだ、と言われることがありますが、それを体言するのが BDD だと思っています。個人的に有名だと思っているフレームワークとしては、CucumberGauge です。Gauge は自然言語でテストを書くレイヤーが markdown で書けるようになっているので、まさにドキュメントという感じで、個人的にかなり好みです。

なぜ、BDD テストがおすすめかというと、比較的大きな変更が入りにくいアプリケーションレベルでのテストになるからです。変更が入りにくく、なおかつアプリケーション自体の挙動を担保できます。ライブラリの依存関係をアップデートした際の回帰テストなどにも役に立つ上に、それがドキュメントにもなるとなれば、面倒くさがりでも利点が分かってくれるのかなと思います。BDD の問題点としてテストが落ちた場合に原因がわかりにくいという問題があるのですが、それは仕方ないと割り切りましょう。原因が分かったら、ピンポイントで Unit テストを書いて穴を埋めていきましょう。

自分は、関わったプロジェクトでは (自分に技術的決定権があれば) 半ば強引に BDD を推し進めてます。色々アプリケーションを保守して分かったけど、手作業で回帰テストをするのは愚の骨頂だし、Unit テストは普通に壊れてテストのメンテが実装より時間かかったりするし、BDD で作って Unit テストはパッチ的に作っていく、それがコスパが一番良いと思ってます。 異論は認めるが対案を出してくれ。

JVM 言語の Native コンパイル

今年は、Kotlin のサーバーサイドアプリケーションを GraalVM によって Native イメージに変換して実行するというチャレンジングなプロジェクトに挑戦した。JVM 言語の Native イメージ化は JVM 界隈にとっては、かなりホットな話題であり、最近だと Spring フレームワークも正式に対応し、JVM 言語の世界をぐっと広げてくれた。一方で、Go のバイナリのような高速な実装を期待すると痛い目をみたり (実行速度についてはまだ改善の余地が多く、JVM で動作している場合の方が速かったりすることが多い)、Native コンパイルの挙動に混乱させられたりなど、ある程度フレームワークに精通した人でも、ハードルが高い。自分は Spring 以前から Native コンパイルに対応していた Quakus というフレームワークを用いてサーバーを構成したが、かなり落とし穴を踏んで、前述した BDD テストをしっかり実装したことが本当に効いた。テストは大事。

2023 年の目標

個人開発

SocialHub

https://uakihir0.github.io/socialhub/

今年、あまり手を付けることができなかったのをかなり後悔している。ユーザーもいるのにコミットできなくて本当に申し訳ない。やりたいことは多いが、どれもかなりハードな実装を求められるものなので、時間が足りないというのが理由ではあるのですが、それを言い訳にしても仕方がないので、ちゃんと時間を作ることがまずの目標になりそう。待ってくださっている方本当にありがとうございます。

カクダケ!

https://www.kakudake.net/

https://zenn.dev/uakihir0/articles/210418-kakudake-beta

SocialHub 同様にこちらもあまり手がつけられなかったことを反省している。来年こそ、ライトノベル作家になるべく、文章力を鍛える作業と執筆をする時間を作って、このサービスも盛り上げていきたい。昨今、Web 小説もかなりマンネリ化が進んでいる気がしているので、一石を投じるのが自分の目標。カクダケ!のサービスはあくまで自分が小説を書くのを手助けするだけのイメージで作成を続けていくつもり。来るものは拒まないけど。

アウトプット

来年は体験したものとかを、ちゃんと言葉として記録に残したいと思っています。技術的な記事は当然ですが、自分はゲーム業界に身を置くエンジニアとしても、ゲームの感想とかもしっかり残していこうと考えています。自分の趣味として、ゲームのテイスティング (スマホゲームであれば、とりあえず一週間ぐらい触ってやめること) をするんですが、その結果を自分の頭の中だけで完結させてしまっているので、それを言葉にして纏めたりなど、体験の記録を大事にしたいと思っています。はてなブログは個人的にちょっと微妙だったので、そのために別にブログを準備してます。フログは Hugo で作って GitHub Pages 上に展開しています。

おわりに

今年も同じ締めですが、様々なエンジニアさんのアウトプットに支えられてエンジニア活動が出来たと感じています。本当にありがとうございます。来年こそもっと様々なことを発信していこうと思っています。みなさん改めてよろしくおねがいします。時間が圧倒的に足りない!!

Discussion

ログインするとコメントできます