はじめてのハッカソン

# はじめに
最近は様々なハッカソンが行われていますのでハッカソンについてご存知の方も多いと思います。
僕が所属するヤフーでもハッカソンを主催しています。
直近ですとHack U 2018が開催されます。

[![Hack U 2018](https://qiita-image-store.s3.amazonaws.com/0/25172/0b74d0ec-6f72-d5eb-afbc-df3c794a8d3c.png "HackU")](https://hacku.yahoo.co.jp/2018/)

本記事ではハッカソンとは〜ハッカソンで実際に発表するまでのTIPSなどを**はじめてハッカソンに参加する方**に向けてまとめてみたいと思います。
内容については先日参加した社内ハッカソンでの入賞経験を踏まえてまとめてみました:writing_hand:

# ハッカソンとは:beginner:
Wikipediaでは以下のように定義されています。

> ハッカソンとはソフトウェア開発分野のプログラマやグラフィックデザイナー、ユーザインタフェース設計者、プロジェクトマネージャらが集中的に作業をするソフトウェア関連プロジェクトのイベントである。個人ごとに作業する場合、班ごとに作業する場合、全体で一つの目標に作業する場合などがある。

形式は様々ですが例えばヤフーが主催するハッカソンである**Hack U**は大まかに以下のようなルールで行なっています。

- 小学生以上の学生なら誰でも参加OK
- ヤフー社員が技術サポート
- 1チーム2〜6名
- デモや説明ビデオなどで規定時間内でのプレゼンテーションを実施

少しイメージついたでしょうか。
ハッカソンによっては参加対象者が違ったり、ジャンルがゲームに絞られたゲームハッカソンというのもあったりします。

# ハッカソンに出場する

上述の通りハッカソンによってルールが異なりますのでまずはそれらを確認することが大切です。
その上で大切なことが**チームを作る**ことです。

チームを作る際のポイントとしては**気心の知れた仲間と組む**ことがあると思います。
ハッカソンでは短い期間とはいえ意見を言い合いながらプロダクトを作り上げていくことになります。
そのためやはり初対面の方と組むよりは友人など普段から付き合いのある方とチームとなる方がいいでしょう。

(ただしハッカソンによっては当日チーム分けをし初対面の方とチームを組むケースもあります)

# ハッカソンで何作ろう:thinking:

一番はじめにチームが盛り上がるポイントであると同時に最初のハードルでもあります。
ここではアイデアをまとめる方法やちょっとしたTIPSについて書いてみます。

## アイデアをまとめるためのアプローチ方法
例えばこんなアプローチ方法があるでしょう。

### 1. 課題を解決するプロダクト、企画をまとめる

以下のような流れで企画をまとめていきます。

1. XXという課題がある
2. XXという課題を解決する方法について議論
3. ○○という方法で解決しよう！

課題の設定がふわっとしていると議論が発散しがちになる印象がありますが、
アイデアはまとめやすい方法でしょう。

### 2. 技術ドリブンに企画をまとめる

こちらは例えば以下のような流れで企画をまとめていきます。

1. ARを使ったプロダクト、サービスを作りたい！
2. ARならではのプロダクト、ARで解決できる課題はあるかなどを議論する
3. ARを使った○○というプロダクト、サービスを作ろう

エンジニアが多いチームの場合、この流れになりやすい印象です。
ただ、こういったアプローチでプロダクトを作り、ナレッジを詰めるのもハッカソンならでは:relaxed:

### 3. 思いつき

言葉通り、"こんなことしたい"、"こんなモノを作りたい"、といった脈絡のない議論からアイデアをまとめていきます。
例えばこんな流れで行うといいかもしれません。

1. ジャンルを絞らずアイデアを言い合う
2. 良さそうなアイデアがあればそれに絞って議論をする
3. アイデアがまとまれば終わり、終わらなかったら1に戻る

注意することとしては、この方法の場合議論が発散しやすいため時間を消費しやすい点でしょうか。
議論そのものは楽しかったはずなのに結論が何も出ていない、ということはよく起こります。

ちなみに僕が先日参加した社内ハッカソンではこの方法でまとめたアイデアで開発を進めました:thumbsup_tone1:

## アイデアについて議論するときのTIPS

やってみるとわかりますが意外にこのアイデアをまとめる、というのは難解です。
行き詰まった時にぜひ試してほしいことをリストアップしておきます。

- **ホワイトボード**を使ってアイデアを可視化していく
 - シンプルだが非常に有効な方法
 - 参加者の視点がホワイトボードに集まるため、場にいる人の思考がまとまりやすい
 - すでに話した内容が可視化されるため同じ議論を繰り返すことが減る
- 参加者がアイデアを言いやすい雰囲気作りを意識する
 - 意見を積極的に肯定する
 - 他のメンバーの意見をしっかり聞く
- 議論に**緩急**をつける
  - 思考する範囲、議論する焦点を狭める ex. 任意のアイデアについて掘り下げて議論する
  - 思考する範囲、議論する焦点を広げる
- 楽しむ
 - 何を作ろうか考えているこのフェーズは単純にワクワクするもの
 - 純粋に楽しむことを忘れないようにするといいでしょう
- リラックスする
 - お菓子を食べながら議論する
 - 煮詰まったら散歩に行ってリフレッシュ
- タイムリミットを設ける
 - アイデアがでなさそうだったら日を改める
 - 今日はここまでやろう、と決めて議論をする

この方法が一番いい、最適だ、という手法はなかなかありませんので色々試してみるのがいいでしょう。
すでにこの議論をしているところからチームごとの色が出てきますので面白いポイントでもありますね:grin:

ちなみにホワイトボードがどうしても手に入らない場合は[nu board](https://obun.jp/stationery/nuboard/nuboard_standard/)がおすすめですよ。
(写真はリンク先のサイトからお借りしてます)

![2018_02_14_small.jpg](https://qiita-image-store.s3.amazonaws.com/0/25172/83d58d5c-901b-81b1-7ac2-c0629f890224.jpeg)

![a3_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/25172/e7cad63f-1070-c818-49bd-809c9c3822ec.jpeg)


# いよいよハッカソン当日だ！

実作業を行うのは当日です。
この章ではその時のことについてまとめてみます。

## 技術面

このあたりについて気をつけるといいかもしれません。

- 慣れている技術を使う
- はじめて使う技術は事前に簡易な検証をすませておく
- 担当を分ける
- システムのつなぎの部分については認識合わせをすませておく
 - ex. アプリとサーバのつなぎこみ
- リファクタリングに時間をかけすぎない

守りに入りすぎるといいプロダクトに繋がらないこともあり得ます。
逆に、攻めすぎても時間内にプロダクトが仕上がらないことになってしまいます。

技術の選定は難しいですが力を入れる部分、時間があったらエンハンスする部分、など優先度をつけて対応する事が大切:point_up:

## その他TIPS

- **プロダクトを動かす**ことを最優先する
 - ダミーデータを使った状態でも大丈夫
 - ある条件でバグがでる、という状態でも大丈夫
 - まずは動くプロダクトができるだけでみんな安心:grin:
 - 動くプロダクトができたら残り時間を鑑みてタスクの整理と優先度付けを行いしょう
- 一人で全てできなくていい、**チームでフルスタック**であればOK
 - 得意なこと、そして今できることに集中してサポートしあいながら進めるといいでしょう
 - 例えばの役割：開発、デザイン、テスト、プレゼン準備、にぎやかし(けっこう大事です:relaxed:)


# ハッカソンで発表する

## 資料の作成

あくまで一つの方法ですが僕が実際によく行う方法をまとめてみます。

1. ストーリーを作る
 1. パワポで箇条書きで話す内容を各スライドページに書いていく(画像などは使わない)
 2. 発表時間とスライド枚数が乖離しすぎてないか確認(例えば、発表時間が3分なのにスライド数が30枚だとあやうい:sweat_smile:)
 3. ストーリー(発表の流れ)が良ければこのフェーズは終わり。問題があった場合は**誰に、何を一番伝えたいのか**を整理し直す。
2. **見た目**を良くする
 1. 仕上がったストーリーにあったパワポのデザインテンプレートがあれば適用する
 2. 各スライドで話す内容をイラストor写真で代替できないか検討する
3. 仕上げ
 1. 試しにプレゼンをしてみる(ちょっとくらい制限時間過ぎてもOK、後で調整できる)
 2. チームメンバーにフィードバックを依頼する

動画を用意したい、などもあるかと思いますがやる場合は上記フェーズ2でスライドを写真、イラストに置き換えできるか検討する際に考えるといいかもしれません。
ただ、やはり一番大事なことはまずはストーリーを組み立てることですね:point_up:

## 発表する時のTIPS

発表は難しいです、緊張しますしね。
でもハッカソンでは発表も評価ポイントの一つである事が多いと思いますのでTIPSをリストアップしておきます。

- 事前に発表の練習はなんどもしておこう！
- デモは本番と同じように練習しておこう
- 焦って笑いを取ろうとしすぎない
 - みんなの発表が面白いのでついアドリブで笑いを取りたくなるかも
 - 失敗しても、すべっても大丈夫ですが、公の場であるため発言内容に気をつけましょう
 - インパクトがあることと笑いは紙一重なこともあるのでほんとに難しいポイントです:confounded:

人前で話す事が苦手な方もいると思います。
場数を踏むことで軽減されることもあるので経験を積みながら慣れていくといいと思います:thumbsup_tone1:

# まとめ

僕自身はハッカソンの出場経験が豊富というわけではありません。
ただ、ハッカソンでプロダクトを開発するプロセスは実際にプロダクトを開発するプロセスとよく似ており、今まで業務やプライベートでもいくつもサービスを作ってきた経験を活かす事ができたように思います。
そのためまとめた内容はハッカソンでの経験によるものもありますが今までの業務での経験によるものも大きいです。

さて、今回は**はじめてハッカソンに参加する方**に向けてまとめてみました。
経験を積むとより良い方法を見つけることもあると思いますのでぜひ試行錯誤しながらトライしていくといいかと思います！

それでは以上です。
ハッカソンに参加しようか迷っている方、参加する予定だがちょっと不安な方の参考になれば幸いです。

[![Hack U 2018](https://qiita-image-store.s3.amazonaws.com/0/25172/0b74d0ec-6f72-d5eb-afbc-df3c794a8d3c.png "HackU")](https://hacku.yahoo.co.jp/2018/)