tomoriのブログ

tomoriのブログ

自由気ままに日記をつけていきます

内定者アルバイト2社目おわったよ

9月の1ヶ月間、株式会社サムザップで内定者アルバイトを経験してきたので、その体験記を書いていきます。

配属先について

配属プロジェクトと職種

配属先は、戦国炎舞 -KIZNA-プロジェクトのサーバーサイドエンジニアでした。

また、今回は前回の内定者アルバイトと異なり、フルリモートではなく週5のフル出社で参加してきました。

せっかく対面での参加だったのですが、9月は入社日が7日とかなり遅い日程であり、かつ3連休が2回ある月だったため、トータルの出社日は他の月と比べて少なかったです。

(もう少しだけ出社日欲しかった)

会社の雰囲気など

アルバイト開始前から、サムザップはとにかく会社の雰囲気が良いと評判だと伺っており、実際に就業中には雰囲気の良さや社員の方々の温かさを実感することが多かったです。

また、サムザップには在籍期間の長いエンジニアが多く、他社よりもベテランの方が多く在籍しているという特徴があるようです(入社後に自分のトレーナーになる方がベテランエンジニアである可能性が高い)。

若手が多い会社特有の「フレッシュさ溢れる環境」とはまた一味違う環境かもしれませんが、個人的にはこれはこれで居心地が良かったです(平均年齢は34歳あたりらしい)。

中の人が言うには、「うちには温かいおじさんがたくさんいる」とのことです。(なるほど…?)

社員の方から聞いた話では、「若手が少ないからこそ、新卒で入社する場合は、割と早い段階でサーバーリーダーなどのポジションを任せる可能性が高い」とのことでした。

実際、特にサーバーのメンバーはかなり不足しているらしく、22卒の方が一人いて、その次に若い人が10年目クラスの方になるらしいです。

入社後のキャリアや、任せてもらえる責任範囲の大きさなどを考えると、このあたりの情報を知れたことは大きいですね。

余談

今まで戦国炎舞をプレイしたことがなかったのですが、なんと来年で10周年を迎えるらしく、素直にすげぇなという感想です。

そういえば、このアイコンすごい見覚えがあるなぁと思っていたら、パズドラに全てを捧げていた頃(2013, 2014年あたりかな)にセールスランキングでよく見てたアイコンだと思い出しました。

期間中の内容

ここでは、内定者アルバイトでやりたかったことや、実際に取り組んだことなどについて書いていきます。

受け入れ面談時の要望

今回、内定者アルバイトをするにあたって、事業部受け入れ面談時には次のようなことを要望として話していました。

  • せっかくの出社なので会社の雰囲気を堪能したい
  • サーバーとして入るがインフラ周りの勉強がしたい
  • 機能設計などに立ち合いたい
  • モブプロをやってみたい

結果的にモブプロはできなかったのですが、他の3つは経験できたので満足度は高いです。

ちなみに、モブプロは社員の方を拘束することになるため、特にベテランが多い環境では厳しいのではないか、という話をとある面談時に伺いました。

実際に取り組んだこと

1ヶ月の間で次のようなことに取り組みました。

  • ソシャゲガチャのマスタ、テーブル設計(あくまで体験)
  • 戦国炎舞の管理ツールの改修
  • インフラ勉強会への参加
  • 工数見積り講座

期間がもう少し長ければ、もっとアプリ側のタスクを任せることもできたらしいのですが、期間が短いために調整が難しいとのことで、割と管理ツール周りが多かったですね。

以下で1つ1つ見ていきます。

ソシャゲガチャのマスタ、テーブル設計

トレーナーさんから与えられた要件定義をもとに、それを満たすガチャのマスタとテーブルの設計をする、という内容の設計体験に取り組みました。

ここでの最も大きな学びとしては、「正規化は必ずしも良いとは限らない」と言うことです。

自分としては正規化こそ正義なのではないか、と思い込んでいた節があり、この事実はかなり衝撃的なものでした。

実際どういうことかと言うと、ソシャゲなどのサービスは多くのユーザーからのデータ取得が頻繁に生じるため、正規化されたテーブルよりも"いかに一度のSELECTで必要十分なデータを取得するか"ということの方が重要だということです。

あえて正規化をしないことで、データ取得時に複数テーブルの結合が不要になり、かつセレクト文がシンプルになるため、パフォーマンスと可読性の双方が向上するというメリットがあります。

正規化以外の点だと、マスタデータはエンジニア以外の方(プランナーの方など)がデータを追加することも考慮する必要があるらしく、エンジニア以外の方が誤った使い方をしにくい構造(enumで文字列を扱わないなど)にすることも意識しているとのことでした。

要約すると、「実際にクエリを実行する状況や、データを追加する方に対して親切な設計を心がけることが重要」ということになります。

こうして文字に起こすと当たり前のことのように思えますが、実際に設計に取り組むと意外とできていなかったことがわかりました。

このあたりの知識は、前回の内定者アルバイトで設計に取り組んでいたときに知っていたかったですね。

フィードバックを受けることで、なぜ自分が以前まで行っていた設計が分かりにくかったのか、ということを言語化できた気がします。

データ設計と同時に考えるSQLのクエリに関しては、データの取得では必要最低限のWHEREだけを指定して取得することが定石らしく、クエリ内での演算は極力行わないようにしているとのことでした。

演算が必要となる処理の場合、アプリケーション側で演算を行い、その値をリテラルとしてクエリに混ぜることで、データベース側での演算処理がなくなりパフォーマンスが向上するそうです。

この辺りも単純なアイデアですが、自分にはない発想だったので新しい視点を得ることができました。

今回自分が取り組んだものと同様の内容のものをQiitaで公開しているようなので、興味のある方は覗いてみてください。

※ 内定者アルバイト・インターンでサムザップへ行く予定のある方はネタバレになるので見ない方がいいかも。

qiita.com

戦国炎舞の管理ツールの改修

管理ツールはPHPフレームワークであるCodeIgniterで記述されており、今回初めて触る技術でした。

改修内容はどれも些細なものでしたが、改修の依頼者がエンジニアでないこともあり、都度依頼背景などのヒアリングを行いながら進めていました。

実際に入社後もこのような形で、エンジニアではない方とのコミュニケーションも必要だと考えると、良い実践演習だったと思います。

ソースコードに関して、特に管理ツールは、サービスそのものが10年目ということもあり、良くも悪くも歴史を感じるものでした。

具体的には以下のようなものが特に目立ちました(主に悪い意味で)。

  • コードのフォーマットが統一されていない
    • インデントに半角スペースとタブ文字が混在
    • functionif の文字列の後に半角スペースがあったりなかったりする
  • スタイル定義の場所が統一されていない
    • 部分的なスタイル定義がPHPファイルの中に記述されている
    • HTMLタグの中にstyle属性をベタ書きしている
  • 所々汎用的な変数名がある
    • $item$ret など汎用的な命名が散見された

話を聞くと、「アプリ側のソースコードは都度整理するが、管理ツールはあまり重要で無いため、リファクタリングに割く時間が無く放置された箇所が多い」とのことでした。

仕方ないといえば仕方ない気がしますが、この辺りをスマートに解決する方法があれば見つけたいですね。

また、GitHubへ移行した時期が割と最近(以前までGitLabを使用していた)らしく、イシューやPRのフォーマットが統一されておらずその点も困惑しました。

改修からテスト、レビュー、デプロイ、リリースといった一連のフローも結構以前の部署と違っており、部署によって色が出るなぁという印象でしたね。

インフラ勉強会への参加

サムザップが全サーバーエンジニアを対象に月一のペースで開催しているインフラ勉強会に参加させていただきました。

今月は第6回目とのことで、途中参加という形になってしまったのですが、事前に第1回から第5回までの資料を共有していただいていたため、ある程度前回の内容には目を通した状態で参加することができました。

今月の内容はコンテナ技術に関するものであり、ECRやECSなどについてハンズオン形式で学びました。

Dockerなどのコンテナ技術は、今や多くのプロジェクトで採用されている技術だと思うので、この機会に”インフラ x コンテナ技術”について学ぶことができて良かったです。

AWSなどのクラウドの勉強は、学習を始めるきっかけが無いとなかなか手を付けにくい領域だと感じているので、今回の勉強会のような”きっかけを提供してくれる場”はとてもとてもありがたいですね。

余談ですが、勉強会で使用する環境は全てTerraformで構築するため、必然的にTerraformも学ぶことになったのですが、実際に触ってみると意外にも複雑さは無く簡単に記述できたため、とりあえずやってみることの重要さを改めて実感しました。

最近は自分の志向がSREに傾きつつあるので、期間中にこのような勉強ができて本当に良かったです。

工数見積り講座

開発における工数の見積り方について学びました。

工数の見積りには主に下記の5種類があるらしく、どれもよく使う手法だそうです。

今まで、個人開発やチーム開発をする上で工数の見積りを行ったことがなく、毎度肌感で進めていたのですが、せっかく見積り手法を学んだことなので、次回からは見積りにも取り組んでみようと思います。

学んだこと

この1ヶ月間、タスク的な取り組みはそこまで多くなかったのですが、総合的にみると十分な学びがありました。

上でも見てきたのですが、具体的には次のようなことを学びました。

  • データベースの設計
  • AWSでのインフラ構築、インフラアーキテクチャの理解
  • プロジェクト内でのコミュニケーションの取り方
  • 工数の見積り方

自分としては、インフラの知識が着実についてきている実感があるので、この1ヶ月間での学びは次回以降の内定者アルバイトでも確実に役に立つものだと感じています。

まとめ

1ヶ月間という長いようで超短かった期間でしたが、ほぼ毎日ランチに連れて行っていただいたり、カフェで飲み物を奢ってもらって休憩したりと、かなり充実した1ヶ月間でした。

ランチ以外でも、ディナーとして社員の方々に牛宮城の料理をご馳走していただいたりと、自分では絶対行けないようなお店にも足を運ぶことができ、超楽しかったです。

ちなみに、僕自身、外食は月に1回するかどうか、というレベルの人間であるため、毎日のように外でご飯を食べるという経験はとても新鮮でした。

やっぱりお店の料理って美味しいですね。

こちらの記事では、必要最低限の内容だけ書いているため、ここに書ききれなかったようなこともたくさんありますが、とにかく東京での1ヶ月間は最高に楽しかったです。

よく、新社会人は入社までが憂鬱だという話を耳にしますが、自分の場合は今回の件で社会人になることに対して楽しみだという感情がより一層強くなりました。

11, 12月ではまた別の部署でのアルバイトが決定しているので、そちらでも、今回学んだことを活かして活躍できるように努めようと思います。

では、この辺りで締めさせていただきます。

Bye👋