30days Album インターンシップ

「君だけの絶対良感を育てよう!」よいコードについて語り合ったエンジニアインターンシップ

30days Album インターンシップ

写真共有サービス 30days Album™ の開発チームでサーバサイドエンジニアとして活動している大和田純です。源氏名は @june29 です。

エンジニアインターン~Ruby on Railsで書き初めしよう2016~ - GMOペパボ株式会社のインターンシップ - Wantedly

上記にてお知らせした通り、2016年2月〜3月の約1ヶ月の間に、エンジニア向けのインターンシップを実施しました。今回は私がメインのメンターとして、インターン生の学生2人の支援をさせていただきました。このエントリでは、インターンシップでは具体的にどんなことをしていたのか、グレートメンター大和田(GMO)を目指した私とインターン生の実録1ヶ月間を紹介します。

「いるだけで成長できる環境」を標榜するペパボのインターンシップを任されたわけですから、私自身を含めた関係者全員の成長につながる日々にしたい思い、全力で取り組ませてもらいました。「この先、ウェブ系企業のインターンシップに参加してみたい!」「エンジニアとしてもっともっと成長したい!」と思っている学生さんたちに、ペパボの楽しい楽しいインターンシップの様子を知ってもらえたらうれしいです。それでは、いってみましょう!

インターンシップの内容

このインターンシップは「Ruby on Rails でのウェブサービス開発を体験してもらう」が主旨になっています。また、ペパボのエンジニア向けインターンシップは、インターンシップ用に特別にカリキュラムを用意するのではなく、ペパボのエンジニアたちと同じように稼働中のサービスの開発・運用に関わっていただくことを方針としています。そうすることで、エンジニアとしてペパボで働く日々というのはどういうものなのか、より具体的に感じてもらえるだろうと考えているからです。

今回のインターンシップに参加してくれた学生ひろしくんだるつくんも、応募時から「実践的な Rails の知識を身につけたい!」「プロのエンジニアの働いている姿を間近で見たい!」と要望を話してくれていました。よろしい、ならば存分に体験してもらおう!という気持ちで、実施内容を組み立てていきました。

インターンシップ初日の2人

これはインターンシップの初日に撮影した2人の様子。自己紹介のときに書いてもらった「わたしマップ」を持っています。まだ緊張がとけていません。

悩みすぎる前にどんどん相談してほしい

ところで、私はこれまでにコミュニティ活動などを通じて数十名の学生たちと接してきて、ある種の傾向を感じてきました。それは「学校での成績が優秀な学生ほど、他者に相談するのが下手」というものです。なぜ、そのような傾向が生じるのでしょうか。

自身の学生時代を思い返してみると、置かれている環境は以下のようなものでした。

  • 定期テストに出題されるのは、授業で教わった既知の問題である
  • 成績は個人単位で評価される
  • 勉強が得意な人は課題をひとりでこなせてしまう、友達に相談するのは勉強が苦手な人たち

仮に「相談力」というものがあるとしたら、成績が優秀とされる学生ほど、相談力をアップさせる機会に恵まれずに学生時代を過ごすことになるでしょう。相談や質問をすることで「自分はダメなやつだと思われてしまう」という感覚を抱いている人さえいます。一方で、私たちの現場の性質は、ほぼ真逆ともいえるものになります。

  • 日々の業務の中で対峙する問題は、自身にとって未知のものも多い
  • 業績はサービスやチームで評価される (個人が活躍しても業績が振るわなければサービスは終わる)
  • 仕事が上手な人ほど、必要に応じてしっかりと相談の場を持ってまわりの協力を得ている

インターン生に、私たちと同じように現場での業務を体験してもらうにあたっては、環境の変化にあわせた思考のスイッチングが重要になります。上述のように性質の違いを整理していた私は「未知の問題に対して、チームで挑んで成果を出そう」という旨のメッセージを伝えていきました。すべての問題を独力で完璧に解決できるのならそれに越したことはありませんが、実際にはなかなかそうはなりません。ひとりでがんばることよりも、成果を出すことを重視してほしいと伝えました。

ましてや、インターンシップの大目標のひとつは「成長する」ことです。もし仮に私が叱るとしたら、遠慮ばかりして成長の機会をみすみす見逃している姿勢を見たときでしょう。たくさんの相談や質問を受けても決してイヤな顔はしないと、初日の早い段階で約束しました。お互いの成長のために、なにが大事なことなのかを確認しあったのです。

結果、最初は「すみません、質問なんですけど…」と申し訳なさそうにしていたインターン生も、終盤には堂々と「相談です!」と話しかけてくれるようになりました。とてもよかったと思います。

取り組んでもらった課題

課題は、インターン生の希望とこちらの意向を持ち寄った上で、相談して決めました。私たちのサービスは現在、スマートフォンアプリを進化させることに注力しているため、Ruby on Rails で開発しているサーバ側では Web API の実装を行うことが多いです。Web API の実装であれば、インターン生の「実践的な Rails の知識を身につけたい!」という希望にも応えることができると判断し、こちらで用意した「直近で実装したい Web API のリスト」の中から、各自のやりたいものを選んでもらいました。

近年、スマートフォンアプリの利用拡大の流れを受けて、私のまわりでも「Rails でスマートフォンアプリ向けの Web API をつくっている」という声が多く聞こえてきます。社会的・業界的な需要が多いとなれば、今回の課題を通して得られる経験は、彼らの今後にもきっと役立つだろうと思えました。

要素技術、関連トピック、アクティビティ

先述した課題に取り組んでもらう中で、様々なトピックについて会話をしました。ときには、実装に必要な要素技術について話したり、また別のときには、開発作業をスムーズに進めるための考え方について話したり。会話の内容は多岐に渡りました。

  • REST というアーキテクチャスタイル
  • Hypermedia、Hypertext、Hyperlink
  • Rails アプリケーション上の MVC 以外の登場人物
  • 読みやすいコード、メンテナンスしやすいコード
  • ソフトウェアテストとテスト駆動開発(TDD)、継続的インテグレーション(CI)
  • GitHub Flow
  • 見積もりポーカー
  • ふりかえり (KPT、タイムライン)

ここに示す通り、インターンシップ期間をより充実したものにすべく、時間の過ごし方や気持ちの在り方について考える「ふりかえり」のアクティビティも行いました。

タイムラインでのふりかえりの様子

これは「タイムライン」という手法でのふりかえりの様子です。インターンシップ期間中の気持ちの上がり下がりを、そのときになにがあったのかと合わせて可視化していきました。

日報と分報

インターンシップの実施日には、日の終わりに日報を書いてもらっていました。同時に、下記記事の事例を参考に分報も書いてもらうことにしました。ペパボの Slack を見てみると、約20人ほどが個人の分報チャンネルを持っているようで、それぞれに活用されているようです。

Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ 〜 Problemが10分で解決するチャットを作ろう

日報も分報も、インターン生の悩みや成長の妨げになっているものがあれば、一早く察知して対処したいという思いから書いてもらうことにしました。

ペパボで過ごす「業務以外」の時間

なるべくペパボのいろんな面を見てもらいたかったので、ランチタイムや、業務終了後の時間には、いろんなスタッフと接することのできる場を用意しました。初日の業務時間終了後は、金曜日の夜にはバーになる GMO Yours に行きました。たくさんのスタッフと話す場になり、ここでもらったアドバイスがインターン生の助けになっていたりもしたようです。

インターン生の2人にインタビュー

インターンシップの最終日には、社内で2人への公開インタビューを行いました。2人がペパボでどんな時間を過ごし、また、どんなことを感じたのか、ペパボのスタッフのみんなにも知ってもらおうと思って企画しました。ここでは、そのインタビューの一部をピックアップして紹介します。

──2人とも、まずはインターンシップお疲れさまでした!

ひろしくん・だるつくん「お疲れさまでした!」

──そもそも2人は、どんなことを期待してインターンシップに参加しようと思ったか、あらためて聞かせてもらえますか?

ひろしくん「まずはおもしろそうな会社のインターンシップに行ってみたいという気持ちがありました。もうひとつは、実際に稼動している大きなサービスの中身はどうなっているのか知りたいという期待です」

だるつくん「ぼくはインターンシップを探しはじめる少し前に、学生仲間たちと Sinatra を使ったウェブアプリケーションをつくっていました。ところが、だんだんと設計が破綻してきて、手を加えるのが億劫になってきて… これは 一度しっかりとウェブアプリケーション開発を学ぶために Rails をやっておきたいな、やっておかないとまずいな〜と思い、そういったことを学べるインターンシップを探しました。それと、インターンシップに参加すると、会社の雰囲気ってすごくわかるじゃないですか。会社の雰囲気を知れる機会はとても貴重なので、自分の進路を考える上でいい経験になるんじゃないかな、という思いもありました。なので、自分が気になっている会社のインターンシップには積極的に参加したいと考えていました」

──こちらとしても、まさにそういった学生さんに参加してもらいたかったので、よい機会になったと思います。

初めてのコードレビュー

──もともとプログラミング経験はあるということでしたが、今回のような実際のお仕事の現場でのプログラミングはどうでしたか?

ひろしくん「自分は、ペアプログラミングとか、自分が書いたコードを誰かに見てもらうという経験がほとんどなくて、自分のコードを見せるのはイヤだな… という感覚もあって、最初はすごくプレッシャーを感じていました。ただ、実際にコードレビューを受けてみると、自分では決してたどりつかなかったであろうすっきりとしたコードになったりして、とても驚きましたし、コードレビューを受けて本当によかったです」

june29「序盤にひろしくんが書いてくれたコード、まさにリファクタリングの練習問題みたいなものが登場して。あれはレビューし甲斐がありましたね!」

ひろしくん

ひろしくん「(苦笑)」

june29「気持ちはわかる、実装したい処理もわかる… でも、もっとシュッとした書き方はあると思って、やるぞ!と声をかけて、2人で同じディスプレイを見て会話しながらコードを整理していきました。用いたテクニックに特別なものはなくて、ネストは浅い方がよい早めの return (今回は return じゃなくて raise だけど、やりたいことは同じ)、限界値には min/max を使うひとつの変数に対する処理は一箇所にまとめる、といった基本的な考えをひとつずつ適用していっただけです」

ひろしくん「インターンシップの面接のときに書籍『リーダブルコード』を教えてもらっていて、自分でも買って読んでいたにも関わらず、ぜんぜん実践できていなくて…」

june29「本を読んでいきなりなんでもできるようになったら苦労はないですもんね。インプットとして本を読み、アウトプットとして手を動かして実践する、という2つをバランスよく繰り返していけば、次第にできるようになっていくと思いますよ。事実、インターンシップの後半に書いてくれたコードは、だいぶシュッとしてきましたもんね!」

ひろしくん「コードの読みやすさというものを、少しずつ意識できるようになってきたと思います。最近、学校や研究室でコードを書くときも、これは読みやすいかな、もっといい書き方はないかな、と考えるようになってきました」

june29「それを聞けてうれしい!どうもありがとう!」

ひろしくんのコードのBefore/After

こちらは、ひろしくんが書いてくれたコードの Before/After です。掲載にあたって細部に変更を加えた擬似的なコードですが、雰囲気は伝わるのではないでしょうか。

背景や関連知識もあわせて学べる環境

──だるつくんはどうでしたか?

だるつくん「ここまでしっかりサポートしてもらえるようなペアプログラミングは、体験したことがありませんでした。実務経験のあるメンターが常に近くにいて、とても安心感がありました。すべてを教えてもらってしまったら意味がないので、まずは自分で考えてやってみて、ある程度まで設計が整ったらその時点でレビューしてもらって。設計レビューで OK をもらえると、その後の実装フェーズでは迷いなく作業できたので、とてもやりやすかったです」

june29「いちおう補足しておくと、設計の段階でレビューというのは、メンターの都合でそうしたかったのです。認識にズレがあるまま実装を進めてしまうと、最悪の場合は丸ごとやりなおしになっちゃうので。だから、設計や思考が整理できたタイミングで必ずレビューの場を持たせてもらって、インターンシップ期間を有効に使えるように軌道を確認しながらの進行とさせてもらいました。これはふだんの業務に関してもまったく同じことが言えますね。設計レビューはよいものだと思いますし、設計談義は単純に楽しいのでぼくは好きです」

だるつくん「設計や実装について相談すると、プラスアルファで REST とはなにかHypermedia とはなにかRails の敷いたレールに乗ろう など、設計の背景にあるアーキテクチャや思想についても話してもらえて、その都度で関連知識を得られるので、すごく効率よくいろんなことを学べたんじゃないかな〜と思っています」

june29「それはありがたい解釈で…!たぶん、ぼくがしゃべりたくてしゃべっているときもあったので、◯◯について学べてよかったと日報に書かれているのを見るとほっとしましたよ。ウェブに関することになると、ついつい熱くなっちゃって、おじさんは反省します…」

だるつくん

──ではここからは、ソフトウェア開発やプログラミング以外のことも聞いてみたいと思います。いろんなスタッフとランチに行ったり GMO Yours で乾杯したりしていましたよね。

ひろしくん「初日の夜の GMO Yours での会話が印象に残っています。ぼくは、誰かに質問したり相談したりするのが苦手だったのですが、きょくちょーさんに、もっとどんどん相談した方がいいよ〜と言ってもらえて。それで気持ちがすごく楽になったんです」

──ペパボの雰囲気はどうでしたか?

だるつくん「あだなで呼び合うとか、挨拶をしましょうって言われてみなさん本当に挨拶をしているところとか(笑)、スタッフがつらそうにしていないし、リラックスできる雰囲気でした。ちゃんと業務をしているんだけど、みなさん固すぎず。ふらっと学生がきてもなじめる空気があったと思います」

ペパボ一同「(にこにこ)」

君だけの絶対良感を育てよう

インターンシップの終わりに近付けば近付くほど、インターン生の2人のことを応援したい気持ちがどんどん溢れてきて、気付けば「贈る言葉.md」というファイルに想いを書き綴るおじさんになっていました。その中から、どうしても伝えておきたいものだけを選んで、最終日にお話させてもらいました。下記は、そのときに使った資料です。

だるつくん「学生同士だと、照れくさいからなのか、あんまりふりかえりとかもやらないし、お互いによかった!って声をかけあう機会は少ないかもしれません」

ひろしくん「インターンシップ期間中、みなさんがちょくちょくいい話と言っていて印象的でした。書かれたコードに対しても、誰かの行動に対しても、ふだんの会話に対しても、よいものにはよいと言い合って、お互いによいものを取り入れようとしていく姿勢はすごくいいな〜と思いました」

一同「いい話」

オープンソースの世界でまた会いましょう

──インターンシップを終えた今の気持ちで、これからやってみたいことなどあれば教えてください。

ひろしくん「今回 Ruby と Rails のことを学べたので、Ruby や Rails を使ってひとりでアプリケーションをつくりたい。やっぱり、動くものをつくるのが好きなので!」

だるつくん「崩壊している Sinatra のアプリケーションがあるので、それを Rails でシュッとつくりなおせたらいいかな、と思います。今ならもっとうまくできる気がします!」

──2人とも、ありがとうございました!オープンソースの世界でまた会いましょう!

お寿司屋さんの前で

まとめ

ペパボで実施したエンジニア向けインターンシップの様子をお届けしました。インターン生の2人は、1ヶ月間という短い期間の中でずいぶんと成長してくれたと感じています。こういった機会を大いに活用してくれて、とてもうれしい気持ちです。どうもありがとうございました!また、2人のおかげで、ペパボの我々もたくさんの学びや気付きを得ました。2人にもらったものを、今後の活動に活かしていくことを誓いたいと思います。

さて、ペパボでは、今後もインターンシップや他の学生向けの取り組みをバンバンやっていくつもりです!各種ソーシャルメディアで最新情報を発信していますので、興味を持ってくれた方は、ぜひチェックしてみてください。

ここまで読んでいただき、ありがとうございました。次は読者のみなさんにお会いできることを、心より楽しみにしています。それでは!