エキサイト就業型インターンBooost!!!に参加した感想

こんにちは!エキサイト株式会社でインターンをしている上原と申します。 今回は就業型インターンシップに参加した上で学んだことや感じたことについて紹介したいと思います。

自己紹介

私は現在、情報系の大学院に在学中の修士1年の学生で、分散人工知能について研究しています。 技術的な面では個人開発とチーム開発含め、WebアプリからiOSアプリ、インタラクティブアートまで様々なものを開発してきました。

やったこと

今回のインターンシップではメディア事業部のエキサイトブログというサービスの開発に参加しました。 具体的にはブログの一ヶ月のPV数が一定数を超えた時、希望しているユーザに対してメールを送信するという部分を実装しました。 また、送信するメールの文章を変更できる管理画面を実装しました。

学んだこと

インターンシップを通じて学んだことはたくさんありますが、今回はその中で4つ紹介したいと思います。

サーバの負荷や処理速度を気にする

今回、開発に携わらせていただいたエキサイトブログは大量のアクセス数を誇る大規模なサービスです。 最適化されていないコードを書いてしまうとサーバに負荷がかかったり、結果を表示するのに時間がかかってしまい、安定したサービスを提供することが出来ません。 そのため、自分が書いているコードがサーバに負荷や時間がかかる処理かどうか常に意識する必要があります。

具体的な例として、SQLの実行計画があります。 エキサイトブログではDBとしてPostgreSQLを使用しています。 PostgreSQLではEXPLAINコマンドとANALYZEオプションを使うことで、実行計画と呼ばれるDBの内部的な処理手順を見ることができ、 実際の処理にかかる時間やどこがボトルネックになっているかを調べることが出来ます。 これに基づいて、より最適なSQLクエリに変更したり、必要に応じてインデックスを作成することで、負荷や処理時間を減らすことが出来ます。

今回のインターンを通じて、どういった部分に注目する必要があるのか、どうやったら負荷を減らすことができるのか学ぶことが出来ました。 普段の個人開発では大規模なアクセスが来ることは無いため、あまり気にしていませんでしたが、これから開発する上で意識していきたいと思いました。

読みやすいコードを書く

チーム開発する上で分かりやすい変数名をつけたり、チームのコーディング規則を守ることは重要です。

//分かりづらい変数名
private List<BlogNoticeUser> u;
//分かりやすい変数名
private List<BlogNoticeUser> blogNoticeActiveUserList;

変数名が少し長くなっても問題ないので、なるべく他の人にとって分かりやすい名前を命名することが大切です。 また、ソースコードはなるべく分かりやすく簡潔にまとめることも必要です。 しかし、シンプルで短いコードが必ずしも他の人にとって分かりやすいコードとは限らない場合があります。

例えばStream APIにおけるラムダ式とメソッド参照です。

//メソッド参照
result = users.stream().filter(mailLog::isAlreadySent);
//ラムダ式
result = users.stream().filter(user -> mailLog.isAlreadySent(user));

一見するとメソッド参照はシンプルで短くなっているので、分かりやすくなっている感じがします。 しかし、どのような変数が渡されているのか分かりづらいため、読み手に負担がかかってしまいます。 こういった場合は少し文字数が増えますがしっかりと記述することが必要だということがわかりました。

tech.excite.co.jp

今回の開発を通じて、シンプルで短いコードが必ずしも他の人にとって分かりやすいコードでは無いことを実感しました。 また、IDEのコード整形や警告が必ずしも最適解では無いことが分かりました。

コメントを残す

実際の開発において、ドキュメントが残されているものは稀なので、システムの動作について知りたいときは直接、コードを読む必要があります。 コメントを意識して残すことで、プルリクエストでレビューをして頂く時や、コードを読む必要がある時に解読したり、コードを書いた人に聞く手間を減らすことが出来ます。

例えばSQLではクエリにハイフン2つをコメント文の先頭に入力することで残すことが出来ます。 また、COMMENT ON [TABLE or COLUMN] [テーブル名] is [コメント文]でテーブルやカラムに対してコメントを残すことができ、 TablePlusを使用してデータベースを覗くと、以下のようにコメントが表示されます。

TablePlus上のテーブル

普段のチーム開発ではコメントを残すことはどうしても後回しにしがちですが、コードレビューや後々のチームメンバーや自分にとって、とても重要だと感じました。

テストをする

個人開発ではプログラムが完成したらそのまま本番環境にデプロイし、バグがあればその都度、修正するということをおこなっていました。 しかし、多くのユーザを抱えているサービスではテストをせずにそのままリリースしてしまうと、未知のバグによってサービスが動作しなくなる可能性があります。 その結果、修正するまでの期間の収益の減少やユーザ離れにつながってしまいます。 そのため、本番環境に載せる前に入念にチェックする必要があります。

今回の開発を通じて、テストの大切さや、テスト環境の仕組み、テスト環境にデプロイする方法について学ぶ事ができました。 テスト環境の仕組みは便利だったので、自分の個人開発やチーム開発に導入してみたいと思いました。

まとめ

今回のインターンを通じて、実際の業務ではどのように開発が進められているのか体感することが出来ました。 また、普段の開発では気にしなかった部分や気づかなかった部分を知ることが出来ました。 技術力だけではなく、チーム開発や知識も含め、様々なことについて学ぶことが出来ました。 この貴重な経験を活かして次に繋げていきたいです!

最後に

メンターさんをはじめ、様々な社員さんのおかげで、学びのある充実した期間を過ごすことが出来ました。 あっという間でしたが、一ヶ月間ありがとうございました!