学生エンジニアが1ヶ月の就業型インターンで得た知見

はじめに

この記事は、2024年10月にエキサイト株式会社のLife&Wellness事業部で参加した就業型インターンシップ「Booost!!!」の体験記であり、私の記念すべき技術ブログ1投稿目です。本記事では「インターン初日の自分に教えてあげたいこと」を綴る形式で進めていきます。これからインターンや新しいプロジェクトに参加する方の参考になれば幸いです。参考にする部分がない人も記念すべき1投稿目なので、最後まで読んで「good」ボタンを押し、役立つ情報満載予定の2投稿目をお待ちください。

前提

自己紹介

私は情報系の学部を卒業し、大学院で学習工学に関する研究を行っている学生です。Webアプリケーションの経験としては、自主開発で大学の授業レビューサイトの開発・運用や、研究員としての音声事業教材システムの開発などがあります。細かい内容はポートフォリオにまとめてあります。ハッカソンや企業でのインターンなどは今までにありましたが、実務経験は今回のインターンシップが初めてでした。

担当した業務内容

エキサイト株式会社のLife&Wellness事業部が提供している「エキサイト電話占い」というサービスにおいて、既存のPHPフレームワーク「BEAR.Saturday」を「Laravel」に移植する業務を行いました。具体的な作業としては、Androidでの通話品質向上を目的としたアンケートページや、無料で楽しめるタロット占いページの移植を担当しました。実装は主にレイヤードアーキテクチャに沿って行い、GETやPOSTリクエストを用いてAPIを呼び出し、必要なデータを取得・送信する仕組みを構築しました。

インターン初日の自分に教えてあげたいこと

朝会を有効に使おう

インターン中は、出勤日の朝に15〜45分程度、メンターのエンジニアさん2名と一緒に前日の学びや当日のタスクを確認する「朝会」があります。この時間は、わからないことを自由に質問できる貴重な機会なので、疑問点は事前にまとめて、どんどん質問していくのがおすすめです!

私も中旬以降は、AWSのインフラ周りやSEO対策のこと、エンジニアさんたちの「占い」という事業への考え方など、実装以外の内容もたくさん質問して、いろいろな視点を学べました。特に、論理的に物事を考えるエンジニアさんたちが、占いの事業にどう向き合っているかを聞けたのが、個人的に面白かったです。しかしながら、振り返ってみると、最初からもっと積極的に質問していれば、さらに多くの知見を得られたなと思います。

言語化しよう

社員の方も、インターン生がどこまでできるのか、何がわかっていないのかを常に把握しているわけではありません。気にかけてもらえますが、実務では他の社員と同じように扱われることが多いです。そのため、自分から積極的に発信しないと、状況が伝わりにくくなります。 発信するときは、まず自分で1度「言語化」して整理してから話すのがポイントです。

私も、何度か話している内容について前提を確認されることがあったので、言語化を徹底していればもっとスムーズに伝わったと感じます。 例えば、「前提」「やりたいこと」「わかっていること」「わかっていないこと」「試してみたこと」といった項目ごとに整理するだけでも、コミュニケーションが格段にスムーズになります。ぜひ、試してみてください。

依存性注入(DI)について理解する

インターン中に学んだことで重要だと感じたのが「依存性注入(Dependency Injection, DI)」の概念です。DIは、クラスが必要とするオブジェクトやサービスを外部から注入する設計手法です。

ここでは、インターン初日の自分に向けて「Person」クラスと「Greeting」クラスを用いて簡単にDIの説明したいと思います。

(※)__construct: クラスのインスタンスが生成される際に自動で呼ばれるメソッド

(※)__invoke: オブジェクトを関数のように呼び出すためのメソッド。


  • Personクラス

Personクラスは名前と年齢を持ちますが、あいさつのメッセージはGreetingクラスから提供されます。コンストラクタでGreetingを受け取ることで、機能を外部から注入しています。

class Person
{
    public string $name;
    public int $age;
    private Greeting $greeting; // Greetingクラスの依存性を注入するプロパティ

    // Greetingをコンストラクタで受け取る(依存性注入)
    public function __construct(string $name, int $age, Greeting $greeting)
    {
        $this->name = $name;
        $this->age = $age;
        $this->greeting = $greeting;
    }

    public function greet(): string
    {
        // Greetingクラスの__invokeメソッドを利用して挨拶を作成
        return $this->greeting($this->name);
    }
}
  • Greeting クラス

Greetingクラスは挨拶メッセージを生成する責任を持っています。__invokeメソッドで、名前と挨拶を組み合わせたメッセージを返すよう定義しています。

class Greeting
{
    private string $message;

    public function __construct(string $message)
    {
        $this->message = $message;
    }

    // __invokeメソッドで挨拶メッセージを作成
    public function __invoke(string $name): string
    {
        return $this->message . ", " . $name;
    }
}

GreetingインスタンスをPersonに注入することで、Personが自分であいさつを作らずに済み、簡単にあいさつのメッセージを変更できます。

// Greetingインスタンスを作成する。
$greeting = new Greeting("こんにちは");

 // GreetingインスタンスをPersonに依存性注入
$person = new Person("太郎", 25, $greeting);

echo $person->greet(); // 出力: こんにちは, 太郎

このように、依存オブジェクトを自由に入れ替えられるため、単体テストが書きやすくなり、コードを柔軟に変更しやすいというメリットが得られます。 最初に理解しておくと、開発がスムーズに進むと思います。

チーム開発のtips集

ここでは細かいチーム開発で役立つ、知っておきたかったtipsを紹介します。

  • Slackのtimesチャンネルは個人のつぶやき用(メモ書きとして使ってました)

  • 2回目以降のプルリクエストのレビュー申請はGitHub上で可能(知らずに毎回Slackでメンションしていました)

  • Git FlowとGitHub Flowは別の概念(mainブランチからのブランチの切り方が異なったりしますが、知りませんでした)

  • コミットに [bugfix] のようなプレフィックスをつける(コミット内容が一目で分かるようになりますが、慣れていないとすぐ忘れます)

最後に

約1ヶ月という短い期間でしたが、メンターや人事の方々をはじめ、インターンに関わってくださった皆さんのおかげで、上記で挙げた以外にも多くの学びがあり、とても充実した時間を過ごせました。特にメンターのお二人には、初めてのフルリモート勤務で不安がある中、分からないことにすぐ対応していただき、業務がスムーズに進むよういろいろサポートしていただきました。また、上長や新卒エンジニアの皆さんからは、キャリアについても多くのアドバイスをいただき、大変参考になりました。誠にありがとうございました!

そして、最後までお読みいただきありがとうございます。学生エンジニアですが、今後も2、3、4投稿目と役立つ情報満載のブログを更新していく予定ですので、ぜひXをフォローして、読んでいただけると嬉しいです!