Linus Benedict Torvalds:「私の戦闘力は18000です」
最初に: Linusを計算してみた
言わずもがな伝説のエンジニア、linuxカーネルの生みの親です。
戦闘力はどれくらいでしょう。
その前に現時点での各平均を少し解説
- 平均総合スコア: 2734.6点
- 平均コード量(bytes): 127万bytes
- 平均リポジトリスコア: 60.2点
40人くらいの平均で偏っていると思いますが、まぁこんなもんでしょう
さてlinusはというと
- 総合スコア: 17338点
- 総コード量: 約12憶bytes
… 別格ですね。
気になるlinuxリポジトリは堂々の100点でした。さすがですね。
ここからもアルゴリズムの精度の良さがうかがえてうれしいですね。
はじめに
こんにちは、株式会社StoDでCTOをやっていますandyです。
GitHubのアカウントを連携すると、AIがあなたのコードを分析して「戦闘力53万です」みたいに数値化してくれる「Gitty」というサービスを作りました。
要するに、ドラゴンボールのスカウター的なやつです。エンジニアなら一度は「俺の戦闘力どのくらいなんだろう」って思ったことあるでしょ?そういう中二病心をくすぐるサービスを本気で作ってみました。
Gittyって何ができるの?
GitHubアカウントを連携すると以下のことができます
戦闘力測定
これがメイン機能。AIがあなたのリポジトリを見て、設計力とか可読性とか複数の基準で評価して、最終的に戦闘力として数値化してくれます。
ランキング
ランキングです。見てるだけで楽しい
比較機能
ユーザー同士のかなり深い比較、分析です。かなり1ページが長いのでズームアウトしてAIによる分析の枠を表示しています。
AIチャット
右下のchatボタンから使えます。
個人のコードベースやユーザー情報をindex化して、「あなたのことについて何でも聞いてください」みたいなAIチャットができます。「僕のReactの書き方、どう思う?」みたいな質問にも答えてくれます。
なぜこれを作ったのか
エンジニアの実力を知りたいとき、まず見るのってGitHubですよね。就活でもリンクの共有が求められる場合は少なくないと思います。
でも、パッと見でわかる「スター数」「フォロワー」「コントリビューションの数」って、その人の実力をちゃんと伝えてると思いますか?
「Web系ができる人なの?それともインフラ?」
「個人で0から開発したことあるの?それともチュートリアル系だけ?」
「結局何を作れる人なの?」
上辺の数字じゃわからないことだらけです。
やっぱりエンジニアの「強さ」を最も雄弁に語るのは、その人が書いたコードです。でも、他人が書いたコードを読むほど苦痛なことはないですよね?エンジニア間でもREADMEがしっかりしてないと深掘りする気が失せるのに、エンジニアじゃない人事の方々なら尚更です。
そこで、GitHubに登録するだけでユーザーの成果物を解析し、概要を生成して「戦闘力」として計算する仕組みを作りました。成果物の一つ一つを「実績」として文字に起こし、一目で伝わる内容に落とし込むのがポイントです。
アルゴリズムはしっかり考えた
戦闘力の計算ロジックは結構悩みました。
まず、AIがあなたのリポジトリ一つ一つを複数の基準で採点します。設計がいいか、読みやすいか、保守しやすいか、ベストプラクティスに従ってるか、みたいな。
そして単純に平均点を出すんじゃなくて、「リポジトリの数」と「平均点」を掛け合わせて調整してるんです。
つまり:
- リポジトリが少なくても、質が高ければちゃんと評価される
- リポジトリが多くても、質が低いと逆にペナルティ
- でも、質が高くて数も多いと、点数がかなり高くなる
さらに、GitHubでの活動記録(コミット数とか)もボーナスとして加算される。
要するに「質と量のバランス」を数学的に最適化してるわけです。
技術的には双曲線正接関数(tanh)っていう数学の関数を使って調整してます。
実際に運用してみて
リリース後のユーザー反応(ほとんど友達や同じ大学での人30~50人)を見ていると、思った以上に好評でした。
戦闘力という数値化が分かりやすいのが良いみたいですね。ゲーム感覚で楽しんでもらえているようです。
評価結果も詳細で、「あなたのコードはベストプラクティスに従ってるけど、もうちょっと保守性を意識すると良いかも」みたいな感じで、AIが具体的にフィードバックを提供します。
ランキング機能では、上位の人たちのプロフィールを見ると「なるほど、こういう人が高評価なのか」という傾向が見えて割と興味深いです。
AIチャット機能も予想以上に活用されています。自分のコードについて質問できるのが便利だと評価をもらっています。
技術的な話
- 今回の記事ではあまり技術的な話をしたくないので省きます。気になる人がいたら教えてください
今後の開発方針
現状の改善点、追加したい機能
- プライベートリポジトリへの対応(セキュリティ面で慎重に検討中)
- AI評価アルゴリズムの継続的な改善
- スターしているリポジトリからの興味のある分野の予測
- コミット文やPRからその人の開発スタイルや人格(?)、性格の予測(ちょっとここはまだちゃんと決まってないですが面白い機能にできたらいいなと思ってます)
今後の展開
- 企業向けの採用支援機能の開発
- チーム単位での技術力評価システム
- より詳細な技術スキル分析機能
- 国際展開に向けた多言語対応の強化(かなり漏れがあります。sry mb)
まとめ
こういう技術者評価のサービスを作るのは初めてでしたが、思ったより奥が深くて楽しかったです。
特に、アルゴリズムの設計が一番悩みました。「どうやったら技術力を公平に評価できるか?」って考えるのは、なかなか難しい問題だなと。(どんどんフィードバックまってます)
実際にユーザーに使ってもらって反応が良いのは嬉しいですね。
興味がある人は、一度試してみてください。無料だし、30秒で登録できて、5~10分もあれば結果が出ます。
技術者の評価って難しい問題ですが、AIを使ったアプローチは面白いなと思います。完璧じゃないけど、従来のスター数やフォロワー数よりは公平で客観的かなと。
あなたの戦闘力、いくつになるでしょうか?
Discussion