【Treasure】3週間、コンフォートゾーンの外側で挑戦した話
はじめに
みなさんこんにちは。VOYAGE GROUPさんのインターン「Treasure」に参加したのでブログに色々書きます。
Treasureに参加した感想
まず結論から言うと、Treasureに参加して本当に良かったです。技術的に大きな成長ができただけでなく、サービス開発をする上でのものの考え方、チーム開発の進め方など得られたものがたくさんありました。
書いてる人のバックグラウンド
Treasureの概要
- 期間 : 8/12 ~ 8/30 (三週間)
- 前半 (7日間) : 講義、後半 (8日間) : チーム開発
- 参加人数 : 30人
- 報酬 : 12万円
- 遠方からの参加の場合東京までの交通費支給
なぜTreasureに参加したのか
バックグラウンドで書きましたが普段自分は機械学習の研究をしています。そんなWeb開発未経験の輩がなんでTreasureに参加したのかと言うと"未経験だった"からです。上述の通りTreasureの前半部分は講義形式になっており、「一人で学びにくいこと」を学べることが参加を決めた一番の理由でした。他にも自分の就職先として、エンジニア or データサイエンティストどちらになりたいのか決めるために開発系のインターンに行きたかったというのもあります。
Treasure中意識し続けたこと
Treasureの初日 (だった気がする)、CTOの小賀さんがありがたいお話をしてくださいました。その中で「コンフォートゾーンの外側で挑戦し続けて欲しい」という言葉が印象に残っています。自分が快適でいられる空間のちょっと外側で挑戦し続けることが成長に繋がるという意味合いだと解釈しています。Web開発経験0な自分からするとTreasure中は常にコンフォートゾーンの外側にいたような気はしますが、小賀さんの言葉を頭に浮かべながら15日間過ごしていました。結果的に初体験の領域で苦しい思いをして最終的に動くものを作ったという経験は、自分を大きく成長させてくれたし自信にもなりました。
15日間何をしてきたか
ここでTreasureの内容を1日ごとにざっくり書いていきます。
1日目 (Go講義)
Treasure初日、全員で円を作って名前を覚えるためのちょっとしたゲームをしました。そのあと早速すずけんさんによるGoの講義が始まりました。講義の内容としてはGoでcurlコマンドの機能を実装したり、DBにクエリを投げるapiを生やして小さなコマンドラインアプリケーションを作ったりといった感じです。Treasure全体を通してとにかく手を動かしてコードを書くことを重視していると思いました。
2日目 (Go講義その2 & フロント講義)
2日目の午前中はpeiさんによるGoの講義その2。あらかじめ用意されていたベースアプリを元に要件にそったapiを実装するという内容。バックエンドのディレクトリ構成と各ディレクトリの役割は説明があったのですが、その時は何から書き始めればいいのか分からずTAの方やpeiさんに質問をしながらちょっとずつコードを書いていくといった感じでした。
午後からはyang weiさんのフロントエンド講義。javascript (以降js) の歴史の話から始まりました。jsって10日間で作られたんですね... 驚きでした。そのあとjsの基本的な内容を軽く触れつつ、async, defer, closureといった事項についても適宜演習時間が設けられ手を動かしながら学んでいくという感じでした。
3日目 (フロント講義その2)
3日目はまず前日の講義の続きで、Promiseに関して演習をやりました。これでバックエンドで生やしたapiがフロントで叩けるわけですね。途中からは講師がちゅうこさんに代わり、jsのフレームワークの話から各々好きなフレームワークを使って前日に作ったapiをフロント側で叩いて色々するという演習をやりました。
4日目 (DB講義 & 中間課題)
4日目はDB講義から始まりました。データモデリングの技法やマイグレーションに関するお話をstep by stepで実際に与えられた課題に対して自分でDB設計をするという形で学んでいきました。また、3人チームになって仮想のサービスのDB設計をやりました。そこでは何回か要件が追加されDB設計を変更するという演習もやりました。
その後、中間課題なるものが出題されました。その内容はこんな感じ
- テーマ : 自由
- ルール : 講義で習ったものを生かす、動くものを作ること、バックエンド or フロントエンドどちらかだけでも良い
- 締め切り : 翌週月曜日の10:30
これが発表されたとき自分はこんな顔してました。
正直な話、この時点で講義の内容に全然ついていけてなくて結構苦しんでいました。演習も手が止まってしまうことが多く、そんな状態で何か動くものを作れるんか...と不安しかなかったです。考えた結果、その時点ではフロントの方が書けそうな感じだったのでサーバーサイドを全部firebaseにお任せしてReactでTodoアプリを作ることにしました。Reactは触るのは初めてだったのですがこのとき隣の席だった人がReactの経験があって、最低限の知識を丁寧に教えてくれたためなんとか書き始めることができました。
5日目 (中間課題)
1週目の最終日は一日中間課題の実装に当てられました。自分は結局土日も潰してなんとか形になって動くものが作れました。(このときバックエンドに手が回らなかったのが今でも心残りです。)
6日目 (中間課題発表 & セキュリティ)
午前中は5チームくらいに別れて中間課題の発表をしました。みんな個性的なアプリを作っててすごいなーと思いながら、自分ももっと面白いもの作りたかったなぁとかもっと頑張ればバックエンドも実装できたのでは?とか悔しさが残る中間課題でした。
お昼を挟んでセキュリティの講義がありました。そこでは代表的な脆弱性 (XSSとかCSRFとかSQLインジェクションとかとか)がどういうものなのかだけでなく、それらの脆弱性が実装上のどこに潜んでいるかというのを、用意されたアプリで探しながら学んでいきました。
7日目 (認証 & チーム発表 & インフラ)
7日目の午前中は認証のお話 (Auth2.0とか)。そして後半のチームが発表されました。チームは全部で6チームでTreasure生が5人ずつ、そこにエンジニアのサポーターが2人と人事の方が1人という構成でした。 (手厚い) お昼はチームで食べました。自己紹介をしたりとか自分のあだ名が決定したりとか色々ありましたw
午後からはインフラの講義。後半のチーム開発はAWS上で行うのでAWSの使い方やCI/CDの重要性についてお話がありました。
そしてこの日の終わりに宿題が出されました。
「チームのSOULを考えてこい」
SOULは簡単にいうと自分たちの作るサービスのコアにある考え方のようなものですね。定時後、チームごとに飲みに行きそこでSOULをどうするか話し合いました。各々のものづくりの信念を話したり結構熱い飲み会だったと思います。
8日目 (アイデア出し)
8日目は、アイデア出しの講義。サービスのアイデアの出し方を実際にやりながら学びました。最終的にいくつか面白いプロダクト案が出て、すごい楽しい講義でした。
9日目 (チーム開発スタート)
いよいよこの日からチームでの開発がスタートしました。なのでここからの内容は自分のチームがどんな感じだったのかになります。チームごとで結構進め具合というのは違います。
この日は、チームでどんなサービスを作るのか決めるために前日の講義と同じ手順でアイデア出しをやりました。その過程でたくさんのアイデアが出ましたが最終的に2つに絞ってこの日は終わりました。
10日目
この日の午前中に絞った2つの案からどちらにするかをチームで話しあって決めました。午後からはVGのクルーの方にヒアリングをさせていただいてユーザーのニーズやそれに対するソリューションを明確にしていきました。その後、実装したい機能を列挙してその優先度を決めていきました。
この時点で月曜日 (11日目) から実装を始めたいという意識がチーム全体であったため、そこまでに必要なことを土曜日にやりました。 (レイアウトやDB設計、技術選定、画面遷移etc...)
11日目
この日から実装に手をつけ始めました。メンバーの一人の提案でモブプロをすることになりました。メンバー全員がバックエンドもフロントエンドも書けるように、まず全員でapiを生やしてそれを叩くフロントの実装をしました。実はこのモブプロのおかげで前半の講義で不明瞭だった、どこから手をつけていいかというのがわかるようになりました。なのでモブプロを提案してくれたOォーリーにはとても感謝しています。
12日目 ~ 14日目
この3日間はひたすら手を動かしていました。自分のチームはタスクを付箋で管理しており、フロントバック関係なく各自で仕事を取っていくという感じでした。
ちなみにチームの使用技術はこんな感じ
- バックエンド : Go
- フロントエンド : React (hooksとかreduxとかstyled-componentとか)
わからないことがあったらメンバー同士で聞き合ったり、サポーターの方に質問したりとまさに一丸となって開発をしていました。
14日目は次の日の11:00が締め切りなこともあって徹夜で開発をしていました。
15日目
最終日、11:00に開発が終了しました。午後から各チームのプレゼンが始まりました。10分間のプレゼンの後学生と審査員の質疑応答がありました。
その後、審査員の評価と学生の投票を元に最優秀賞と優秀賞 (2チーム)が発表されました。ちなみに僕らのチームは優秀賞をいただきました。全てのチームに対してフィードバックコメントがあり、よかった点ともっと改善できそうな点 (実装面だけでなくサービスの設計に関しても) 両方コメントをいただけたのはありがたかったです。
締めにみんなで一言ずつメッセージを言っていきました。涙を見せる人や悔しさを滲ませる人もいましたが、全員が共通して言っていたのは「Treasureに参加してよかった」涙や悔しい気持ちはTreasureに本気でコミットしていたから現れるものだと思います。なので僕を含めTreasureに関わった人全てが本気でTreasureにコミットしていたんだなとその時しみじみ感動していました。最後の飲み会はチームの人たちとこれまでを振り返りながら色々話したり、他のチームのメンバーやクルーの方と話ができて本当に楽しかったです。メンバーやサポーターの方から「お前はめっちゃ成長した!」とか「できるようになったな」とか言ってもらった時は嬉しかったと同時に成長できたんだなって安心しました。(あと泣きそうでした)
Treasureのよかったところ
個人的にTreasureのここがよかった!!という点を箇条書きしていきます。
- 全体を通してサポーターの数が多い
びっくりするくらいサポートしてくれる人の数が多かったです。前半の講義部分では講師の方以外にTAの方がいて、質問に答えてくれたり時には一緒に調べてくれたり、手厚くサポートしてくれました。
後半のチーム開発では各チームエンジニア2人 + 人事1人がサポーターとして参加してくれました。サポーターの方には、技術的な相談だけでなくチーム開発を進める上でのアドバイス (時間の管理やサービスに対する考え方など)をいただいたり、開発最終日には僕らの分のご飯を買ってきていただいて徹夜に付き合ってもらって...本当に感謝してもしきれないほどたくさんのサポートをしてもらいました。
- 15時におやつがデプロイされる
日替わりで15時になるといろんな部署の方々がおやつを差し入れしてくれました。ドーナツとか551のアイスキャンディーとかうまい棒900本とかとか... 後半死ぬほどうまい棒を食ってた気がします ()
- 中間課題に対する個人フィードバック
全員の中間課題に対してyang weiさんが一人30分ずつフィードバックコメントを対面形式でしてくれました。細かく丁寧にアドバイスしていただいて、今後に生かして行かなきゃなと思いました。
- Treasure生同士で質問しあえる
講義中、講師やTAの方だけでは質問を捌き切れないことがたまにありました。そんな時に結構Treasure生同士で講義中に質問したりそれに答えたりということがありました。僕もいろんな人にいろんなことを質問しまくっていたのですが、みんな嫌がらずに答えてくれて「ええやつしかおらんやん (涙) 」って感じでした。Treasureは講師、サポーター、Treasure生全員で作り上げていく、そういうインターンだなって思いました。
シェアハウス
Treasure中、僕は他の地方からきたTreasure生とクルーの方、合計8人でシェアハウスに住んでいました。正直Treasure前にシェアハウスであることを知った時は「まじか...」って思いましたがいざ始まってみるとシェアハウスでよかったなって思ってます。みんなで講義わからなかった部分を聞き合ったり、ご飯を作ったり、時にはお酒を飲みながらマトリックスを観たりw 振り返るとめちゃくちゃ楽しかったです。
最後に
僕はこのTreasureを通じて、「もの作りクッソ楽しいやんけ!!」って気づきました。それに気づけたのは紛れもなくTreasureに関わった方々全員のおかげでした。知識0の僕が3週間経って「あれ?Webアプ一人で作れんじゃね?」って思えるようになれたのは、Treasureでコンフォートゾーンの外側で挑戦し続けることができたからです。これからもWebアプリの開発は自分で続けていこうと思っています。
Treasure最高でした。興味を持った方、まずは応募してみましょう。
長くなりましたが最後まで読んでいただいてありがとうございました。