Testlifyは、スキルアセスメントおよび面接のプラットフォームです。そのリクルーター向けテストビルダーの中で、私はリクルーターが自動化された候補者アセスメントを設定するために使う、音声・ビデオ・チャットシミュレーションという3種類のAI駆動の質問タイプを作成するUIを構築しました。録音時間の上限、AIプロンプトの設定、コンピテンシースコアリング、そしてテキスト読み上げ(TTS)音声の選択です。
作ったもの
- 音声AI質問の作成: テストビルダー内で音声ベースのAI面接質問を設定するUIを構築しました。録音時間の上限、AIプロンプトの設定、コンピテンシースコアリングです。
- 質問ビルダーとの統合: 音声・ビデオ・チャットシミュレーションの質問タイプを、リクルーターのアセスメントビルダーのフローに統合しました。
- スタイリングとツール設定: 音声/チャット質問UIのコンポーネントスタイリングに加え、リポジトリのツール設定(ESLint、Husky、Renovate、Tailwind設定)にも貢献しました。
なぜ意味があったか
音声・ビデオ・チャットのAI質問は、リクルーターがTestlifyの自動面接アセスメントを設定する手段です。この作業により、これらの質問タイプはTestlifyのプロダクト群全体で使われている同じ共有デザインシステムの中で、設定可能かつ一貫したものになりました。
巨大なコードベースの中の小さな貢献
このリポジトリはTestlifyのリクルーター/管理者向けダッシュボードで、2021年9月から稼働しており、16,216コミット、数十人のコントリビューターがいます。私自身のコミットはそのうち86件、約1年半にわたって全体の0.5%ほどです。その件数の大半はcomponent-libraryというgitサブモジュールに属していて、これは別のケーススタディですでに取り上げた、共有のVueデザインシステムそのものです。そのサブモジュールの外での実際の作業は、絞り込まれた一連のファイルです。音声質問のモーダル、質問タイプをビルダーに組み込むインタビュー質問ビュー、そしてそれらを取り巻くスタイリングとツール設定です。
ここでの「マルチモーダルAI面接」の実際の意味
このアプリはプロダクトのリクルーター側であり、AI駆動の質問が実際に何を尋ねるかをリクルーターが設定する場所であって、候補者がライブで回答する場所ではありません。音声・ビデオ・チャットシミュレーションは、リクルーターがテストビルダーで設定する質問のタイプであり、それぞれに独自の録音時間の上限、AIプロンプト、コンピテンシースコアリングのルーブリック、そして(音声の場合は)テキスト読み上げ音声の選択があります。設定されたそれらの質問をライブで扱う、候補者向けの面接体験は、Testlifyのスタックの別の場所にある別のアプリケーションで動作します。
データモデルと規模
- 4年以上にわたる16,216コミットのうち、最多のコントリビューター一人だけで1,800件以上を占めており、小さなプロジェクトではなく、本当に大規模で長く続いているチームのコードベースです。
- 共有コンポーネントライブラリはコピー&ペーストやフォークではなくgitサブモジュールとして取り込まれており、このアプリをTestlifyの他の3つのプロダクトと同じバージョン管理されたデザインシステムの上に保っています。
Stack
Vue 3、TypeScript、状態管理にVuex、Vite、gitサブモジュールとしての共有Testlifyコンポーネントライブラリ、ESLint、Husky、依存関係の更新にRenovate、Tailwind CSS。