CA Tech Challenge 学生版ヒダッカソン -API編-

こんにちは、京都で学生エンジニアをやっている@pinterTaya です。

今回 CA Tech Challenge に参加しました。

インターン参加までの流れ

元々は、"CA Tech Challenge Intel NUCおうちKubernetesクラスタ自宅サーバ入門"というのに応募して面談しました。人事の方と面談をして、自分が今までやってきたことや今やっていることを話す中で、人事の方に、「同じ日程で"CA Tech Challenge 学生版ヒダッカソン -API編-"というのがあり、技術スタック的にそっちの方がいいのじゃないかなあ....」的なことを言われて、「そっちにします」と即答したのを覚えています。そのまま少し話して面談が終了するまでにはインターン参加が決定していましたので、「サイバーエージェントの決断する速度シュゴイ」と心の中で思いました。

 

インターンに応募したのが締め切りの日とかでしたので、多分インターン応募してから参加するまで、1週間とかでしたので、インターンに参加できるかどうか不安に思っている学生側からすると、めちゃめちゃ良心的です。

 

インターン当日

1日目

午前はインターンを運営してださっている運営の紹介や各テーブルに付いてくださるエンジニアの方の紹介などで終了しました。

午後が開始すると同時に、仕様書が渡されて実際に競技が開始しました。まずは環境構築を行ったのですが、僕らのテーブルは全員環境構築でこけました。(他のテーブルはあまり見えてないですが、後から話したら僕らと同様にこけてたらしい。)

GoもデータベースもDockerで環境を作って作業できるように用意されていたのですが、Goの方の環境構築が全くうまくいかない。

原因としては、Goの方で利用するイメージに問題があった。

Goもデータベース側も動く環境を構築したのですが、結局やりにくかったのでデータベースだけDocker上でMysqlを動かして、Goはローカルでやりました。

(ここまでがだいたい1時間30分とかかな)

 

環境構築を終え、実装に入りました。(残り3時間)

realize設定したり、デプロイ環境でログが取れるように設定したり、Makefile作ったり、現状としてどのようにデプロイされるようになっているのか確認したりしました。(残り2時間)

 

そこから、ようやく仕様を詳しく読んだり、API作成に取り掛かりました。

ログイン機能を実装し、ベンチマークを回して点数が上がりやった!!!って感じでした。ログアウト機能の実装を終え、ベンチマークを押そうとした瞬間に時間になりベンチマークボタンが押せなくなり1日目が終了しました。

 

1日目が終了した段階では1位の人が1300点, 2位の人が500点, 3位の人が 300点,あとは200, 100, 0点が乱立する感じでした。1位の点数を見て、「やばい、やばい、勝てない、頑張ろう、負けない」と思い、ホテルに行ってから一人でもくもくと作業しました。

2日目

午前は社員さんによるLTがありました。

午後から競技再開でベンチマークが回せるようになったので、昨日の夜に生やしたAPIに対するベンチマークするかと思い、ベンチマークを回すと14本のうち10本に対するベンチマークテストが成功して、点数は大きく上がり1100点になりました。この時点での順位が3, 4位だったと思います。

ベンチマーク失敗したところは無視して、一旦他の手を付けていないAPIを実装するかということで、1本生やしてはベンチマークを回してという感じで3本だけ実装できました。(ここまでだいたい1時間30分ぐらいで、残り時間が2時間30分)

ここで、中々面倒な問題がありメンターの方に相談すると、「簡単だけど美しくはない実装方法と少し難しいけど美しい実装で、業務でもちょこちょこする実装方法があるけどどっちにする?」と言われて、両方とも聞き、どっちで実装するか迷ったのですが、簡単だけど美しくない方で実装してしまうと、多分これから先難しいけど美しくない実装方法で実装しなくなるだろうなと思い、ハッカソン形式のインターンで正しい判断かは怪しいですが、難しいけど美しい実装方法を選びました。結果として、やる方針などを教えてもらって、理解はしているのだけど、コードに落とすことができなかったです。(Goで理解できていない部分があったのが原因なので、その部分はEffective goで見直しました。)

 

そのまま時間は溶けていき、1400点のままで時間になり、競技終了しました。

 

結果発表としては、僕は30人中8位でした。

順位的には、なんとも言えない普通な結果でしたが、メンターの方に今までやってこなかった美しい実装方法等を教えていただいたので、感謝です(葛巻さんありがとうございました!!!)

 

8位の景品として、サイバーのハンカチ的なものをもらえたのですが、1位になりたかったのに、という思いで悔しかったです。悔しさの詰まったハンカチということで、これから使って、自分を高めたいと思いますw

 

サイバーエージェントさんありがとうございました。

 

学んだことを生かしてのこれからすること

  • Goでメソッドの活用の仕方が僕は下手なので、バイト先や先輩のGoコードを見て、真似て、自分のものにする。
  • 環境構築時に、Dockerに関して理解がまだ足りていないと感じたので、Dockerの復讐をする(特にDocker Compose)。
  • 今回のデプロイ方法を真似て、デプロイをやってみる。
  • メンターの方に言われたように、自分のGoでAPIを書く時のテンプレートを用意する。
  • Gormを使ってのですが、joinがやりにくかったのでそのあたりを、Gorm使っている人はどのように対応しているのかを調べて、自分にあったのを真似る。

f:id:taya-intel:20190921141925j:plain