VOYAGE GROUPの夏インターンTreasureに参加した
どうもnasaです。 8月の12 ~ 31日までの3週間でVOYAGE GROUPのインターンに行ってきたので、振り返り、感想を書いていこうと思います。
参加したインターンの紹介
今回行ったインターンはVOYAGE GROUPの夏インターン"Treasure"です.
Treasureとは
期間 : 三週間
前半 (7日間) : 講義、後半 (8日間) : チーム開発
参加人数 : 30人
報酬 : 12万円
遠方からの参加の場合東京までの交通費支給
自己紹介
軽く自己紹介しときます。
nasaと言います。 今は福岡に居てB3です。
普段は主にRailsやRustを使って、WEBアプリケーションやコマンドラインツールの開発をやっています。あとは細々とRustのウェブアプリケーションフレームワークにPR投げたり、ライブラリのbug fixしたり、リファクタPR投げたりしてます (ほんとに細々と)
詳しくはこちらを
参加の経緯
とりあえず。なんで参加しようと思ったのか、どこで知ったのかを書いていこうと思います。
Treasureを知ったのはあずにゃんペロペロ先輩の紹介です。 最高のインターンだった!っていうのを聞いていてB3になったら参加してみようと思っていました。
(社員さんにペロペロ先輩がどんな人だったのかを聞いたら、内定者の作ったアプリをドヤ顔で攻撃して、それを社内LTで話して、とにかく問題児だったらしいです、、、)
ぼくは福岡にいるのですが、周りに同じようなことをやってる学生が居ない(あまり外に出ないので知らない) ため、技術的な話ができる相手が少ないので、友達を作りに参加しました! Treasureに参加する人は技術的に強い人が多いと聞いていたので。(実際強かった)
他には、講義パートではsecurityやデータモデリングなどがありweb開発に必要な知識で自分が苦手なところを学べると思い、技術的にも圧倒的成長と遂げるべく参加しました。
最後に、後半にチーム開発をやると聞いて参加を決めました。ぼくはチーム開発(ハッカソン的な)がすごく苦手で、ぼく以外の人でアイディア出しが進んでいき、何も話すこと無く作るものが決まってる。とか、チームメンバーの議論のスピードについていけず、気づいたら他のこと話してる!みたいな状況になってしまいます、、、
なので苦手克服のためにもTreasureに参加しよう!と思いました。
選考について
Treasureは特に技術課題とかはなく、普通にESを送って、面接して終わりです。
ただ、インターンの面接なのに3人と面接しました。 1対3ではなく 1対1を3回しました。 長っ!って思いますよね〜? (まあ、実際長かった、、1人 20~30分くらい?たぶん)
まあ、面接と言っても楽なもんで、雑談してたら気づいたら30分立ってる!みたいな感じで進んでいきました。
前半の講義について
カリキュラムとしては以下のような感じです。
- Go 1.5日
- フロント 1.5日
- DB 1日
- 中間課題 1日 、実際3日(金曜に課題が出て月曜発表。なるほど。土日は?)
- セキュリティ 1日
- 認証周りの話 0.5日
- インフラ 0.5日
これ、とにかく一個一個のスピードが早かったです。
Golang
1.5日で「GoでAPI余裕っす!」になるべく頑張りました。 多分なったはず! API余裕っす!
講義と言っても、ずっと説明ではなく「じゃあ、今説明した内容でこれやってみようか! 30分で」という感じで課題がちょいちょい挟まってました。
この制限時間が結構おかしくて、GoでのCLIツールの作り方、httpリクエストの送り方を説明されたあとに「じゃあ、30分でcurl書こうか!」と言われ、「30分だって! カタカタカタ...」と急いで作りました。 マジで時間設定おかしい。
Golangの後半は記事投稿APIを作っていきました。(これも制限時間おかしかった)
ここではペアプロを始めてやりました。 隣の方がツヨツヨの方で、ぼくの実装のおかしいところをすぐに指摘してくれました。
エラーでハマる時間が極端に少なかったし、分からないところはすぐ聞けるのでめちゃめちゃ勉強になった。
JS
ここでは最近流行りのReactやVueをメインでやるのでは無く、fetchやPromise,classのthis、クロージャなど、基礎的なところをメインにやりました。
この時よく言われていたセリフが「迷ったら、苦労する方へ」でした。 (迷わなかったら楽していいよ!)
前日にGoで作ったapiをfetchで叩きまくりました。 この時タイムアウトを設定したり、複数リクエストを投げ両方の結果を待つ。など、fetch apiとsetTimeoutなどをうまく組み合わせて、実装していきました。 最後に聞いた話ですが、今回のJS講義でやったfetchの応用はaxiosを使えば一瞬でできるらしいです、、、、(oh)
けど、色々楽に出来るライブラリを使い続けるというのは危険だと思っていて、中で何をやっているか分からない + 勉強にならないと思います。 普段はRailsを書いているのですが、configをちょっといじるだけでいい感じになってしまうのでGoでゴリゴリとAPIを書いていくのは楽しかったし、仕組みを理解した上で書いているので、すべてを把握した上で書くことが出来ました。
気づいたらフロント関係ない話になってますが、この講義ではシンプルなものを組み合わせて(応用して)使えるのがプログラマーとしてツヨツヨになる秘訣なのでは?と思いました。
DB
データモデリング講義はマジで勉強になった!
普段はなんとなーくでテーブル設計をしてますが、今回は推奨されている手順に従ってテーブル設計をしました。
1.論理モデルの作成 1.1.ユースケースを考える 1.2.エンティティ抽出 1.3.リレーションシップを張る 1.4.主要属性の定義 1.5.主キーの選定 1.6.正規化 2.論理モデルから物理モデルへの変換
ここでは実際のアプリケーションに近いユースケースが与えられて、じゃあ、テーブル設計して。と言われ設計しました。
中間課題
中間課題はテーマがあり「とにかく面白いものを作れ」でした。
とにかく3日しかなかったのと、土日は多少休みたかったのでアイディア出しは雑に終わらせてぱぱっと実装することにしました。
作ったのはCodeHub(仮)というwebサービスで、go playgroundはGolangしか動かせないという欠陥を修正するモノになります。
具体的にはGo以外が動くplaygroundを作ったよ。という話です。 それだけじゃ面白くないので、自分の書いたコードを保存できたり、人の書いたコードが見れたり、それに対してコメントできたり。というアプリケーションです。
テーマの「とにかく面白いものを作れ」を達成できてるか?と聞かれれば、していないと答えるしか無いですね、、、、
けど、3日でよく作れたな〜と自分では満足しています。 タイムアタックみたいな感じで、実装がめちゃめちゃ楽しかったです。
残りの講義は略、、、、 書くの疲れた
後半のチーム開発について
後半はインターン生5人。VOYAGE GROUPの社員さん3人の8人で進めていきました。
サポーターの3人はずっといるわけではなく、ちょくちょくKPTしたり、アドバイスしてくれたりといった立ち位置です。
チーム名とソウル決め
チーム開発開始初日にチームメイトソウルを決めました。
ソウルって何やねん?という話ですが、チームの中での一つの価値観、共通の指標です。例えばあるアプリケーションのアイディアが出た時にそれはチームのソウルにあってるのか?と問いかけることが出来ます。
他にも、どっちかの機能を優先させないといけない状況になったときに、どっちがソウルにあってるか?を問いかけることで決まったりします。
チームで話していくうちに「誰かを幸せにしてぇ!」という話になり、幸せにも色々あるよね、新発見による幸せ、幸せに気づいてないだけだったり。と話が広がっていきました。
そこで、それらをひっくるめて「HAPPs」と呼ぶことにしました。そしてチーム名をHAPPs、ソウルを「happening HAPPS」にしました。
ソウルは、たくさんの幸せを届けるぞい!という意味です。
最初は、ソウルって何やねん。と思っていましたが、2つのアプリケーションどっちで行くか?となったときにより「HAPPs」な方を選べたりしたのであってよかったな。と思います。
HAPPsって言葉を最初に誰が言い出したか忘れたけど、ありがとう!誰か!
アイディア出し
これは難しかったですね。
アイディアに新規性がなかったり、逆に新しすぎたりしました。
講義中にアイディアを出すフレームワークを紹介してもらったのですが、忘れてしまいました、、、、 (講義資料も見つからなかった) 悔しい。
その手順に沿ってどんどん出していきました。
チームメンバーがどんどんアイディアを出していく中、ぼくは「いやー。これもうあるしな〜」と考えてしまい、あまり出せなかったです。
この時に、今は「どんどん出すフェーズ」なのか「出たものを吟味するフェーズ」なのかを意識しておけばよかったと思います。
面白そうなアイディアが出たときはチーム内で盛り上がって話していたのですが、ぼくは前提知識がないからピンとこなかったりでシーンとしていました、、、(結構サポーターの方に心配されていた気がします。ヒシヒシと感じておりました。)
チームHAPPsでは「カジクエストオンライン2」というサービスを作ることにしました。
これは家族内の家事の偏りを減らすことを目的としていて、ゲーミフィケーションを取り入れることによって、楽しく家族内の家事をこなすアプリケーションです。(詳細は割愛!)
実装
このフェーズに入ってから、ぼくの口数がめちゃめちゃ増えたらしいです(自覚ない)
技術以外興味ない!という考えではないのですが、外からはそう見えていたかも知れませんね。
初日はDB設計をみんなでして、5人でモブプロをしました。
チームで一番強い人が、教えつつAPIのエンドポイント1つとそれに関するマイグレーション、フロント1画面を実装するという流れでした。
早いうちにタスクを振り分けて個々で作業する、それかペアプロするというのが時間的には良さそうでしたが、チーム内でスキルに差があったのでみんなが1人でバックもフロントもマイグレも出来るようにするという長期的に見た作戦でした。
これはチーム内で大好評で、「自信なかったけど、出来るようになったわー!」と言ってる人が多かったです。
そして2日目からはタスクを振り分けてどんどん開発していきました。
あとはゴリゴリ実装していくだけなので書くことないですね。
チーム開発感想
最終的には優秀賞をもらえたので、わりと満足でしたが、今となって振り返れば、もっとやれた感があります。
まず、最初にやったモブプロですが、自分で言うのもアレなんですが、バックエンドとマイグレーション周りならぼくも教えながら出来たと思います。 なので、2手に分かれてやっていれば進みは良かったのかな。と思います。
あとは、詰まった時に速攻でサポータの方に聞けばよかったです。マジで1分調べて分からんかったら聞く感じでいいと思います。それくらい時間なかったので。
あとは、1日でどこまで進めるかの確認はしていたんですが、全日程を見ての進捗ぎめ、確認が出来ていなかったのかな〜と思います。なのでいろんな機能を削る羽目になった。
とまあ、反省点は割とあるんですが、チーム開発はめちゃめちゃ楽しかったですね。これからはハッカソンとか出てみようと思いました。
感想
とにかく3週間最高でした! オススメなので機会があればTreasureに参加してみてください。
ツヨツヨな人と三週間一緒に居られるので技術的な学びも多いですし、何より圧倒的刺激をもらえた気がします。
チームメンバーとルームメイトはとにかく技術的にも、人間的?にも凄い人たち揃いで、肩身の狭い思いをしながら3週間過ごしたんですが、「こうなりたいなー」と思う機会がめちゃめちゃ多かったです。 マジでこれから頑張ります。
VOYAGE GROUPについて
// あとから追記する
まとめ
Treasure参加しろ!
(長々と書いて疲れたので今日はこれくらいで、書き足りたい所あるので、あとから追記します。たぶん)
他の参加者のも読んで!
ぼくが観測したやつをやっときます。
ルームメイトへ
Wantedlyのインターンでも一緒の部屋になる人がいるので一言。
寝るときはエアコンの温度上げるか、快眠にしような! ボクが風邪引くぞ!
(Wantedlyでもよろしくお願いします!)