新人ハッカソン開催！〜コードメトリクスを用いた成長の可視化〜

はじめまして。  
京セラコミュニケーションシステム株式会社 ICT事業本部 先端技術統括部   
先端技術2部 開発イノベーション2課の中橋（なかはし）と申します。  
私たちの組織では、社内の開発プロセス改善を推進しています。その中でも、技術者育成という観点から、コードメトリクスを活用し、技術者のモチベーション向上を目指した取り組みを行っています。  

今回、課の新入社員を対象にした「新人ハッカソン」を通じて、前述の取り組みを実施しましたので、ご紹介いたします。  

# 記事の概要

本記事では、新人ハッカソンの実施内容と、**コードメトリクス**を用いた成長の可視化について紹介します。  

コードメトリクスとは、ソースコードの**品質や複雑さ**を**定量的**に評価するための指標であり、これを活用することで成長の**可視化**を実現できるのではないかと考えました。  

また、ハッカソンを通じて得られた気づきや、次回実施時に改善すべきポイントについても言及します。  

本記事が、新入社員の育成に携わる方々や、成長の実感を得られずに悩んでいるエンジニアの皆さんにとって、何らかのヒントになれば幸いです。

# ハッカソン実施概要

## 背景と目的

まずはじめに、新人ハッカソン開催に至った背景と目的について説明します。  

弊社の新入社員教育では、約半年間のシステムエンジニア研修の後、資格取得（基本情報技術者試験、Java Silver、LinuC Lv1など）を経て、OJTへと移行します。OJTをより効果的なものにするため、実践を通じてスキルを定着させ、さらなる成長を促す機会として、新人ハッカソンを開催しました。  

今回のハッカソンには、主に以下の3つの目的を設定しました：

1. **成長の実感**  
   - OJT前後でハッカソンを開催し、半年間の**スキル向上を実感**する。  
   - 半年前と今を比較し、**自他ともに成長を確認できる場**とする。  

2. **自分の力で作り切る**  
   - コーディングにも慣れてきた段階で、**自ら設計・実装し、最後まで作り切る経験**を積む。  

3. **プログラミングの楽しさを再確認**  
   - できるからこそ楽しい。研修や業務では味わえない、**自分のアイデアで0から形にする**達成感を味わう。

このように、**実践の場を提供し、成長を実感・測定できる環境を整える**ことで、**次の成長へと踏み出すきっかけ**になることを期待します。

## 主役は新入社員

今回のハッカソンは、**新入社員が自分の力で最後まで作り切る**ことを大切にしています。  
設計・実装・デプロイまでのすべてを**新入社員自身が試行錯誤しながら進める**のが基本ルール。  
先輩社員は、困ったときや技術的な支援が必要な場合にサポートに回り、あくまで主役は新入社員です。

※プロジェクトの作成、開発環境、GitHub ActionsのCI/CD環境などの構築方法は、ハッカソンキックオフ時に事前講義として導入していますが、実際に構築するのは新入社員です。

## 進め方 

### 参加者
- 新入社員6名（すべて個人開発）  

### 期間 

| 期間 | 内容 |
|------|------|
| **準備期間（4日間）** | **テーマ決め、開発環境の準備、設計を実施**（業務と並行） |
| **開発期間（4日間）** | **開発に専念！**（この期間は業務を離れる） |
| **成果発表会** | **完成したプロダクトを発表＆フィードバック** |

### お題

- これまでの経験の中でできることをする  
- コンソールアプリの範囲でOK！もちろん、それ以上に発展させるのも大歓迎！  

### 使用技術（各自の選択による）

- WSL + VSCode DevContainerを用いた**コンテナ開発**
- GitHub Actionsによる**CI/CD環境構築**  
- Google Cloud Runを用いた**Webアプリケーションのデプロイ**
- Azure OpenAI APIを用いた**AIアプリ開発**

# 成長の可視化：コードメトリクスの活用

ハッカソンの成果を客観的に評価するため、**コードメトリクス**を活用し、**OJT前後での成長度を数値で可視化**しました。

## コードメトリクスによる評価の意義

コードメトリクスという客観的な指標を活用することで、以下の効果を期待しました：

- 自分の成長を**数値**として**見える化**し、自信につなげる
- 同期と比較することで、自分の立ち位置を把握する
- 強みと弱みを発見し、今後の**成長方向を考えるきっかけ**にする
- **コード品質**に関する意識を高め、持続的な改善を促進する

「感覚」ではなく「数値」で成長を確認することで、より具体的な自己評価につながると考えました。また、若手がコード品質の重要性を理解することで、**組織全体の技術力向上**につながることも期待されます。

## 使用したメトリクスと結果

### 評価指標
1. **コード量**：ファイル数、メソッド数、コードの総バイト数
2. **コード品質**：
    - **循環的複雑度**：コードの複雑さ（分岐の多さ）
    - **認知的複雑度**：コードの読みにくさ（分岐やネストの深さ）
    - **保守容易性指数**：メンテンスのしやすさ（後から変更しやすいか）

### 分析結果

#### コード量の向上
OJT前と比較すると、コード量は**最大約2倍**になりました。  
また、**テストコードを書く参加者も増え**、コード品質に対する意識向上も見受けられました。
![テストコードの総バイト数の変化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4034155/ac519ac0-29a4-45b3-90df-76adb75364a3.png "テストコードの総バイト数の変化")

#### コード品質の変化
- **循環的複雑度・認知的複雑度**  
  → 全体的な変化はわずかでしたが、**個別に見ると大きく改善した**参加者もいました。
  
- **保守容易性指数**  
  → OJT前後で大きな変化はありませんでした。  

### 個別の結果

新入社員のスキルレベルをレーダーチャートで視覚化し、全体の平均値と比較しました。これにより、各個人の強みと弱みが一目でわかります。
※以下はイメージです（実際のデータとは異なります）。
![レーダーチャート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4034155/522a5898-6c24-40ce-913c-33fe3db1a32e.png)

※データの可視化には、Pythonの `streamlit`や`pandas`、`plotly`を使用しました。

# 新入社員の声と気づき

## 新入社員からのフィードバック

- Aさん（Webアプリ開発）：
    「今回開発期間が足りなかったので、**設計段階の大切さ**を学んだ。」
- Bさん（AIアプリ開発）：
    「関数名・ファイル名に意識を割くことができた。**テストコード**を書き始められた。」
- Cさん（AIアプリ開発）：
    「前回に比べて悩む時間が少なく、サクサク作業ができたように思う。また、エラーの解消にかかる時間も、エラーの頻度も少なかったため、多少はプログラムを書く**スキルが上がった**のではないかと感じた。また、自分の結果を**数値で見る**ことができて、意識したことの効果がわかってよかった。」

## 主催者としての気づき

### コードメトリクス解析から得られたこと

コードメトリクスを用いてOJT前後の変化を可視化した結果、コード量には**明確な成長**が見られました。一方で、コード品質に関する指標では大きな差は確認できませんでした。しかし、こうした指標を活用することで、新入社員の**コード品質に対する意識向上**につながったと感じています。  

今後は、コードメトリクスだけでなく、コミット数やプルリク数、ブランチ数といった開発プロセスに関する指標の変化も比較することで、成長をより多角的に評価できるのではないかと考えています。  

### エンジニアとしての成長は「プログラミング」だけではない

成果発表を聞いていて気づいたのは、**新入社員たちがプログラミングそのものではなく、設計や課題解決の部分で悩むようになっていた**ことです。  
これは、「とりあえず動くものを作る」段階から、「技術をどう扱うか」、「どう作るのが最適か」を考える段階に進んだ証拠でもあり、エンジニアとしての成長を感じました。    

### 偉そうなこと言ってますが、実は…

実は、この記事で偉そうに語っている「主催者」の私は、ハッカソン開催当時、入社2年目のひよっこエンジニアでした。  

弊社では年次に関わらず主体的な取り組みを後押ししてくれる文化があり、若手の私がこのような企画を担当することができました。  

正直、最初は「自分がリードできるのか？」と不安でしたが、結果的には新入社員とともに自分も成長できた気がします。

教える立場になることで知識が整理され、新たな視点を得られたからこそ、この企画は私自身にとっても貴重な経験となりました。先輩として導きながらも、共に学び成長できる環境に感謝しています。  

# まとめ

今回の新人ハッカソンでは、コードメトリクスという客観的な指標を活用し、新入社員の成長を可視化することを試みました。この試みを通じて、新入社員のコード品質に対する意識向上や、エンジニアとしての成長における多角的な視点を得ることができました。  

次回は、今回の経験を踏まえ、コードメトリクスに加えて、開発プロセスに関する指標も取り入れることで、より多角的に成長を評価できるようなハッカソンを目指したいと思います。

# 所属部署について

## ITエンジニアが活躍する地方拠点「長崎 Innovation Lab」

https://www.kccs.co.jp/contents/nagasaki-innovation-lab/

長崎 Innovation Labでは、IT技術を活用して、工場などものづくりの現場で活用できるシステムの開発に取り組んでいます。自由な発想でこれまでにない社会に役立つ製品・サービスを生み出し、長崎から発信していくことを目指しています。