ハッカソン型インターンの運営をした話

# ハッカソン型インターンの運営をした話
![top.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/313e0c95-4ce7-4736-d38b-8343cf5b8a29.jpeg)
この記事は、マイナビ [Advent Calendar 2021](https://qiita.com/advent-calendar/2021/mynavi) 13 日目の記事です。

マイナビで初めて、ハッカソン型インターンシップを開催しました。

```
1. 8月23日(月)～8月26日(木)
2. 9月14日(火)～9月17日(金)
```

4 日間、チームごとに分かれて Web アプリの改修や独自機能の実装を行い、総合的な完成度の高さを競うインターンシッププログラムです。
各日10 時から、お昼休憩をはさんで17 時まで行いました。

題材のWeb アプリは、フロントエンドを React で、バックエンド/ホスティングを Firebaseで構築されているものにしました。

現場で実際に働いているエンジニア社員が各チームにメンターとして入るので、チームでの開発を技術的側面からサポートしました。
参加学生にとっては、技術力はもちろんのこと、チームでコミュニケーションを取り合う大切さや協力し合うという部分でもたくさんの経験をすることができ、エンジニアとしてどのようなスキルが求められるのかを学べるインターンシップとなったと思います。


## 参加者募集

### 参加者募集の為の競プロ問題作成

開催するにあたって、まずは参加者を募集するところから始めました。
募集方法はいくつかありましたが、私自身が競技プログラミングが好きだったので、競技プログラミングのオリジナル問題を作成して、正解者を招待させていただきました。
問題の作成自体は、前に作った問題から引っ張り出してきたり、同僚のYさん(なんでもできるスーパーマン)に協力してもらいました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/afa5c169-ffcd-1048-de36-edcfa671fa46.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/3d694119-71a3-3fbc-4684-7d7be87d4f89.png)

[正解者にはインターンシップへご招待！～マイナビエンジニアからの挑戦状～](https://engineerblog.mynavi.jp/recruitment/mynavi-competitive-programming/)を、マイナビエンジニアブログに掲載して正解者をインターンシップにご招待しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/6d444cad-0e86-d8d8-b1a0-98d33a35b5dc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/dae05d19-539d-4f82-7a1c-463d2ed4cf75.png)


AtCoder の公式生放送、"あーだこーだ"に参加させていただいたときに告知をさせていただきました。
https://www.youtube.com/watch?v=M49UBqI78jc&t=3727s

他にもいくつかの媒体で告知を行いました。

最終的には、50 人程の学生さんからご回答を頂きました。
先着順だったため全員をご招待させていただくことは難しかったのですが、多くの学生に、このクイズをきっかけにインターンに参加していただくことができました！

###(解答)

『マイナビエンジニアブログ』で公開しています！
https://engineerblog.mynavi.jp/recruitment/mynavi-competitive-programming-answer/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/6aa6cc0d-5045-452e-9e3d-19a80f11403e.png)

```c++
#include<bits/stdc++.h>
using namespace std;

int n, st;
char c[17];
int d[17][17];
int dp[1 << 17][17];
int pos[1 << 17][17];
int rec(int s, int v){
  if(dp[s][v] >= 0) return dp[s][v];
  if(s == (1 << n) - 1 && v == st) return dp[s][v] = 0;
  int res = 1e9;
  for(int i = 0; i < n; ++i){
    if(!((s >> i)&1)){
      int tmp = rec(s | 1 << i, i) + d[v][i];
      if(res > tmp) {
        res = tmp;
        pos[s][v] = i;
      }
    }
  }
  return dp[s][v] = res;
}
void solve(){
  cin >> n >> st;
  st--;
  memset(dp, -1, sizeof(dp));
  for(int i = 0; i < n; ++i) cin >> c[i];
  for(int i = 0; i < n; ++i){
    for(int j = 0; j < n; ++j) cin >> d[i][j];
  }
  cout << rec(0,st) << endl;
  int s = 0, cur = st;
  vector<int> r;
  for(int i = 0; i < n; ++i){
    int next = pos[s][cur];
    r.push_back(next);
    s = (s | (1 << next));
    cur = next;
  }
  cout << c[st] << " ";
  for(int i = 0; i < n-1; ++i) cout << c[r[i]] << " ";
  cout << c[st] << endl;
}
int main(){
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  solve();
  return 0;
}
```


## インターン開催まで

### 6 月

インターンの具体的なプログラム内容の作成を始めたのは、6 月に入ってからです。

8 月の開催まで、約2か月程ありましたが、具体的な題材自体は決まっていませんでした。
上司から、React、Firebase を使用した Web アプリを題材にしようという話があり、6 月中旬くらいにはモックが決まって作成に取り掛かりました。
この時点で、プロジェクトにアサインされていたのは上司と私だけだったので、本当に大丈夫かと正直心配でした。

私自身、React、Firebase の経験がほとんどなかったので、はじめの頃は四苦八苦していました。


### 7 月

7 月に入って、中途入社されたVue 経験者の方(K さん)と同じ部署の同僚(Y さん)がこのプロジェクトにアサインされました。

K さんは、めちゃくちゃにフロントエンドが得意な方なので、解答の作成をほぼ一人で行っていただきました。（自分だったら無理だった）。
Ｙさんは、他のプロジェクトでも一緒に仕事をしたことがあって、なんでもできるスーパーマン。VM の一括作成、リポジトリの作成等を一人で行っていただきました。

また、マイナビではこの時期、新入社員が研修で各部署を回ることになっていたので、上司・私・Y さん・K さん・新卒(毎週変わる)の 5 人がこのプロジェクトに関わるようになりました。
7 月の頭には、上の写真のような Web アプリ自体はほぼ作成されていて、改善項目として学生に与える課題の作成と、その課題の解答の作成に取り掛かりました。
Y さんと K さんがコードやハンズオン資料に協力してくれたので、今までと比較にならないくらい早いスピードでプロジェクトが進んでいきました。

なお、プロジェクトの進行は、Google Spread Sheet や GitHub の Kanban で行いました。
7 月の中旬頃に、他事業部の新卒エンジニア向けに 2 日間でリハーサルを実施。
この時点で、1 日目に行うハンズオンはおおよそ形になってきました。
ハンズオンは私が担当する予定だったのですが、人前で話すことにあまり慣れていないので気が重かったです。


### 8 月

8 月に入って、インターン本番までいよいよ 1 か月を切りました。
フロントエンド経験者の方(S さん)が、中途入社から1 か月ほどなのに、インターンの運営チームに参加してくださいました。9月の2回目開催では、ハンズオンの一部を担当してくださり、非常に助けていただきました。
Y さん主導で、学生たちに配布する VM 周りを作成し始めたり、インターン用のドキュメントをまとめたポータルの作成を主に行っていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/b4463113-95c8-d225-5a1f-ec25cff1085c.png)
また、私はハンズオン担当だったので、ハンズオンの練習を行っていました。

1 日目の午後をほぼすべて使用して実施する内容でしたので、非常に緊張していました。
8 月 23 日(月)～ 8 月 26 日(木)に、第1回目のハッカソン型のインターンシップを開催。参加者は、約 20 名でした。
チームごとに進め方は異なっていましたが、グラフの作成に力を入れるチームもやセキュリティに力を入れるチームもあって、非常に面白い工夫が見られました。メンターとして参加していましたが、とても勉強させていただきました。

### 9 月

9 月 14 日(火)～ 9 月 17 日(金)に、第2回目のハッカソン型のインターンシップを開催。参加者は、第1回目と同じ約 20 名でした。
2 回目ということもあり、メンター側も学生の質問等にうまく対応できるようになり、1 回目に比べて学生の満足度は上がっていたと思います。
2 回目では、1 回目に見られなかった UI/UX の改善が多く見られるなど、非常に楽しいインターンになりました。


## 勉強会

7 月、メンター社員向けに React 勉強会を実施。

[React.js & Next.js 超入門 掌田津耶乃](https://www.amazon.co.jp/dp/B07X7DHZ9F/ref=cm_sw_r_tw_dp_M6TT51NQWV1D8XEMQ2Y1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/47e3e1df-1bb4-f858-d74e-d3286f7fcf28.png)

https://www.amazon.co.jp/dp/B07X7DHZ9F/ref=cm_sw_r_tw_dp_M6TT51NQWV1D8XEMQ2Y1

上の教材を使用して、週 3 回程度行いました。
この勉強会は、今思えばとても重要なものでした。
勉強会により、メンターとして参加する社員が学生達の質問に対応することができるようになったと思っています。


## 開催前

参加学生の皆さんには、事前作業として開発用サーバー(Ubuntu20.04,GCP の VM)に SSH していただきました。
また、React 等に触れたことがない方には、[React のチュートリアル](https://reactjs.org/tutorial/tutorial.html)を行うことを課題としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/f4ca6877-217e-77c5-93c9-0d20fefc488e.png)




## 1 日目

1日目午前は、インターンシップ概要やマイナビの事業説明がありました
説明後は、ドキュメントポータルを使用してハンズオンを行いました。

ドキュメントポータルを使用して、ハンズオンを行いました。
![マイナビクロニクルぼかし➃.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/d08b205a-cd5f-2f85-69d1-fe3c531ab986.jpeg)



上の画像のように、チームの情報が記載されており、チームごとにハンズオンを行っていただきました。

ワーク 1
![work1_mozaic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/88d09f10-6f7e-6062-7689-d415c24e0a1a.png)



ワーク 2
![work2_mozaic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/fd30b18d-7941-07c4-8491-728bb44da449.png)



## 2 日目-4 日目

2 ～ 4 日目の午前までは、グループワークとしました。
学生とメンター社員１人が、改善項目や独自の改善を行っていきました。
メンター社員は基本的にはアドバイスを行うだけですが、VSCode の LiveShare を用いて、学生とペアプロを行ったりもしました。
改善項目は、運営側が事前に 15 項目程度の課題を挙げてその修正を行っていただくように設定し、1-5 点の配点となっていました。

学生が独自の改善を行うと、これとは別に追加で点数が入るようになっていました。そのため、各チームが独自の改善項目として、チャット/メッセージ機能、SNS 連携機能、セキュリティ強化、UI/UX 改善などの様々な機能改善を行いました。


また、各日のお昼休憩後と作業時間終了前に全チームで途中報告を行い、そこで得た他のチームのいい視点を取り入れようと頑張っていたチームもありました。

## 表彰式と総評

表彰式には、システム系事業部の役員クラスの方が 2 人参加され、各チームの評価を行っていただきました。
またそれ以外にも、学生同士や運営、メンターが各チームの評価を行いました。
1 回目、2 回目ともに独自の改善を行ったチームが、非常に高い評価を得て優勝していました。
そして、優勝したチームには優勝特典を贈呈しました！

## 参加者特典
参加者特典としては、ステッカーと T シャツを配布。
インターンの最後には、みんなで T シャツを着て記念撮影等を行いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905557/75c78126-e391-f586-a655-e0b09146edec.png)


## まとめ
インターンの運営は初めての経験で、参加者を募るところからインターンの実施までの道のりは非常に大変ではありましたが、とても貴重な体験をさせていただきました。
インターンの運営チームと、プロジェクトチームの皆さんに感謝しております。
インターンに参加いただいた学生さんからも、非常に多くのことを学ばせていただきました。
また機会があれば、一緒にコーディングしましょう！
ありがとうござまいいました！
1月にも追加開催を予定しているので、もしご興味のある学生さんがいましたら、是非こちらをご覧ください。

【正解者にはインターンシップへご招待！～マイナビエンジニアからの挑戦状 vol.2～】
https://engineerblog.mynavi.jp/recruitment/mynavi-competitive-programming-2/
※回答締切は2021年12月13日（月）17：00です

※詳細のプログラム内容は非公開のため、画像に一部加工を加えております