- バックエンド / リーダー候補
- PdM
- Webエンジニア(シニア)
- Other occupations (19)
- Development
- Business
こんにちは!2018年4月から Wantedly, Inc. のインフラチームに所属する予定の大坪新平です。昨年の夏にWantedly のインフラチームインターンに参加して 環境構築フローをハックしてセットアップを爆速にした話 を成果として提出しました。今回はその経験を踏まえてエンジニアを志望する学生にWantedlyのインフラチームインターン参加をおすすめする理由を伝えたいと思います。
なぜインターンに行くべきなのか
僕がインターン自体をおすすめする理由は、参加することで「知識の幅」を広げることができるからです。独学でコードを書くだけでは知ったり気付いたりするのに時間がかかる領域の知識に、インターンでは実務経験豊富なメンターからのアドバイスで無駄なく到達できます。そもそも存在を知らない知識を探すことはできませんし、問題だと認識していない問題は解決できません。僕はインターンに参加することで、「存在を知らなかった知識」や「問題だと認識していない問題」に触れることができ、その後の開発でより早くより多くの解決策を考えることができるようになりました。
なぜインフラに触れるべきなのか
その中で特にインフラチームをおすすめする理由は、インフラに関する知識はWebや書籍で得られる情報より実際に触ることで得られる情報のほうが圧倒的に大きいと感じるからです。あるサービスを運営するに当たって、どのようなサーバー構成だと落ちにくいのか、通信が高速になるのか、スケールするのか、といった問題に答える能力を得るには「ググる力」よりも「実際に触れた事例の量」が重要だと思います。個人プロジェクトでは大規模な構成に出会うのは稀なので、インフラチームのインターンで実際に触れてみることで自分で構築/運営するスキルが効率的に得られると思います。
インターン前
僕は大学に入ってから独学でプログラミングをはじめました。JavaScript と格闘して友達とテトリスを作って喜んだり、変な音が出るだけの iPhone アプリを作って笑ったりしていました。更に欲張って Rails で自分のブログやブックマークサービスを作ろうとしたところで壁にぶち当たりました。
ググるだけではわからない
それまではわからないことがあれば、検索して出てきたコードを自分なりに書き換えればなんとかなっていました。しかし、Rails に手を出してから
- 次々に発生するバグに気付くことができない
- 定期的なタスクの実行方法がわからない
- CPUリソースが足りない
- 本番環境を構築し直すのが大変
など数々の問題に同時直面してどうすればよいのかわからなくなりました。Webで検索すれば解決策はいくつも見つかりましたが、方法が多岐にわたるものも多く自分の環境にどれが適しているかを判断するのが難しいものばかりでした。そもそも問題を具体的に認識できないのでどう検索してよいのかわからないことも多々ありました。
プロの事例を見るためにインターンを探した
テトリスなどのシンプルなアプリケーションを単体で作るのと違い、サーバーをどのように構成するべきかと言ったメタ的な問題に対しては自分のシステムに合った回答を得るのに時間がかかりました。バグの発生は「使ってみて掘り出す」以外にわからなかったし、定期タスク実行時にサイトが重くなる問題を回避する方法もわかりませんでした。Chefを頑張って使ってみたもののメンテナンスが大変になるデメリットのほうが多かったように思います。ここで独学の限界を感じ、どこかで修行をすることで効率的に知識を得られるだろうと考え、インターンを探しはじめました。
インターン先にインフラチームを選んだ理由
インフラに触れるインターンで学べるであろう「なぜそのサービスをそのインフラの構成で運営することがベストなのか」という考え方を知ることで自分が直面していた問題を解決できるのではないかと考えました。インフラチームでのインターンには参加しないと学べない希少性と価値があると思いました。そのため、Railsエンジニアになりたかった自分ですが、あえてインフラチームでのインターンを選び、自分がサービスを作るときにどのようなインフラ構成にすればよいのかを学ぶことにしました。
インターン参加
「規模の大きなRailsを管理している」「マイクロサービスをたくさん使っている」という理由で Wantedly を選びました。
経験したこと
インターンに参加してまず、開発フロー研修 @ Wantedly について説明を受けました。GitHub にすべての情報を集約して非同期コミュニケーションで開発に集中できる体制に心地よさを感じました。一日8時間、年間2000時間を過ごす場所としてここならモチベーションを保って働けると思いました。他のことを全く気にせず、コードに集中できる環境を見つけることができました。
業務時間中は口頭で話すことが少ない分ランチはチーム全体だったり、社内でランダムにグループを決められて一緒にランチを食べたりするのでご飯を食べながら仲良くなれるので緩急のつけやすさが合ってよかったです。白金台周辺のランチは高いですが美味しく、色んな所ににたくさん連れて行ってもらえたのが楽しかったです。個人的にはハングリーヘブンが良かったです。
業務内容
期間中に取り組んだことは 環境構築フローをハックしてセットアップを爆速にした話 にまとめています。これを作る中での根幹となった CI や S3 は触ったことがありませんでした。これらのサービスを適切に選択して、使う経験は独学では難しかったと思います。
参加して得た最も良かったことは「知識の幅が広がったこと」です。2週間で学べたこと自体は多いとは言えないかもしれませんが、「情報の探し方」と「選択肢の例」をインプットできました。これによって圧倒的により早くより多くの解決策を検討できるようになりました。
得た知識
自分がインターンに参加するまで知らなかったり、使ったことがなかったツールやサービスに多く触れることができ、その後の個人プロジェクトでも多く生かされています。
Docker
「Dockerというやつがイケてるらしい」というイメージはあったものの自分で使ってみてもよくわからないし、何が便利なのかも全くわかりませんでした。今ではDockerを使ってサービス開発やdeployができるようになりました。
エラートラッキング
バグへの対処方法は挙動におかしい部分が見つかってからログを漁っての原因究明でした。Wantedly では主に HoneyBadger を使って本番環境で発生したエラーを自動で収集しています。これにより能動的に探しに行かなくてもバグの存在を知ることができます。個人でサービスを作るときは一定量まで無料で使えるRollbar を代わりに使うようになりました。
CI/CD
以前は存在しか知りませんでしたが、実際のユースケースとともに触れてみると非常に便利なものであることがわかりました。Private なレポジトリでも一定の規模まで無料で使えるCIはたくさん見つかります。インターン参加以降サービスやツールを作るときもまず CI を導入して自動 deploy するところまでを作ることにしています。
保守運用の自動化
Wantedly のレポジトリでは直下の script ディレクトリに bootstrap, server, ci-build, ci-deploy などのスクリプトを作っています。新しいレポジトリに触れるときは「bootstrapを実行して環境を構築する」「serverを実行して起動する」の手順さえ踏めばどのレポジトリでもスムーズに開発を進めることができます。非常に単純なアイデアですが一人でコードを書いているときにはこのアイデアに行き着くことができませんでした。半年前も経てば環境構築方法を忘れることがよくあるので個人プロジェクトでも極力用意するようになりました。
AWS
EC2とRDSはかろうじて触れたことがあったものの S3, Lambda, DynamoDB などはググっても何が良いのかよくわからないという状態が続いていました。インターン中に取り組んだ課題で触れることができ、何をどのように使えば良いのかの感覚がつかめるようになりました。
学んだことのまとめ
これらのアイデアやサービスは「使ってみたい」と思っても自分の作っているもののどこに使えばよいかわかりませんでした。解決策が存在することを知らず「そういうものだからしょうがない」と考えていた問題もたくさんありました。インフラチームのインターンを経て様々な便利なサービスやツールがあることを知って、以降「今困っていることはこんな解決策があるかもしれない」と自分で探してくる一定の能力がついたと思います。このような点で「知らないものは探せない」という状態から脱することができたと感じています。
インターン後
インフラチームで働くことを決めた
もともとは企業の開発手法を知ることが目的でインフラチームのインターンに参加しました。しかし最終的にはインフラチームで働くことが自分に取って楽しいことだと思えたので内定をもらってからすぐにここで働くことを決めました。
僕はインフラチームの役割は「アプリケーションエンジニアが作ったものの価値を守る」ことだと考えています。Wantedly のインフラチームではエンジニアから依頼を受けてサーバーを容易するような形ではなく、エンジニアが簡単にサーバーを立てて簡単にサービスを deploy できるための環境やツールを作ることを主としています。社内のエンジニアから直接ヒアリングして、今どんなものがあればもっと開発が楽になるのかを考えてそれを形にしています。これが自分が漠然と考えていた「ハッカーになりたい」という気持ちの実現に非常に近いと感じました。「ハックすること」で社内に価値を提供し、その価値がより良いサービスとなって世界に影響を与えていきたいと感じています。
まとめ
僕はインフラチームのインターンを通じて初心者として持っていなかった実践的な知識をつけられたと感じています。また、自分の理想の働き方を探すこととそれに出会えるチャンスもインターンにはあると思います。ある程度できるようになってきて、さらに技術力が欲しい学生にとってはインターンは大きなチャンスになると思います。是非この夏に自分に合ったインターンを探して参加してみてください。それがWantedlyでありインフラチームであると嬉しく思います。
Wantedly ではサマーインターンを募集しています。ぜひ遊びに来てください。
http://site.wantedly.com/summer-intern-2017/