![見出し画像](https://assets.st-note.com/production/uploads/images/116878934/rectangle_large_type_2_b59b0dd76f18ec26e88dcf1123f67965.jpg?width=1200)
[報告] GMOペパボでインターンしてきました
7月24日から8月4日,GMOペパボ株式会社にてソフトウェアエンジニアとしてインターンをさせていただいておりました.
インターンについて
期間中の10時〜19時のコミットが求められ,それに対して12万円の給与が与えられます.勤務時間が厳密に管理されていたので印象的でした(30分早く退勤したら,後日30分埋め合わせをしなければならない).
インターンはリモートで行われ,最終日(8月4日)だけ出社して,オフィスツアー→成果発表資料作成→成果発表会→懇親会をしました.
インターン前にカラーミーショップ・minne・SUZURIの3つの事業から配属希望を聞かれ,私は「カラーミー」に配属されました.インターン生は全員で6名で,各事業部ごとに二人が配属されました.僕のバディはふじしゃんで,メンター(ペパボでは「サポーター」という)はarumaさんでした.
応募した動機
大規模システムのプロダクションのコードを触ってみたい
大規模システムのデプロイ・リリースのフローを知りたい
ペパボ(GMOグループ)エンジニアの働き方を知る
選考
CVを提出して,その後に面接が一回あった気がします.けんちゃんくんさんと話した記憶があります.カジュアルに技術の話をしていたと思います.
初日の衝撃
カラーミーの技術を見て驚きました.書いた事のないPHPでした.インターンの募集要項にはPython(機械学習)があり,そこで貢献しようかなぁと思っていました(確認不足).
落ち着く暇もなく,与えられた課題を遂行するための該当ファイル群は1ファイル約1000~5000行あり,テストファイルも数百~1000行ほどあったのを覚えております.なんだこれ.チャンスか?
やったこと
TL;DR:「SEO設定を生成する機能」 を実装したよ
開発した成果物はすでにリリースされています.詳細は以下の記事をご参照ください.
デモ動画は以下のツイートをご参照ください.
#カラーミーAIアシスタント に新機能📣
— カラーミーショップ🛒質問受付中📫 (@colormeshop) August 3, 2023
なんと、商品ページのSEO設定が自動生成できるようになりました🎊
「SEO設定を生成」ボタンをポチっとするだけで、
Googleの検索結果に表示されるタイトル・概要文をつくれます🤖✨ pic.twitter.com/05yNDxWRwJ
背景
カラーミーに出品されている商品のうち半数以上がSEO情報を設定していません.
カラーミーでは商品に対してSEO情報(タイトル・ページ概要・キーワード)を設定することができます.
その理由として「書くのがめんどくさい」ことが考えられます.商品ごとに適切なSEO情報を考えるのは時間がかかります.しかしSEO情報の重要性も無視できないという背景がありました.
提案手法
今流行りのLLMを使って商品のSEO情報を生成し提案する.
カラーミー全体,ひいてはペパボ全体としてLLMを使った機能系「AIアシスタント」の開発に力を入れていました.
プロンプトには「商品名」と「商品説明」を埋め込み,適切なSEO情報が生成されるようにプロンプトエンジニアリングを行いました.
苦労したこと
「LLMのAPIを叩く」機能をリリースするためには以下の要素が必要でした.
UI/UX設計
モックアップを作って提案した上で,ディレクター・デザイナーとのすり合わせを経て,最終的にUI/UXを決めていかないといけない.すり合わせと言っても一発で決まらないことも少なくない.
API
APIのクラスを書くということはバリデーションを書くということ.バリデーションを書くということはテストを書くということ.
フロントとAPIの繋ぎ合わせ
繋ぎ合わせるということはテストを書くということ.
フィーチャートグルの実装
masterブランチにマージされたからと言って全ての機能がリリースされていては不便だ.だからUnleashを使ってフィーチャートグルを書く.フィーチャートグルを書くということはテストを書くということ.
頭から尻尾までデザインや要件が決まっているインターン課題ではなく,「SEOをLLMで生成したい」というアイデアそのものを渡されるインターンだったように感じます.
上記に加えて,インターン生だからということに起因した苦労要素が以下の通りでした.
慣れない技術
生のPHPと生のCSSと生のJS書くの楽しかったです
「ScopedじゃないCSSはもう書きたくない」
混在する文字コード
EUC-JPとUTF-8が混在している(そんなんできひんやん普通、そんなんできる?言っといてや、できるんやったら)
歴史的な背景があるとのことでした
工夫したところ
Function Callingの採用
SEO情報の設定欄は3つあるので生成結果を分割しないといけない&SEO情報のうちキーワードはカンマ(,)区切りにしないといけないため,生成結果のフォーマッティングをどうするかという問題がありました.
これに対処するために本機能では,OpenAIのFunction Callingを使い,生成結果をJSONに強制させました.
課題の裏話(自慢と懺悔)
3日目で動くものはできてたよ
動くもの自体は3日目に出来上がっていました.ただデザインやテスト実装に時間を割いたり,下記のインシデントにより,最終的なリリース・広報は8月3日になりました.
バグを埋め込んだよ
やらかしました.リリース直前のリファクタリングにて影響範囲の大きい命名規則の変更を行ったタイミングでバグを埋め込みました.すぐにリバートして修正しました.PRを細かく分割すれば良かったと思っています.
おかわり課題もやってたよ
上記の通り課題の進捗がとても良く,時間が余りそうになったため「おかわり課題」が与えられました.なので二つの課題を並行して進めていくような形でした.おかわり課題はリリースが間に合わず詳細を公言できないのが残念です(下の追記参照).機能自体の開発・フィーチャートグル・モックアップの開発とテストが終わり,それぞれのPRがオープンな状態です.あとはPRがマージされた後にガッちゃんこしてUnleashのフラグをEnableにするだけまでのところまで頑張りました.もしかしたらそのうち社員さんがアフターケアしてくれるかもしれません.
※ 2023年9月11日追記:事業部のメンバーさんが引き継いでリリースまで完了してくれました!↓↓↓
#カラーミーAIアシスタント に新機能!!
— カラーミーショップ🛒質問受付中📫 (@colormeshop) September 11, 2023
商品説明文の「トーンを変更」することができるようになりました✨
元々商品説明文を考えてくれるAI機能がありましたが、さらに生成された文章の調整が可能に🤖
商品ページ作りの手助けになるとうれしいです😉 pic.twitter.com/83CLift2Nc
最終日のこと
〜10時
最終日は出社でした.渋谷駅西口を出て目の前の聳え立つ双塔にはGMOのロゴが.
![](https://assets.st-note.com/img/1695099791081-2G4DXQZtAX.jpg?width=1200)
集合時間まで暇だったので,セルリアンタワーの5つ星ホテルのロビーを見学して,GMOオフィス入り口でふじしゃんと落ち合い社員観察をしました.みんなおしゃれでオフィスカジュアルの域を出た格好をしている方も見かけられ,自由な社風を感じました.中には浴衣で出社している方もいました(詳細は後述).
10時〜
セルリアンタワーの方のオフィスを見学しました.社食が無料なのが最高だと思いました.
GMOグループには渋谷に二つの本社が存在する.セルリアンタワーが第一本社.渋谷フクラスが第二本社.
一部グループ会社が11月中旬から入居開始
13時〜
オフィス近くの中華でランチをしました.無料の社食は事前予約が要るとのことでした.やっぱり人の金で食う飯がいっちゃんうまい.
![](https://assets.st-note.com/img/1691493988713-o0QX0Prlk6.jpg?width=1200)
14時〜
渋谷フクラスの方のオフィスを見学しました.この日はGMOグループで夏祭りがあり,その一環として浴衣の貸し出しがされており,社員の方の1割くらいが浴衣で業務をされていました.なんとも珍奇な光景でした.
17時〜
成果発表をしました.スライドが完成したのが発表5分前でかなり心配したのですが,ふじしゃんと手を合わせてなんとかしました.笑いもたくさん起きて良い感じだったのかなと思います(あんまり記憶ない).
19時〜
懇親会をしました.ピザとお酒で乾杯しました.インターン中関わらなかった方とも喋れて楽しかったです.やっぱり人の金で食う飯がいっちゃんうまい.
特に印象深い出会いはyuuchiさんです.yuuchiさんは僕の使っている自作キーボードの設計者なのです.
![](https://assets.st-note.com/img/1695100035385-ueeGluq880.jpg?width=1200)
arumaさん経由で前日にIoT/XR付きの人が集まるミーティングに混ぜてもらっていたのですが,そこで自作キーボードを見せたところ「あ,設計者です」と言われてまさに青天の霹靂でした.懇親会で改めて対面してキーボードの話が出来て楽しかったです.意外な共通の知り合いもいて面白かったですね.
21時〜
近くの居酒屋で二次会をしました.やっぱり人の金で食う飯がいっちゃんうまい.
学んだこと
大規模システムの開発プロセス
PRは細かくする.これが一番の学びです.ここまで大規模システムのプロダクションコードを触ったことがなかったので,いつもの調子で機能まるまるのPRを立てたのですが,その大きなPRにバグを埋め込んでしまいました.「レビュアーの負担を最小限にする」これを意識して今後の共同開発をやっていこうと思いました.
テストを意識しながら実装する
短期間だったのでTDDとはいかなかったものの,テストを意識したおかげでテストがとても書きやすかったです.
デプロイ直前のディレクター・デザイナーとの協業のスピード感
arumaさん経由でディレクターのhideさんとデザイナーのosatsuさんを巻き込んで,リリース・広報に向けた準備をしました.このスピード感がとても快適でした(プレゼン作成時に欲しい情報を,クエリで叩いて集めてくれたhideさんの「何でもやるじゃん」感が強かったのを覚えています).
まとめ
自分のスキルセットとマッチング率が高くないワークだったので,不安が先行して始まったインターンでしたが,自分が選ばれた意味を考え奔走しました.LLMの研究もしている自分としてはFunction Callingを使った実装でユニークなインパクトが取れたのかなと思っています.
該当レポジトリの週間コミット量が僕とふじしゃんで1位と2位になってたので少し誇らしかったです(そこまで意味はない).
+ 2540
- 197
感想
自分の性格は,得意なことで勝負するタイプなので今回のインターンはいささか挑戦的で刺激的でした.ただパートナーのふじしゃんがとても頼り甲斐がありPHPに滑らかに入門できました.arumaさんを始め社員さんのサポートのおかげでエンジニアリング外でのストレス無くインターンを遂行できたことは喜ばしいことであり,GMOペパボがエンジニアにとって良い会社であることの証左になります.また,書いたことのない言語でもスプリントする適応力が養われた気がします.
レベルアップの音がしました.対戦ありがとうございました.