ホーム ブログ ページ 4

「主体的に動いて、お互いを補完しあうチームにしたい」 佐藤香絵インタビュー

0

アピリッツのデジタルエクスペリエンス部の佐藤は、2021年から部長代行としてデザイン制作グループ(通称「デザプラ」)を率いています。クライアントも業種もさまざまなデザプラの仕事のこと、管理職としてのプレッシャー、1on1の狙い、そして社内制度を上手く使いながらの子育て。たくさん話してもらいました。(取材 2022年10月)

管理職になるなら、脳みそが若いうちがおすすめ!

―― まずは経歴の話を聞かせてください。アピリッツの前身のKBMJに新卒入社したのですよね?

はい。実はWebエンジニアがキャリアの最初です。もともとは編集者になりたかったのですが、出版業界は不況で……2000年代前半はウェブメディアの黎明期だったのもあって、IT業界に入っていればそういう仕事につながるかなと思ってKBMJに入りました。新規事業を担当する部署でサイトリニューアルなどに携わり、ディレクターやデザイナーの仕事を任されるようになったことが現在の業務にもつながっています。結局のところ、編集者にはなりませんでした(笑)

―― 2021年に部長代行になりましたね。アピリッツは女性管理職の登用が進んでいますが、タイミング的に「早い」や「遅い」と感じましたか?

結婚・出産を経験してからではありますが、育児との両立にも慣れて、ちょうどよかったんじゃないかなと思います。仕事の経験値も積めた段階でしたし。ただ若手には「管理職やマネジメント職を目指すのであれば、若いうちでもどんどんチャレンジしたほうがいいよ、 脳みそが若いうちがおすすめだよ!」って言いたいですね。

―― 脳みそ!

インプットすることが一気に増えるんです。管理職になると幅広い視点が求められます。チームを率いるマネジメントの視点、案件を獲得してきちんと進める視点、それから経営の視点。上場してから社内の環境は刻々と変わっています。関わる仕事の規模や性質も変化してきました。そういったスピード感についていくことにやりがいを感じられるのであれば、いいキャリアが積めると思います。まわりもサポートしてくれますし。

脳みそが若いうちにぜひ挑戦してほしい!

「さとかえさんらしくやればいいんじゃないですか」

―― プレッシャーは感じましたか?

相当感じています! 私の歴代の上司が優秀すぎるので、自分はそんな風にはなれないと思っています。でも同僚が「さとかえさん(注:佐藤の愛称。社内のほとんどの人間がこう呼ぶ)らしくやればいいんじゃないですか」と背中を押してくれて。この言葉をふと思い出して、立ち止まることができています。そうやって誰かの背中を押せるような管理職になれるといいですよね。さらに「あの人ができるなら……」とハードルを下げられる存在でもあるといいなと思っています。

―― 保育園のお迎えで慌ただしく退社するさとかえさんを何度か見かけています。子育て真っ最中に女性管理職として働くのは大変そうな印象ですが……

想像以上に大変ですね。私はもともと不器用なタイプで、とにかく気合で乗り切っているところはあります(笑) ただ、仕事と子育てが気持ちの切り替えになっていますし、寝かしつけた後はひたすらマンガを読んだりして、好きなことに費やす時間も大切にしています。まわりに仕事と育児を両立しているパパママも増えましたし、仲間意識が生まれますよね。仕事する上でも心強いなと思っています。

働き方に関しては、アピリッツの裁量労働制度の「アピプロ制度」をフル活用しています。

時短勤務じゃなくフルタイムで働きたい、でも保育園のお迎えには早めに行ってあげたい、子供を寝かしつけた後に家でちょっと働きたい……って人には、アピプロ制度はオススメですね。

私は子供を持ってから、仕事で裁量権を持って働くことの大切さがわかりました。子供はコントロールできないので……自分と仕事をコントロールする方にシフトしています。意外となんとかなりますよ(笑)

会社の変化に合わせて進化するデザプラ

―― さとかえさんが率いるデザプラグループのことを教えてください

ひと言でいうと「まじめ」ですね! みんな、任された案件や、自分の仕事やスキルに対して真摯に向き合いながら、しっかりとやり遂げる意識を持っています。

経験豊富なメンバーは、チームに対しておのおのが経験を惜しみなく還元し、引き上げようという気持ちが強いです。チームとしての課題解決にも積極的に取り組んでくれます。若手も、それに応える勉強家ばかりです。

会社の状況が変化するのと同じように、デザプラグループも進化しています。単なるデザイン制作だけでなく、スタートアップ支援やUX・UIデザインプロセス支援、モックアップを活用した要件定義といった上流工程にもどんどんチャレンジしています。アピリッツが強みとする「ワンストップソリューション」の一翼を担うために、成長が求められている状況だと思います。

私たちの担当するクライアントは業種も業態もさまざまで、ビジネスやクリエイティブの面では多様な課題に向き合う必要があります。そういった案件に日々対峙しているメンバーは本当にタフだなと思います。模索して、ときには迷走しつつ……そんなメンバーの姿に私自身が支えられていますし、学ばせてもらっています。

―― どんなふうにデザプラグループを引っ張っていきたいですか?

理想をいうなら「俺について来い!」みたいなリーダーに憧れますが、性に合わないので(笑)、私は対話を大切にしたいと考えています。私達の仕事は、クライアントも案件内容も千差万別です。ひとつひとつの仕事にそれぞれのミッションがあり、それを理解しなければただの作業者になってしまい、仕事に対しても自分に対しても、もったいないですよね。自分で考えて主体的に動いて、お互いを補完しあうチームにしたいと思います。

「お客様のビジネスに対して、何が価値のある提案になるか?」

―― 1on1やメンバーとの対話を繰り返すと、変化や手応えを感じますか?

感じますね。たとえば、デザプラが大切にする「開発側と正確に連携するためのコーディングや、論理的に裏付けのあるデザイン」について、私だけじゃなくメンバー全員が自分の言葉で話せるようになるべきだと思っていますが、この考え方はチーム内にも浸透してきていて、業務を通して感じられる場面が増えてきました。週ごとに実施している勉強会でも、メンバーの学びがよく感じられます。

―― メンバーを育てるための1on1なのでしょうか

「育てる」というのがあまりしっくりこないのですが……どちらかというと、考えていることや思いを伝えて、同じ方向を向くための時間として重要だと考えています。

せっかくアピリッツでデザインの仕事をやっているのだから、この環境を自身の糧として最大限活かしてほしい。「お客様のビジネスに対して何が価値のある提案になるか?」を身につけるために、「踏み台にして成長してほしい」と伝えています。

アピリッツのデザインが関わる領域は、マーケティングやSaaSなども含めてとても幅広く、キャリアやスキルアップの選択肢も多彩です。

ここで何を強みとするべきか、何ができたら自分の価値が上がるのか、考えながら仕事をしてほしいです。そしてメンバーのキャリアを拡げるような仕事を作ることが私のミッションだと思っています。

メンバーが少しづつでも「成長できた、貢献できた」と感じられるチームや環境を作っていきたいです。

アピリッツ決算説明資料のつくり方。デザインプランニンググループの挑戦

0

上場企業が四半期ごとに作成・公表する決算説明資料。もちろんアピリッツも年4回しっかり発表しています!「正しく、わかりやすく伝えること」と「美しさ」を両立させた資料を、ステークホルダーの皆さまへお届けするために、アピリッツでは上場当初からIR担当者と社内のデザインチームが一緒に決算説明資料を作ってきました

「どんどんよくなっていくよね」と評判のアピリッツの決算説明資料や、制作チームのことを、もっと知ってもらいたい!ということで、デザインを担当するデジタルエクスペリエンス部の「デザインプランニンググループ(通称「デザプラ」)」とCFOの永山が、怒涛の制作風景や使用ツール、そしてチーム体制について振り返ります。(2022年10月 取材)

「絶対CFO一人で作ってないでしょ」と言われる

―― アピリッツの決算説明資料はお褒めの言葉を頂くこともあるそうですね

永山:評判いいです! 上場企業のCFOやIR担当者と集まってIR活動に関する勉強会を頻繁にやっているのですが、そこでよく「デザインきれいだよね、IR資料のアワードに応募したらいいですよ」って褒められます。あと「これ絶対に永山さん一人で作ってないでしょ、プロのデザイナーが作ってますよね。デザインは最高だから、あとは永山さんの構成力が課題だね!」とも言われる(笑)

実は、アピリッツの上場審査が終わって上場するまでのあいだに使ったエクイティ・ストーリー(=機関投資家向け資料)だけは、外部の方や和田(アピリッツの代表取締役)に相談しながら自分で作りました。で、パワーポイントを操作しながら「我ながらこのデザインはダッセーな。これを使いまわすのはイヤだな」と思ったんですよね。「これ使って和田さんに投資家たちと対話させるの、申し訳ないな」って。

そしたら和田や執行役員の長谷が「社内にデザインチームがあるんだから、今後のIR資料はそちらにも手伝ってもらおうよ」と言ってくれて。「エッ! いいの!?」ってビックリしました。「みんなクライアントワークで忙しいはずなのに。頼っていいんだ!?」って。

―― 頼ってよかったんですね

永山:はい。それ以降は、決算発表のたびにデザプラのみんなと資料を作るようになりました。

梨子田:会社の管理部門と事業部門が一緒になって仕事を進めることは珍しいかなと思いますし、開発だけでなくデザインができるアピリッツらしいスタイルですよね。

永山:それは個人的にもうれしいです。毎回「ひとつの作品を社内みんなでつくるぞ!」と思って準備しています。

少しずつメンバーが増えて、決算説明資料デザインチームは現在5人体制です

情報収集と体制づくり

―― 決算説明資料の制作チームは、最初に梨子田さんがデザインとディレクションで参加して、回を重ねるごとにメンバーが増えていきました。資料作りの第一歩はどんな感じでしたか?

梨子田:今もこれは変わりませんが、まずは情報収集をやります。決算説明資料で伝えたい内容を経営層に確認して、それをもとに各セグメントのリーダーに質問して情報や資料をもらって、決算説明資料に落とし込みます

最初はこの情報収集と体制づくりに苦労しました。「直接的に売上が発生する仕事ではないし、どこまで事業部のメンバーに協力してもらうか?」と悩んだり。

永山:現場の理解を得るって大切です。IR担当者や経営層は決算説明資料が会社に与えるインパクトや大切さをわかっているけれど、IR活動はクライアントワークとは違って、「売上が上がる」といった直接的なインパクトがあるわけではないし、株価は業績や地合い(=株式市場の環境)にも左右されてるので、重要さを伝えるのは難しいかもしれません。

―― 決算説明資料ではインサイダー情報を多く取り扱うので、関わるメンバーも限定されていて、いったい何を準備しているのか社内からも見えづらいですし……

黒須:ですね。でも、最初は「そうは言っても社内の資料でしょ?」くらいの認識だったのが、少しずつ社内の流れが変わって、ことの重大さがわかってくるんです。現場でも「ここに力を割く価値はある。重要な仕事なんだ」という意識に変わりました

鈴木:デザプラ内のリーダー層と話し合って、クライアントワークを調整してベテランデザイナーを投入できるようになったり。

黒須:そうやって決算説明資料チームに新しく参加した私達が「やっぱりすごく大切だし、大変だよ!」ってたくさんアピールすると、ますます協力体制が生まれてくる(笑)

Adobe XDとパワーポイントのハイブリッド

―― どこが一番「すごく大変!」でしたか?

黒須:二度大きく作り直したタイミングがありました。

まず、私が参加したタイミングで制作環境を変えました。パーツの多さや見栄えを考慮して、パワーポイントからAdobe XDで一通り作り直したんです。このときが一番大変でした。やってもやっても終わらない(笑) ただ、一度変えてしまえばAdobe XDで共通のパーツを使ってその後も制作できますし、やってよかったです。

それから、DTPのデザイン経験のある宮本さんが参加してくれてクオリティがさらに上がったと思います。細部まで整えると美しくなるんですよね。これが二度目の作り直しです。宮本さんが細かく調整を入れて作り変えました。

宮本:フォントの雰囲気を「繊細で信頼感がありスタイリッシュなもの」に統一しました。決算説明資料のルールを守りつつ、レイアウトに遊び心を入れてみたり。

黒須:そうやって細部にこだわりを入れられるようになってきました。

フォントにもこだわってます

黒須:そして、今はパワーポイントとAdobe XDのハイブリッドで作っています。たとえば「ちょっとここだけあとで変えたい」と永山さんが思ったときに、永山さんの手元で修正できたほうが小回りは効くので、そういった部分はパワーポイントを使っています。

永山:修正は最後の最後まで入ります。実は、資料制作と並行して決算数値の監査法人監査が入るので、数値を変更する場合もあるし、途中で「やっぱり構成はこうすべきだな」と思ったりして原稿がギリギリまで確定しません。ページの並び順を変えることもありますし……。いつも原稿が遅くて申し訳ない。

デザプラ全員:みんな毎回覚悟しています(笑)

覚悟してるみなさん

鈴木:決算の頃になると梨子田さんが遅い時間まで仕事しているのは知っていたので「決算を出す今だけだ!」と覚悟を決めて参加したんです。でも、単に大変なだけじゃなくて、ディレクターとして得るものも大きかったです。クライアントワークにも活かせます。なのでデザプラのいろんな人におすすめしたいです。

丹羽:「読み手が一番知りたい情報は何なのか」と考えながら資料を作るので、ただキレイにデザインをまとめるだけではなく、情報を整理してデザイン制作する視点が身につきます。これは通常のデザプラでの仕事でも役に立ちますね。

黒須:査定での評価にも入りますし。

梨子田:「(決算説明資料の作成は)会社の根本に関わる重要な仕事だから責任を持ってね」と佐藤(デザプラを率いるデジタルエクスペリエンス部の部長代行)からも言われていますし、グループのメンバーにもそれは伝わっています。

伝えたいメッセージをデザインする

宮本:数字をキレイに並べるだけがデザインではないので、どこを強調すればよいかは常に考えています。全部大切な情報ですし、とはいえ全部真っ赤な太文字にはできないし……。

永山:こちらから出す原稿は「会社のみんなの頑張りを投資家たちへ伝えたい!」って思いが強くなってしまうので、つい「昨対比もいい、予算比もいい!ああ俺は全部言いたい!だから原稿の文字も全部真っ赤だ!」ってなりがちなんですよ。

黒須:そう、本当に真っ赤(笑)なので、そこから永山さんや経営陣が伝えたいことをくみ取って、その上でデザインでどこを強調するかを、デザプラ側でしっかり考えます

真っ赤な原稿から資料を作るデザイナーの黒須。となりはディレクターの鈴木

永山:ありがたいことです。つい「言葉で全部伝えちゃえ」って考えがちなんですが、事業のことをダラダラしゃべっても伝わらないんですよ。パワポに文字をぎっしり詰め込んでもダメ。だから、伝えるデザインの力をいつも感じています

宮本:事業の概念図を作るのは苦労しますね。「成長のイメージを表現する図」ってどういうものがいいだろう? と考えたり。

鈴木:ただキレイなだけじゃだめですし。一番大変なんじゃないかなと思います。

梨子田:イメージを伝えるデザインづくりは毎回苦心しています。「グループ企業になったムービングクルーの事業をどう表現しようかな?」と思案したり。永山さんたちと直接やりとりしてイメージをすり合わせています。

アピリッツの成長イメージ!

永山:成長企業なので、新しい事業や取り組みがどんどん増えているんですよね。四半期ってつまり3ヶ月です。たった3ヶ月しか経っていないのに、その短いあいだに新しいことが増えるから、資料も数字を更新するだけじゃない。それでご苦労をかけている面もある。

あと、個人投資家向けのセミナーや機関投資家との1on1で資料のフィードバックをもらうんです。そのフィードバックをもとに資料をアップデートしていくから、毎回いろいろデザインチームへの注文が増えてしまう。

黒須:それは普段のクライアントワークでも当たり前のようにやっていることで、アップデートとブラッシュアップを重ねるのは大切なことです。だから大丈夫です!

永山:黒須さん今日ほんといいこといっぱい言ってくれてうれしいです。これからも一緒にいい資料を作っていきましょう。よろしくお願いします!

アピリッツのIR情報はこちらで公開しています!

デザインプランニンググループへの仕事のご相談はこちらよりお送りください!

【アピリッツのカフェ「アピカフェ」のご紹介】ハロウィーンパーティーやりました

0

アピリッツの社員向け無料カフェ「アピカフェ」は、社員の憩いの場として大人気です。先日、10月31日のハロウィーンに先立って人事企画部がアピカフェでハロウィーンパーティーを開きました。いっぱい来てくれましたよ! ってことで、ちょっと覗いてきました。(取材 2022年10月)

今年入社した社員を連れて来たら「いいこと」があるよ!

ハロウィーンといえばお菓子。ということでお菓子の抽せん会を開催しました。

参加条件は「今年入社の人と一緒に来ること」。新しく仲間に加わった人と誘い合って遊びに来てね、そして仲良くなって仕事でもがんばろうね、ということです。

仮装した人事企画部のみなさんがお出迎え。

バーカウンターで好きな飲みものを注文して作ってもらいます。

お菓子の抽せんコーナーです。ハロウィーン的お菓子がもりもり積まれていました。

大当たりな社員も続出。当たる人は当たる。

楽しそう。アピカフェは「社員同士のコミュニケーションの場になれば」という狙いでスタートして、コロナを留意しつつ人事企画部が運営してきました。社長の和田も、ときどきアピカフェでコーヒーを飲んでいますよ!

ちなみに、アピリッツのオフィスがあるのは渋谷です。毎年ハロウィーンが盛り上がりすぎて警察が出動することでも有名な街。このため、アピリッツでは社員の安全を考慮して10月28日と10月31日はリモートワークを推奨しています。みなさん安全で楽しいハロウィーンを~!

エンジニアが問題を説明する時に気を付ける事

0

コンテンツデザイン部の金井と申します。今回は、分かり易い説明をする為に心掛けている事を書いていきます。

結論

読む人のリソースを少なくするように心掛ける。
その為に、

  • 結論から先に言う
    • 何を要求しているのかが一目で分かる
    • 読み返す際も、全てを読む必要がなくなる
  • 長文で纏めず、要点を切り分けて説明する
    • 文章を読者に噛み砕かせる手間を極力省く
    • 文章としての体は重視せずに、箇条書きや強調を駆使する
    • フォーマットがあれば、それに従えば知識などなくてもある程度分かりやすく記述出来る
  • 専門用語は必要に応じて噛み砕く
    • 読者が何に長けていて、何に疎いのかを想像する

悪い例

お疲れ様です。
先日より発生している、お勧めユーザーを検索するAPIで長い時間が掛かってしまう問題に関してですが、ユーザーデータの量が想定より多く、またそれに対してデータベースのインデックスが適切に張られていなかった事が原因でした。
また、現在業者によるリセマラアカウントが日々増加している事も鑑みると、インデックスを適切に張り直しても現在の仕様ではその内また時間が掛かるようになってしまう事が想定される為、お勧めユーザーの検索ロジックの変更をしたいと考えています。
現状のお勧めユーザー検索ロジックの問題となっている部分は、3日以内にログインしている、という条件が現状のDAUから考慮すると多過ぎる点と、また、その他の絞り込む条件もその莫大なユーザー数からの抽出には時間が掛かってしまう点です。
その為、3日以内にログインしている、という条件を、直近にログインをしたユーザーの指定数に変更し、その中から抽出するという形にしたいです。
これに変更しても直近に遊んでいる人からお勧めユーザーを参照したいという要望は変わらないまま、DAUに関わらず参照量は一定になりますので、APIで掛かる時間も一定になるからです。欠点を挙げるとするのならば、ゲームが遊ばれなくなる時間帯などには同じユーザーが参照されてしまう可能性が高いという事がありますが、現状の盛況振りから考えるとこれから先も基本無く、またあったとしてもそう強い問題でもないと思いますので、一考願いたいです。
よろしくお願いします。
……何言ってるんだこいつ? ……読むの面倒だし、後回しにしよう

どこが悪いのか?

順序立てて説明していますが、読むのに疲れますし、最後まで読まないと何をどうしたいのか分かりません。
と言うより……読もうと思えないですよね、これ。
まあ……この文章を総括してしまえば、エンジニアの自己満足です。

エンジニアは問題の原因究明、解決に100%のエネルギーを注いで対応しているかもしれませんが、
プランナーやプロジェクトマネージャー、ディレクターといった、仕様を考える人、最終的に判断を下す人達はもっと色々な事を同時並行でやっていたりします。
要するに、上に立つ人はエンジニアと同じだけのエネルギーを原因解決だけに注いでいられない訳です。
エンジニアから欲しいのは主に、どのような問題が発生し、その解決に必要な事柄は何なのか? という事です。
そういう事を留意した上で、タスクが多い人のリソースをエンジニアと同等レベルに食わせない事を考えましょう。
その為にすべき事としては、以下になります。

  • 結論から先に言う
  • 要点を分かりやすくする
  • 専門用語は必要に応じて噛み砕く

現状の個人として強く意識している考えなので、もっと考えるべき事柄や無意識に行っている事柄もあると思いますが、ひとまずそれぞれに対して詳細を書いていこうと思います。

返信来ないなぁ……。

結論から先に言う

先ほども述べた、最後まで読まないと何をどうしたいのか分からないという事の何が問題かと言えば、

  • 最後まで読む必要がある……言いたい事を理解するのに時間が掛かるし、要点を掴むのにも文章の全てを咀嚼する必要がある
  • 読み返す時も、最初に読む時と同程度リソースを要求する

という点です。
なので、まずは言いたい事を先に言ってしまいましょう。
何の為にこの文章は書かれたものなのか?
最終的に何を言いたいのか?
それを最初に提示するだけでも、ぐっと読者のリソースは減ります。
例をざっくり纏めてしまうと、

お勧めユーザー検索に時間が掛かっている問題の解決の為に、検索ロジックそのものを変更したい
“3日以内にログインしている”という条件を”直近にログインをしたユーザーの指定数”に変更したい

という事になるので、まずそれを提示すべきですね。

様々なタスクに追われて忘れてしまい、そのまま昼食に

要点を分かりやすくする

悪い例の文章は、要点が文章の中に紛れ込んでいる為、実際に読んでみないと結論に対して、

  • 何の目的でそれをしたいのか?
  • それをするメリット、デメリットは何なのか?

と言った事が分かりません。
読者に国語のテストなんてさせるな、って話ですね。
評論文とか書く訳じゃないですし、最初から解答を明示しておけば良いのです。
そういう分かり易さの為には、必ずしも文章の体をしている必要はありません
必要に応じて箇条書きや強調も使っていきましょう
それで、要点を纏めてそれを分かりやすくするとなると、フォーマット化してしまうのも良いでしょう。
それだけで誰でも、何も知らなくても、分かりやすいように報告出来るようになるでしょうから。
ただ、フォーマット化に頼り過ぎると報告したい事によってはイマイチ収まりが悪かったりする事もあるので、そこ辺りは柔軟に。
例を要点で分割してみると、

問題:
お勧めユーザー検索で時間が掛かっている

原因:
SV想定より多くのユーザーが遊んでいる
SVの検索処理が最適化されていない
仕様におけるユーザーの参照量が多過ぎる

対応:
ロジックそのものを変更する

対応詳細:
3日以内にログインしているユーザーから対象を抽出する
を、
直近にログインをしたユーザーの指定数
にする。
理由としては以下。
・その仕様が一番冗長且つ時間の掛かる要因
・SVの最適化不足もあるが、DAUの観点からしても参照するユーザー数が多過ぎる直近に遊んでいるという条件を崩さない上記の変更を行えば、DAUに関わらず参照するユーザー数が一定となりレスポンスがいつでも安定する
また、これに変更するデメリットとして、
プレイ人口が減ると同じユーザーが選出される可能性がある
が、
現状のDAUを考えると殆ど発生しない
と考える為、問題ないと思う。
返信来ないなあ……。

専門用語は必要に応じて噛み砕く

悪い例において、データベースのインデックスが適切に張られていなかったと説明していますが、
ぶっちゃけプランナーとかになると、エンジニアを経験していたり、DBに対する理解が無かったりしないと、そんな事知らんがなというだけで終わります。
どういう人に読まれるかという事を考えて、専門用語は適切に言い換えたり、抽象化したりしましょう。
この例を書き換えるとすると、
想定以上のユーザー数に対して検索処理に時間が掛かるようになってしまった
データベースの検索の効率化が考慮不足だった
とかで良いかと思います。
他にも、APIだとかDAUだとかリセマラだとか、これらに関しては同じゲームを開発している人達なら基本通じるでしょうが、専門用語には違いないので、ゲーム開発者だったりエンジニア以外に何か説明をする際は、噛み砕いておいたり、注釈を隅に書いておいた方が良いかもしれません。

忘れてた。で…………………………………要するに?

例を書き換えてみる

フォーマットがあるなら、それに記して出力して終わる……というか、前述の要点を分かりやすくするで書いた形でいいと思うのですが、
先出しとして、チャットツールとかに投げる形を想定して、書き直してみましょうか。

お疲れ様です。
先日より発生している、お勧めユーザー検索で時間が掛かる問題に関して、解決の為に一部仕様変更を願いたいです。
仕様変更したい部分は、検索条件の
3日以内にログインしているユーザーから対象を抽出する
を、
直近にログインをしたユーザーの指定数
への変更です。
詳細を以下に記します。

まず、そもそもの原因に関してですが、
・SV想定より多くのユーザーが遊んでいるSVの最適化不足ユーザー抽出条件の、3日以内にログインしているユーザーが多過ぎる
が主な問題でした。
また、SVの最適化をしたところで、3日以内にログインしているユーザーが余りにも多い為、それだけでは解決出来ないという結論に至りました。

その対応案として、
3日以内にログインしているユーザー直近にログインをしたユーザーの指定数
に変更したいと考えました。
理由としては、
"お勧めユーザーには、直近に遊んでいるユーザーから抽出したい"という要望を崩さない
ままに、
DAUに関わらず参照するユーザー数が一定となりレスポンスがいつでも安定するようになる
からです。
また、これに変えるデメリットとしては、
プレイ人口が減ると同じユーザーが選出される可能性がある
という事が考えられますが、
現状のDAUを考えると殆ど発生しない
と思います。

ご一考願えればと思います。
よろしくお願いします。

……まだまだ分かり易く出来そうだなー。

忙しいだろうけど、催促して良いかなぁ……。

Locust x Fargateで10000RPS越えの負荷試験をした話

0

コンテンツデザイン部の金井と申します。今回はLocustとFargateを使ってゲームアプリケーションの負荷試験をした話をしていこうと思います。

背景

結構前の話になりますが、自分はとあるゲームアプリケーションの開発・運営に携わっていました。
開発・運営に携わると言う事は、リリースにも携わるという事で、その点において自分は負荷試験を主に担当していました。

負荷試験ツールに何故Locustを使ったのか

負荷試験に関しては、別のプロジェクトから引き継いだサーバーソースではJMeterを使っていたのですが、JMeterは

  • 専用のGUIでの負荷試験シナリオ作成がややこしく、学習コストも高い事
  • 保存されるソースがXML形式であり、gitでのバージョン管理に向かない事
  • 負荷試験を行う際も面倒臭い点が多い事

という難点が他にも色々あるのに対し、Locustは

  • コードベースでの負荷試験シナリオ作成であり、学習コストは低く、またそれ故にgitでのバージョン管理に向く
  • 負荷試験の実行がJMeterに比べると単純で分かり易い

とメリットが多く、また他プロジェクトでも使用実績があった為、Locustに乗り換える事にしました(そして100近いAPIの負荷試験シナリオを1から書き直す事になりました)。

Locustは日本語でイナゴです。サーバーに蝗害を起こしにいくイメージですね

負荷試験サーバーに何故Fargateを使ったのか

そもそもFargateが何なのかを説明すると、AWSにおける、コンテナ向けのサーバーレスコンピューティングリソースです。
実態の無いサーバー、とでも言えばいいでしょうか。
実態……ホストマシンの存在が隠されている為、IPアドレスをこちらで決められなかったり、EC2のようにssh接続して中身を見たりする事は基本出来ない(方法が無い訳では無いみたいだけど)という欠点がありますが、
コンテナベースで立ち上げる為、OSなどを考慮する必要もなく、より手軽な使い方が可能です。
また負荷試験に対しては、インスタンスの増減に必要な設定がEC2よりも少なく、容易であるという点より、

  • 負荷試験の規模に関わらず準備の手間が殆ど変わらない
  • コストも鑑みて頻繁に起動と削除を繰り返す必要がある為、手軽であるのは強い

というメリットがありました。
それに元々サーバーインフラはAWSで立てていましたし。

負荷掛け環境構築まで

ネット上に先駆者が沢山居ましたので、そこ辺りで色々調べていけば、そこまで苦労する事は……一つだけありましたね。
AWSのPowerUserAccess権限ではECSでのタスク定義やクラスター定義の作成、編集が出来ないという点です。
務め人で、しっかり権限が個々に割り当てられているからこそ起きる問題ですね。最小権限の原則ってヤツです。
そして、AWSはそういう時にコンソール上で、これこれこういう理由で作成出来ませんでしたって通知してくれない場合が多くて(セキュリティ上の都合もあるんでしょうけど)、もっと上の権限を割り当てられていた先輩に聞いてみたら、俺は出来るけど? 何かミスってない? と返されたりして。
同じ画面で全く同じ操作をして自分だけ出来ないと証明して、やーっと気付きました。
コロナでリモート勤務だったのもあって、1~2日は潰した気がする。

GithubやSentryも権限がない状態でリポジトリやらプロジェクトやら開こうすると、冷徹に404返して来るしなぁ

負荷掛けられサーバー環境構築まで

プランナーに本番想定のマスタデータを貰って、それを本番に寄せた開発環境の1環境に反映しておしまいです。
また本番に寄せたと言っても、負荷試験のシナリオの都合上、例えば以下の点で異なってくる部分なども出てくるので、そういうのはきちんと纏めておきましょう。

  • 通信の暗号化は本番と同等か?
  • ミドルウェアはきちんと全て動作させる仕組みになっているか(BigQueryなどにデータを入れるところまできちんと出来るようにしてるか)?
  • 課金処理は途中で飛ばしたりしていないか?

そうでないと、後で痛い目を見る事になったりします。

後、ちゃんと監視ツールも設定しましょう。
NewRelic, Datadogやら, それからAWSを使っているのならばCloudWatchで、APIサーバー、それからDBやMemcachedなど各種ミドルウェアのCPU使用率、メモリ使用率、その他諸々を可視化出来るようにしておきましょう。

本番想定の負荷試験を実行するまで

いきなり本番想定で流す、という事はしません。ちゃんと、API全般が基本問題ないかを確認した上で、想定される本番と状況を出来るだけ近付けてやります。

小規模に全てのAPIを流すシナリオを動かして重いAPIがないかを確認する

ここで重いAPIがあった場合は、根本的にソースが重いのでちゃんと直しましょう。

リセマラを想定したシナリオを動かして問題ないかを確認する

要するに、リリース直後にチュートリアル周りを何度も重点的に走らされても問題ないか、という確認ですね。
後、本番想定にする為にDBにユーザーデータを蓄えないといけないのですが、
スクリプトを組んでユーザーデータを大量生産するとかも手としてはありますが、リセマラのシナリオを長時間流していればそれと同等の代物が出来上がって来るので、その方が調査も兼ねられて良いのではないかと思います。

中規模に全てのAPIを流すシナリオを動かして重いAPIがないかを確認する

ユーザーデータが作られた後に、再び全てのAPIを通る負荷試験を流してみましょう。
ここで重いAPIがあった場合は、DBのインデックスが正常に張られてないのが主な原因です。ちゃんと張り直しましょう。

ここまでやれば、サーバーソースの基本的な部分に関しては問題ないと言えるでしょう。

このタイミングで仕様変更ですか!!??!!??

本番想定の負荷試験

ここまでやって、本番想定の負荷試験を行います。
本番想定の負荷を掛けても問題ないか、という他に、

  • 長時間に渡って負荷を掛け続けて問題ないか
  • 本番想定以上の負荷を掛けてサーバーは落ちないか(DBなどの拡張が簡単に効かないミドルウェアの性能限界はどこか?)
    唐突に急激なリクエスト数が来てもサーバーは落ちないか(AutoScalingは効いてくれるか?)
  • デプロイなどを挟んでもサーバーは正常に動くか

といった事等を調べていきます。
本番で起こり得るような事象を前もって列挙し、それらに対して問題ないか、また、この構成の限界はどこにあるのか、そういう点を調査していく訳ですね。

ここまで来たら負荷試験のソースもしっかり整ってますし、後はリクエスト数を変えたりして動かしていくだけなので、負荷試験を行う事自体には苦労はしないでしょう。
ただ……ここからで何か起きたりした場合は、苦労する事になりがちです。
原因がイマイチ見えにくいところにあったり、どこも正常なはずなのに動いてくれなかったり、エラーレートが唐突に爆上がりしたり……。
粘り強くやっていきましょう。はい。それしかないです。

おじいちゃん、AWSでmemcachedのクラスターエンドポイントを指定しちゃうと、キーが一緒でも参照するたびにクラスターの中の別のホストを見てしまうんですよ

そして、10000RPSの負荷試験は、本番想定以上の負荷を掛けてサーバーは落ちないかという負荷試験で達成しました。

え? そんな負荷掛けて、どれだけのクラウド料金が掛かったのかって?
うーん……自分の給料の半年分くらいかなあ。
ちゃんと負荷試験やってない時はこまめにサーバー落としたりしても、その位行っちゃいましたね。
まあ、その甲斐あって、リリース後にサーバーが落ちたりする事はなく、何秒も掛かるようなAPIは……ちょっと出てきちゃったけど、即刻メンテに入れなければいけないレベルではなかったです。

「みんなで成長していきたい」ゲームデザイン部 白井将司 インタビュー

0

アピリッツでは若手幹部候補の育成を続けています。8月から新たに部長代行に就任したゲームデザイン部(GD部)の白井は、受託開発と運営のチームを率いています。抱負について語ってもらいました。(取材 2022年10月

―― 2020年にアピリッツに中途採用で参加されましたが、アピリッツを選んだ理由は?

自社開発のゲームタイトルがあるのでいいなと思いました! 社内だけでゲーム開発を完結できるのは大きな強みですし、実際に運用しているゲームが何本もあるのは魅力的でした。また、前職でスマートフォン向けゲームを開発していた時に、『ゴエティアクロス』のSDキャラを参考にモーションの発注をしたことがあって、知っているタイトルがあったのも決め手のひとつになりました!

また、アピリッツはゲーム開発だけではなくWeb開発も事業の柱になっている点で、会社が安定しているのも素敵だと感じました。会社の規模も小さすぎず大きすぎず、ちょうど上場前だったのもあって今後大きくなっていくだろうなという期待感もありました。

あとは面接で話をしたGD部の長谷部とアピゲー部の江中の雰囲気がとてもよかったからです! ゲーム開発の話をしたときに、コミュニケーションが大事であることや、各メンバーがある程度の裁量を持っているほうがやりやすいなど、自分が考えるよい仕事のやり方で話が通じたので、理想の働き方ができそうだと感じました。

ちなみに、オフィスの椅子が全部よい椅子で、社員を大事にしているんだろうなと思えたのもポイントが高かったです!

アピリッツのいい椅子。うしろにちらっと見えるのは図書コーナーの一部です

―― 実際に入社して働いてみてどうでしたか、白井さんの予想は当たっていましたか

はい、面接で話をした通りでした! それぞれのセクションと距離が近く、コミュニケーションを取りやすい環境で仕事がしやすいです。率先してやりたいことを言うと「やってみよう、考えてみよう」という雰囲気がすぐ生まれ、やることが決まれば「任せた!」と、ある程度の裁量を持ってやらせてもらえるのも素敵です(もちろん投げっぱなしではなく、サポートもしてくれますよ!)。

―― GD部はゲームの受託開発のチームで、白井さんはプロジェクトをまるごとひとつ見ています。「ユーザー」「クライアント」「社内のチーム」といくつか要素がありますが、どのように考えて働いていますか

ユーザーの反応は常に気にしています。受託開発なので、「クライアントの要望に答えられたら良い」、「クライアントが満足してくれたら良い」という考え方もあるかもしれませんが、それでもユーザーが一番大切だと感じます。

もちろん、クライアントもユーザーを一番に考えているので、同じ目線でゲーム開発するためにも、必要なことです。その方がよい提案ができますからね!

そしてクライアントに対しては、クライアントのやりたいこと・目指したいことを、どのように実現するか、いかによりよくしていくかを検討するだけでなく、こちらからもやれること・やった方がよいことをご提案できるように、常に意識しています。

あとは「どうしますか?」ではなく「こうするのがよいと考えている」と伝えるようにしています。考える部分や土台を作る部分をしっかり担って、クライアントには考える時間や労力を少しでも減らしてもらいたいと思っています。連絡を密に取ったり、担当者や責任者を明確にしたり、そういったことも大切です。

相手にできるだけ楽をしてもらいたいです(笑)

社内のチームに対しては裁量を重視しています。「あなたの作業については、ここまでは自分で考えてやっていいからね」と伝えて、自分で考えて仕事ができる環境を作る努力をしています。また、「誰に何を聞いてOKが出たら進めてよいのか」を明確にしています。そうすることで開発がスムーズに進みます。

―― 部長代行になって仕事の質や量はどんなふうに変わりましたか

劇的になにか変わったということは今のところありません。

ただ、今まではプロジェクトに対してフルコミットでしたが、今のプロジェクトを継続することで部全体・会社全体に対してどんなメリットがあるんだろうかと考えるようになりました。心持ち的には、ちょっとだけ高い目線で物事を見るようになったのかもしれません。

また、今まではプロジェクトのメンバーの働きやすさを常に考えてきましたが、部長代行になってからはGD部全体の働きやすさを考えるようになりました。長谷部(GD部の部長)との1on1や打ち合わせでもそういった話はしています。

――アピリッツでは1on1の文化が育ちつつありますが、1on1の効果はどんなところに感じますか

まだ始めたばかりで実感を強く感じるわけではありません。ただ、目標や今後の進路を意識しようねと伝えているので、それらを意識して働けるようになるといいなと思っています。こんな偉そうなことを言っていますが、メンバーのみんなは私と比べると若いのにしっかりしていますよ! 私が20歳前半の時は何も考えず遊び惚けていたので……(笑)

あとは、「自分がやりたかったこと」や「なんでプランナーになったんだっけ」といった原点を振り返るよい機会になります。

―― GD部をどんなふうに引っ張っていきたいですか?

「アピリッツに任せれば大丈夫!」とクライアントに思ってもらえるようになりたいです。

そのためには、今携わっているプロジェクトに対して「自分たちのプロジェクトで、自分たちが運用している」という当事者意識をより強く持つことが大切だと考えています。

まずはこれを私自身がしっかり体現することで、メンバーにも伝播してくれたらと思います。

そして、自分の成長はもちろん、メンバーの成長もしっかり促せたらいいななんてことをやんわり考えています。

Storybook for HTMLを使ってみた【準備編】

0

デジタルエクスペリエンス部デザイン&プランニンググループ所属Webデザイナーの今井です。
デザイン&プランニンググループはWebシステムやアプリ開発のチームとともに連携しながらのデザイン制作が得意分野でしたが、最近ではUXやビジネス要件定義という上流工程やReactなどフロントエンド案件に関わることも増えてきました。
今回はデザイン&プランニンググループとしても初めてとなる非常に大規模なコンテンツ制作案件を円滑にすすめるために導入したStorybook for HTMLについて書いていきます。

Storybookと使用目的

StorybookはUIコンポーネントとアプリケーションを切り離してコンポーネントを開発・管理できるツールです。
ReactやVueなどフロントエンドの開発で活用されることが多いのですが、今回は大規模なコンテンツ制作案件のため、コーディングに関わる人数も多くなり、スキルレベルも様々になるので、品質を一定レベルに保つことと作業スピードの向上を目的として導入しました。

Storybookのセットアップ

Storybookのインストールは公式にある通りに実行します
参考:https://storybook.js.org/docs/html/get-started/install

npx storybook init --type html

インストール中

Do you want to run the 'npm7' migration on your project?(y/n)

とでますが、これは何も入力しないでEnterでスキップします。

次にhtmlのコピーを簡単に行いたいので、アドオンを追加します

npm install @whitespace/storybook-addon-html

アドオンのインストールが終わったら、.storybook/main.jsにアドオンを追加します

module.exports = {
"stories": [
"../stories//.stories.mdx", "../stories//.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
"@whitespace/storybook-addon-html" //storybook-addon-htmlを追加
],
"framework": "@storybook/html"
}

main.jsを保存したら、Storybookを起動します。

npm run storybook

起動後ブラウザでStorybookを確認すると、HTMLタブが表示されます。

外部ファイルの読み込み

案件では共通のcssやjQuery、共通のjsファイルを読み込む必要があったので、Storybookでも同じ様に適用される様にしていきます。
storiesやnode_modules等と同じ階層にpublicディレクトリ を作成し、必要なファイルを配置します。

package.jsonを開き、scriptsの起動時にpublicが読み込まれるようにコマンドに -s ./public を書き加えます

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"storybook": "start-storybook -s ./public -p 6006",
"build-storybook": "build-storybook -s ./public"
},

次に.storybookディレクトリにpreview-head.htmlを作成し、読み込みタグを書いて保存します。

<link rel="stylesheet" href="/common/css/style.css" />
<script src="/common/js/jquery-3.6.0.min.js"></script>
<script src="/common/js/common.js"></script>

Storybook再起動すると外部ファイルが読み込まれるようになります。

ブランドロゴの設定

Storybookはデフォルトでロゴ画像が設定されていますが、テーマの設定で変更することができるので、public内に配置したロゴ画像を出してみることにします。

テーマの設定に必要なファイルはmanager.jsYourTheme.jsです。
YourTheme.jsのファイル名は任意ですが、特に理由もないので公式のドキュメントの通りにします。
ファイルは.storybookディレクトリに配置します。

まずmanager.jsでテーマファイルを読み込む設定をします。

import { addons } from '@storybook/addons';
import yourTheme from './YourTheme';

addons.setConfig({
theme: yourTheme,
});

次にYourTheme.jsで任意のロゴに置き換える指定をします。

import { create } from '@storybook/theming';
import logo from "../public/common/img/logo_appirits.png"

export default create({
brandTitle: '任意のタイトル',
brandImage: logo,
})

指定したロゴに変わりました。

ロゴ以外にもテーマはいろいろと設定できるので、サイトのテーマカラーなどに合わせることができます。
参照:https://storybook.js.org/docs/react/configure/theming

Storybookの準備ができたので、次回【実践編】でコンポーネントを作成していきます。

Windowsでgitを使用する時に注意すべき設定【アピリッツクリエイターズナレッジベースから】

0

ES部の岡庭です。今回は以前担当していたプロジェクトのgit管理でつまづいた内容をまとめます。

はじめに

本題の前に改行コードというものについて少し話します。

テキストファイル等でエンターキーで改行した際「改行」を表す文字というかコードが打たれるわけですが、その「改行」の種類が複数存在します。
使うOSによって主流の改行コードが異なるようです。

  • Windows:CR+LF
  • Mac  :LF

⇒このCRとかLFとかいうのが改行コードと呼ばれています。

プログラマーがMac、プランナーがWindowsという環境では改行コードの統一が必要です。

どんな問題が起きるのか

SourceTreeやTortoiseGitを使用しているとチェックアウト/コミット時にgitがWindowsに合わせた改行コードに自動変換する機能(AutoCrlf)が初期設定時のデフォルトはtrueになっています。

この設定が混在した状態になると、pullしただけで 触ってないのに全ファイル全行に改行コードの差分が出る状態 になったりします。

git上では変更として全行真っ赤に差分検知されますが、目視で違いに気付くのは難しいです。

こうなると本当の差分が埋もれてチェックの妨げになるため、ConnectではWindowsでgitを使用するメンバーは全員AutoCrlfの設定を統一するようにしていました。

WindowsとMacが混在するプロジェクトで、git上でテキストファイル系(csv/html/xml等)を扱う場合に注意が必要です。

どう向き合うべきか

このAutoCrlfという設定自体は悪いものではなく、リポジトリにCRLFが混ざってしまうということをユーザーに意識させずに未然に防いでくれる機能なので通常はありがたいものです。

問題は、プロジェクトメンバーのAutoCrlfの設定が統一されていないことで、falseユーザーがCRLFのままコミットした状態で、trueのユーザーがチェックアウトするとそれ以降全部のファイルが差分検知される状態になってしまいます。

設定値チェックアウト時コミット時
trueLF → CRLFCRLF → LF
input変換しないCRLF → LF
false変換しない変換しない

設定の種類は表の3種類があり、windows作業者は基本的にはtrueかinputで統一しておくのが安定なのかなと思いました。

エンジニア側でビルド前にLF置換作業を行う等のセーフティネットがあるのであればfalse統一でもいいかもしれませんが、falseとそれ以外が混ざると混乱が生まれるのでプロジェクト全体で方針を決めるのが良いと思います。

変更方法

初期設定で設定をtrueにするか選択できるようになってますが、初期設定をすり抜けた場合の修正方法が少しわかりにくかったので紹介します。

SourceTreeの場合

操作 > ターミナルで開く > 黒画面のターミナルが開くので以下のコマンドを入力しEnter

git config --global core.autocrlf 【設定値】

【設定値】には、true / input / falseの何れかを指定

TortoiseGitの場合  

TortoiseGit > 設定 > 設定の出どころ[グローバル] > 自動改行コード変換[AutoCrlf]のチェックボックス

まとめ

gitの設定で勝手に改行コードが変わって、覚えのない差分が出ることがあるというお話でした。

専門分野ではないので説明に不足があったかもしれませんが、詳しく調べたい場合は以下のキーワードで検索すると詳細な記事がたくさんあります。

  • AutoCrlf
  • git 改行コード自動変換

アピリッツは働く仲間を募集中! 採用ページはこちらです!

資格ってホントに役に立つの? アピリッツの若手エンジニアがAWS認定資格を勉強する理由(後編)

0

「2022 APN ALL AWS Certifications Engineers」に選出された21卒入社の串田 匠彌(くしだ たくや)と、今まさにAWS認定資格の勉強を続ける22卒入社の澤入 広(さわいり ひろ)に、胸の内を率直に語ってもらうシリーズ第二弾。今回は「AWSの資格や勉強は、仕事で役に立つの?」というテーマでぶっちゃけてもらいました。今回の聞き手も、アピリッツCDXOの西脇です。 (取材 2022年9月)

「テストと実務は別」だけど?

AWS認定資格のテストは、知識を頭に入れて、それでテストをうけて、合格しますよね。実際の仕事とのギャップはありますか? あと「これ役に立ったな」って点も知りたいです。

AWSのサービスの概要についてパッと調べてすぐ理解できるのは、開発の現場でとても役に立ちます。社内のAWSで困っている人の手助けができるようになったのも、すごくうれしい。前は「何が課題なのか、どうすれば解決するのか」がわからなくて、つらかったんです。

資格勉強をやったおかげで、とにかく調べる時間が圧倒的に減りました。考えている時間とタスクを終わらせるスピードが違ってくる。

たとえばお客様から「こんなソリューションを導入したい、こんなシステムを構築してほしい。AWSでどんなサービスを使えばいい?」とご相談いただいたときに、「調べてあとで回答します」じゃなくてその場で「コレです!」とちゃんと回答できる。

仕事全体を進める速度が上がるっていうのはその通りですね。もう一つの大きなメリットは、お客様からも信頼して頂ける点だと思います。お客様とお話ししているその場でバンバン! と回答できると、ファンになってもらえるし、次の打ち合わせを楽しみに待ってくれる(笑) 

たしかに、いろんなことをご相談頂けるようになっていますね。

うん、そうなるとね、いい状態でプロジェクトを進められます。これって自分たちのやり方1つで変えられることなんですよ。別にPMだけがすべてをコントロールしているわけじゃなく、開発に関わるスタッフ全員で信頼度を積み重ねていける。そのほうが良いものを作れるんです。お客様も僕らもうれしい。

自分はまだその境地に達していないというか、まだ課題はたくさんあるなと感じています。ただインターンで働き始めたころと比べると、勉強を続けて理解できることも増えてきました。だから、もっとインプットしなきゃなと毎日思っています。

澤入さんはアウトプットが得意なタイプだと思うんです。業務上のコミュニケーションはとても上手い。つまり、アウトプットはできているのだから、あとは知識のインプットを頑張ればいい。

アウトプットができるって大事ですよ。

AWS認定資格の話に戻りますが、「テストと実務は別だよね」っていう意見は世の中に一定数あります。僕はそれは正解でもあると思うけれど、それは「テストで学んだことが役に立たない」って意味では決してないとも考えています。

知識を身につけて、イチから調べる頻度が減るのは大きなメリットです。料理も慣れると早くなると思うのですが、それと似ているかも。慣れていないと「猫の手でこうやって切って……!」とか少しずつやりますよね。

初めて料理する人はレシピをいっぱい見るし、「大さじ1とは?」って考えるけど、慣れると味付けもチャチャっとできるもんね。

猫の手!の串田さんと、それを眺める澤入さん

「お客様に本当に必要なこと」をどう見極める?

串田さんも澤入さんも、社会人になってまだ1~2年ですが、未来予想を聞かせてください。

一生コーディングしていることはなさそうだなと思っています。技術を身に着けているという前提で考えると、お客様のビジネスを把握した上で、お客様のビジネスを技術面からサポートできる人になりたいです。本当に必要なことだけに特化して開発を進める立場の人間になっていくんじゃないかなと思っています。

串田さんの言う「(お客様に)本当に必要なこと」って、どう見極めていくのがいいんだろう?

最優先にすべきことは、お客様のビジネスを理解することだと思います。そのビジネスに必要な機能だけを実装できるようになりたい。それって技術的な知識だけでなく、理解力も求められるのかなと思います。

エンジニアとして仕事をしようと思う人は、ビジネスじゃないところで生きていきたいケースが多いかもしれません。「ひたすらコードを書いていたい!技術を磨きたい!」って。

職人気質と呼べるでしょうし、尊いものなのですが、その仕事って彫刻で例えるなら、彫刻を作る職人さんではなくて、彫刻を彫るためのノミを研ぐ職人さんの仕事なんですよ。研ぎ師。その研いだノミは、もちろんすごく鋭くていい道具ですよ。

でもね、そうはいっても僕らアピリッツの仕事は、あくまでその鋭いノミを使っていい彫刻を彫ることなんです。ずっと研いでばっかりじゃダメ。技術を使って良質な開発をして、お客様に納品するのが仕事。

たしかに使う技術ベースで話をするのと、お客様からの要件ベースで話をするのだと、おそらく後者のほうがプロジェクトとしては上手く進むように感じます。

「技術者としての好奇心」と「ビジネス」のバランス

とはいえ、技術に特化したい研ぎ師的エンジニアの気持ちもわかるんですよ。ずっと同じことを繰り返すのは飽きるし、やりたくない。やっぱり新しい技術的チャレンジが欲しいんです。そういう要素は仕事にちょっと入っていてほしい。

だから、技術的挑戦をどのくらい、どのタイミングで入れるか、いかに彼らが挑戦できる環境にするかはいつも考えています。たとえば「お客様のビジネスを成功させるには、この新しい技術は絶対に必要だ」と判断したら、提案の段階で入れます。たとえそれが初めてのチャレンジでも「僕らなら、AWSからのバックアップも得られます」って説得する

ビジネスを優先させるためだけに技術者としての好奇心を殺すのはよくないし、知識や技術にこだわることは仕事じゃない。バランスを取っていくのがIT業界ではすごく大事だと思います。

バランスのことを話す西脇さん

AWSの勉強だけじゃ身につかないこと

自分は今まさに選択肢があり過ぎて迷っている状態です。最近鈴木さん(FS部の部長)との1on1でもこの話になりました。

インフラにも片足を突っ込み、バックエンドもやらせてもらって、ちょっとわからないな……と思っていると正直に話したら、鈴木さんに「それ、100%迷子になるよ!」と予言されてしまい、いろいろと考えているところです。

AWSに限らずいろんなことを勉強し、経験を積んで、やがてトータルで考えられるようになったら、その終着点はPMのような全体を見る人なのかなと考えています。

AWSに限らずいろんなことを勉強するのはいいことだと思います。たとえばDockerの知識がないとECSはまともに使えないし、サーバレスで行くなら、要件に沿ってFargateを使ってコンテナサーバレスにするのかAPI Gatewayとか使って完全にサーバレスにするのかを判断しないと、あとあと面倒なことになるんです。そういう判断はAWSの勉強だけじゃ身につかないので、広く掘り下げていく必要があります

知識をもつこと自体は仕事じゃないんですけど、技術に詳しいことは立派な武器になりますね。ということで澤入さん、最終的にはAWS認定資格の全制覇を狙ってね。期待してます!

アピリッツの採用ページはこちらです!

120万円以上の報奨金? やりがい? アピリッツの若手エンジニアがAWS認定資格を勉強する理由(前編)

0

AWS認定資格を取得するエンジニアがアピリッツには多数在籍しています。そして、AWS認定資格をすべて取得するエンジニアも増えてきました。モチベーションってなんなのでしょう? 若手でも取れるもの? もともと勉強は好きだった? 「2022 APN ALL AWS Certifications Engineers」に選出された21卒入社の串田 匠彌(くしだ たくや)と、今まさにAWS認定資格の勉強を続ける22卒入社の澤入 広(さわいり ひろ)に、胸の内を率直に語ってもらいました。聞き手はアピリッツCDXOの西脇です。 (取材 2022年9月)

ぶっちゃけ、お金だよね? ……というわけでもなかった資格全制覇の動機

去年からアピリッツは「APN表彰手当」という社内制度を作って、社を挙げてエンジニアのAWS認定資格取得を応援しています。この成果はちゃんと出てきて、社内のエンジニア達のあいだでAWS認定資格の勉強が盛んになってきました。「この資格試験に合格しました」って報告が僕のところにもたくさん届いてる。

やっぱりこれって「APN表彰手当」が120万円以上出ることが大きいのかなと想像しますが、実際はどうなんだろう?

関連:アピリッツが報奨金総額120万円以上の「APN表彰手当」を始めた理由

自分の場合は、報奨金の総額120万円はもちろん魅力でした。モチベーションの4割くらいはお金だったと思います。

残りの6割は?

好奇心ですね。「APN表彰手当」が始まったとき、社内では「そんなの、ハードル高いよ」って声があがっていました。一部のベテランエンジニア以外は無理なんじゃないか、って空気感だったと思います。

「AWS認定資格を全部取る前に、段階的に出る報奨金が増えたらいいのに」という声がありましたね。でも、あくまで「全部取る」にこだわった。

で、ちょうど入社まもない串田さんが「ソリューションアーキテクト-プロフェッショナル(以下、SAP)」を取ったから、マネージャー陣は「彼は全部行けるんじゃないかな」って思った

関連:4月入社の新人がAWS Certified Solutions Architect-Professionalに合格した話

「入社一年目で無理なんじゃない?」って風潮も確かにあったけれど、「それ、本当かなあ?」と思ったんです。本当にダメなのかどうかを、限界までやって自分で確かめたかった。高校球児が甲子園を目指して精一杯がんばるような働き方にチャレンジするのも面白いかもなと思いました。

それに報奨金もいい臨時収入になるし、きっと実務もできるようになるだろうし、会社での評価も上がる。じゃあ試そうか、って。

試したら、全部とれちゃった。

去年串田さんがAWS認定資格をコンプリートした事実を、今年入社した僕らは知っています。だからもう「若手には絶対に無理」とは思っていません。道を切り拓いてくれた先輩がいるし、さらに報奨金でグッと後押ししてもらっています。

今年もFS部部長の鈴木さんが「AWS認定資格を勉強するエンジニアを増やそう!」「みんなで受けよう!」ってムーブメントを作っていますね。

をね、かけてますね。

どれかひとつのAWS認定資格に合格して「受かりました」って鈴木さんに報告しに行くと「おう。で、次は何を受けるの?」って言われていました(笑)

関連:「5年後、10年後のキャリアだけじゃなく、30年後も考えよう」メディアサービス部(現・FS部) 部長 鈴木利夫 インタビュー

合格発表はドキドキする?

勉強をして、受験して、結果を見るときは緊張した?

試験直後に自分ですぐに結果を確認できるのに、最初に受けたとき僕はそれを知らなくて、結果のメールが届くのをドキドキしながら待っていました。

澤入さんが「受けたんですけど、まだ結果がわからない……!」と言ってて、「いやそんなはずないでしょ、受けた直後にわかってるよ!」って(笑)

紆余曲折ありつつ、受かったことがやっとわかって「ああよかった」と思いましたが、うれしかったのは一瞬で、「さあ次は何を取ろうかな」って。次はSAPを受けます。

利夫(注:FS部部長・鈴木のこと)のが効いてる(笑)

一番印象に残っているのは最後の試験です。問題を解きながら「ああ、受かるな」と思った。でその場で合格がわかってガッツポーズして、受験会場を出て「さあどうしようかな」って。

全制覇して、自分で合格祝いとかはしたの?

いやなにも(笑) で、合格がわかったその足で会社に行って、鈴木さんに「さっき(全部のAWS認定資格に)受かりました」と報告しました。そしたら「そっかあ……」って。「もうちょっと何かあるだろ!」と思いましたが(笑)

うれしかったんだろうね。

そう思います。「そっかあ……」のあと、すぐに「ここからAWSに申請できるから、やっといて〜」って教えてもらったので、やっぱり気にかけていたのかなぁ、と。

勉強って好き?

ふたりとも、もともと勉強は好きな方?

勉強はあまり好きではありませんが、、何もしないと不安なので、安心感を得るために勉強をしています。

私はインターンでアピリッツに入ったので4月に入社したときには仕事にも多少は慣れていましたが、それでも変化が激しいWEB業界でやっていけるのか不安でした。

きっと慎重なタイプですよね。澤入さんの仕事ぶりをSlackで見ていると「細かい報告もちゃんとしてくれる人だな」と思います。変化や検討状況を細かく共有してくれる。これができるかどうかって、新人とかベテランとかは関係ないんですよね。仕事をする上で、「これは有用で意味がある」って思ってできているかどうかの違いじゃないかなと。そして、周りにちゃんと伝えているほうが、頼む方もやってる本人も安心だなと思います。

串田さんはどう? 勉強好き?

自分の場合、「勉強する」っていうのは「気になったことを調べている」だけなので、それを勉強って呼んでよいのであれば好きですね。エンジニアは、開発で「なぜタスクでこれをやる必要があるのか?」と疑問を持って、それを突き詰めて調べるのが大事なんじゃないかなと思っています。

理由が自分なりにハッキリしていないと、何らかの答えを出したときに自分で腹落ちができないんですよね。自分で理解して答えを導き出すと、それは暗記じゃない形で頭にずっと残る。若手のうちからそのクセを身につけると、その後もナチュラルにできるんじゃないかな。

そのうち「何もしない週末」が耐えられなくなる(笑)。僕、こないだ自分の誕生日に「この土日は何もしない!」と決めていたのに、日曜の夕方になんだかすごく虚しくなった。「もったいねー!」って(笑)

私も同じく、AWS認定資格の受験勉強中は通勤の電車の中でずっと勉強していたんですが、受験が終わったあとに参考書を持たずに電車に乗ったら「あれ?」って思いました

澤入さんは、週末もちゃんと勉強するタイプの人なんだなと思います。そうしないと多分合格は難しいから。

―― つづきます!

お勧めユーザー選定方法考察

0

アピリッツ コンテンツデザイン部の金井と申します。今回は膨大なレコード数を保有するテーブルからのランダム抽出に関して書いていきます。

結論

元々ある莫大なテーブルから愚直にクエリを叩くのではなくて、別にテーブルを作ってそこから効率的に参照するようにすれば良いと思います。

良くある仕様相談

プランナー「ゲーム始めたてのユーザーにもフレンド機能を積極的に活用して欲しいから、以下の条件でお勧めユーザーが出るようにしてくれない?」

  • チュートリアル完了済み
  • フレンドでない
  • BANユーザーでない
  • フレンド数がMAXでない
  • 3日以内にログインしている
  • ユーザーとのプレイヤーランクの差が-5~+5以内
  • お勧めユーザーとして出る事を許容している

サーバーエンジニア「りょーかい。(クエリ叩いて該当するユーザーを検索して指定数絞り込むだけだから……うん、そんな時間掛からないかな)1~2営業日で実装できますね」

はい、落とし穴です。

愚直に実装した結果

例えば、以下のように愚直にクエリを叩くような実装にしたら、

FRIEND_COUNT_MAX = 30
RECOMMEND_SEARCH_DATE_RANGE = 3
RECOMMEND_SEARCH_RANK_RANGE = 5
RECOMMEND_SEARCH_LIMIT_COUNT = 100
RECOMMEND_SEARCH_SAMPLE_COUNT = 30
def search_recommend_users(time = Time.current)
  ban_user_ids = BannedUser.current(time).pluck(:user_id)
  friend_user_ids = Friend.where(status: Friend.status_value(:friend), user_id: self.id)
  except_user_ids = ban_user_ids | friend_user_ids

  recommend_users =
    User \
    .where("? < last_login_at", time - RECOMMEND_SEARCH_DATE_RANGE.day) \
    .where(rank: (self.rank - RECOMMEND_SEARCH_RANK_RANGE)..(self.rank + RECOMMEND_SEARCH_RANK_RANGE)) \
    .where.not(id: except_user_ids) \
    .where(is_allow_recommend_search: true, is_tutorial_finished: true) \
    .order(:last_login_at) \
    .limit(RECOMMEND_SEARCH_LIMIT_COUNT)
    .to_a

  friend_counts = 
    Friend \
    .where(status: Friend.status_value(:friend), user_id: recommend_users.pluck(:user_id)) \
    .group(:user_id).count
  recommend_users.select! { |user| friend_counts[user.id].to_i < MAX_FRIEND_COUNT }
  recommend_users.sample(RECOMMEND_SEARCH_SAMPLE_COUNT)
end

幾らインデックスをきちんと張ってようとも、QA検証まで恙無く通っても、負荷試験で莫大なユーザー数を登録するような試験を行うと、死ぬと思います。

もし、そのままリリースしてしまったら、その機能で数秒待たされるとか、そんな事が頻発したりだとか……。
原因としては、上記の仕様においてはユーザーを一意に絞り込めるような条件が存在しないので、ユーザーが増えれば増えるほど、クエリの負荷が増大していく訳ですね。

リリース1週間前までずれた負荷試験で平均レスポンス10秒越えのAPIが出ちゃったか〜……帰りたいなぁ……

じゃあ、どうしたら良いんでしょうか。
個人としての現状のベストとしては、以下です。

改善への考察

まず、現状の実装の問題点や、仕様でもうちょっと絞り込めるようにして良いような部分を見つけましょう。

現状の実装の問題点としては、愚直にクエリ検索をする一番のデメリットは、ゲームが繁盛するに連れて検索量が莫大になっていってしまう、って事ですね。

また、仕様を見返してみてみると、一番優先度の低いと言うか、もっと厳しくして良いものが一つありますね。

  • 3日以内にログインしている

繁盛しているゲームならこれを1時間以内、とかにしても良いと思いますし、それで検索量も一気に減って解決! とかなると思うんですけど、繁盛していないゲームになると、深夜にアクセスされた時には、工夫しないと何も検索結果として出てこないとか有り得そうだったり……。

まあ、この2点から考えると、最後に何らかのアクションを起こしたユーザー群から絞り込む、で良いんじゃない? って発想が浮かんできました。
要するに、別にお勧めユーザー検索用のテーブルを作り、そこにトリガーとなるアクションを起こしたユーザーを入れて、その末尾のレコード数十件を引っ張ってくるって形ですね。
そういう形ならば、幾らユーザーが増えようとも参照量は一定ですし、時間帯で検索に引っ掛からなくなるような不安もなくなります。

ただ……この手法にも欠点がない事もなくて。
ゲームが過疎ってしまうと、同じユーザーばっかり抽選されるようになります
この手法はお勧めユーザー抽選以外でも、アクティブなデータからの効率的な参照方法として使えると思いますが、ゲームそのものが過疎らなくても、その機能が余り使われなくなるとか、そういう要因でこの事象が発生してしまう可能性はぼちぼちあります。

そういう点も留意した上で、プランナーに今のままの仕様じゃサーバーが死ぬ事と、これこれこういう理由で、ここの仕様をこう変えて貰いたいという事を伝えて、首を縦に振って貰って、改修しましょう(振ってくれない? ……その時は青い空の広さをぼんやりと眺めましょう)。

書き換えたら多分こんな感じのソースになる

FRIEND_COUNT_MAX = 30
RECOMMEND_SEARCH_RANK_RANGE = 5
RECOMMEND_SEARCH_LIMIT_COUNT = 100
RECOMMEND_SEARCH_SAMPLE_COUNT = 30

# フレンド数が増減した、お勧めユーザーランクが上下した、ログインした、などの各種トリガーの度に呼び出す
def check_user_recommend
  # lastで参照する為、古いデータは削除する
  UserRecommend.where(user_id: self.id).delete_all

  return unless self.friends.where(status: Friend.status_value(:friend)).count < FRIEND_COUNT_MAX
  return unless self.is_allow_recommend_search
  return unless self.is_tutorial_finished

  UserRecommend.create!(
    user_id: self.id,
    user_rank: self.rank,
    ...
  )
  end
end

def search_recommend_users(time = Time.current)
  ban_user_ids = BannedUser.current(time).pluck(:user_id)
  friend_user_ids = Friend.where(status: Friend.status_value(:friend), user_id: self.id)
  except_user_ids = ban_user_ids | friend_user_ids
  rank_range = (self.rank - RECOMMEND_SEARCH_RANK_RANGE)..(self.rank + RECOMMEND_SEARCH_RANK_RANGE)

  recommends =
    UserRecommend \
    .where(user_rank: rank_range) \
    .where.not(user_id: except_user_ids) \
    .last(RECOMMEND_SEARCH_LIMIT_COUNT)

  User.where(recommends.sample(RECOMMEND_SEARCH_SAMPLE_COUNT).pluck(:user_id))
end

対象ユーザーを抽出する部分がとってもスッキリしましたね!

ごめんなさい。ここの部分の仕様が、SV的にとても危ないものだと分かったので、これこれこういう風に修正しました。なので、非常に申し訳ありませんが、ここの部分だけ再度QAをお願いします。挙動としてはこことここの部分がこんな風に変わっている以外は特に変わりありません。本当に申し訳ありませんがよろしくお願いします。

没案

ユーザー単位に1~100くらいでランダムな数字を振ったりして、その値を参照される度にランダムに指定し、数値が合致するユーザーだけを抽出する。
=> QA検証的にも分かりづらいし、本番で不具合が起きても検証出来ない

検索を全ユーザーDBからではなく、自分の属するユーザーDBのみからにする。
=> ……妥協案で敗北した気分になるから嫌だ。

住み心地はどう? アピリッツ社員寮「アピトリー」、入居者インタビュー・女性編

0

アピリッツは2022年から社員寮を導入しました。2023年の本格運用に向けて、先行で何名かのアピリッツ社員がモニター入居しています。入居のきっかけや手続き、そして肝心の住み心地について教えてもらいました。(取材 2022年8月)

→前回の男性編はこちら

「ひとり暮らししたいな」と思っていた

―― 社員寮に応募したきっかけを教えてください。

私は実家が都内にあります。アピリッツに入社した当初は実家から通っていたのですが、「社会人になったことだし、そろそろひとり暮らししたいな」と思っていました。でも、初めてのひとり暮らしを家族は心配していましたし、費用もかかるので、二の足を踏んでいたんです

そうこうしているうちに会社で「社員寮はじめます!」とアナウンスがあり、応募することにしました。

―― 社員寮なら、ひとり暮らしのハードルが下がりますよね

まず、部屋を借りるときの初期費用が社員寮なら不要なのがいいなと思いました。手続きも人事のみなさんが進めてくれて、電気やガスや水道の手続きもおまかせできました。

あと家族が「社員寮なら、いいよ」と賛成してくれたんです。「万が一何かあったときに安心だろう」って。

―― セキュリティの面でも安心ですか?

私が入居している寮はマンションタイプで、一階の共有エントランスも鍵がかかっています。あと寮母さんが常駐しています。

川沿いで暮らす夢が叶った

―― 寮は月島にありますね。街の雰囲気はいかがですか?

川沿いでとても気持ちのいい場所です。治安もよくて、スーパーマーケットも近くて、なにより銀座のすぐ近くなのでとても楽しいです! お台場へのアクセスもラクです。月島の家賃相場で考えると、私が今払っている家賃は格安だなと思います。会社が家賃負担をしてくれるのでありがたいです。家賃+水道光熱費+通信費で6.5万円ほどで生活しています。

―― 社員寮に入ったことで通勤時間は短くなりましたか?

5分短縮されました。勝どき駅から寮までは徒歩7分くらいです。駐輪場も借りたので、週末は自転車でいろんなところに出かけています。月島、楽しいですよ!

―― 寮にお友達は呼べますか?

基本的に同性の友人は入れます! 騒ぎすぎなければお泊りも可能です(笑)!

音は? 普通の賃貸との違いは? 気になる住み心地

―― お部屋のクオリティはいかがですか?

新築ではありませんが、壁の厚さもじゅうぶんですし、周りの生活音も聞こえません。Wi-Fiの速度も問題なしで、リモートワークにも対応できます。ワンルームなのでリモートワークと生活のメリハリをつけることが最近の課題ですね。

私が入居した寮は自分の部屋にキッチンやバスルームがあります。食堂はついていませんが、私は自炊したかったのでちょうどよかったです。

――引っ越しの荷物はどのくらいでしたか?

衣類など身の回りのものを大きなスーツケースに3こ分くらい持ってきました。ベッドと机と小さな冷蔵庫はすでにお部屋にあって、自分で揃える家具はあまり必要なかったのも寮でよかったポイントだなと思います。洗濯機も共用ですが待ち時間は全然ありません。好きなときに洗濯できています。

私が自分で持ち込んだ家具は、自炊用にもう少し大きなサイズがほしかったので冷蔵庫と、電子レンジ。あとはテレビです。ちなみにテレビは会社の懇親会の抽選で当たったものです(笑)

ということで身軽に入居できました。

通勤時間・広さ・街の雰囲気、何を優先する?

―― しばらくは社員寮に住み続けますか?

はい!快適ですし、月島も大好きなので、長く住み続けたいです。

―― 今後もアピトリーに入居する社員はたくさんいるはずです。アドバイスできることは?

社員寮を検討される方は、新卒採用で地方から東京に初めて来る人もいらっしゃるはずです。そうすると最初の部屋選びってきっと迷うと思うんです。ひとによって何が優先事項なのかも違うでしょうし。なので、ぜひ私に相談してください。「この駅は朝の通勤時間はとても混んでいるよ」とか「ここはいろんなお店や街に近くて便利だよ」とか、いろいろアドバイスできると思います!

―― ありがとうございました!

アピリッツの採用ページはこちらです!

「各自が考えながら開発を進める環境を作りたい」工藤 嵩大インタビュー

0

アピリッツでは若手幹部候補の育成を続けています。8月から新たに部長代行に就任したアピゲー部の工藤は、入社後いくつかの部署やES部での社外の開発を経験したのち、いまのポストに就きました。経歴や抱負について語ってもらいました。(取材 2022年8月)

実は、ES部への異動は乗り気じゃなかった

―― 工藤さんは中途採用で2014年にアピリッツに入りましたよね

前職では主にコンシューマーゲーム開発をしていました。新卒で入社して、クライアントエンジニアとして7タイトルほど作りました。

―― アピリッツ入社のきっかけは?

知人の紹介です。アピリッツに入社してからは、当時運営中のゲームタイトルの保守や改修、コンテンツ追加実装を担当していました。

―― アピリッツの第一印象ってどうでした?

ホワイトだなあ、と思いました(笑)。きちんと開発をしつつ、家にも帰れるのでよかったです。そのあとES部に異動して他社のゲーム開発に関わるようになりました。

―― ES部で他のゲーム会社に派遣されることに抵抗はありましたか?

最初はあまり乗り気ではなかったですね。他の会社に派遣されて働くのであれば、それって転職と変わらないと思いましたし、だったら転職でもいいかなあとすら考えていました。ちょうど「いっそ新しい環境に身を置くのもいいかな」と迷っていた時期でもあったので……

新しい設計思想や開発体制を知った

―― そこで転職を選ばなかった理由ってなんなのでしょう

ES部から派遣された大手ゲーム会社でよい経験が積めたからです。

ES部に異動する前はエンジニアのタスク管理を主にやっていて、自分で実装することが少なくなっていました。でも常駐先ではクライアントエンジニアとしてガリガリとコードを書けて実装に携われた。

要求されている内容を実現するためにはどうしたら良いか、より良いものにするためにはどうしたら良いのか、試行錯誤を重ねながら仕事ができるというのが、とてもやり甲斐があって楽しかったです。

―― ES部で経験を積めてよかった、という人は多いですよね

はい。環境が異なれば開発ルールやフレームワークといったものも違います。すると今まで自分が経験したことがない、新しい思想や開発体制を体感できます。

そこから、その開発の良い点やそうではない点も見えてきますし、自分自身での開発スタイルに取り入れることで、よりよい開発の進め方を模索できました。

常駐先で新しいつながりも生まれましたし。つまり、新しい環境が楽しかったんです。

だから、新しい環境で身につけた経験を社内にフィードバックして、より良い開発環境を目指せたらなと考えるようになりました。

各自が考えながら開発を進める環境を作りたい

―― 2021年の11月からはアピゲー部に異動していますね、どんなことを担当していますか?

リードエンジニアとしてエンジニア全体のまとめや、スケジュール管理です。各作業者の作業進行を円滑に進行させるために、各職種のメンバーと会話しながら状況整理とスケジュール確認をおこないます。また、ゲーム全体のパフォーマンスチューニングや基盤機能の改修や修正等も担当しています。

―― そして「部長代行やらない?」って執行役員の八木さんから声がかかったのですね

ビックリしました。まずはそういったお話を頂けたこと自体がとても嬉しかったですね。今後のことを考えると、そういった役割も必要だろうと思っていたので、部長代行に挑戦してみようという気持ちになりました。

ただ、やはり今までの様に100%開発に全力を注ぐことはできなくなってしまうという点については、少し寂しさを感じる所もありましたね。現場目線と管理目線、それぞれを交えて、試行錯誤しながらやっているところです。

―― 周りの反応は?

「部長代行じゃん!(笑)」とかですね(笑)。「おめでとう」と言ってくれる人もいて、すごくうれしかったです。

―― 最後に抱負を聞かせてください

アピゲー部の技術力向上と開発環境の最適化に取り組みたいと考えています。より効率良く作業を進められる環境を整え、より面白いゲームにするためにはどうしたら良いかということを、各自が考えながら作業を進める環境を目指し、自社ゲーム全体のクオリティ向上のために努力を重ねて行きたいと思っています。

―― ありがとうございました!

住心地はどう? アピリッツ社員寮「アピトリー」、入居者インタビュー・男性編

0

アピリッツは2022年から社員寮「アピトリー」を導入しました(名前は社員みんなで考えました☆)。2023年の本運用に向けて、先行で何名かのアピリッツ社員がモニター入居しています。入居のきっかけや手続き、そして肝心の住み心地について教えてもらいました。今回は男性編です!(取材 2022年8月)

敷金礼金なし、家具つきが魅力

―― 社員寮にいち早く入居した理由は?

もともとは実家住まいでしたが、ずっと一人暮らしには興味がありました。ただ、ゼロからのスタートはハードルが高いなあと思っていたんです。自分で用意するとなると、部屋探し、契約、敷金礼金の用意が必要です。

でもアピリッツの社員寮なら、敷金礼金は不要でしたし、家賃も相場より抑えたものになります。ベッドや机、クローゼットなどの家具もついてきます。自分で用意した家具はPCとモニターと椅子です。椅子だけはこだわりました。会社にあるような座り心地が良いものを使いたかったので。

入居に関する手続きは全部会社の人事のみなさんがやってくださいましたし、自分でやったことは内見と書類を記入したことくらいです。

ということで気軽に入居できました。

―― 入居している寮の最寄り駅は、東急東横線の自由が丘駅と東急大井町線の等々力駅ですね

はい。静かな高級住宅街で治安もいいです。とくに都内へのアクセスがとても便利であることが嬉しいです。通勤時間も20分ほど短縮されました

―― 社員寮について心配事はありましたか?

ネット回線の速度だけが気がかりでした。リモートワークでも回線速度は大切ですし、趣味のオンラインゲームでも大事な要素だったので。幸い回線速度に問題はありません。快適に使えています。

自分の場合、大浴場を共用することとか、食堂や共有スペースでの洗濯については全然気にしていませんでした。

大浴場は24時間入れます

―― 大浴場は、その名の通り大きい?

大きいですね、ホテルにある大浴場をイメージしてもらえれば。15人くらい入れるはずですが、混雑はしていません。いても3人くらいかな。

―― 大浴場は24時間入れるのですか?

入れますよ! 朝9時半から10時半のあいだだけ清掃タイムですが、それ以外の時間ならば真夜中でも入れます。自分は夜遅い時間に入ることが多いです。まだ使ったことはありませんがマッサージチェアもあります。

―― 快適そうですね

洗面所ですれ違う人も少ないですし、洗濯機もいつでも使える。広い食堂でも5人以上いるのを見たことがないです。もしかしたら今は入居者が少ないのかも。

―― じゃあ生活音も気にならない?

全然聞こえません。ゴミ捨てもラクですし、エアコンもちゃんと効いて涼しいし、快適に暮らしています。

フリースペースもいっぱい

―― 食堂がついていますよね、利用していますか?

自分は全然使っていません。というのも3日前までに申し込まないといけなくて、それが少し面倒だからです。ボリュームや栄養の点でいえばメリットは大きいのですが、その3日前ルールだけがネックで……。

―― これから社員寮に入居する人にアドバイスは?

プライバシーが気になる人は、お風呂や洗濯機の共用が気になるだろうなあと思います。キッチンも共用なので、料理好きの人は少し面倒に感じるかも。でも週末に料理している人はいますよ。

駅からの距離についても、内見のときに自分で実際に歩いてみて体感したほうがいいですね。

あと、洗濯物を干すスペースを工夫したほうがいいかも。乾燥機も使いますが、部屋干しする場合は窓だけだとちょっと足りないので。

ちなみに、同性の友人であれば部屋に入れますし、申請すれば宿泊もできます。

―― 同じ寮にアピリッツ社員がいたら交流すると思いますか?

同期入社した新卒の仲間が数人いたら楽しそうですね。寮の中にフリースペースがたくさんあるのでそこで集まったりするとよさそうです。自由が丘はカフェも多くておしゃれで楽しい街なので、休日も楽しいですよ、おすすめです!

次回は社員寮ユーザーの女性にも話を聞きます!お楽しみに~。

アピリッツの採用ページはこちらです!

UnityのChild Force Expandは罠という話【アピリッツクリエイターズナレッジベースから】

0

ES部デザイナーのMです。

UnityのGUIにLayout Groupというコンポーネントがあります。
実装に関わってる方は知らない方はいないくらい頻出な機能ですね。

Layout Groupとは  

要素を縦や横に並べるためのコンポーネント。
Horizontal、Vertical、Gridの3種類があります。

ボタンを並べたりキャラを一覧で並べるのに使ったり
本当にたくさん使いどころがある機能かと思います。

Child Force Expandのチェックを外そう  

今回は初心者の方、UnityでUIを組み始めて間もない方に伝えたいことなのですが

Child Force Expandのチェックはとりあえず外そう!

です。(Gridにはなかったかと思うので今回は関係ありません)

最新のverは分からないんですが、
Unity2018等ではLayout Groupコンポーネントを追加すると
必ずChild Force Expandというところにチェックが入っています。

Child Force Expandとは、Layout Groupの中の子(並べたい要素)を、
Layout Groupの空白が埋まるように引き伸ばす機能です。
子のサイズが強制的に変わります。
Widthなら横、Heightなら縦の余白を埋めるサイズに引き伸ばしてくれます。

この強制サイズ変更が罠です。
一見便利そうですが、UIを組む上では画像のアスペクト比が変わってしまったりするので
不必要なことが多いです。
正直デフォルトでチェックを入れないでほしい。

チェックを入れたまま、その強制サイズ変更に合わせてレイアウトを組んでしまうと
後で外して元に戻すのがしんどいことが多々あります。
ピンポイントで例を上げるのが難しいのですが…。

もちろんこのサイズ変更が必要なときもあります。
必要だと思ったら後でチェックを入れればいいだけです。
強制サイズ変更を前提にしてUIを組む必要はありません。

地味なお願い  

デザイナーは元より、エンジニアでuGUIに関わられている方、
Layout Groupを使う際は、「必要なさそう」もしくは「よく分からない」と思ったら
とりあえずチェックを外してから使ってもらえると、
後で誰かが助かるかもしれません…。

ソーシャルゲームにおけるミッション機能のサーバーサイド実装の考察:反省編

0

アピリッツ コンテンツデザイン部の金井と申します。前回から一年半以上が経過し、自らが携わっているゲームも無事リリースまでこぎつけ、そして暫くの時間が経過しました。
その中で、こういう改修はすべきではなかったなー、という事を書いていこうと思います。

結論

状態の増える改善は改悪!

過程

引き継いだソースは、基本的に全てのAPIでミッションの受注処理が含まれていました
その受注処理は煩雑であり、その処理が入っているが為に、許容出来るものだとは言え、全体的にレスポンスの遅延が発生していました。

私はそれを嫌い、ログインの段階で必ず通るAPIにのみ、ミッションの受注処理を仕込むように変更しました

すると、日付変更、データ更新などの、必ずログインに戻されるタイミング以外でのミッション……例えば、イベント開始と同時に有効にしたいミッションの受注が不可能になりました

それへの解決の為に、私は、未来のミッションを予め受注しておく、という処理を組み込みました。

ま、多少問題もあったものの、負荷試験も大丈夫だったし、受注処理も1APIでのみ対応になってソースコード的にもスッキリ!
リリース後もミッション関連でバグは起きて……しまった。

このソースコードは淡麗な醤油ラーメンの如く理路整然としているのだ!

問題

さて……これの何がいけなかったでしょうか。
私はリリース後までこの改修で発生してしまう問題に気付けませんでした。
また、これが引き起こす特殊な事象に関しては、運用になってからやっと気付けるような代物で、リリース前のQAでも素通りしてしまいました。

また、上記の改修が顕在化した要因として以下の事柄があります。

  • この頃のソーシャルゲームでは、ミッションを達成した瞬間、通知がゲームの端に飛んでくるような仕組みが良くあると思うのですが、それが一つ。
  • そして、未来のミッションを予め受注しておく、という処理を組み込んだとは言え、そのプロセスは基本的な受注処理と同じ部分を通っているという事が一つ。

…………。
はい。
例えば、初心者の為のイベントミッションで、累計*回**をする、みたいなミッションがあったとします。
ここで重要なのは、開始してからのカウントではなくこれまでの累計という事です。
初心者でもゲームを遊んでいれば簡単に達成出来るようなミッションで、既に長時間遊んでいれば即時達成しているようなミッションです。
要するに、こういうミッションでは予め受注して即時達成するという事が起きる訳ですね。
そこで私は、考慮漏れを引き起こしました。

即時達成したミッションの通知が、ミッション開始前の時刻なのにユーザーに飛んでしまったんですね。

ユーザーからしたら、何か通知飛んできたけど、ミッション一覧にそんなミッションないし、受け取る事も出来ないしで、訳が分かりませんね!
他にも一定の操作をしていると、一部のミッションが達成不可能になったりだとか、そういう事まで起きてしまい。
後から補填の為のバッチ処理を組み込んだりする必要が出て来ました。
まあ……後から補填処理を組み込んで修正出来るくらいの代物で、本当に大事には至らなかったのですが。それでも不具合としては結構大きめな部類で、結構凹みました。

原因

改修によって、状態が増える、それに対する影響などを考慮出来ていなかった事ですね。
今回の未来のミッションを受注するという改修に関して言えば、

  • 未来のミッションを受注しておらず、まだ有効でもない時間
  • 未来のミッションを受注しており、まだ有効でない時間
  • 未来のミッションを受注しており、有効となっている時間

という3つの状態が新規に発生してしまった訳です。そして、それらへの考慮が足りなかった。
いや、そもそも、そんな新たに発生した状態を考慮する必要が出てくるような改修はするべきではなかった
修正するにせよ、その未来受注をそのままにして対応しようとした場合、

  • 予め受注、即時達成したミッションを開始時刻が過ぎた直後のAPIで達成通知を送る必要がある
  • 累計カウントのミッションの場合、予め受注し、そして有効でない時間に進捗した分への考慮

等々、とてもじゃないけれど、やってられないような、やったとしてもエンバグを発生させそうな複雑な処理になりそうですし。

ぼ、ぼくのやってきた事は、良かれと思って河川に外来種を放流する行為に過ぎなかったのですね。

対応

結局、未来のミッションを予め受注するという処理をやめました。
詳しくは書きませんが、全てのAPIにミッション受注処理を入れ直すというような汚い事はせず、それだけはしないようにする、という対応が出来たので。
その修正を反映して、無事に本番で機能している事も確認出来て、やーっと、ほっと出来ました。

反省

最初にも書いた通り、リファクタリングにおいては、状態の増える改修はすべきではない、という事ですね。
良かれと思ってやった事が、実は改悪だった。そんな事を今回、自分はやらかしました。
なので、思いついたような実装方法や改修が、どんなに素晴らしいものに見えても、着手する前に距離を取って考えてみる時間が必要だと実感しました。
特にそれがシステムの根幹に位置するものに関しては、寝かせて翌日に見直してみたりだとか、どんなに一任されている事柄だろうと他者の目もしっかりと入れたりだとか、そういう事をした上で着手に入る必要がある。
そう、実感しました。

また、後から色々考えた結果、今回に関しての最善策は、

全てのAPIにミッション受注処理を入れる事は変えずに、受注する必要があるかどうかを軽い処理で判定出来るようにする。

という所感です。
それがクライアントもサーバーも、多少コードとしては煩雑でも一番安心出来る、簡潔な受注処理になりそうだと思っています。

アピリッツCREATORSナレッジベースから:エンジニア向けの業務効率化

0

ゲームの運営をしていく時に、エンジニアの手が必要になる作業で、新規の開発、不具合対応、本番反映などの作業が多くあります。それらの作業で、何度もする作業が多くあり、その作業をどうにかして短縮もしくは無くすようにすることで、業務の効率化を行います。

業務効率化で行ったこと

  • Jenkinsの導入
  • 作業のマニュアル化
  • 作業をプランナー、デザイナーに依頼

Jenkins(ジェンキンス)の導入

Jenkins(ジェンキンス) とは、特定の作業の自動化をするツールです。

このツールを使うことで以下のことなどが行えます。

  • 各環境への反映作業の自動化
  • AWSで行う作業(例:スナップショットの取得など)
  • アプリのビルド作業
  • アセットバンドルのビルド作業

コマンドで実行できることは行うことができるので、大抵の作業がjenkinsで行うことができます。

また、gitにpushされた時、特定の時間に自動で動作させることができ、実行後にSlack,Chatworkに連絡を入れることも出来ます。

今まで、手動で打ち込んできたコマンドがJenkinsによってボタン一つで完了することが出来るので、業務効率化になり、

また、自動なので、打ち間違いなどのヒューマンエラーが起きづらいです。

作業のマニュアル化

普段している作業をマニュアルにして、そのマニュアルを見ながら行うことで、どのエンジニアが行っても同じ結果が得られるようにします。

また、何らかの不具合が起きた際の対応などを記載することで同じような不具合をすぐに修正することができます。

個人的に頭の中で作業の確認をしながら進めるより、マニュアル化を見ながら、作業をする方が余計なことを考えないで済むので、楽に行えます。

作業のマニュアル化を行った例

  • 反映作業
  • イベント実行時のサーバー対応
  • 課金のお問い合わせ時の調査手順

作業をプランナー、デザイナーに依頼

上記で記載したJenkinsや作業のマニュアル化をすることで、エンジニアが行ってもプランナー、デザイナーが行っても同じ結果を得ることができます。

その為、Jenkinsの使い方、マニュアルの共有を行い、エンジニアの手からプランナーへ作業を依頼して、業務を減らして行きます。

減らした分で、エンジニアにしかできない作業を行うようにします。

作業をプランナー、デザイナーに依頼する例

  • Jenkinsを使用しての各環境への反映作業
  • Jenkinsを使用しての画像のビルド作業
  • 課金のお問い合わせ時の調査手順

まとめ

エンジニアの業務効率化をすることで、普段同じような作業を行うことが減り、新しいことを行えるようになります。

最初はその業務効率化の時間を作ることすら難しいかもしれないが、少しずつ業務効率化を行っていくことで次の業務効率化へ繋げて行きましょう。

プロジェクトによって場合は変わりますが、作業のマニュアル化が一番取っ掛かりやすいので、これから始めるといいと思います。

もしJenkinsの導入がすぐに出来るのであれば、業務効率化はかなり進めれるので、ここを目指しましょう。

アピリッツCREATORSナレッジベースから:モデリングにおける「印象」の合わせ

0

ES部の3Dデザイナーの伊藤がゲーム開発の現場に入って間もなく実感したという「身につけて一番よかった」モデリングのテクニックの紹介です。実際の行程つき!(2022年7月 取材・作成)

このナレッジの作者
伊藤さん
3Dデザイナー
ゲーム専門学校を経て、2021年2月にアピリッツ入社

3Dデザインにおける経験がまだ浅い私が、ゲーム開発の現場で得て一番よかったと感じたモデリングのテクニック「印象合わせ」の紹介です。知っている方も多いかと思われますが、こちらのハサミを実際にモデリングすることで、その手法を紹介したいと思います。

印象抽出をする前のモデル

まず、上記のハサミを印象抽出なしで30分で作成するとこうりました。

ハサミの「印象」をメモ+反映させると……?

次に、実物のハサミのスクショを撮り、ざっくりと印象となりえる部分をメモしてゆきます。
(現場ではイラストからの作成で行っていたため元イラストからでも可能です)

あとは、メモした印象をモデルに落とし込んであげます。

抽出した印象をモデルに落とし込み、テクスチャをつけると、このようになります。

かなり元のハサミと近い印象を受けるようになりました。

まだまだ未熟者で、実物のハサミとの差異はございますが、印象抽出を行うことによってかなり実物のハサミに近づいたと思います。作業時間はテクスチャ合わせ1時間半くらいになります。

人間はパッと見の印象で物の形を判断するらしく、そのおおまかな印象を抽出しモデルに落とし込んであげることで、実際には差があるととしても、印象さえ合っていれば「似ている!」という認識(錯覚?)になるらしいです。

この「印象合わせ」が最近知って良かったと感じたテクニックでしたので紹介させていただきました。

アピリッツでは仲間を募集しています。

採用エントリーはこちら!

ソーシャルゲームサーバーエンジニアってどういう事してるの?

0

アピリッツ コンテンツデザイン部の金井と申します。今回はソーシャルゲームサーバーエンジニアの業務内容を紹介していきます。

端的に言えば?

ゲームを作っているエンジニアなのに、グラフィックやサウンドを作る事も、それを動かすようにプログラムを組む事もなく、かと言ってそれを生かしてユーザーを楽しませるような企画を考える事もせず、ひたすらに文字だけと睨めっこしている悲しい部門です。

はい。そうです。
ゲーム制作をしているのに、その面白さを作り上げる事には余り関わらない部門です。

自主ゲーム制作をした事があるならば、
ベジエ曲線だとか三角関数だとかを使って弾幕を生成したり、
四元数を使って三次元空間で回転操作をしたり、
円と円の距離を計算して当たり判定を実装したり、
60fpsで都度画面をクリアして描写しなおしたり、
だとかあると思いますが、そういう事も全くしません。高校以降の数学を使う事もほぼほぼ無いかと思います。

しかしながら、ソーシャルゲームの世界をsocial……社会的な、他者と競いあったりコミュニケーションをしたりするゲームとして成り立たせるのには必須の部門であり、
また、その世界を(きっと後に来る億単位の損害賠償の請求と共に)終わらせる力と権限を持っている唯一の部門でもあります。
TRPGのゲームマスターと言ったら多少語弊があるでしょうが、それに近いところに属する業務を行なっていると言って良いと思います。

具体的に言えば?

ソーシャルゲームのサーバーアプリケーションの開発、運用とそれを構築するインフラストラクチャーを構築、運用しています。
……。これだけ言われても良く分からないと思いますので、もう少し詳しく。

サーバーとは?

ユーザーデータを一括管理したり、ユーザー間のマルチプレイの同期などをしているものです。
ソーシャルゲームはインターネットに繋がっていなければプレイ出来ませんし、そうでなくても電波の悪い状況にいると一々通信に何秒も掛かったりして、快適にプレイ出来なくなったりしますが、そもそも何故そうする必要があるのかと問われれば、例を挙げると以下のようになります。

  • スマホの機種変更をした際にソーシャルゲームのユーザーを引き継げるのは、スマホそのものにこれまでガチャでウン万円を掛けて獲得したカードや装備が保存されているのではなく、サーバーでそのユーザーを構成するデータを一括管理しているからです(この機能を悪用してアカウント売買とかする輩も居るけれど……)。
  • ランキングイベントなどで他人のスコアを参照したり、競い合えるのは、サーバーで全ユーザーのスコアを管理しているからです。
    また、チート対策が出来ていなければ、チート野郎による不正なスコアに誰も追いつけなくなってしまいます。
  • ランキング機能の他にも、ギルド機能やマルチ機能もサーバーがなければできません。

要するにサーバーは、

  • 見知らぬ誰かと競ったり、共に遊んだりするsocialな機能の為に必要不可欠なものであり
  • 時にユーザーの不正を暴いてゲームの健全さを担保し、スマホを機種変更した時にも続きからプレイ出来るようにしたりもする

為のものです。
かなりざっくりとですが。

世界を終わらせる権限を持っているというのも、ゲームを構成するマスタデータ、ユーザーデータを一元管理しているサーバーアクセスする権限を持ち、且つそれを好き放題弄ったり消し去ったり出来る技能を持っている、という事だったりします。

truncate table users;

サーバーを構築するインフラストラクチャーとは?

サーバーもコンピュータです。それもキーボードやマウス、ディスプレイなんてものがついていない、所謂パソコンとは別ものを使って、全ユーザーのデータを管理します(小さいアプリケーションなら、パソコンでも十分だったりするけど)。

しかし、サーバーも一台だけで全てのユーザーを捌ける訳じゃありません。ユーザーからのアクセスに応じて不正をチェックしたり、ガチャの結果を返したり、それをデータとして保存するのにも、そんな全てに対して時間が僅かずつ掛かりますし、そうして遊ぶユーザーは1日に10万人以上にも及ぶ事があります。
サーバー1台でどれだけのユーザーを捌けるのか。想定する同時接続数はどれだけなのか。
また、ユーザーデータはどれだけの規模になるのか。
その想定の分だけの各種サーバーを用意して処理の負荷を適切に分散させ、その全てでユーザーに快適で健全なプレイを邪魔しないように、正しいデータを迅速に返さなければいけません。

そこあたりの管理は、サーバーエンジニアとは別にインフラエンジニアと分けて担当する事も多いと思いますが、サーバーとインフラはとにかく密接に紐付いていますので、分けないところも結構あるのではないかと思います。
実際、自分もサーバーとインフラの両方の開発、運用を担当していますし(サーバー寄りではありますが)。

因みに、こちらでも世界を終わらせる権限を持っています。
サーバーを構成するインフラストラクチャーそのもの好きに操作する権限を持ち、それを好き放題弄ったり消し去ったり出来る技能を持っている、という事です。
サーバーを好き放題する力が、建物の中でバットを振り回すのに比べたら、インフラストラクチャーそのものを好き放題する力は、建物そのものを重機でぶち壊す力に等しいです。

AWSコンソールからスナップショットも含めてデータベースを吹き飛ばしている

まあ、もし本当にやったら、生涯掛けても払いきれないレベルの損害賠償を突きつけられると思いますし、そんな力を持てるからこそ、人としての信用がより一層必要である部門であるとも言えます。

纏めると

ソーシャルゲームのサーバーアプリケーションの開発、運用とそれを構築するインフラストラクチャーを構築、運用しています。

と言うのは、

ソーシャルゲームのsocialな部分を開発、運用しています。

と、言い換えられるのではないでしょうか。

それでどういう業務?

大まかに分けてしまえば、

  • サーバーアプリケーションの開発、運用
  • サーバーアプリケーションを構成するインフラストラクチャーの構築、運用

になってきます。

それぞれの開発、運用に対して説明していこうと思います。

サーバーアプリケーション開発、運用

端的に言えば、プログラムを書いて、ゲームアプリケーションとの意思疎通をし、ユーザーデータの管理をするアプリケーションを作成します。

そして冒頭にも書いた通り、ひたすらに文字だけと睨めっこしています。

ガチャで最高レアのキャラが出てきた時のようなド派手な演出が出てきたり、
様々な種類のノーツが秒間10を超えるペースで降ってきたり、
ギルドで格好良いデザインで動きまくるレイドボスに複数人で討伐しにいったり、
箱庭でキャラを好き勝手に弄ったりしている間も、
そんなクライアントがサーバーと通信するのは文字だけです。
ゲーム内で使う為のアセット(要するに絵とか3Dモデルとか全部ひっくるめた素材)もサーバーには置いてあったりしますが、サーバーとしてそれを使うのはゲームアプリケーションに送るだけで、それをサーバーの中で見たりする事は基本ありません。
強いてQAチェックの為に管理画面で別に確認出来るようにするくらいで。

基本的にやる事は、ゲームアプリケーションからこういう事したい、と通信が飛んできた時に、

  • 通信してきたユーザーを特定し
  • その要求が正しいものかを確認し
  • 必要なデータを更新し
  • クライアントにデータを返す

という事です。
そしてそれら全ては文字…プログラムで完結します。
ゲームアプリケーションを開発する場合には、概ね入力はユーザーの操作で、そこからプログラムを書く事によって演出という出力を達成していく、という形が多いでしょうが、
サーバーアプリケーションを開発する場合には、入力はゲームアプリケーションからの通信(文字)で、そこからプログラムを書く事によって達成される出力もゲームアプリケーションへの通信(文字)になります。
サーバー内では絵的な演出など何一つとして必要ないのです。

ゲーム作ってるのにつまらない現場だなあ、とか思うかもしれませんが、しかし。
サーバーは、全てのユーザーデータを管理している事や、それを操作出来る唯一の場所です。
ゲームアプリケーションはこうしたいと要求を飛ばしてくるだけで、実際のデータを操作する事も出来ません。
なのでここが疎かになると、ゲームアプリケーションが疎かになるよりもかなり悲惨な事が起きます。
例えば、

  • 育成をする際に素材が減らず、無限に育成出来てしまう
  • クエスト終了時に二重にリクエストを送る事で報酬を倍獲得する事が出来る
  • レイドボスのHPを不正に0まで持っていけてしまう
  • ゲームが正常に進行出来なくなる
  • 新たに機能を拡張しようとした時に強い制限が生じてしまう

等々……。

このクソコードを書いたのはもうこの会社には居ない人で、頑張って理解しようと思ったんですけど、私には実力が足りず……どうしようもありませんでした

そして、実際に書くプログラムに関してですが、
高校以降の数学を使う事も殆ど無いと前述しましたが、その代わりに他の部門よりもスマートさが強く要求されます。
数学で例えて言うと、問題自体の難易度はそう高くないが、綺麗に解く事を要求される、と言ったような感じでしょうか。
例を挙げると、

  • 正常に動作する事は勿論の事、
  • 起こり得る全ての状況に想定が出来ているか、
  • 新しく機能を追加したいとなった時に問題が発生しないか、拡張性は十分に取れているか
  • 万一何か起きた時にそのバグを追いやすい形になっているか

と言うような多岐に渡る事柄を考慮出来ていなければいけません。
再三書きますが、ユーザーの実データを取り扱う唯一の部門となりますので、かなーり慎重になる必要があります(まあ、それでも本番まで行ったミスは結構あるんですけどね!)。
舞台裏で大道具を管理している、と言うのとも似ているかもしれません。

そしてまた、上記の為には仕様に噛み付く事もあったりします。
ユーザーを楽しませるような企画を考える事はありませんが、その企画に異議を唱える事はあると言う事ですね。なんて嫌味な部門なんだ……。
まあ、言ってしまえば、ランダムな要因が多過ぎてQA(品質保証……本番リリースする前にテストする事と思って貰えれば大体合ってる)するのに莫大な時間が掛かりそうな仕様だとか、既存の実装を大きく揺るがすような仕様だとか、そう言うものに対して必要な期間が取れない場合はNOを突きつけたり、可能な代替案をこちらから示すべきだという事です。
十分に考慮、QAされずにリリースされた機能っていうのは大概後から色々厄介な問題を引き起こすものですから。
そしてその問題の原因がどこにあろうとも。
ユーザーデータを操作出来るのはサーバーエンジニアだけ…原因究明から補填対応までの後始末をするのはサーバーエンジニアなのですから。

サーバーアプリケーションを構成するインフラストラクチャーの構築、運用

良くあるサーバールームの絵としては、24時間エアコンで空調管理された部屋の中で、ラックに数多に配置されている機器に、沢山のコードが繋がっている、というのがあると思いますが、ぶっちゃけると自分はそんな部屋に入った事すらありません。
クラウドで管理された実体がどこにあるのかも分からないインフラストラクチャーを入社当初からずーっと弄ってます。

こういう実物も見た事は殆ど無かったり

そしてこちらに関しても、正直なところ高校数学とかも大して必要ないのですが、その代わりに要求される知識がかなり多くなります。
クラウドサービスの一つであるAWSでサーバーを構築するに当たってやる事としては、

Route53で各種ドメイン登録を行い、ALBでそれをロードバランシングし、S3とCloudFrontでCDNサーバーを構築し、Elasticacheでキャッシュサーバーを構築し、ECSでECRに登録されたDockerイメージを反映するEC2インスタンス群を管理させてAPIサーバーを構築し、AutoScalingで負荷に応じてサーバー数を上下させるようにし、それぞれSecurityGroupを用いて外部からの不正アクセスを弾き、CloudWatchを使ってS3に各種ログを管理し、時にはAthenaでログ追跡を出来るようにし、各種負荷を可視化し、デプロイはCodeBuildを使って各種段階を自動的に踏むようにし……。

みたいに、専門用語のオンパレードになります。
そのAWSには、専門の資格も10を超えるくらいにあったりしますし。

まあ、そんな複雑な事柄も一回構築を終わらせて正常に動く事まで確認出来たら、運用としてはそう大してやる事はない……と言いたいところですが、開発環境なんて良く増やしてくれなんて言われますし、本番環境もユーザー規模に応じてスペックを落としてコスト削減を図る事も時折やったりしますので、ちゃんとマニュアルを書いておいたり、AWSではCloudFormationという機能でインフラをコード化までしておいたりだとか、そういう事までしっかりとやる必要があります。

そして本番環境を作るに当たっては、想定される最大ユーザー数がプレイしても耐えられるか? という事をきちんと示しておかないといけません。
それに関しては過去に別に書いた事があるのでここで細かくは書きませんが、サーバーアプリケーションとインフラストラクチャーの両方に精通していないと、問題が発覚した時の原因究明すらままならない事もあります。
そういう点もあって、サーバーエンジニアとインフラエンジニアは兼業になる事が多いのではないかと思います。

何が面白いの?

冒頭でも書いた通り、ゲームを作るのに対してグラフィックもサウンドも何も関わってこない、更にゲームの面白さを構想する事もしません。
完成品も派手にキャラが動き回ったり、スタイリッシュなUIが機能する事もなく、はたまた絢爛豪華なサウンドが流れる事もなく。どこにあるか分からないサーバーから正常な通信が返ってくるだけ。
他の部門が面白さを0から1にしたり、1を5にも10にもするようなところであれば、サーバーは減算式。何も起きなければ100ではあるが、何か起きたら一気に落ちていく。正常に稼働していてもユーザーから称賛がかかる事は基本なく、何かあったら文句を言われるばかり。

けれど、誰が何をしようとも根本的な対応が出来るのはサーバーエンジニアだけです。
ユーザーがチートをして来ようが、それに対する最終的な防衛を行えるのも、自身を含んだ運営の誰がミスをしようとも、迅速に対応出来るのも、サーバーエンジニアだけ。
そして、その為の武器として手に持つのは純粋にロジックのみです。
そういう点では、ユーザーに喜ばれる仕事というよりは、同じゲームを開発、運営しているチーム内から頼られる仕事をする、と言う方が合っているかもしれません(漫画で例えるとフラジャイルの病理医みたいな立場かも。時々仕様にケチ付けるのも含めて)。

また、負荷というものへの考慮もクライアントとサーバーでは大きく変わってきます。
クライアントはマルチプレイなどが無い限りは基本ユーザー1人との対面を考えれば良いのですが、サーバーは今遊んでいる全てのユーザーとの対面を考える必要があります。
特にリリース時なんかは、想定されるユーザー数……時には数万人が同時に遊んだしても大丈夫な仕組みになっているか? という事までも考える必要が出て来たりします。
その為にも、プログラムはクライアントよりも効率化の必要性が高いです。
無駄を徹底的に省き、時にはデータをキャッシュして参照効率を更に向上させる。
どれだけアクセスが来ようとも、変わらず迅速なロジックと堅牢且つ柔軟なインフラを組み上げて、リリースと同時に雪崩れ込むユーザーを捌き切る。
また、リリースされてからアクセスが落ち着いて来た後に新しい機能が追加されたり、時が経ってユーザー1人辺りの資産が莫大になっていこうとも、サーバーはいつもと変わらない顔をしてレスポンスを正常に、迅速に返し続ける必要がある。
それは機能美を追求し続けるようなストイックさが強く必要で、そういうのが好きな人にはがっちり合うと思います。

あそこのソース、ああすればユーザー数が増えても軽量化出来るな……(後にそれが原因でバグを起こす)。

最後に

自身を含んだ運営の誰がミスをしようとも、迅速に対応出来るのも、サーバーエンジニアだけ。

これが何を意味するか分かりますか?
ゲームを運営しているサーバーエンジニアが行き着く先は、休暇中であろうとも仕事用のパソコンを持ち運び、何か起きたらすぐにパソコンを開いて原因究明、緊急性が高かったならば不具合対応から補填まで行う必要があるという事です。
……まあ、そこまで責任を負うようになったら、それなりのお金も貰えていると思いますし、ウチのチームはここからここまで電波の繋がらない場所に行ってしまいますと事前に伝えておけば、他の方々でサポート出来る体制です。

要するに、自分しか出来ない仕事なんて持たない方が良いって事です。あったらさっさとマニュアル化したりして、ノウハウを共有しましょう。
自分が好きな時に会社からの通知も気にせず好きに休める為には、それが必要です。

ユーザーからバグのお問い合わせです!!(GW中)

【社内活動のご紹介】LT会で話すってこんな感じ

0

アピリッツでは社員が自発的に勉強をする集まりがあります。そのなかのひとつ「LT会」は、主にWebソリューションセグメントのエンジニアが、チームや部署を越えた情報共有を目的として開催しています。LT=ライトニング・トークなので、気軽にコンパクトに参加できることを目指しているそうです。ところで、発表するってどんな感じ? スピーカーとして参加したエンジニアの徳永と竹内の生の声をご紹介します。(2022年5月 取材)

関連:【社内活動のご紹介】LT(Lightning talk)会はじまりました! 次回は10/27(水)

「他にもこういう人いるんじゃないかな?」と思って登壇した

ーー LT会のスピーカーとして立候補したきっかけは?

徳永:Reactがわからなすぎてどこから手を付けていいかわからなかったという状況が直近であって、「他にもこういう人いるんじゃないかな」とか、手探りで進めていくうちに「チーム内でここは先に共有した方がいいところだな」と気がついたところあったので、どちらの立場の人にも共有したい、有識者の知見をもらいたい、と思ったのがきっかけです。

今回は「React初学者が感じた挫折ポイント5つ」というテーマで発表をしました。

React案件にアサインされたけれどまだ触ったことない、という状況において、

・勉強を始めた際に困ったこととその時どうしたか、どうすると良いか
・受け入れる案件側が先に伝えるべきこと
・実際React開発を進めて困ったこと

などについて話しました。

竹内:私が発表した内容はデザイナー寄りの内容だったのですが、だからこそエンジニアの多い弊社で自分の知っている技術を伝えてみようと思いました。JavaScriptでリッチなWebデザインを手軽に実現できるライブラリを4つほど紹介しました。Web上でのアニメーションやリッチなUIの実現における可能性を伝えられてよかったと思いました。

「JavaScriptでこんなアニメーションができるなんて知らなかった!」という感想もあったので、興味を持ってもらえてうれしかったです。

ーー 登壇は緊張しました?

竹内:それほど緊張はしなかったです。アピリッツの社員たちはみんな優しいので。

徳永:緊張しましたが、同じ初学者側からの質問や、有識者からは「こういうやり方もあるよ」みたいなコメントももらえて、情報共有の場になりよかったです。

あと、部内(クラウドインテグレーション部)で技術共有を推し進めていきたいという動きがあるのですが、部長の剣持さんが私の資料を見て、部内でも参考になりそうだとのことでSlackチャンネルで共有してくれました。

ーー 部をまたいだ情報共有で「なるほどな」「新しい視点だな」と感じたのはどんな点でしょう?

徳永:アピリッツのデザインチームの発表で、エンジニアとの連携について少し触れられていました。新しい技術にシフトしていく中で連携の仕方も変わっていくので、そのあたりの知見を共有してもらえたのはありがたかったです。

竹内:自分が今まで経験できていない技術の話を聞けるいい機会だと思います。それこそ徳永さんのReactのお話も貴重でした。また、先輩(山田さん)の発表の仕方が参考になりました。

10分はあっという間

ーー アピリッツのLT会の制限時間は10分間です。発表してみて体感的にいかがですか?

徳永:とても短かったです。過去に3分間の発表をやったことがあったので「今回は余裕があるだろう」と思っていたのですが、いざ話してみると後半のスライドはほぼ飛ばすことに……事前にリハーサルしておけばよかったです。聞いてる側としてもあっという間に感じることが多いです。

竹内:私は10分ギリギリくらいまで話していたようで、時間を有効に使えた気がします。最近のLT会では、3分で技術や業務的なこと以外にも話ができるコーナーもできたんですよ。

気負わず発表できる場所

ーー LT会はまた参加しますか?

徳永:はい。今回参加して、自分と同じ立場で困っている人も多いんだなとわかりました。また共有したいテーマが出てきたら参加してみたいと思います。

竹内:他の人の発表もいろいろ聞いて、またいつか出たいです。

徳永:人前で話すことに抵抗があるタイプの人には、LT会のような気軽な場で慣れることによって話すことへの敷居も下がっていくと思うので、練習のつもりで参加してみるのもよいと思います。

今年も「ミニプロ」やりました!22新卒Webエンジニア研修「ミーティングブース管理システム」開発

0

アピリッツのWebソリューションセグメントは、昨年から新卒研修のメニューの1つとして、22年新卒で入社した若手社員を対象とした「ミニプロ(ミニプロジェクト)」を行っています。今年のテーマは「ミーティングブース管理システム」の企画・実装・テスト・プレゼンです。サポートはありつつも、新卒だけでまるっと全部やります。
今年で2年目のミニプロ。指導や方針のアップデートについて、執行役員の西脇と、今年もサポートとして参加したエンジニアの及川と肘井に話を聞きました。(2022年6月 取材)

関連記事:社員検索システムを新卒だけで作ってみよう! 21新卒Webエンジニア研修「ミニプロ」成果発表会
関連記事その2:2022年度オンラインゲームセグメント新卒研修を行いました!!

「3つの観点」を行き来しながらサービスを考えて開発する

ーー 今年と去年のWebエンジニア育成の違いは何でしょう?

西脇:変わらず大切にしているところから話しますね。まず、研修の基本構成は一緒なんです。Rubyを学んで、実習としてミニブログを作ってみて、最後の仕上げの研修で「ミニプロ」をやる。このミニプロにアピリッツらしさが出ているはずです。

エンジニアとして開発のセオリーを学ぶことも大切ですが、プロジェクトは規模も内容も毎回違います。ですから、ミニプロでは次のようなことを身に着けてもらいたいと考えています。

1.開発者としての自分
2.お客さまのビジネス視点に立った自分
3.利用ユーザーとしての自分

この3つを大切にすることは、どんなプロジェクトにおいても不変です。3つの観点を行き来しながらサービスを考えて開発すると、お客さまや周囲から信頼されます。そういったアピリッツのエッセンスを、入社まもない段階で学んでほしかった。この下地ができていると、その後自分の得意なことや、やりたいことを伸ばすときに効くんです。エンジニアとしてのキャリアをうまく組み立てることができるはず。

このコアの部分以外は、去年と今年の内容はだいぶ違っていたと思います。

メンバーの割り振りかたを変えた

西脇:今年(2022年)は、メンバーの割り振りをこっちで決めました。去年もミニプロのPMOを担当してくれた肘井に、割り振りを全部任せたんです。

肘井:すでにインターンとしてアピリッツで活躍しているエンジニアもいましたし、なるべく公平になるように割り振りました。性別で偏りがないようにしたり。なんでこちらで決めたかというと、去年はドラフト形式でメンバーを決めたんです。でも、この方式は「つらかった」という感想がいくつか出まして……

西脇:いつ自分に声がかかるんだろうか。本当に必要とされるんだろうか」ってソワソワしたそうです。入社したばかりだし、そもそもスタートラインはみな一緒なのだからそんな心配はいらないよってこちらは思うのですが、当事者たちは違ってました

Aチーム。「限られた時間での数多くのオプション機能の作り込みがすごい!」「はきはきと聞き取りやすい良いプレゼン」という講評でした

期限内に終わらせろ!

ーー 進め方にも違いはありましたか?

西脇:スケジュールがより明確になりましたね。とくに「とにかく期限内に終わらせないとダメ」「このタイミングでここまで進んでいないとダメ」と締切を明示して、同時にスケジュールに余裕を持たせていました。プレゼンのリハーサルの時間も用意してやっていたので、全員の発表のレベルが高かったと思います。内容も発表もしっかりしてました。

及川:サポートする側も、毎日誰かが必ず開発の様子を見に行っていました。

肘井:とにかくサポートする先輩社員に「見に行こう!」と呼びかけて毎日行ってもらうようにしたんです。

及川:毎日顔を出している人には、とくに質問がしやすくなるんですよね。遠慮しなくなるし、遠慮しなくなってほしい。

肘井:今年のサポートメンバーは、去年の新卒社員が大勢いました。去年の自分たちが何に苦労して、どんなアドバイスに助けられて、何を待っていたかをよく覚えているので、その視点でサポートできていたのだと思います。

西脇:「4月~5月の研修終了後、6月からの配属先でどんな案件に入るのかを早めに話すようにしたほうが良い」といった、研修後についても意見を出してくれたのはすばらしい動きでした。

ーー 3つのチームに分かれて開発をしていました。それぞれどんな差があったのでしょう?

及川:役割分担やタスクの切り分け方に差が出ていました。例えば今回もっとも評価が高かったBチームは、タスクを非常に細かく分けてマージに気をつけていました。ドカンと大きくタスクを分けて、おのおのが黙々と開発をして、最後にマージするとうまく合体できなくて慌てることもあるので、そこでBチームがリードしていたと思います。

西脇:マージの段階で相互認識がズレているとわかって、そこから修正するのは大変ですからね。B班はインターンとしてすでに活躍しているエンジニアも参加していましたが、一方でエンジニアではないメンバーもいたので、「エンジニアとエンジニアではないメンバーが一緒にものを作るには?」を工夫しながらタスクを切ったのかもしれません。

今回最も高評価を得たBチーム。「ブースの利用×抽選 という点が新規性のある発想ですばらしい」とのこと。1位の副賞として焼肉好きの執行役員と焼肉に行きました

開発案件と並行して研修をサポートする

ーー サポートメンバーについても聞きます。単刀直入に言うと、忙しかったですよね?

及川:はい(笑)大変か大変じゃないかで言えば大変です。ただ「今年もミニプロをやる」とわかっていたので、それ前提で仕事を進めてバッファを取っておきました。

肘井:私も去年と比べて明らかに忙しかったのですが、「毎日必ずミニプロの現場に顔を出す」ことだけは守って、最低限を教えながら進めました。とはいえ、新卒同士で調べて解決してしまうことも多かったようです。

西脇:「忙しい」っていう点で言うと、実は新卒のメンバーのうち数名は、すでに開発案件に携わっている人がいました。すると、ミニプロの開発と案件が激突しそうになる。そのサインを先輩社員が察知して、「今の時期は研修を優先させてほしい。研修を受けさせてあげたい」って僕に教えてくれるんです。気がついてくれてうれしかったですし、とても助かりました。

Cチームのみなさん。「利用者目線で使いやすさなどを意識した作りになっている点が素晴らしい」「レスポンシブデザイン導入、他サービスを調査し取り入れている点がすごいです」と好評でした

次世代のリーダー育成

ーー 来年もミニプロはやりますか?

西脇:やりますよ! 新卒同士で話す機会が増えるので好評です。新卒同士の横のつながりが強まるとともに、ミニプロに関わったメンターの若手社員との縦のつながりとなります。さらに、こういった研修の場で若手社員に役割を持ってもらうことは、会社が「リーダーとして任せていきたい」という期待を込めているんです。

ーー 楽しみにしています!

最近人気な記事