ドリコムで1ヶ月インターンシップをさせていただいた2018年卒 小口優也です。
現在アメリカのサンタクララ大学でコンピューターエンジニア専攻中。
主にCとC++を大学で使用、他にもPython、JavaScript、Assemblyなどを書けます。

そんな僕がインターンで「Rubyを使ってサービスを作ってもらう」と聞いた時には

Rubyって何?

くらいの知識量でした。
しかし2週間弱でウェブサービスの機能を追加することが出来るまで実力を身につけることができました。

そんな成長の過程を伝えると共に、これから入るインターン生や大学生向けのガイドになればと思い書かせていただきました。

インターンシップをするにつれて

今回インターンシップをさせて頂く上で、この機会を通して学びたいと思っていた事が大きく2つありました。

1つ目は今までに使った事のない技術について学ぶことです。
自分が将来何をしたいかを考える大事な時期の中、新しい技術を学ぶことによって新しい分野に視野を広げ、自分に向いているかどうかが分かります。
そのため、自分の知らないものを学ぶというのは非常に貴重な経験と考えています。

2つ目はエンジニアとしてのスキルを磨くこと。
特にコードを短く、他の人が読んで分かりやすいコードを書くスキルを磨きたいと思いました。
これは友達のコードを読むと分かりにくいことが多く、共同プロジェクトを始めたら大変だろうと思ったからです。
大学ではラボのコードが動けさえすればいいので、書き方などは学びません。

これらの目標をインターンシップを通してどのように達成できたかを述べていきたいと思います。

インターンシップで行った事

今回Ruby on Railsを使いウェブアプリケーションの新機能開発する事となり、開発する前に色々と学習する必要ありました。まずは開発言語 (ruby) の学習。
次にRails Tutorialを使ってのウェブサイトの制作方法を学び、最後に運用されているアプリケーションに対して機能開発という順番でインターンシップを進めていきました。

まずはRuby Syntax

ウェブ開発をするためにまずは言語の勉強から始まりました。

頼まれたタスクをPythonなどでこなしながら、空き時間は常にRubyの勉強をしました。
まずはRubyのSyntaxについて学ぶため問題集の問題を解き、指導してくださっている先輩エンジニアと答えをチェック、理解が正しいかを確認しました。

大体のSyntaxはCに似ていたので結構楽で、唯一Ruby特有のSymbolを理解するのに苦労したくらいです。 2日間で大体のSyntaxを学習できました。

続いてRailsの構造学習

機能追加するには新しいページであったり、構造であったりと、表面的なhtmlを変えるだけではすみません。そこで次に学ぶべきはサイトの構築方法です。
本番環境の物を触るのはステップアップしすぎなので、まずは先輩エンジニアに勧められたサンプルサイトを作るRails Tutorialで勉強。

コンテンツの内容が多くて短時間では覚えきれないので、簡単なリファレンスドキュメントを制作しました。
あとで結構使ったので、作っておいて良かったです。

チュートリアルを通してディレクトリ、DB、サイトのテスト、セキュリティ、MVC ( Model, View, Controller ) などについて学びました。

先輩エンジニアに実際のウェブアプリケーションの機能追加を任せられるまで、チュートリアルを約4日間続けました。

実際のウェブプロダクトを触ってみて

Railsの知識を得たのでついにウェブサイトの機能追加に取り組むことができました。
最初見た時はチュートリアルとの作り方が全然違い、何が起きているのか理解するのに苦労し、実装するのに試行錯誤しました。

新機能を開発するにしたがい、脱線しないよう定期的にgitにpushして、先輩にコードレビューをしてもらいましたが、これが結構自分のためになりました。
コードレビューで実際に使えるように、僕が書いたコードを隅々まで指摘してもらいました。先輩エンジニアに感謝です。
これにより、自分のコードの癖、悪いところ、工夫できる場所を知ることができ、エンジニアとしてのスキルを磨く目標を達成できました。

最終的に2週間弱でRubyについての知識ゼロから、本番環境の機能追加まで成長することができました。

最後に取り組んだサーバ構築・デプロイ

2週間で行った本番環境の機能追加後、残りのインターンシップ期間でサーバプロビジョニングとデプロイを行いました。
サーバプロビジョニングとはサイトを出すために必要なサーバ上の環境設備を事前に準備する事です。

自分でサーバ環境を設備した経験が無く、知らない事が多く一番大変でした。サーバの扱いに慣れるためにuser権限やコマンドを学び、手動でサーバ環境を整え、その後オートデプロイできるようにスクリプトを書く順序で進めました。

サーバ環境構築用に使ったitamaeは最初使い方が分からず苦労し、動くitamaeshell scriptを書くのに2日かかり、ここで一度Pull Requestを出し、先輩エンジニアに助言をいただきました。
1日かけてコードを改善に取り組み、動いている状態を保ちながらコードを修正し、最後に先輩エンジニアと一緒に直せていない部分の書き直しと綺麗で読みやすいコードに変えました。

サーバプロビジョニングの後はアプリケーションをCapistranoでデプロイする設定方法を学びました。

インターンシップを始めて約3〜4週間でRubyを全く知らない所からサーバ環境を整え、作ったサイトを自分でデプロイすることができる所まで上達することができました。

学生中から知っておいた方が良いと思うこと

インターンを通して分かった、大学で学ばないけれど知っておいた方が良いことがいくつかあります。
もしかしたら就職活動の時など他の学生さん達より優位に立てるかもしれません。
特にgitは知っているとGitHubなどに公開しているプロジェクトに貢献もできます。
知っていて損する事はないです。

  • Gitの仕組み
  • Gitコマンド
  • ターミナルの便利なプラグイン
  • ネットワークの仕組み
  • Ruby on Rails
  • データベース(MySQLなど)
  • サーバ構築

Gitの仕組み

大学のプロジェクトを作るぐらいだと、ローカル環境で作るだけでも十分ですよね!
でも会社のプロダクトは大きく、gitで管理をするので、仕組みを理解してないと出来ているものを壊すのではないかと怖くて触れません(もちろん壊す可能性もあり)。
masterdevelopの違い、featureブランチ、ブランチを切る理由、いつPull Requestを出すか、commitの区切り方、ステージング、ローカルとリモートの違い、くらいは知っていると良いと思います。
僕は独自のプロジェクトでgitを使った経験があったので多少は知っていましたが、gitの理解が深まるにつれ開発がしやすくなりました。絶対に知っておいた方が良いです。

Gitコマンド

gitの仕組みを知っていても、使えるコマンドを知らなければ意味がありません。
先輩エンジニアから色々なコマンドを教わり、開発が早く、ミスが少なくなりました。

コマンドで知ってたほうが良いのは、まず基本のaddcommitpushpull、加えてコミット管理のgit rebase -i master、ステージしてあるファイルを戻すgit reset HEAD~、などを使えるとだいぶ楽になります。
自分は特にgit rebase -i masterをよく使いました。

ターミナルの便利なプラグイン

自分はセットアップが大変などの理由であまり使用していませんでしたが、ターミナルのプラグイン/カスタマイズはエンジニアなら使うべきもので、便利なプラグインやカスタムが沢山あります。

自分はプロンプトの表示にgitのブランチを出すbashのプラグイン、ファイルナビゲート用のpeco、vimのSyntaxハイライト、行の最後にあるWhitespaceをハイライトするもの、スペースとタブを表示するものなどを使う事で開発するスピードが相当上がり、何よりも楽になったので、いつも開発用に色々とカスタマイズしておくと良いと思います。

ネットワークの仕組み

ネットワークの仕組みの知識はウェブサービスに必要です。
僕は大学のネットワークのクラスを受けていたのでRuby on Railsを学んでいる時、例えばページをロードする時に何が必要でダウンロードされるか、Cacheがなぜ使われるか、ユーザーがサイトにアクセスした時のサーバーと送ったHTMLの動き(router間の移動)、IPとDNS、など全体図が分かりやすかったのに比べ、知らなければ理解に困難しそうだなという場面もいくつかあったので、基礎をちょっとでも知っていると助かります。

Ruby on Rails

Ruby on Railsを知っているとウェブサイトを作るのが楽になります。
今回のチュートリアルだけでウェブサイトを作れるようになったので、何かのウェブサイトを作りたいと思ったら作れるようになりました。

特に多くのウェブ系インターンシップでRubyを使えるという必須スキル項目があるので、知っているとインターンに応募するチャンスが増えたり、そのおかげでオファーを頂けるきっかけになるので、学生時点で持っていると力になるスキルだと実感しています。

データベース(MySQLなど)

DBはウェブサイトを作っていると大体必要なので、Ruby on Railsチュートリアルでも使いますが、仕組みを知っていると役立ちます。
特にSQLを知っていると、自分のプロジェクトでDBを使えるのはもちろんの事、サーバーに送られているクエリーを理解することができ、もしDB関係でバグが出た時にデバッグしやすいです。

サーバ構築

サーバについての知識は大学では学ぶ機会が少ないけれど、知っているといろいろな事に使えます。
今まで自分では特に使う機会がなかったけれど、今回のサーバ構築のために必要となり学びました。
今回の経験から、知っていた方が良い知識だと思いました。

友達でLinuxを立てている人を結構見かけ、自分の大学では皆sshで大学のリモートサーバにアクセスしたりしているので、練習としてそのような事を試してみると良いかもしれません。

最後に

学んだ事の振り返り

インターンシップが終わり、振り返り見てみると自分が学びたかった事や他の色々な事を学べたと実感しました。

ウェブ関係のものに挑戦したいという意見を聞いていただき、初めてRuby on Railsを使い、初めてのウェブアプリケーションについて学べました。
サイトの機能を作るだけでなく、サーバプロビジョニングからデプロイの仕方までウェブアプリケーション系全てを自分だけで作れるように教えていただきました。
大変ではあったものの、ウェブアプリケーション全体についてより深く理解する事ができました。
さらにウェブアプリケーションを会社で開発する規模の大きさや作法を学び、非常に貴重な経験ができました。
自分の新しい技術に挑戦する目標も達成できました。

インターンシップ中は先輩のエンジニアがPull Requestを毎回コードレビューしてくださいました。
変えた方が良い書き方、よく使う書き方、コードを見やすくする方法、コードを短くする方法などエンジニアとして上手にコードを書く方法を指摘していただき、他にも知らない便利なコマンドなど色々と教えていただきました。
どの指摘も大学では一切教えてもらえない事で、現役エンジニアだからこそ知っている事を教えていただき、エンジニアとしてのスキルを磨けました。

他にも、エンジニアとして学生のうちに知っていた方がいい事を発見できました。
いつも大学で勉強すること以外、どのようなスキルを学ぶと良いかあまり思い浮かびません。
けれど、インターンシップで実際の現場で必要とされるスキルが明確になり、これから勉強していくべき事がわかりました。

まとめ

長くなりましたが、学生の時にインターンシップをするということは現役エンジニアのレベルを知ると共に、自分の相当なスキルアップにつながります。
今回、僕は今まで知らなかったRuby on Railsとサーバ構築方法を勉強、ウェブサイトを作りリリースするまでの流れを一通り実装する機会を得られました。

是非皆さんにもお勧めします。
インターンシップは受け身だとオファーが来ないので、自分から色々な会社にアプローチしましょう。

新卒採用チームより

小口くん、インターンお疲れ様でした!たくさんの学びを得られたようで、本当によかったです。

さて、ドリコムでは長期インターンだけでなく、2018年度新卒の方に向けてイベントも用意しております。
弊社エンジニア社員によるLTと、社員とのエンジニアトークが楽しめるものとなっています。

次回は9月7日に開催予定です。ドリコムに少しでも興味あるな、と感じたら、ぜひエントリーしてみて下さい!
詳細は、URL内のエンジニアMEETUPをクリック!
https://drecom.snar.jp/