2024 サマーインターンに参加しました!

はじめに

2024年7月29日〜8月9日にGMOペパボで行われたサマーインターンに参加したインターン生の渡邉です。この記事ではインターンシップで学んだことや感想などを書こうと思います!

GMOペパボのインターンシップの魅力

この記事を読む人の中にはインターンシップを探している最中で、インターンの内容が知りたくて見ている人もいると思います。(自分もそうでした)
なので、まずはペパボのインターンで感じた魅力について記載したいと思います。

  • 実際のサービスで使われる機能の開発に携われる
  • 社員の方やインターン生同士で交流できる機会が沢山ある
  • インターンの時期・期間
  • オフラインのインターン
  • 交通費・宿泊費が貰える
  • 時給が貰える

実際のサービスで使われる機能の開発に携われる

これはすごく嬉しいです。自分が開発に携わった機能を実際に多くの人に使って貰える状況って嬉しくないですか?僕は嬉しいです。ペパボのインターンでは、インターン期間中に作成した機能を実際にデプロイする経験ができます。デプロイまでを含めた実際の企業での開発プロセスを手を動かしながら学ぶことができたので、個人開発ではなかなかできないとても良い経験になったと思いました。さらに、自分はカラーミーショップの開発に参加させて頂いたのですが、カラーミーショップは2024年時点で19周年の歴史のあるサービスであり、普通に生活をしていて19周年の歴史があるサービスの開発に携わることのできる機会はなかなかありません。実際のプロダクトに参加できるだけでもとても良い経験となることは間違いありませんが、長い歴史のあるサービスの開発に携わらせて頂き掛け替えのない経験となりました。

社員の方やインターン生同士で交流できる機会が沢山ある

これもすごく嬉しいです。元々自分はペバボの雰囲気を知りたくてインターンに参加したのですが、ほぼ毎日お昼ご飯を社員の方と食べさせていただく機会を頂き、色々とお話を聞くことができました!社員の方だけでなく、インターン生同士でもお昼を共にする機会があり、たくさん交流できました。さらに、ご飯以外にも交流するための様々な企画が用意されており、多くの方とお話しすることができて楽しかったです。

インターンの時期・期間

2024年のインターンは夏休みが始まってすぐの7月29日〜8月9日に開催されました。比較的早い時期に始まったため、他のインターンと日程が被りにくく、すぐに参加できた点が嬉しかったです。また他のインターンシップは1週間や1ヶ月が多い印象を受けますが、ペパボは2週間だったためプロダクトの機能開発に長すぎず短すぎないちょうど良い期間だと感じました。

オフラインのインターン & 交通費・宿泊費が貰える & 時給が貰える

私はインターンシップの重要な目的の1つとして会社の雰囲気を知ることを持っているのですが、オンラインのインターンシップだと微妙に距離を感じると思いませんか?私は大学に入ったタイミングがちょうどコロナ禍だったため、オンラインで授業を受けてそう思い、可能であればオフラインのインターンを希望していました。ですが大体のオフラインのインターンは東京で行われており、東京までやや遠い上に宿泊することも考えるとまずできませんでした。そんな自分にペパボのインターンは渡りに船で2週間もオフラインでインターンができる上に、宿泊先は手配して貰え、交通費も頂けました。そのうえ時給まで発生するので、不安な点が無い状態でインターンに参加することができました。

インターンについて

先述した通り私はカラーミーショップへの配属となりました。カラーミーのインターン生は自分を含めて3人でメンターの方が1名でした。チームメンバーとなった2人はつよつよでとても頼もしく、10日間とても良い雰囲気で開発ができました!メンターの方もとても相談しやすい雰囲気で、どんな質問にも優しく的確に返答して下さりとてもお世話になりました🙏

取り組んだ課題

カラーミーショップではショップオーナーさんが発行するクーポンを管理するための画面が存在します。(下記画像)

ショップクーポン画面

このショップクーポン画面ではクーポンを並び替えるなどの機能が無く、「見やすくするための並び替えや絞り込みの機能が欲しい」と実際にショップオーナーさんからお声を頂いていたようです。そこでショップクーポン画面を便利にするために、並び替えるためのソート、絞り込むためのフィルター、複数削除するための一括削除の機能をチームで実装することになりました。私はこの中で、ソート機能と一括削除機能を主に担当しました。

ソート機能

私はソート機能を実装するにあたり、以下の点を考慮して実装をしました。

  1. ショップオーナーさんが見て分かりやすいように作る
  2. 可能な限り最小の変更で実装する
  3. 効率の良いソートを使用する

    ショップオーナーさんが見て分かりやすいように作る

    ソートを実装するにあたり、クーポンの配置を大きく変更すると元々使用していたショップオーナーさんが混乱してしまうことを想定し、下記画像のようにカラムがクリックされた時にそのカラムを基準にしてソートすることとしました。また、元々「利用期間」は「利用開始日〜利用終了日」の2つの情報が入っていたのですが、ソートを実装するにあたりどちらを基準にソートされるか分かりやすくするために、「利用開始日」、「利用終了日」の2つのカラムに分割しました。さらに、このままのデザインではソートがあることに気づきにくい問題や、ソートに気付いても「昇順」、「降順」のどちらか分かりづらい問題が発生したため、カラムに矢印を追加して分かりやすくしました。ちなみに、カラムを分けるなどのショップオーナーさんが使いやすくする方法の意見はチームメンバーが出してくれました!また、カラム分割にあたり発生するデザインの調整なども主にチームメンバーが担当してくれました🙏

ショップクーポンカラム

可能な限り最小の変更で実装する

先述した通り、カラーミーショップは2024年時点で19周年を迎える歴史の長いサービスです。そのため、数えきれないほどのプログラムが存在し、ショップクーポン画面に関連するプログラム以外を編集するとどの程度影響があるか分かりません。また、インターン期間終了後に他の人がソート機能に手を加える可能性は十分にあります。その時に様々な箇所でソートに関する処理がされていた場合、把握に時間がかかる上、修正も大変です。そのため、変更箇所を可能な限り少なくすることでこれらに対応できるようにしたいと考えました。

効率の良いソートを使用する

カラーミーショップを利用されているショップオーナーさんはクーポンを沢山発行されているようで、多い人では数万枚発行しているようです。クーポンの枚数が多いため、ソートアルゴリズムは多々ありますが、時間計算量の観点で効率の良いソートを使用しないとサーバに余分な負荷がかかるだけでなく、ショップオーナーさんに不要な待ち時間を発生させてしまいます。これらの理由から効率の良いソートを使用することは必須だと考えました。

実装方法

初めは「無難にクイックソートとかで書くことになるのかな〜」とか考えていたのですが、色々と模索した結果、クーポンを持ってきているクエリにORDER BYを付けてソートする方針に決定しました。この方法にした理由は、クエリを作成するライブラリにORDER BY用の引数を追加するだけで実装可能なこと、ORDER BYでのソートはメモリの空きなどを考慮しながら都度効率的なソートを選択して実行することが分かったため、この方針にしました。

参考にしたサイト

他にも色々参考にして少ししか理解していないですが、メモリが足りるか考えてクイックソートとマージソートを使い分けてくれるなんて凄いですね。

ORDER BY の最適化

MySQLのfilesortは何ソートで行われているのか

PostgreSQL Query Plans for Sorting Data

フィルター機能

この機能はチームメンバーに担当してもらいました🙏
詳細は担当したチームメンバーのテックブログに記載があるので、是非そちらをご覧いただければと思います!

一括削除機能

私は一括削除機能を実装するにあたり、以下の点を考慮して実装をしました。

  1. ショップオーナーさんが見て分かりやすいように作る
  2. 削除の際に無駄な処理を挟まないようにする

ショップオーナーさんが見て分かりやすいように作る

ソートの1つ目と同じタイトルですが、プロダクトに新たな機能を追加する上では重要なことだと思います。また、削除は巻き戻しが効かないクリティカルな作業なので一層意識して実装しました。一括削除を実装するにあたり、初めは一括削除ボタンが押されたら画面に表示されているクーポンを全て削除する方針にしようとしましたが、ショップオーナーさんが意図せず削除したくないクーポンを削除してしまう可能性を考慮し、ショップオーナーさんが選択したクーポンを一括削除する方針にしました。そのため、初めにクーポンがクリックされたらそれが選択されたことを分かりやすくする機能を作成しました。チェックボックスをつける案もあったのですが、ソートでカラムを増やしたこともありスペースに余裕がなかったため、下記画像のようにクリックされたクーポンの行の背景を青色にすることで選択されたことが分かりやすくなるようにしました。

クーポン選択

次に一括削除を実行するボタンですが、下記画像のように既に存在する「新規作成」のボタンの隣に赤色で「一括削除」ボタンを追加しました。また、誤解を防ぐためにクーポンが何も選択されていない場合は、一括削除ボタンを使えないようにする処理も加えました。

一括削除ボタン

一括削除ボタンを押してすぐに削除されてしまうとショップオーナーさんが誤って押してしまった場合に大変なことになってしまうため、下記画像のように一括削除ボタンが押された後に最終チェックするポップアップメッセージを出すことにしました。

ポップアップメッセージ

ちなみに、この辺りのデザインの適応などはチームメンバーに沢山助けて貰いました🙏

削除の際に無駄な処理を挟まないようにする

無駄な処理を挟まないことは通常の機能でも重要なことだと思いますが、大量のクーポンを一括削除する場合は処理に時間がかかるため特に意識しました。クーポン削除の際に既存の削除機能を活用することも考えましたが、クーポン1枚削除するたびにDBとの接続をやり直すことは無駄だと感じたため、新たに一括削除用のクエリを作成することにしました。クーポンを1回のSQLの発行で大量に削除するために色々調査した結果、IN演算子を使用することに決めました。IN句を使用することでDBとの接続回数を減らし、効率的な処理となるようにしました。

参考にしたサイト

MySQLのIN句は遅くなりやすい

MySQLでIn句に大量の要素を渡すとまずい理由

成果発表会

インターンの最終日に10日間でチームで実装した内容を報告する成果発表会がありました。自分たちのチームはソート機能フィルター機能一括削除機能について発表しました。どのチームも笑いを取ることが上手で、終始明るい雰囲気で笑いが絶えていなかったです。発表は多くの方に聞いて頂くことができ、当時のわいわいスレ(発表を聞いている人がコメントするスレッド)ではどのチームにも200件以上反応があったと思います。成果発表会とのことで初めは緊張していましたが、沢山反応も貰えてとても楽しく発表することができました!

感想

一言で言うとめっちゃ楽しかったです!当初インターンで目的にしていた会社の雰囲気をしっかりと知ることができました。メンターの方をはじめどの方も全員とても優しく、明るい雰囲気で楽しく働くことができる場所だなと思いました。技術的な面では大規模なデータを扱うからこその注意点や実際のプロダクトの開発プロセスなど、個人開発ではできないような経験を沢山積むことができて楽しかったです!特にユーザビリティテストなどは個人開発ではまずしないため、とても貴重な経験になったと思いました。ここまでに書いたようにGMOペパボのインターンではペパボの明るい雰囲気を体験できたり、個人開発ではなかなかする機会のない貴重な体験をすることができるので、インターンに参加しようか迷っている人は是非参加することをお勧めします。