自己紹介
はじめまして。
公立はこだて未来大学、システム情報科学部2年の山﨑拓己と申します。
私は、8月から9月までの1ヶ月間で、株式会社サイバーエージェントの「CA Tech JOB」というインターンに参加しました。
インターンに参加を決めた理由や取り組んだこと、そこから得た学びについてお話しします。
参加を決めた経緯
私は、ハッカソンや大学でのチーム開発を経験する中で、プロジェクトをこなすことの難しさと達成できることの魅力を実感してきました。そこで今回のインターンでは、「プロジェクトを前に進める力をつける」ことと、「チーム開発をする上での立ち位置を見つける」ことを目標にしました。限られたスケジュールやリソースの中で、チーム内での効果的な振る舞い方や、良いプロダクトを完成させるために必要な力を、実際の業務を通じて学びたいと考えました。
株式会社サイバーエージェントには、以前別の短期インターンで訪問させていただいたことがあり、そこで見た社員同士の楽しそうな雰囲気や、事業を重視している会社の姿勢から、サイバーエージェントの就業型インターンに参加してみたいと思いました。
取り組んだこと
私は株式会社グレンジに配属され、トレーナーの石川泰式さんの元で、サーバーサイドエンジニアとして1ヶ月間開発にあたりました。インターン開始時に、私は2種類のタスクを割り振られました。
既存の機能に欠けているエンドポイントの実装
ここでは、既存の機能に対して欠けている実装を埋めるという作業を行いました。私が配属されたチームでは、Go言語を用いた、クリーンアーキテクチャ+ドメイン駆動設計(DDD)を取り入れた開発を行っていました。今まで、これらの思想を取り入れた業務レベルのプロジェクトには触れたことがなかったため、プロジェクト内の他のコードを参考にしたり、トレーナーの方に相談したりしながら開発を進めました。
この開発で最も印象に残っているのは、レスポンスを生成するために、エンティティを作成してすぐに削除する処理を実装した際に発生した、nil参照エラーへの対応です。エラーのスタックトレースが複雑で、当初は自分一人ではどこから手をつければよいか分からない状況でした。しかし、トレーナーの方と一緒にプロジェクト内の実装や参照を一つずつ丁寧に追っていくことで、最終的には数行の修正で解決できる問題だったことが分かりました。
この経験を通じて、未知のコードベースであっても、トレースを順番に追っていけば動作を理解できることを実感しました。また、今回エラーが隠蔽されることなく適切にハンドリングされていたからこそ問題の特定と解決ができたという点から、適切なエラーハンドリングの重要性を学びました。
また、業務レベルの巨大なプロジェクトに関わったことは初めての経験であるため、分からない部分が多かったことで不安を感じ、戸惑う場面もありました。このような漠然とした不安については、「どの部分が分からないのか」「進行するためには何を知る必要があるのか」という観点から、やるべきことを切り分けていくことが重要だと分かりました。このように整理することで、実は先が見通せず不安に感じているだけだったり、不要な部分を悩みすぎていたりすることが多く、考え方次第で不安を解消できることを実感しました。
新規機能の実装
次に、新規機能の実装というタスクを割り振られました。JOBの期間で終わるタスクではありながら、1つ目のタスクよりも考慮するべき点が多く、その機能が必要とされている背景や、設計の段階で書かれたドキュメントを参考にしながら開発にあたりました。
ここでは、プロジェクトの設計思想を守った状態でコードを書くために、コードレビューや質問を通じて改善点を学びました。例えば、ドメイン駆動設計においてドメインロジックとして切り分けるべき部分と、サービスに置くべき部分をあまり整理できておらず、動作はするものの見通しの悪いコードを書いてしまったことがありました。レイヤーごとに置くべきものを整理し、なるべくスコープが小さくなるように心がけることで、自分でも見通しがよいと思える実装ができました。
また、質問をさせていただく際に、ただ教えてもらうだけでなく、「自分はこのように考えてこうしたが、それではなぜ良くないのか」を自分の言葉で説明するよう心がけることも重要でした。これによって、どの部分までは自分で判断してもよくて、どの部分からは先に相談しておくべきかを、意識的に判断できるようになりました。
タスクを割り振られた際には想定しきれていなかった部分や、仕様を把握しきれていなかったために手戻りが発生してしまったこともありましたが、最終的には無事に2種類のタスクを完了し、プロダクトにマージすることができました。
学んだこと
キャッチアップの重要性
自分の知識が圧倒的に足りていない状態から成果を出すために、特にインターンの前半では、思うように作業が進められないことが多くありました。自分のタスクにおいて、次に何をするべきなのか、どの部分を参考にしたら良いのかがわからず、かといってどうすればいいですか?という曖昧な質問になってしまうことは避けなければならないと考えていたため、非常に悩みました。
この部分については、トレーナーの方に相談したり、自分で振り返りを重ねることで、何をすることが成果に繋がるのかを少しは理解できるようになったと思います。具体的には、分からない状態で悩み続けることを、意識して避けるようにしました。また、要点を絞ってから説明し、聞かれたら詳細を答えるように工夫しました。
もちろん、結果としてプロジェクトを完全に理解し、なんでも自分で書けるようになるということはありません。おそらく、これは半年関わっても、1年関わっても変わらないのだと思います。しかし、一番解決に近づける方法を選択し、それに責任を持って取り組むことで、自分だけでできる以上の成果を生み、結果として学びにもつながります。このことを身をもって実感したことで、改めてキャッチアップを大切にし、それが得意なエンジニアになりたいと思いました。
エンジニアとしての志向をすぐに決める必要はないということ
「参加を決めた理由」でも述べた通り、私は自分がどのようなエンジニアになりたいのかをインターンを通して見つけたいと考えていました。この部分について、人事の方やトレーナーの方に、就職してから途中で専門分野を変えた方や、テックリードの方、マネジメント視点でプロダクトに関わる方など、様々な属性を持った方とのランチの機会を設定していただきました。大学生のうちから目指すエンジニア像がはっきりとしていて、それに向かって今やるべきことを逆算していた方もいた一方で、入社当時には想像していなかったような機会から、やりがいを感じて仕事をされている方も多いことを知りました。
この経験から、大学生のうちから自分の方向性を決めて、それを伸ばすことは無理に意識し過ぎなくてもよいと考えるようになりました。今後の大学生活では、興味のある分野に積極的に関わりながら、様々な経験を通じて、自分の志向を焦らずに見つけていきたいと思います。
今の自分に向き合うこと
私がこのインターンの中で、最も印象に残っていることは、今の自分を受け止め、改善を続けて努力することの重要性です。現状を把握し、自分に向き合うことは難しく、自分の未熟な面を直視する必要があるため、特にインターンの前半では思うように改善できないことが多かったです。
しかし、インターン12日目のランチで、社員の方から「判断より決断をする。決断は後から変更できる」という言葉をいただきました。私は、正しい判断をするために、十分な情報を集めて全体を把握することが重要だと思っていました。しかし実際は、この考え方が決断を先送りにしていただけだという見方もできることに気づきました。ある程度まで材料を集めたら、自信が持てなくても未来を描きながら決断し、それに合わせて努力を重ねることができる。未来は自分の行動次第で変えられる。このことは、考えてみれば納得できることですが、自分の進路に悩んでいた私にとっては非常に価値のある気づきとなりました。
また、トレーナーの方からも「遠慮するよりも、失敗して学ぶ場にしたほうがよい」とアドバイスをいただきました。このアドバイスをきっかけに、試行錯誤を繰り返して早く成果を出せるようになることがチームへの貢献につながると考えるようになりました。そのため、なるべく多くのことを学び、持ち帰りたいという強い意欲を持つようになりました。
実際に、その日にやったことや今後やること、気づきや学びを、インターン期間中全ての日について日報として書きました。毎日日報を書くことで、次の日に取り組むことが明確になり、振り返りと改善のサイクルに持っていくことができました。自分なりに動き方を工夫し、地道に改善する努力を続けるということが、以前から知っていたサイクルではありながら、成長していくには最も重要なことだと、改めて気づきました。
今後取り組んでいきたいこと
私は、今後技術的な勉強を続けると同時に、ソフトスキルの育成を意識することも大切にしていきます。
技術的な部分では、様々なプロジェクトに関わり、自分の判断材料となる経験を増やしていきます。根拠を持って自分が判断し、それが合っていた、間違っていたという経験を積み重ねることで、自然にその場に応じた判断ができるようになると考えているからです。
ソフトスキルの育成についてはチーム開発に積極的に関わり、チームの課題となっている部分に自ら飛び込む姿勢を忘れないようにしたいと考えています。今回のインターンを通して、どんな環境でも、自分ができる最善の行動を考え、それを自分に負けずに行動し続けることの重要さと、それによって達成できる成果を身をもって体感しました。このことを心に刻んで、どんな活動に対しても、意欲を持って精一杯向き合っていきます。
まとめ
今回のインターンでは、サーバーサイド開発に必要な技術力に加えて、インターンに参加する前には想定していなかった、オーナーシップを持って動く力や働く姿勢といった、ソフトスキルの成長を実感することができました。業務におけるチーム開発では、個人での開発と比べて、自分の成果により大きな責任を持ち、チームの一員として貢献することが求められます。そのために自分がどう変わっていくべきかを考え決断する、貴重な機会になりました。
トレーナーの方からも、「アウトプットは明らかに増えた」「質問の頻度と質が上がった」というフィードバックをいただくことができ、自分でもこの点について成長を感じられたことが、非常に嬉しかったです。もともと質問に行くことにハードルを感じる性格でしたが、トレーナーや周囲の方々のサポートのおかげで、他の人に意見を聞いたり話し合ったりすることが、より良いアウトプットを生むことを実感しました。
また、私が配属されたチームでは、昼休み中にラウンジに行って昼食をとることが多く、東京の地理の話や週末にやることなど、様々なお話ができました。学生という身でありながら、チームの一員のように迎え入れていただいて、心から感謝しています。
最後になりますが、トレーナーの石川さんや人事の佐藤さんをはじめ、配属されたチームの方々、ランチでご一緒した方々にも、大変お世話になりました。ありがとうございました。
