ホーム ブログ ページ 6

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

次世代のリーダー育成

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

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

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

2022年度オンラインゲームセグメント新卒研修を行いました!!

0

今年度からオンラインゲームセグメントの試みとして、21卒が新卒研修の計画を立て実施しておりました。新卒の同期は一生に一度の仲間のため、繋がりを大事にしてほしいという意図のもと、昨年の11月から21卒と部長陣との間で協議し、4月〜5月中旬にかけて開催いたしました。オンラインゲームセグメント初の試みとなるため、皆さんにどのようなことを行ったか&研修に至るまでの紆余曲折をここで紹介させていただきます。

MSビルの広場を使用し、研修を行いました。

第1回 サイコロ自己紹介・並べ替えゲーム・オンリーワンゲーム

・22新卒同士でサイコロの目に出たお題を答えてもらったり、自分たちの名前順に並べ替えをしてもらったり、「自分はこれは負けない」というものを紹介してもらったりしました!

第2回 好きなゲーム布教

・自分が布教したいゲームをチーム内で共有し、さらにチームで代表を決め全体で共有してもらいました。

第3回 ゲーム研究

・チームに分かれてもらい、他社様のゲームから各チーム1タイトルずつ選び、ゲームの面白さについて研究してもらいました。

第4回 アナログゲーム企画

・6チームに分かれてもらい「紙とペンで遊べるもの」というお題の元、アナログゲームの企画をしてもらいました。

第5回 アナログゲーム制作

・前回の研修時に企画したものを形にするため、道具を作成・テストプレイによるバランス調整をしてもらいました。

第6回 アナログゲーム発表・試遊会

・完成した作品を発表してもらい、その後部長陣・21卒・22新卒入り混じり、アナログゲーム試遊会を行いました。


新卒研修のプロデュースのこと

今年度は上記のような内容で新卒研修を実施致しましたが、実はこれらのコンテンツに至るまでかなり紆余曲折ありました・・・。

今回は新卒研修をプロデュースするにあたって多大なる貢献をしてただいた、21卒のSさんをお招きして色々お伺いしていきたいと思います。

こんにちは〜
新卒研修をプロデュースしてみてどうでしたか?
今年度の研修は21卒が8人、22新卒が28人と、新卒の人数が多かったので「研修どうしよう!」ってなりましたよね笑

そもそも、前回の踏襲がなく0からのスタートだったので、あせりましたね。
22新卒の人数が多かったからこそ、アナログゲームを制作して試遊会を行った際に盛り上がった感はありますね。

0から作り上げるのは大変でしたけど、やりがいはその分大きかったですね。
研修の内容については、特に右往左往しましたよね笑

新卒研修を考えている段階では「デジタルゲームの制作 or 企画書を書いてもらおう。」という案もありましたね。
でも最終的にアナログゲームを制作してもらいましたけど・・・

アナログゲーム制作になった決めてってありますか?

アナログゲームだと、0から自分たちで作ったゲームになる & それを遊ぶことによって交流が深まると思ったからですかね。
しかも、1つのものを作り上げるには全員に主体性がないとできないですし・・・

なるほど、主体性と同期の交流を増やして欲しいという思いが根底にあるんですね!

そうですね。21卒の僕たち同士があまり関わる機会が少なかったので反面教師というかなんというか・・・笑

・・・笑
Sさんが新卒研修のプロデュースを通して成長できたなという部分はありますか?

実は研修を行ったり、人前で発表するという機会が初めてだったんですよ。
スケジュール管理だったり、資料作りだったり、所謂PM作業に近いこともできたと思います。
普段の業務ではあまりそういうことをしないので、貴重な経験でした。

いつ、どこで、どんな新卒研修を行うか、本当に0から考えましたよね!
22新卒の方々だけでなく、私たち21卒の成長にも繋がったかなと思ってます! 今日はありがとうございました!

どうも。

このような経緯がありつつ、今年度の新卒研修が開催されました。


22新卒はこんなゲームを作りました

今回研修の集大成として、22新卒の方々にアナログゲームを制作してもらったので、ここで紹介したいと思います!

このゲームどうにかしたい!! by チーム:苦しい

一言ルール説明:ミッションカードのお題に対する解決策をアイテムカードを駆使して提示しよう!

手札のアイテムカードでミッションカードをクリアできるように、こじつけることがポイント
試遊会での様子

わーど大戦争 by チーム:わんこ大戦争

一言ルール説明:他の人に当てられないように、手札に書かれたワードをうまく会話に紛れ込ませろ!

「話題カード」の会話をする際に、他の人の話に耳を傾け、何の「単語カード」を所持しているか推測することがポイント
試遊会での様子

すごく地獄すごろく! by チーム:チーム名を入力してください▼

一言ルール説明:縛りカードのお題を守りながらゴールを目指せ!

ゴールを目指すことも大事だが、縛りトークで盛り上がることが楽しむポイント
試遊会での様子

つなげろ!山手線 〜始まりの原宿駅〜 by チーム:平行線

一言ルール説明:山手線の駅と駅の名所を説明してポイントGET!

山手線の駅についての知識が身につくため、他の人にも自慢できちゃうかも!
試遊会での様子

ピタフォール by チーム:トラックボール

一言ルール説明:相手が出すカードを推測するゲーム。0を出して相手をだませ!

場のカードがコールした数より大きければ勝利!できるだけ大きな数字をコールした人が他の人のカードをめくることができるので、度胸が試されます笑
試遊会での様子

かずピッタン! by チーム:2ゃんこ

一言ルール説明:お題の数とぴったりになるようにカードを出そう。相手が×0で妨害してくるかも???

×0を出されると盤面の数も0になるので、大逆転の可能性あり!
試遊会での様子

22新卒の方々に作ってもらったゲームをMSビルのカフェスペースに置かせてもらっております。説明書を作成してもらってますので、お昼休憩の際に是非MSビルの広場で遊んでみてください!

※外部への持ち出しは厳禁です。


〜22新卒の方へのメッセージ〜

同期の人たちは一生に一度しか出会えない宝です!
これから今以上に業務で忙しくなることがあるかと思いますが、同期の方々とぜひランチ等々に行って、その繋がりを大事にして欲しいです!
来年の23新卒に対する新卒研修を、22卒の方々でプロデュースすることになった場合、新卒研修の枠組みは21卒が作りましたが、ぶっ壊してもらって構わないので、今年度以上の物が開催できることを期待してます笑

〜23新卒の就活生の方へのメッセージ〜

皆さん、もしご縁がありアピリッツへ入社し、オンラインゲームセグメントへ配属されることがありましたら、22新卒の方々が新卒研修をプロデュースしてくれるかもしれません!研修を通して同期の仲を深められるようなイベントを行ってくれると思うので、ぜひお楽しみに!!!

PyScriptで線形回帰してみた

0

運動不足解消のためランニングマシンの購入を検討しています。ゲームデザイン(GD)部クライアントエンジニアの中村です。

先日PyScriptがオープンソースで公開されましたので、さっそく試してきました。

PyScriptとは

PyScriptはPythonコードをブラウザ上でJavascriptのように実行させることができるフレームワークです。Pythonでの計算処理などをHTMLエレメントへ出力できることに加え、可視化ライブラリのmatplotも利用できてしまいます。さらに機械学習ライブラリであるscikit-learnも含まれているため、ブラウザ上で手軽に機械学習を行うことができます。

ちなみにPyScriptではPyodideで利用できるライブラリがそのまま利用できるようです。そのため tensorflow を利用することはできませんでした(Pyodide Version 0.20.0)。

基本知識

導入

公式サイトにあるように、HTMLでPythonを実行するためには以下のように記述します。これだけでPythonコードのprintが実行されます。実行された結果はdiv要素を生成してその中に出力されます。

<html>
  <head>
    <title>PyScript Hello World</title>
      <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
      <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  </head>
  <body>
    <div>!! PyScript Hello World !!</div>
    <py-script>
print('Hello PyScript')
    </py-script>
  </body>
</html>
hello_world.html結果

出力のコントロール

先ほどの例ではprintした文字列が新規に生成されたdiv要素に出力されましたが、Pythonによる計算・処理結果を特定のHTMLタグ内に出力したい場合、以下のように py-script タグに out を定義することで可能です。さらにメソッドも定義できます。

この例では now_time() メソッドで現在時刻を返し、py-scriptの最後に実行して結果をoutput-targetdiv要素に出力しています。

<py-script output="output-target">
from datetime import datetime
def now_time():
  return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

now_time()
</py-script>
<div>Now Time is:</div>
<div id="output-target"></div>
hello_time.html結果

DOM操作

py-script内で定義したメソッドをHTMLのボタンで実行する場合、pys-onClick属性でメソッド名を指定します。

さらにElement()で指定したidの要素を取得でき、input要素ならそのvalueを参照できます。divpなどの要素に対してはwrite()メソッドでその要素内に文字列を出力できます。

<div class="flex">
  <input id="calc-1" class="border p-1 rounded flex" type="number">
  <div class="p-1">+</div>
  <input id="calc-2" class="border p-1 rounded" type="number">
  <div class="p-1">=</div>
  <div id="calc-result" class="p-1"></div>
  <button id="new-task-btn" class="p-1 text-white bg-green-600 rounded" type="submit" pys-onClick="run">
    Run
  </button>
</div>
<py-script>
def run(*ags, **kws):
  a = float(Element("calc-1").element.value)
  b = float(Element("calc-2").element.value)
  Element("calc-result").write(a + b)
</py-script>
hello_input.html結果

Pythonファイルの読み込み

さらにHTMLに直接の記述ではなく、別途Pythonファイルを用意して読み込ませることもできます。このあたりはJavascriptと同じ仕組みです。

<py-script src="./sample_script.py"></py-script>

機械学習ライブラリの利用

ある程度PyScriptの使い方がわかったところで、scikit-learnでの機械学習を試していきたいと思いますが、今回は非常に簡単な例として、多数のx,y座標を近似する線形回帰を記述します。

matplotの利用

まずは数値計算ライブラリのnumpyと可視化ライブラリのmatplotを利用して簡単なグラフを表示します。

numpyで100個の乱数を生成してx座標とし、一次関数に乱数を含ませてy座標とします。これをmatplotにで散布図として表示させています。pyscript.write("mpl", fig1)と記述することで指定のdiv内にmatplotの結果を出力します。

Pyodideに含まれるライブラリを利用する場合、head内にpy-envタグでライブラリ名を記述する必要があります。そうすることでpy-script内でimportすることができます。

<head>
  <link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
  <script defer src="https://pyscript.net/alpha/pyscript.js"></script>
  <py-env>
- numpy
- matplotlib
  </py-env>
</head>

<body>
  <div id="mpl"></div>
  <py-script>
import numpy as np
import matplotlib.pyplot as plt
      
a = 0.5
b = 2
rand = 0.5
count = 100
x = np.random.rand(count).astype(np.float32)
y = x * a + b + (np.random.rand(count).astype(np.float32) * rand - rand*0.5)

fig1, ax1 = plt.subplots()
tpc = ax1.scatter(x, y, alpha=0.5,color="red")
pyscript.write("mpl", fig1)
  </py-script>
</body>
hello_plt.html結果

scikit-learnで線形回帰

最後に上記の散布図に対して線形回帰で一次関数の傾きと切片を予測させます。このとき予測させる数値をinputから入力できるようにしました。ブラウザ上で稼働させているため、こういったUIを簡単に利用できる点が非常に便利です。

簡単な線形回帰ですが、scikit-learnによる機械学習も正しく稼働しました。

      <body class="container">
        <div class="flex p-2">
            <label for="input_param_a" class="p-1">A</label>
            <input id="input_param_a" type="number" value="1" class="border p-1 rounded">
            <label for="input_param_b" class="p-1">B</label>
            <input id="input_param_b" type="number" value="1" class="border p-1 rounded">
        </div>
        <div class="flex p-2">
            <label for="input_param_rand" class="p-1">Random</label>
            <input id="input_param_rand" type="number" value="0.5" class="border p-1 rounded">
            <label for="input_param_count" class="p-1">Count</label>
            <input id="input_param_count" type="number" value="100" class="border p-1 rounded">
        </div>
        <button id="btn" pys-onClick="runTrain" class="p-1 text-white bg-green-600 rounded">実行</button>
        <div id="mpl"></div>
        <py-script>
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

def runTrain(*ags, **kws):
  a = float(Element("input_param_a").element.value)
  b = float(Element("input_param_b").element.value)
  rand = float(Element("input_param_rand").element.value)
  count = int(Element("input_param_count").element.value)

  x_train = np.random.rand(count).astype(np.float32)
  y_train = x_train * a + b + (np.random.rand(count).astype(np.float32) * rand - rand*0.5)
  
  lr = LinearRegression()
  lr.fit(x_train.reshape(-1, 1), y_train)
  prev_W = lr.coef_[0]
  prev_W0 = lr.intercept_

  fig1, ax1 = plt.subplots()
  tpc = ax1.scatter(x_train, y_train, alpha=0.5,color="red")

  _x = np.linspace(0, 1, count)
  _y = prev_W * _x + prev_W0
  ax1.text(0.2, prev_W*0+prev_W0, "y = prev_W * x + prev_W0")
  ax1.text(0.2, prev_W*0.1+prev_W0, "prev_W={:.2f}, prev_W0={:.2f}".format(prev_W, prev_W0))
  ax1.plot(_x, _y, color="black")

  pyscript.write("mpl", fig1)
        </py-script>
      </body>
hello_scikit.html結果

まとめ

今回はPyScriptを利用してscikit-learnで線形回帰を試してみました。ブラウザ上で実行するため、inputやbuttonなどのユーザインターフェースを手軽に利用できる点は非常に便利です。普段からPythonに慣れているエンジニアにとってはJavascriptを覚えるより簡単なのではないでしょうか。

しかしながら、動作環境の構築のためかページの読み込みに非常に時間がかかります。まだアルファ版ですのでこれから先の発展を期待しています。

衛生委員会からのお知らせ「生活習慣病の予防 食事編」

0

衛生委員会は「労働安全衛生法」に基づいて毎月実施される会です。アピリッツで働く人たちの危険または健康障害を防止することが目的です。衛生委員会で話し合ったことは、これまでも社内に周知をしてきましたが、せっかくなのでアピスピでも発信してみることにしました。今月は「生活習慣病の予防」のために、とくに食事で気をつけるべき点について、産業医の先生とお話ししました。野菜って大事!(2022年5月)

40歳までに10キロ増える人も

近年、肝機能とコレステロールの数値が高い人が多い印象です。とくに男性は20歳から40歳までのあいだに、体重が10キロほど増える傾向にあります。また、40歳のときの体型がその後も続く場合が多いため、せめて40歳までは食生活に気をつけてほしいですね。

10キロ!

会社によっては、会食や仕事後の飲み会で摂取カロリーが増えてしまうこともあります。都内通勤の方は勤務時間が遅い人も多いため、それが原因で間食が増えてしまったり、夕食が遅くなってしまうことも肥満の原因と言われています。

アピリッツでもゲーム事業部のメンバーは11時から20時の勤務なので、遅い時間に夕食をとる人は多そうです。栄養バランスに気をつけた食事ができるといいのですが……。生活を変えていけば、生活習慣病のリスクはすぐに下がるものなのですか?

血圧・肝臓の数値に課題のある人は、痩せればだいたい改善されることが多いです。このため、ウォーキングのキャンペーンを実施している企業もあります。若いうちは不摂生しても病気になりづらいので、なかなか気にかけることが難しいかもしれませんが、今のうちにできることをきちんとやることをおすすめします。

Advice

※ アピリッツが加入している関東ITソフトウェア健康保険組合でも運動奨励イベントを実施しています。要チェック!

圧倒的な食物繊維不足! 野菜を食べよう!

食事でとくに気をつけるべき点や、健康的に食事をするためのよい方法は?

とにもかくにも野菜を食べてほしいです! 食物繊維不足な人が多いんです。食物繊維が圧倒的に足りていません。1日350gを目安に野菜を摂りましょう。また、ご飯を食べるときは、野菜から最初に食べる(ベジタブルファースト)を意識してほしいです。そうすると血糖値の上昇も緩やかになります。

ベジタブルファースト!

野菜ジュースでもいいのですか?

糖質が高い野菜ジュースもありますから、摂りすぎには注意が必要です。野菜ジュースのパッケージに記載されている栄養成分表をチェックしてくださいね。

サプリメントや、最近流行の「完全食」はどうですか? 食に興味がない人にはありがたい選択肢なのですが……。

まだきちんと調べられていない状況ではありますが、菓子パンだけを食べ続けちゃうよりはいいと思います。

つづきます!

今後も、アピリッツの社員がもっと健康的に働けることを目指して、衛生委員会で話し合った内容を発信していきます!

「Web→ゲーム」「ゲーム→Web」、アピリッツなら事業をまたいだ挑戦ができる

0

アピリッツはWebソリューションとオンラインゲームの2軸で事業を展開しています。なので、「Web→ゲーム」や「ゲーム→Web」といった事業をまたいだ異動をおこなう人もいます。ゲームプランナーとして9年間アピリッツで活躍してきた村田は、アピリッツならではの学べる環境を活かし、2021年からWebマーケティングの世界に挑戦しています。きっかけは? ちがいは? いろいろ正直に話してもらいました。(2022年4月 取材)

「バイトしなきゃな」から始まったアピリッツでの仕事

―― 村田さんは2014年に正社員として入社したのですよね?

そうなんですが、もともとは2013年の6月からアルバイトを始めていました。大学を卒業したあと、2ヶ月くらい何もせずに遊んで暮らして、「あ、そろそろバイトしなきゃな」と思って、あと「ゲームプランナーやってみたいな」とも思って、それでアピリッツのオンラインゲームの部署にアルバイト採用で入りました。

―― ちなみに、「バイトしなきゃな」と思い立ってアピリッツを選んだ理由は……?

ここで何かかっこいいことを言えたら最高なんですが、正直にお話すると、ゲームの求人一覧をあいうえお順にソートして、それで見つけたのがキッカケです。

―― なるほど。

会社名が「ア」から始まるメリットが活きてますよね。

―― アピリッツって名前でよかったです。ということで、正直にいろいろ訊いていきます。

ハイ、そうしましょう。

―― デバッグの仕事からスタートして、次はあるゲームのデザインのディレクションを担当したんですよね。

ゲーム内に登場するアイテムの企画を考えてデザイナーに作ってもらっていました。

―― ゲームプランナー人生が着々と始まった、と。

始まりましたね。この頃オンラインゲームの広告の仕事も任せてもらえて、広告を配信するまでのフローや広告のタイプ、あと予算の勘所がつかめました。費用対効果を上げるためにターゲットを考える癖も身につきました。

たとえば、開発中のアプリを触りながらペルソナを定めて、そのペルソナにマッチした広告を考えて配信するといいんです。

そのあと一年間エンパワーメントサービス部(ES部)に異動し、大手ゲーム会社でプランナーをやっていました。これは経験してよかったなあと思います。「バイトしなきゃな」で入ったアピリッツしか僕は会社を知りませんでしたし、よその企業のマネージメントや社風を実際に知ることができて、視野が広がりました。

― ES部で活躍する人からは「クリエイターとして、いろんな経験ができて視野が広がった」という感想をよく聞きますね。

僕もそう思います。誰でも知っているような大きなIPに携われたり、いいところがいっぱいある。

ES部での1年のあとは、社内のゲーム開発チームに加わって、プロモーション担当となりました。ここでの経験のあと、Webソリューション事業に移ることに決めました。

「自分にマーケティングの知識はある?」

―― ゲームプランナーからWebマーケティングに移った理由って何だったのでしょう?

担当していたゲームでのプロモーションが一通り終わって、「次の仕事やキャリアはどうしようね?」と考えました。社長の和田さんとも面談しました。

ここでWebマーケティングに惹かれたんです。

今までゲームの広告を担当していましたが、きちんとした正解がわからないケースもありました。断片的な知識と経験で手探りでやっていて、もちろんプロモーションが上手くいくことも沢山ありましたが、そうではないこともありましたし、自分にはマーケティングの知識が足りないなと痛感したんです。

―― 岐路だったわけですね。

正直に話すと「転職したほうがいいのかな」とすら思ってました。2013年からアピリッツで働いてきて何度か自分のキャリアについて悩む瞬間はありましたが、「自分にはWebマーケティングの知識が足りない。もっとやってみたい」と感じたこのときは本当に悩んだ。

でも、ゲームプランナーをずっとやってきて、そこから「おもしろそうだから」といってWebマーケティングの会社に転職することを考えると……ちょっと抵抗あるなあ、とも思って(笑) 

―― 「そろそろバイトしなきゃ」みたいなライトな気持ちでは選べないというか、腰が重くなりますよね。

めちゃくちゃ重かったですね。経験も浅いわけですし。で、「そういえば、アピリッツならWebの仕事もあるな」と気づきました。「うちにはWebマーケティングのプロがいるじゃん!」って。もちろん、アピリッツでゲームの仕事を続けることも可能性として残っていましたが、ちょうどWebソリューションセグメントの執行役員の長谷さん(Webマーケティングのスペシャリスト)とはプライベートでもお付き合いがあったので、Web側に移ることの心理的なハードルも低かった。

知らない知識を学びやすい環境がここにあるじゃないか、と思いました。

そんなこんなで、Webソリューション事業に移って9ヶ月経ちました。

マーケティングはやっぱり面白かった

後ろの派手な風船は新入社員のみなさんの座席の目印です

――「面白そうだな」と思って飛び込んだWebマーケティングの仕事は、実際面白かったですか?

面白いですね! 今まで自分が手探りでやってきたことの答え合わせができたと思います。

今はデジタルエクスペリエンス部でGoogle アナリティクスのチームにいます。お客さまのWebサービスやサイトを理解して、どの指標を見ていくかを決め、設定して、計測します。

たとえ似ているWebサービスでも、お客さまごとに、それぞれに課題や伸ばしていきたい数値が違うんです。なので、たとえばGA4への移行ひとつとっても、Webマーケティングの定石を単純になぞっているだけじゃだめなところが面白いです。

このあたりはゲームでも同じようなことをしていました。たとえば「チュートリアルの突破率はどのくらいか?」「ゲームの進行具合と課金率の相関」などを見るんです。

―― ゲームでの経験も活きているんですね。

つながっていました。

―― つながりがありつつも、アピリッツのオンラインゲーム事業とWebソリューション事業の両方で働いて、違いは感じますか? 正直に教えてください。

うーん……仕事として大切な根本的な部分は一緒ですが、違うところもたくさんありますね。 まず、僕が今いるチームは、それぞれお客様は違えどみんなWebマーケティングをやっているので、同じ目線で同じ仕事をみんなでやっています。ゲーム開発もチームワークが大切ですが、それぞれに役割があるので、雰囲気はちょっと違います。

そして、Webマーケティングの仕事はスタートから完了までのスパンがゲーム開発と比べるとすごく短いんですよね。どんどん仕事のサイクルを回していくんです。だからなのか、若手が主体になって案件を動かしていく空気があります。

―― 村田さんが今いるチームは若手が多いですよね。

若手中心ですね。2021年に新卒で入ったメンバーも多くいます。彼らは僕から見たら超先輩ですよ。みんないっぱい勉強しているし、細かな知識を沢山持ってる。お互い忙しいときは「ここやっておきますよ」って助け合ったり。いいチームにいるなと思います。

―― よかった。正直な村田さんがそう言うんだから間違いないですね!

アピリッツのデジタルマーケティングについてはこちらをご覧ください!

『ゴエティアクロス』全力で駆け抜けた3.5周年

0

アピリッツのオンラインゲーム『ゴエティアクロス(ゴエクロ)』が2022年3月27日に3.5周年を迎えました。ゴエクロの開発陣に今回の3.5周年のこだわりと、4周年について話を聞きました。(2022年4月 取材)

強敵「命害」をフィーチャーしました

3.5周年のイベントでは、どんなところにこだわりましたか?

3.5周年では、ゴエクロでよく出現する敵「命害」をピックアップした内容にしたいと考えていました。

強敵

そもそも「命害」というのは、ゴエクロに実装された強力なエネミーたちの総称だったのですが、長らくその詳細が語られることはありませんでした。「強敵の集団」ということで、3.5周年を記念する大戦イベントに相応しい相手だったかと思います。

「命害」をどんなふうにフィーチャーしたのでしょう?

3.5周年イベントを開発していた当初は、命害大戦イベントの画面もそのまま3周年のものを使う予定でした。でも、せっかくの3.5周年ですし、ボスとの戦いを盛り上げる為に画面を新たに作り直しました! HPゲージを工夫したり、3周年の時とは違った「特別感」が出るように配列を工夫したり、イベントの段階ごとにボスの表情が変わるようにするなど、細かいところにこだわっています。

こういった内容を決めるのはゴエクロチーム全員で決めるのですか?

そうです! 開発陣全員で話し合って決めています。

2021年の9月から仕込んでました

長くサービスを続けていくと、周年のイベントも悩むんじゃないかなと思うのですが、いかがでしたか?

事前の準備が重要になってきますね。
たとえば、約2か月に渡って開催していた外伝「異界の侵略者」のフール編・ハーミット編から、今回の3.5周年本祭で開催した「命害大戦:ワールド」へとゲームを綺麗に繋げるために、スタッフ一同、去年の9月から準備していました。

同時系列でゴエクロの中でも最強格である「ラジエル」も登場させて、「いつもは敵側だけど今回だけは味方側」という熱い展開にも力を入れました!

あとは、「ワールド」という命害を操るボスがいるのですが、その敵としてのキャラクターの雰囲気や、実際に戦う際の熱い展開などをどう魅せるかについては、メンバー一同で悩みました。

てんこ盛りだったんですね

はい。だからシナリオチームも苦労したはずです。
「命害のストーリーを単独で楽しんでいただけるものにする」「ラジエルを登場させ、ストーリーを盛り上げる」「姉妹作『ゴエティア -千の魔神と無限の塔』とのストーリーの繋がりを明示する」
この3点が必須だったので、うまく繋がるように苦労して作ってもらいました。

運営が想定している以上に人気が爆発

ユーザーからの反応はどうでしたか?

全体的にユーザーからは好評でした!
前作の『ゴエティア -千の魔神と無限の塔』と『ゴエティアクロス』を密接につなぐ要素の登場で、前作を楽しんでくださっていたユーザーからの反応も多くいただきました。

あとは、3.5周年のフェス限として登場した「時界震天ラジエル」が爆発的人気で運営が想定している以上でした(笑)

あの黒髪の……!

ゴエティアクロスではめずらしいお姉さんキャラ「時界震天ラジエル」

はい、あのお姉さんキャラのラジエルです。ゴエクロでは、エルやバラムやビヒモスといった少女系キャラのほうがユーザーからの人気が高いんです。今回の「時界震天ラジエル」はガッツリ綺麗なお姉さんだったので、正直「大丈夫かな?」と心配していた節もあったのですが、人気が出てよかったです。

イラストレーターさんのフェチと熱意で通した黒髪のお姉さんが人気でよかったです

3.5周年の後夜祭も大成功

最後に、4/1のエイプリールフールのイベント「劇場版ゴエティアクロス 勇者爆誕!マステマイザー!」について教えてください

3.5周年の後夜祭で大々的にエイプリルフールネタを去年の9月くらいのタイミングから考えてました。
最初のエイプリールフールが魔法少女物だったので、今回はSFチックなロボット物にしようかなと思いました。

「本当にヒーローにしてやるぜ!」ということでヒーローになったマステマ

ちなみに、マステマを選んだ理由はですね、マステマには外伝で「ヒーローになりたい夢」があったからです。「それなら本当にヒーローにしてやるぜ!」という気持ちから、マステマイザーが生まれました。

実をいうとあのシナリオの原案は私が書いたんです。それをプランナーの久野がさらに面白くしてくれました。マステマのスーツやマステマイザーのビジュアル、LBの演出も、デザイナーだけではなくスタッフ全員でどうするかなど会話したくらいに力が入ってました。ロボデザイン見た時はかっこよすぎて痺れました!

ゴエクロらしい開発スタイルだったんですね

実際にマステマイザーが世に出た後、ユーザーがワイワイと盛り上がってくれていたので、「みんなヒーローものやロボットのも好きなんだな。うんうん」とちょっとうれしくなりました(笑)

4周年はどうなる?

最後に、4周年についてもちょっとだけ教えてください!

4周年はゴエクロにとっての大きな変化のタイミングとしたいと考えています。
天界との戦いの最中、主様やエルたちはどう立ち向かうのか? また、その先に一体何が待っているのか?
長年続いた流れから新しい流れに変えていく、そういう周年にしたいなと思っています。

もしかしたらゴエクロ2もあったりなかったり?

どうでしょうね。あるかもしれない、ないかもしれない……ですね! これからも全力でやっていきます!

【祝!今年も日本一】第13期女流球聖戦・アピリッツの荒木 愛がタイトル防衛に成功しました

0

アピリッツが誇る日本一のアマチュアポケットビリヤード選手・荒木さんが、日本アマチュアポケットビリヤード連盟主催の「第13期 女流球聖戦」にて、タイトル防衛に成功しました! ということで、今回も優勝記念インタビューです。(2022年4月 取材)

―― 荒木さん、優勝おめでとうございます。初めての防衛戦はいかがでしたか?

荒木:とても緊張しましたし、挑戦者だった去年よりも苦しい試合になりました。勝った瞬間は「嬉しい」よりも「疲れた」という気持ちが大きかったですが、今は勝てて良かったなぁとひと安心です。

―― 去年の女流球聖タイトル獲得時に「”今回はラッキーだった”と思われないように」と言っていたのが印象的でした。この一年、ビリヤードの練習量や試合への心構えで変化はありましたか?

荒木:練習量は以前と変わらずでした。去年と同じくコロナ渦が続いていたのでビリヤード場の時短営業もありましたが、その中でもモチベーションは維持できていたと思います。試合も開催数は少なかったのですが前より気を引き締めて臨むことができたと思います!その結果、大きな試合で優勝や入賞もできました。

かっこいい(引用:https://www.onthehill.jp/archives/53894 )

―― プロも参加する『なでしこグランプリ2021』で準優勝したり……

荒木:そうです!

―― アピリッツでの仕事と日本トップクラスのビリヤードの腕を両立させているのもすごいです。ということで、荒木さんがサポートを続けているアピリッツのエンパワーメントサービス部(ES部)についても聞きたいです!

荒木:ES部はいいですよ~。アピリッツの社内からも、そして社外からも、ES部の仲間となってくれるクリエイターが今後さらに増えるといいなと願っています。アピリッツの社内よりも大きなゲームプロジェクトに関わることができたり、最新の技術に触れる機会があったりと、スキルアップ、経験につながると思います! 社外のプロジェクトに参加することに不安がある人もいるかと思いますが、「他社に留学できる」くらいの気持ちでチャレンジしてもらえると嬉しいです。

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

↓ 当日の荒木さん勝利の瞬間です! かっけー!

関連:【祝! 日本一】第12期 女流球聖位 荒木 愛 インタビュー【ビリヤードと仕事の話をします!】

関連: 【荒木さんおめでとう!】荒木 愛、『なでしこグランプリ2021』準優勝!

2022年度 アピリッツ入社式、45名を迎えました

0

2022年4月1日にアピリッツは入社式を行いました。今年は45名入社します。去年より15名多い!会場にみんな入るのか!? ということで、即日レポートです。(2022年4月 取材)

慣習だからやるわけじゃない

今年も会場はオフィスのカフェスペースです。社長の和田が「慣習だからやるわけではなくて、一生に一度の瞬間なんだから、思い出に残るような会がいいよね」と言っていたのが印象的でした。

入社式前日の様子はこちら。

人事企画部のメンバーが設営やかざりつけを行います。密をさけつつ間隔を工夫して椅子をならべています。今年も風船がいる!

始まりました。

去年と会場のレイアウトがちがいます

本質的なことを考えて仕事をする

まずは社長の和田から新入社員のみなさんにご挨拶です。

写真右側にならんで座っているのが役員です

今年の挨拶では、和田からは時事ニュースや今後の社会の流れ、そして自身が社会人になったばかりの頃をふまえつつ「敷かれたレールの上に乗っていれば上手くいく時代は終わった。だから、言われたことをやるのではなく、本質的なところを考えるために”なんで”と常に自問して動いてほしい。”何を解決しないといけないのか”を考え、本質的に自分がすべきことを考えてこの社会で生き残ってほしい」とメッセージを伝えました。

そして、それぞれの役員からも「夢中になれるものを見つけてほしい」「普通はこうすべきという常識にしばられないで」「仕事のおもしろさを見つけてほしい」「役員紹介の動画を自作したので見てほしい」など、めいめい新入社員にエールを送っていました。

ということで、入社式をつつがなく執り行った4月1日でした。明日から研修を行います!

 【ゴエクロデザインについて語ろう】その3 :これで最終回!? プロの作業環境とメイキング動画を公開します!(時界震天ラジエル)

0

アピリッツのオンラインゲーム『ゴエティアクロス(ゴエクロ)』のデザインをもっと知ってもらいたい!ということで始まったゴエクロデザイン連載。第2回ではイラストレーターの作業環境やメイキング動画を紹介しました。これが大好評だったので、第3回もメイキング行っちゃいます! 今回は「時界震天ラジエル」のデザインを担当したイラストレーター”蒼武”氏に話を聞きました。(取材 2022年3月)

第一回はこちら!【ゴエクロデザインについて語ろう】その1:ゴエティアクロス「第3回 衣装デザインコンテスト」開催中

第二回はこちら!【ゴエクロデザインについて語ろう】その2:プロの作業環境とメイキング動画を公開します!

作業環境はこんな感じ!

まずは今使っているPCとディスプレイをご紹介しますね。

◆PC:raytrek-V ZT(Core i7-8700/32GBDDR4/NVIDIA GeForce GTX1060 6GB)
◆ディスプレイ:Iiyama/23.8型/IPS方式ノングレア

発色も良くコスパの良いディスプレイだと思います。こちらをデュアルモニターにしています。

◆ペンタブレット:Wacom Intuos Pro Medium PTH-660

ずっとWacomの板タブを使っています。首と目が疲れないので板タブ派です。
ファンクションキーが便利ですが、タッチ入力は切っています。

「時界震天ラジエル」メイキング

蒼武氏による「時界震天ラジエル」のメイキング動画も公開します! 蒼武氏が制作中に考えていることなどをTIPSとして表示しています! 是非ご覧ください!(ラジエル様も一緒です♬)

蒼武氏いわく、デザイン画は自分が見やすいように配置しているものだそうです。

フェティッシュな「時界震天ラジエル」

今回はキャラクターの性格や行動原理などの最も基盤となる設定の決定にも関わらせて頂いております。
ゴエクロのストーリーが大好きなので、魅力的かつ劇的なキャラにできたら、という想いを込めて設定とデザインを担当させて頂きました!

見た目だけじゃなく性格もあわせてデザインされたんですね。

キャラクター設定のコンセプトは「神に仕えるダウナー系強者」でしたので、それを連想できる要素を入れています。過去に登場している天使のデザインの一部を踏襲しつつ、一線を画すデザインになるように詰めていきました。

あとは、3周年の時に出ている「叛逆神書エル」を連想できる要素をわざと入れているのですが……ちらほら気付いてくれている人がいて嬉しいですね!
このあたりは設定から関わらせて頂いているから出せたデザインではないかと思います。

全体のイメージは「美しい」とか「緻密で豪華」とかよりも「キャラクター性」が出るようにシンプルなデザインでまとめています。シルエットだけでも十分彼女だと判断できるのではないでしょうか!

時界震天ラジエルは、よくユーザーのみなさんから「顔がいい!」と言っていただいていると聞きました。

神に仕えるダウナー系強者! とにかく顔がいい!

そうなんですよ、嬉しいです!
顔はキャラクター性をしっかり伝えられるようにこだわり抜いたところだったのと、自分の好きな造形を突き詰めたので、そうやって込めた気持ちがユーザーに届いたのかなと思うととっても嬉しいです。
ただ、当初は「このデザインで本当に大丈夫?」というプランナーさんからの声もあったんですよね。

えっ! 「大丈夫?」というのは……?

最初に黒髪のデザインを出したときに、プランナーさんから「黒髪で大丈夫?(ゴエクロの人気キャラに前例が少ないけど)」と聞かれたんです。でも、私自身は黒髪の要素が大好きで、黒髪の魅力を最大限引き出せたら嬉しいと思っていました。
なので「誰かのフェチにするつもりで描きます!」と言ったら、黒髪で描かせてもらえることになりました笑
結果的に、彼女の性格のイメージともぴったりのキャラを作れたのではないかと思います。

全3回のイラスト企画、いかがでしたか?

ゴエティアクロスのイラスト連載は今回で一区切り! ……ということで、ゴエクロのデザインリーダーの飯山からユーザーのみなさんにメッセージです!

ゴエティアクロスのデザインリーダー・飯山です。

全3回の「ゴエクロデザインについて語ろう」はいかがでしたでしょうか?
皆さんの目に届くまでに、デザインは様々な工程を経ています。
どんなデザインであろうとも、作り手は考えや想いを詰め込んでいます。
皆さんに「素敵な体験だ!」と思ってもらえるように、今後もゴエクロデザイナーチーム、ひいてはゴエクロ運営チームは頑張っていきたいと思いますので、応援をよろしくお願いいたします!

また、今後も不定期で「ゴエクロデザインについて語ろう」を掲載できたらと考えていますので、楽しみにしていてくださいね!

アピリッツのAWS認定フル取得社員に聞く「もっててよかったAWS認定」その3 :浅田大輔

0

アピリッツではサービス品質の向上と社員の成長を促すことを目的に、2021年6月に「APN表彰手当」を定めました。平たく言うと、「認定資格の全制覇とAWSの技術を広めることをより一層推進したい!」という気持ちで作った制度です。こちらが功を奏したのか、今年はAWS認定をすべて取得したエンジニアが続々と登場しました(過去2年間は1名のみでしたが、今年は3名!)。コンプリートしたエンジニアがアピには3名もいるので、「AWS認定のどこが役に立った?」「純粋に面白いなと感じたのはどんなところ?」「後輩におすすめする?」といったAWSにまつわるあれこれを、思い思いに、ざっくばらんに語ってもらうことにしました。

最終回となる第3回は、2020年と2021年に「APN AWS Top Engineers」に選出されたアピリッツのAWS番長ことAIエンジニア・浅田大輔の「もっててよかったAWS認定ばなし」です。浅田が考えるAWSの面白さ、必読です。(2022年3月取材)

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

関連するプレスリリース:アピリッツ、DX時代におけるAWS活用の推進とデジタル人材育成、ならびに福利厚生の拡充を目的に、社内制度『APN表彰手当』を制定。AWSエンジニアに報奨金を年間最大121万5千円支給

「AWSの定石」を学べる

資格試験を取ったこと自身というよりも、資格を取るにあたって勉強した際に、色々な観点を学べたことが良かったと思います。

コスト、耐障害性、運用、拡張性、セキュリティなどの観点は、サービスを展開するうえで重要なことですが、それらをAWS上でどのように実現していくのか、というエッセンスを学べました。言ってみれば定石、ベストプラクティスということですね。

AWSを活用する案件においては、それが受託であれ、自社サービスであれ、大体何かしら解決したい問題があります。アクセスが大量に来ても耐えるようにしたい、運用を楽にしたい、コストを削減したい、短期でサービスローンチまでもっていきたい、大規模災害に備えたい、分析環境を整えたい、etc.。それらの解決の拠り所となるような考え方を学べたのが良かったと思います。

もちろん、試験で学べることで全てが解決できたわけではありません。試験で想定されるケースはある種限定的な状況が想定されますが、現実のケースはそこまで単純ではないことの方が多いですから、試験の知識だけでは不十分とさえ感じます。ですが、基本的な定石を抑えているからこそ、応用も効くと思いますし、自信をもって取り組めていると思います。

刻一刻と進化し続けるAWSのすごさ

必要なものを、必要な場所に、必要なタイミングで、必要な量だけ調達できる。しかもリーズナブルな価格かつ品質の保証されたものを。これって、すごく便利ですよね。小規模なスタートアップはもちろん、大規模なエンタープライズでも、すごく戦略的な価値があると思ってます。

加えて、刻一刻と進化し続けているところは、素直にすごいなと思います。今日の常識は、下手すると明日には陳腐化しているかもしれません。

例えばAWSを代表するサービスの一つであるS3(Simple Storage Service)では、「効率よく検索するためにランダムなプレフィックスをつける」、「結果整合性なのでデータを更新した直後に読みこんだ場合に古い状態のままということが起こりえるので、確実に更新後のデータが欲しければ新しいファイル(キー)を作成してそれを読みこむ」などのプラクティスがかつては行われていました。

ですが、今やランダムなプレフィックスに何のタクティカルアドバンテージもなく、デフォルトで強い整合性がサポートされるようになっています。

このように、AWSは日々進化するので、知識をアップデートし続ける大変さはあるのですが、その分便利に使えるようになっていくので、RPGで新たなアイテムを手に入れて苦戦していた強敵を楽に倒せるようになるような感覚に近い楽しさを感じます

ゲームといえば、オンラインゲーム感覚でクラウドを学べるコンテンツが出たそうです。他にも強化学習エンジニアの育成の一環でDeepRacerを展開したり、SageMakerを教育目的で無料で利用できるSageMaker Labなどを展開するなど、次代の教育に力を入れているのも素晴らしいと思います。

AWSの専門家として認知されること

ある意味では、実務で役に立ったということになるのかもしれないですが、まずAWSの専門家であると認知してもらえるということは大きなメリットでした。

もちろん実力が伴っていないと話にならないですし、資格をもってないからといって業務に支障があるわけではない(むしろ、資格はなくても、知識、経験ともに十分備えている方はたくさんいると思います)のですが、一つの分かりやすい看板にはなるのかなと思います。

少なくとも、自発的であれ、やむを得ずであれ、AWSの知識吸収に対して積極的に時間を割いている、という証明にはなるはずです。そうしたときに、言動への説得力に多少なりとも良い影響を与えるはずです。

また、何かAWSのことでわからないことがあれば、この人に聞いてみようみたいな流れができやすくなります

そうすると、期待に応えるために、よりAWSのことに詳しくならなきゃというモチベーションや、自負、矜持なども生まれてくるでしょう。そこからさらに、「またこの人に聞いてみよう」、「答えられるように、もっと勉強しとかなきゃ」みたいな良いスパイラル、フライホイールになっていくのかと思います。

少しづつ学んでいけば、合格にたどりつける

「宜しく先ず一事より一日より始むべし」 という言葉もあります。もし、AWSについてもっと知りたいと思ったら、AWS認定資格の取得を目指してみるのは如何でしょうか。思い立ったが吉日だと思います。

最初は遠い道に思えても、少しづつ学んでいけば、合格にたどりつけると思います。 大切なのは『合格に向かおうとする意志』だと思います。 向かおうとする意志さえあれば、たとえ一時的に不合格になったとしても、いつかはたどり着きます。向かっているわけですから。

アピリッツのAWS認定フル取得社員に聞く「もっててよかったAWS認定」その2 :中村翔吾

0

アピリッツではサービス品質の向上と社員の成長を促すことを目的に、2021年6月に「APN表彰手当」を定めました。平たく言うと、「認定資格の全制覇とAWSの技術を広めることをより一層推進したい!」という気持ちで作った制度です。こちらが功を奏したのか、今年はAWS認定をすべて取得したエンジニアが続々と登場しました(過去2年間は1名のみでしたが、今年は3名!)。コンプリートしたエンジニアがアピには3名もいるので、「AWS認定のどこが役に立った?」「純粋に面白いなと感じたのはどんなところ?」「後輩におすすめする?」といったAWSにまつわるあれこれを、思い思いに、ざっくばらんに語ってもらいます。

第2回は、オンラインゲーム事業のクライアントエンジニア・中村翔吾の考える「もっててよかったAWS認定ばなし」です。ちなみに、中村は約7ヶ月で一気にAWS認定コンプリートまで駆け抜け、並行してAWS認定の社内勉強会を主催するアジリティの高い人物です。(2022年3月取材)

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

関連するプレスリリース:アピリッツ、DX時代におけるAWS活用の推進とデジタル人材育成、ならびに福利厚生の拡充を目的に、社内制度『APN表彰手当』を制定。AWSエンジニアに報奨金を年間最大121万5千円支給

ゲーム部門で活きるAWSの技術

AWS Certified Solutions Architect – Professional

新規開発のゲーム案件にインフラ構築として参加する際に、要件を聞いただけで構成をイメージできるようになります。そこからCloudFormationへ落とし込むスピードが上がったので、勉強してよかったですね。

AWS Certified Machine Learning – Specialty

こちらは、実務でわかりやすく役に立ったシーンはまだないのですが、取ってよかったなと思います。3年前挑戦&挫折したkaggleのタイタニック問題を今ならクリアできそうな気がします。

また、機械学習は巷でも話題になっていますよね。ですから、知識があることの1つの指標として取得しておくと良いアピールになるはずです。勉強しましょう。

AWS Certified Data Analytics – Specialty

ゲーム開発部門としては、売り上げだけを見るのではなく、ユーザーの動向を分析し、常にトレンドを追いかけていくことが今後さらに必要となるでしょう。こういったトレンドのなかで「どのデータをどのように可視化すべきか」という話題を論じることかできるようになったのは、大きな変化だと思います。

「こんな機能あったらいいのにな」が全部ある

AWSの技術のおもしろいところは「こんな機能あったら便利なんだけどなー」とこちらが思うと、大体あるところですね。AWS認定の勉強中に出合うことが多かったです。

おもしろいとはいえ、AWS認定11種をコンプリートすることは非常に長い道のりです。まずは1つ取得してみることから始めるといいと思います。

中村の書いたAWS認定の勉強会にまつわる記事はこちら

明日の「もっててよかったAWS認定」は、アピリッツのAWS番長・APN AWS TOP ENGINEERの浅田です!

アピリッツのAWS認定フル取得社員に聞く「もっててよかったAWS認定」その1 :串田匠彌

0

アピリッツではサービス品質の向上と社員の成長を促すことを目的に、2021年6月に「APN表彰手当」を定めました。平たく言うと、「認定資格の全制覇とAWSの技術を広めることをより一層推進したい!」という気持ちで作った制度です。こちらが功を奏したのか、今年はAWS認定をすべて取得したエンジニアが続々と登場しました(過去2年間は1名のみでしたが、今年は3名!)。コンプリートしたエンジニアがアピには3名もいるので、「AWS認定のどこが役に立った?」「純粋に面白いなと感じたのはどんなところ?」「後輩におすすめする?」といったAWSにまつわるあれこれを、思い思いに、ざっくばらんに語ってもらいます。
第1回は、21新卒のエンジニア・串田匠彌の「もっててよかったAWS認定ばなし」です。(2022年3月取材)

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

関連するプレスリリース:アピリッツ、DX時代におけるAWS活用の推進とデジタル人材育成、ならびに福利厚生の拡充を目的に、社内制度『APN表彰手当』を制定。AWSエンジニアに報奨金を年間最大121万5千円支給

「認定資格とっててよかった!」と思う局面は沢山あった

AWS Certified Cloud Practitioner

AWS認定のうち、これは「最初の一歩」でした。実務で……というわけではないのですが、採用面接でアピリッツの執行役員の西脇さんとの会話のネタとして活躍してくれました。

AWS Certified Solutions Architect – Associate

CloudFormationでリソースを作成する際に、ymlファイル内の各セクションに何を記載すべきかを事前に理解することができました。

AWS Certified Solutions Architect – Professional

CWAlarmやCWLogsを用いての監視設定で、概要についてはすでに試験対策で勉強していたので、スムーズに開発に取り組めました。

また、「サービス自体の機能はわかるけど、どうやってやりたいことを実現したいかわからない」というお客様に対し、実用的なサービスの組み合わせをご提案できるようになりました。

AWS Certified Machine Learning – Specialty

機械学習は、そろそろ市場に馴染んできた技術だと思います。なので、そのうち「教養として機械学習の知識はあるよね? 機械学習を用いての実装できるよね?」という状況がスタンダードになっていくのではと考えます。そんな日に備えて、勉強しておいて損はないです。

そして、実際に勉強して「おもしろいなあ」と感じた点もありました。Rekognition・Forecast等は、機械学習にあまり馴染みのない人でも恩恵を受けられるようなサービスです。ユーザが「使えそう!」と思ったサービスならなんでも出してくれそうと思いました。これからが楽しみですね。

AWS Certified Security – Specialty

暗号化されていないS3、EBSの暗号化の仕組みは理解できたので、今後使えそうです(まだ実際にやっていないのでなんとも……ではありますが)。

Envelop暗号化について仕組みを詳しく知ることができたこともよかったです。特に、マスターキーを削除したらどれぐらいマズいのか、そして間違って即時削除されないようにAWSがどういった対策を取っているのかが印象的でした。

こういったユーザが意図せずやってしまうであろうインシデントに対して、AWSが予見的に対策を取っているところに「このフォロー考えた人、頭いいなぁ」と思いました(CloudTrailのログ取得とかKMSの削除保護期間とか)。

全部の資格に当てはまる「よかったこと」「おもしろいこと」

とにかくドキュメントを理解するのが早くなります。言うまでもなく、これは仕事をする上でとても助かります。

勉強を続けて「おもしろいなあ」と感じることもたくさんありました。たとえば、RDSのフェイルオーバーやConfigでの構成管理といった「開発に必要だけど面倒なステップ」をAWS側が担ってくれているところに、AWSの技術の凄さや利便性を感じます。

そして、開発の現場以外でもメリットは大きかったです。たとえば、以前ならばお客さまとの会話で上司や他のメンバーに確認してからご回答していたことを、持ち帰らずにその場でお話できるようになりました。そうすると、私個人がお客さまからも頼られるようになるんですよね。

みんな取ろうよAWS認定!

前提として、自分はエンジニアという業界を「頑張れば頑張った分だけ差が顕著に表れる」と考えています。ですから、新卒でエンジニアとなる方々には、日々勉強する習慣をつけてもらって、より強いエンジニアになってほしいと考えています。

ただ「頑張ってすごいエンジニアになる!」みたいな長期的な目標だと、自分がそれに近づいている実感が湧いてこない気がします。自分も社会人1年目の頃にそういった経験がありました。「自分は今エンジニアとしてどのレベル層にいて、これから何を学習すべきで、それにはどの学習リソースが必要か」ということを把握できておらず「実は迷走しているんじゃないか」と考えていた時期は、なかなかに辛かったです……。

そうならないよう、まずは短期的な目標を設定し、それを達成し続けることで楽しく学習を進めてもらいたいです。そして自分自身がレベルアップしていく手応えを楽しんでほしいです。実務に役立つし、報奨金も出るのでみんな受けましょう(笑)

明日の「もっててよかったAWS認定」は、オンライゲームセグメントのクライアントエンジニア・中村さんが語ります!

CDKでさくっとECSサービスとCapacity Providerを設定する

0

はじめに

デジタルイノベーション部の浅田です。

AWSをはじめとしたクラウドがオンプレミスに対してもつ優位性の一つに、インフラストラクチャーをコードとして管理できることがあります。いわゆる、Infrastucture As a Codeというわけですが、そのためにAWSではCloudFormationを利用することが一般的です。

CloudFormationも十分に強力な機能ですが、それをさらに強化するものとして、AWS Cloud Development Kit(以下、CDK)があります。

そこで、今回はCDK(on TypeScript)を使ってECS上のサービスを作成することで、いかに簡単にCDKでAWSのインフラを作成できるかをご紹介したいと思います。なお、動作確認済みのCDKバージョンは執筆時点で最新の2.15.0となります。また、CDKの初期設定などは紙面の都合上省略致します(参考:CDK初期設定)。

今回、作成するAWSの構成

今回はECS上のサービスとして、ALBで負荷分散された、EC2起動タイプのNginxのサービスを立てるということをやっていきたいと思います。そこにさらに、ECSのキャパシティプロバイダーを使うことによって、サービスに必要なEC2リソースをAutoScalingで動的に起動させる設定を入れ込みたいと思います。

構成図としては、以下となります。

キャパシティプロバイダーって?

参考:Amazon ECS キャパシティープロバイダー

キャパシティプロバイダーを簡単に説明すると、ECSのタスクコンテナが必要とするCPU/メモリなどに応じて、ホストされるEC2のリソースをAutoScalingさせる機能です。

マイクロサービスを多数動かすコンテナ利用では、個々のコンテナごとにEC2が用意されるわけではなく、ひとつのEC2の中に複数のコンテナが稼働するのが当たり前になります。そうしたときにEC2自体のCPU使用状況などをもとにAutoScalingさせるような旧来の運用だと、どれぐらい足りないのか判断がつきません。

大きなリソースを要求するようなコンテナのタスクを増やす必要があれば、大きなインスタンスが必要となるでしょうし、小さなリソースを要求するコンテナのタスクを増やすのであれば、小さなインスタンスのほうが効率が良くなります。

そこで、タスク側が「コンテナを××台建てたいから、必要なリソースを用意して」と要求した際に、ECS側が他のコンテナとの兼ね合いを含めて必要なリソースを満たせるようにEC2の台数を調整する、というのがキャパシティプロバイダーの機能になります。

個々のタスクやサービス側がコンテナのCPU/メモリ使用量であったり、リクエスト量、処理データ量、スケジュールによるバッチ処理などのイベントなどに応じてタスクの数をコントロールし、それに必要なリソースをECS側がコントロールすることによって、担当する範囲が明確化され疎結合になるというのもキャパシティプロバイダーを利用するメリットの一つだと思います。

ECSのサービスを作るうえで必要となるAWSの要素

上記のような設定をAWSで構築しようとすると、作成する必要がある要素は意外と多くなります。

ざっとあげるだけでも以下のようになります。

  1. VPC、サブネット、インターネットゲートウェイ、ルートテーブル、セキュリティグループなどのネットワーク関連リソース
  2. ECSクラスター、クラスターを構成するEC2インスタンス、起動設定、AutoScaling設定などのECSクラスター関連リソース
  3. ALB、リスナールール、ターゲットグループの設定などのALB関連リソース
  4. タスク定義、サービス起動設定などのECS上のサービス関連リソース

これをCloudFormationで定義しようとすると、数百行の定義を書くことになります。

L1コンストラクタとL2コンストラクタ

CDKには、AWSのリソースを簡単に定義するためにコンストラクタが用意されています。その中でも、L1コンストラクタ、L2コンストラクタがあります。

L1コンストラクタはほぼCloudFormationと同じ要素を同じようにコントロールできる柔軟性を持っていますが、その分設定しなきゃいけない要素が多くなります。

L2コンストラクタは簡単にAWSリソースを定義できるように用意された機能です。細かいコントロールはL1コンストラクタ程できませんが、その分圧倒的に簡単にリソースの定義ができます。以下ではL2コンストラクタを中心に扱います。

クラスター側のスタック作成

まず、サービスを動かすための基盤を作成するスタックを作ります。使っているモジュールは以下です。

import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as autoscaling from "aws-cdk-lib/aws-autoscaling";

VPCの作成

まずはVPCです。

const vpc = new ec2.Vpc(this, "VPC", {
    vpcName: `Vpc`,
    cidr: "10.0.0.0/16",
    natGateways: 0,
    maxAzs: 99,
    subnetConfiguration: [
        {
            cidrMask: 24,
            name: "public",
            subnetType: ec2.SubnetType.PUBLIC,
        },
    ],
});

これだけの記述で、サブネットやルートテーブル、インターネットゲートウェイなどの諸々を作ってくれます。

今回はNatGatewayを使わないのでnatGatewaysを0に設定していますが、これを指定してあげればNatGateway、およびそのルートテーブルなども作成してくれます。

また、maxAzsを指定することで、サブネットを作るアベイラビリティゾーンの数の指定ができますが、大きな値を指定することで、そのリージョンに存在するアベイラビリティゾーン分サブネットを作ってくれます。東京リージョンとバージニアリージョンなど、アベイラビリティゾーンの個数が異なるリージョンに適用するさいに、意識せずに済むようになります。

AutoScalingの作成

続いてECSクラスターを構成するEC2のAutoScaling設定です。

const ec2SecurityGroup = new ec2.SecurityGroup(this, "Ec2SecurityGroup", {
    vpc,
});
ec2SecurityGroup.addIngressRule(
    ec2.Peer.ipv4("10.0.0.0/16"),
    ec2.Port.tcpRange(32768, 65535)
);
const autoScalingGroup = new autoscaling.AutoScalingGroup(this, "ASG", {
    vpc,
    instanceType: new ec2.InstanceType("t3.small"),
    machineImage: ecs.EcsOptimizedImage.amazonLinux2(),
    vpcSubnets: {
        subnetType: ec2.SubnetType.PUBLIC,
    },
    minCapacity: 0,
    maxCapacity: 10,
    securityGroup: ec2SecurityGroup,
});

ここでは、AutoScalingで起動されたEC2で許容するセキュリティグループを作っています。ポートはALBの動的ポートの範囲を指定してます。また、AutoScalingで起動されるEC2のスペックや、サブネット、最大起動数なをの設定を入れています。

ECSをEC2で運用する際には、EC2上のECSエージェント設定ファイルにクラスター名を書き込む設定をEC2起動時にユーザデータで設定する、などを定型的に行いますが、上記のAutoScaling設定を後続のECSクラスター設定と組み合わせることで、ユーザデータによるクラスター名設定もCDKが自動でやってくれます。また、ECS運用で必要となる権限である、ECRからのイメージ取得権限のIAMロールなども自動作成してくれます。便利ですね。

クラスターの作成

続いて、ECSクラスターの設定です。

readonly cluster: ecs.Cluster;
readonly capacityProvider: ecs.AsgCapacityProvider;

...(省略)
this.capacityProvider = new ecs.AsgCapacityProvider(this, "CapacityProvider", {
    capacityProviderName: "CapacityForT3Small",
    autoScalingGroup,
});
this.cluster = new ecs.Cluster(this, "Cluster", {
    vpc,
    clusterName: `AppCluster`,
});
this.cluster.addAsgCapacityProvider(this.capacityProvider);

やっていることは3点です。

  1. キャパシティプロバイダーを作成します。といっても、前節で作成したAutoScalingグループの設定を紐づけて作成しています。
  2. クラスターを作成します。作成済みのvpcを指定して名前を付けています。
  3. 1で作成したキャパシティプロバイダーを2のクラスターと紐づけています。

ポイントとして、次節で説明するサービス用のスタックで使用するため、コンストラクタのプロパティとしてcluster, capacityProvider変数を使用しているので、thisのプロパティに代入しています。こうすることで、複数のスタック感で意識せずに内容を連携できます。

実際には、裏でCloudFormationのExport Value/Import Valueを使って連携されています。そこらへんを細かく意識しなくてもいいのは楽ですね。

サービス側のスタック作成

続いて、サービスのスタックを作成します。使用しているモジュールは以下です。

import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as ecs from "aws-cdk-lib/aws-ecs";
import * as ecsPatterns from "aws-cdk-lib/aws-ecs-patterns";

サービスの作成

つづいてECSのサービスです。

const securityGroup = new ec2.SecurityGroup(this, "ALBSecurityGroup", {
    vpc: cluster.vpc,
});
securityGroup.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.allTraffic());
const loadBalancedEcsService =
    new ecsPatterns.ApplicationLoadBalancedEc2Service(this, "NginxService", {
        cluster,
        cpu: 256,
        memoryLimitMiB: 256,
        taskImageOptions: {
            image: ecs.ContainerImage.fromRegistry("nginx:latest"),
        },
        listenerPort: 80,
        publicLoadBalancer: true,
        desiredCount: 1,
    });
loadBalancedEcsService.loadBalancer.addSecurityGroup(securityGroup);

まず、ALBで使用するセキュリティグループを作成します。後続の処理で自動でセキュリティグループが作成されるのですが、EgressのルールがALBの動的ポートの設定が通らないようになっているので、Egressルールを追加しています。

続いてALBとサービスの設定です。CDKの標準モジュールとしてecs-patternsというものがあります。これは、ECSのサービス設定としてよくあるパターンをモジュール化したもので、ただでさえ簡略化されているCDKによるリソース作成がさらに簡単になっています。

上記の十数行のコードで、ALB、リスナールール、ターゲットグループなどのALB関連リソースを作ってくれるだけでなく、ECSのタスク定義、サービスの作成、ALBとの紐づけなどを作成してくれます。

ここでは設定していませんが、証明書の設定、HTTPからHTTPSへのリダイレクト、ドメイン名の設定なども指定できます。また、ログルーターの設定、環境変数の設定なども上記のコンストラクタのパラメータとして指定できる柔軟性も持っています。素晴らしいですね!

キャパシティプロバイダーの設定

といった具合に、便利なecs-patternsモジュールなのですが、EC2上のALBで負荷分散されたサービス(コンストラクタ名としてはApplicationLoadBalancedEc2Service)を作る際に、キャパシティプロバイダーの設定ができません。ecs-patternsではないecsモジュールを使用してサービスを作成すればもちろん設定可能ですが、ecs-patternsの便利さを利用できなくなります。

そこで、以下のように追加の設定を行うことで、キャパシティプロバイダーを利用することができます。

const service = loadBalancedEcsService.service.node
    .defaultChild as ecs.CfnService;
service.launchType = undefined;
service.capacityProviderStrategy = [
    {
        weight: 1,
        capacityProvider: capacityProvider.capacityProviderName,
    },
];

やっていることは3点です。

  1. 前節で作成したloadBalancedEcsServiceのサービスリソース(service)をL1コンストラクタのCfnServiceにキャストして取り出します。
  2. serviceのlaunchTypeがEC2に設定されているので、undefinedに設定することでリセットします。
  3. そして、キャパシティプロバイダーとしてクラスター側の設定で作成したcapacityProviderを使用するように設定します。

上記の設定を追加することにより、作成したキャパシティプロバイダーを使用して、サービスを起動するように設定できます。

終わりに

いかがでしたでしょうか。CDKを利用することで、すごく簡単にECSのサービスを立ち上げられることがご理解いただけたのではないでしょうか。

CDKには、ほかにもいろいろと便利なコンストラクタが標準で用意されていますし、サードパーティのCDKコンストラクタも存在します。それらを利用することで、より最小限の労力でAWSのリソースを定義することができます。積極的に活用することでハッピーなAWSライフを送りましょう!

ゲームパッドを左手デバイスに

0

アピリッツのエンパワーメントサービス部に所属しております3Dデザイナーの杉山です。
デジタルイラストなどの作業において左手デバイスというものを使用している方は結構いるのではないかと思いますが、自分はその左手デバイスとしてゲームパッドを使用しているので今回はその使用感やメリット・デメリットなどについてまとめてみました。

使用しているゲームパッド

まず始めに簡単ではありますがこちらが普段自分が使用しているゲームパッドのスペックになります。

製品PC用ゲームパッド(高耐久モデル)
形状一般的な両手持ちタイプ(アナログスティックあり)
接続無線
ボタン数13ボタン
価格約2500円(2022年3月時点)
電源単3形電池 2本
その他キー割り当て対応

選ぶ際のポイントとしてはまずキーの割り当てに対応していることが今回の場合絶対条件ですが、他にも使い勝手の良さなどを考えると無線接続高耐久仕様ボダン数の多さなどもかなり重要なポイントだと思います。
その他大きさ、重さ、価格など色々と検討する項目はありますが、それらに関しては個人の感覚によるところが大きいので実際に店頭で触って自分に合ったものを探すのが一番だと思います。

左手デバイスとしての利用手順

ここからは実際にゲームパッドを左手デバイスとして利用するための手順について簡単に紹介致します。
また普段使用している環境の都合上、併用するアプリケーションはClipStudioPaintを想定させて頂きます。

1.ゲームパッドのキーマッピング

まずはゲームパッド側のキーマッピングを行っていきます。
あとでClipStudioPaint側でもショートカットのカスタマイズを行うので基本的にここでのキーの割り当ては適当でいいのですが、使用頻度の高いデフォルトのショートカットとの干渉をなるべく回避するため自分は数字キーなどを割り当てるようにしています。
また、作業時に常に使用するボタンは片手で扱える半分のみなので基本的にはその範囲にだけ割り当てを行っておけば問題ありません。逆側のもう半分のボタンについてはデフォルトの複数同時推しショートカットなどをワンクリックで行えるのように割り当てておくとより効率的になるかと思います。

参考:エレコムゲームパッドアシスタント(画像は筆者の設定)

2.ClipStudioPaint側のショートカットカスタマイズ

次に先程行ったゲームパッドのキーマッピングを基準にClipStudioPaint側でショートカットのカスタマイズを行います。
カスタマイズを行う際は後々混乱しないようになるべくデフォルトのショートカットを崩さないように新規追加する形でキーの割り当てを行っています。

参考:ClipStudioPaint ショートカットキー設定(画像は筆者の設定)

3.最終的な動作確認

ゲームパッドのキーマッピングとClipStudioPaint側のショートカットカスタマイズが終わったあとは実際に使用して正常に動作するかを確認をして頂き、問題がなければすべての作業は完了です。

以下今回の手順を元に自分が普段ClipStudioPaintでの作業時に使用しているゲームパッドの割り当て表をまとめましたので参考にして頂ければと思います。
ワンポイントとして、片手で扱えるゲームパッドのボタン数は約10個程度と少ないですが、Ctrlキーを割り当てたL1ボタンとの同時入力も含めて検討することで少ないボタン数でもより多くの処理を割り当てることが可能になります。

ゲームパッドのボタン割り当てた処理(通常)割り当てた処理(L1との同時押し)
L1Ctrlキー入力
L2Shiftキー入力
中心ボタン(左)キャンバス反転キャンバス表示リセット
十字ボタン(上)ベタブラシやり直し
十字ボタン(下)消しゴムブラシ元に戻す
十字ボタン(左)水彩ブラシ描画色と背景色入れ替え
十字ボタン(右)鉛筆ブラシ描画色と透明色入れ替え
左ステック(上)手のひらツールキャンバス表示拡大
左ステック(下)スポイトツールキャンバス表示縮小
左ステック(左)ブラシサイズ拡大キャンバス表示左回転
左ステック(右)ブラシサイズ縮小キャンバス表示右回転
左ステック(押し込み)レイヤー透明ピクセルロック

メリット

左利きの人でも同じ要領で利用できる

一般的に左手デバイスと呼ばれるようにこの手の補助デバイスは右利きを前提として設計されることが多いですが、今回の方法は左利きの人でも同じように利用することが可能です。

疲れにくい

個人的な感覚ですが、手を開いた状態で操作するキーボードタイプと比べると握った状態で操作できるゲームパッドの方が疲れにくい印象です。また、握ったとき手にフィットする形状なのも良いです。

無線なので自由にポジションを決められる

自分は疲れたときなどたまに膝上に乗せて使うこともあります。

比較的低コスト

大体5千円~1万円という左手デバイスの価格帯の中で自分が使用しているようなゲームパッドは現在約3千円程度と比較的安価に購入できます。

片手持ちでも同時押しが可能

同じような片手持ちデバイスの中に薄型軽量のリモコンタイプがありますが、そういったものは基本親指のみの操作で同時押しが不可能です。それに対しゲームパッドであればL1/L2ボタンを人差し指と中指で操作可能なためCtrl+Shiftといった入力も可能になってより多くの操作に対応することができます。

キーの位置を確認する必要がない

ボタン数の多いキーボードタイプだと押す際に目視で確認するといった手順が必要になる場合がありますが、ゲームパッドなら割り当てた操作を覚えてしまえば目視で確認せず直感的な使用が可能なので慣れるとかなり効率的です。

デメリット

使えるボタン数がキーボードタイプと比べると少ない

基本的に使えるボタンはスティックの4方向入力を含め約10個程度なので、ショートカットを割り当てる際には色々と組み合わせを考えながら配置する必要があります。

手が小さいと少し使いづらい

手が小さいと中央部分のボタンが押しづらかったり4方向のスティック入力の差別化が難しかったりするので不便かもしれないです。

小型のリモコンタイプと比べると大きくて重い

基本的にゲームパッドは両手で使うものなので専用のリモコンタイプと比べればやはり重量的にも体積的にも余分な部分が多いです。

最後に

今回ゲームパッドを左手デバイスとして利用している立場として色々と記載させて頂きました。
慣れると本当に直感的に操作できてストレスも少ないので興味のある方は是非試して頂ければと思います!

【ついにコンプリート】新卒1年目エンジニアAWS認定フルコンプを目指す5:Advanced Networking – Specialty

0

21新卒でアピリッツに入社したエンジニアの串田 匠彌です。せっかくだから新卒1年目のうちにAWS認定資格を全部取得してみることにして、業務の開発と並行して勉強と受験を続けています。順調に受験→合格を重ねて、残るはあとひとつ。2月に合格した「Advanced Networking – Specialty」についてご紹介します。

前回の記事はこちら → 新卒1年目エンジニアAWS認定フルコンプを目指す4:Data Analytics – Specialty , DevOps Engineer – Professional

高まる緊張感

実はMachine Learning – Specialtyの受験から結構緊張していて、常に胃が痛い状態でした……(今となってはいい思い出ですが笑)

合格していたといえばしていたのですが、当時は残り4つだった試験のうち1回でも不合格だと3月末までに間に合うか厳しいということもあり、「次落ちたらヤバい」というプレッシャーが常にあったので多分そのせいです。

11. AWS Certified Advanced Networking – Specialty (2022年2月)

難易度

★★★★★

そもそも「自分はネットワークの知識があまり足りていないかも」と考えていたので、まずは書籍で基礎を学習し、その後は問題演習を繰り返すというフローで進めました。

肝心の問題演習ですが、世に出回っている問題集が少ない&難易度が難しめということもあり「少なくともUdemyとkoiwaclubで聞かれたところは詳細に調べておこう」という意識で勉強し、同じ問題集を何周か解いていました。

(そして試験勉強が終わったタイミングで問題集が発売されました)

勉強方法と勉強時間

書籍とUdemyとkoiwaclubで試験対策をしました。
期間:下記を3週間ぐらい
平日:2時間
休日:5時間

オススメの書籍

マスタリングTCP/IP―入門編―(第6版)

・(Udemy)Practice Exam – AWS Certified Advanced Networking Specialty
・(koiwaclub)https://aws.koiwaclub.com/

以下は自分が受験後に発売されました(もっと早くに出ていれば…!)
・(書籍)要点整理から攻略する『AWS認定 高度なネットワーキング-専門知識』 (Compass Booksシリーズ)

試験についてのアドバイス

今回は書籍とkoiwaclubだけでもどうにかなりそうなレベル感でした。 Advancedと言うだけあって少し突っ込んだ知識が必要かと思いますが、正直なところ実務で使えるかは微妙な気がします…… 。(「Transit VPCって今使うのか?Transit Gatewayがあるからほとんどそっち使う気がする」とか諸々)

対策本も2月末に発売されたことや今年試験改訂が実施されることから、(特段の事情がない限りは)対策本→改訂後の試験を受験というパターンが合格しやすさ、実務での活用のし易さから考えて、ベターなルートなのかなと思います。

全部受験してみて

完走した感想(激うまギャグ)ですが、「早期にSolutions Architect – Professionalを取得したおかげで他の試験も合格できたなー」と感じた場面が多々ありました。特に専門資格の5つにおいてはの業界特有の単語が出題されたりするので、サービス問題(AWSのサービスの知識だけで正答を導けるという意味合い)をなるべく落とさないという精神で取り組むと、良いかもしれません。

難易度の高いものから3つ選ぶとすれば、

  1. Advanced Networking – Specialty
  2. Solutions Architect – Professional
  3. DevOps Engineer – Professional

な気はしています。あくまで個人の感想ですが、Solutions Architect – Professionalは対策本が2冊出版されていてどちらも優秀なのでProfessionalという名前の割には苦労しなかったこと、Advanced Networking – Specialtyの方が、そもそも問題が難しい&学習のリソースを探すのに時間がかかったという点で苦労したことが要因です。

あとは何より、目的を持って勉強することが肝要です。自分の場合、「仕事で悩む時間を減らしたい」という思いや、実務で先輩エンジニアに助けてもらい「自分もこうなるべきだ」と感じたことが学習への原動力となりました。どうしてもやる気が出ないときは参考にしてみてください。

知識をどう活かすか、伝えるか

ひとまず試験を終えて、今後大事になってくるのは「今まで得た知見を、ここからどれだけアウトプットできるか」だと考えています。

なので無論、実務で結果を出すということは引き続きシビアに取り組みますが、それに加えて後輩に技術を伝えていくこともやっていきたいです。上の世代から技術を教わり、それを今度は自分が下の世代に伝えていくって、何か面白さを感じませんか?

それを実現するためにも、純粋な技術力だけでなく人に伝える力のような人間力も養っていきたいです。

スコア(参考程度に)

下記の通りです。

試験名スコア
AWS Certified Cloud Practitioner(AWS-CLF)874
AWS Certified Solutions Architect – Associate(AWS-SAA)725
AWS Certified Developer – Associate(AWS-DVA)905
AWS Certified SysOps Administrator – Associate(AWS-SOA)801
AWS Certified Solutions Architect – Professional(AWS-SAP)824
AWS Certified DevOps Engineer – Professional(AWS-DOP)894
AWS Certified Security – Specialty(AWS-SCS)798
AWS Certified Database – Specialty(AWS-DBS)794
AWS Certified Machine Learning – Specialty(AWS-MLS)903
AWS Certified Data Analytics – Specialty(AWS-DAS)819
AWS Certified Advanced Networking – Specialty(AWS-ANS)876

新卒1年目エンジニアAWS認定フルコンプを目指す4:Data Analytics – Specialty , DevOps Engineer – Professional

0

21新卒でアピリッツに入社したエンジニアの串田 匠彌です。せっかくだから新卒1年目のうちにAWS認定資格を全部取得してみることにして、業務の開発と並行して勉強と受験を続けています。フルコンプまでのゴールが徐々に見えてきました。今回は12月に合格した「Data Analytics – Specialty」と22年1月に合格した「DevOps Engineer – Professional」についてご紹介します。

前回の記事はこちら → 新卒1年目エンジニアAWS認定フルコンプを目指す3:Database – Specialty , Machine Learning – Specialty

残りはあと3つ(ここで少しペースダウン)

目標とするAWS認定はあと3つ、「Data Analytics – Specialty」「Advanced Network – Specialty」「DevOps Engineer – Professional」です。

前回の合格が2021年の10月以降、残りの3つをどの順番で受験しようか決めかねていました。Udemyに問題集があるとはいえ、それ以外の具体的な学習のロードマップが自分には考えつかなかったのです。

趣味が再燃したり、自分の体力に見合っていない学習ペースが続いたりで、少し気分が乗らなくなっていったのも正直なところです。

ただ、フルスタックサービス部の鈴木さんから「頼むぜホントに~」と強く励まされていましたし、ここでやめるのもな、と考えなおしました。

また、自分が高校受験の時にお世話になった塾講師の「それだけのことだった」という言葉を思い出してやる気を出しました

「それだけのことだった」というのは、ざっくりいうと「何かと何かを比較して、選ばれなかった方は選んだ方よりもどうでも良い」という意味です。今回のAWS認定を全部取ることについては「あと4,5ヶ月踏ん張って悔いなく受賞発表の時期を迎える」あるいは「また来年に目標を再設定してゆっくりやるか」の2つを比較してみました。で、前者を選んだというわけです。

9. AWS Certified Data Analytics – Specialty(2021年12月)

難易度

★★★★

なかなか難しい分野でしたが、各種サービスのユースケースを把握することが肝要だと思います。
Redshift SpectrumとAthenaとS3 Selectとか。

勉強方法と勉強時間

書籍とUdemyとBlackBeltで試験対策をしました。
期間:下記を1ヶ月
平日:2時間
休日:5時間

オススメの書籍

ビッグデータを支える技術

→ こちらの本は、既に「Data Analytics – Specialty」に合格していた浅田さんのオススメされました。一通りの基礎知識はこれだけで学習できそうだったので、書籍での勉強はこの本だけに絞って、あとは問題を解きまくる方針にしました。
・(Udemy)AWS Certified Data Analytics Specialty Practice Exams
・(BlackbBelt)「Analytics」カテゴリーのPDF

試験についてのアドバイス

「EMRとかHadoopとか、聞いたことはある」という状態から学習を始めました。 機械学習の受験勉強と同様に「まずは一般的なビッグデータの処理及び活用の手法を知り、それからAWSのサービスを知る」という順序でよいと思います。また、問題を解く経験値を積むことも重要です。

10.AWS Certified DevOps Engineer – Professional(2022年1月)

他の方の合格体験記や浅田さんの感想では「DOPはSAPよりは簡単」といったニュアンスでしたが、僕からしたらSAPと同レベルぐらいでしたそもそも「2年以上の経験を持つ個人を対象とするもの」って公式に書いてあるやんけ

この頃から案件が忙しくなってきており、なかなか勉強時間が確保できなかったのですが、3月末までに全資格を制覇するとなると、ここら(1月末)で受けるしかないのかなーと渋々受験しました。

難易度

★★★★ (4.5かも)

勉強方法と勉強時間

期間:下記を1日ずつ
平日:1時間
休日:5時間

オススメの書籍

AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト – プロフェッショナル
・(Udemy)AWS Certified DevOps Engineer Professional Practice Exams

試験についてのアドバイス

今回はUdemyにかなり助けられました。問題のレベル感も実際の試験と大きく変わらないのでおすすめです。ありがとうUdemy。

不合格のことは不合格になってから考えればいい

「DevOps Engineer – Professional」の受験時は「あと2つで全制覇」という状況だったので、ひたすら「合格したらどんな気分だろう」とイメージしてモチベを維持していました。不合格だったときの心境は不合格になってから考えれば良いので……

ということで、残るはいよいよあと1つ。「Advanced Networking – Specialty」です。

AWS RDS ProxyとLambdaを連携してみた

0

姿勢矯正ベルトで背筋を伸ばしながら書いています。ゲームデザイン(GD)部クライアントエンジニアの中村です。

最近、個人的にAPI Gateway+Lambdaを利用したサーバーレス環境でのサービス展開を模索する中で「LambdaとRDSは相性が悪い」という記事をよく見かけ、「なんだそうなのかー。仕方ないからDynamoDB使おう」程度に軽く考えていました。しかしながら、最近 AWS Certified Database – Specialty 取得のための学習を行っていたところ RDS Proxy というサービスに気づきました。これを利用することでLambda+RDSが利用できるようになるとのことだったので、そもそもの相性の悪さとその解決策まで、実際に利用して体験しました。

LambdaとRDSの相性の悪さ

LambdaとRDSの相性の悪さはデータベースコネクション数の最大値にあります。Lambdaはその特性上、リクエストに応じて大量にコンテナが実行されます。このとき起動されるコンテナの数を制御できないため、大量のコンテナからデータベースへのコネクションが発生すると上限を超えてしまう事態が発生するようです。

単純にデータベースコネクションの最大数を上げれば解決できそうですが、データベースが受け入れるコネクション数を増やすとそれに応じて使用メモリも増えていきます。そのため、AWS RDSではすでにチューニングされたデフォルト値が用意されています。この数値を変更することは推奨されておらず、コネクション数を増やすのであればインスタンススペックを上げる必要があります。

RubyOnRailsやLaravelなどのフレームワークではデータベースコネクションをプーリングして使いまわすことができるように設計されていますが、Lambdaでは実行コンテナごとに処理が独立しているためそれが行えません。大規模なリクエストに対して発生するデータベースコネクションをコントロールできないため、データベースインスタンスのスペックを上げても対応しきれない可能性があります。

今回はこの問題を体験するに当たって、以下のような構成を作成しました。

  • Pythonで記述したシンプルなSELECTコード
  • IAMロールでのDB認証
  • RDSからdb.t2.microインスタンスにMySQLを起動
  • menusテーブルにダミーデータとして定食屋のメニューが含まれる(このデータをSELECTする)
  • locustから100ユーザによる合計10,000のアクセスを生成する
session = boto3.Session()
client = session.client('rds')
token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION)

def lambda_handler(event, context):
        statusCode = 200
        connection = None
        try:
            connection = pymysql.connect(
                host=ENDPOINT,
                user=USER,
                passwd=token,
                port=PORT,
                database=DB_NAME,
                charset='utf8mb4',
                ssl={'ca': CA_FILE, 'check_hostname': False}
            )
            with connection.cursor() as cursor:
                cursor.execute("SELECT * FROM menus")
                query_results=cursor.fetchall()
        except Exception as e:
            print(e)
            statusCode = 500
        finally:
            if connection is not None:
                connection.close()
idnamepriceimage_prefixtakeout
1目玉焼き定食500menu_med0
2唐揚げ定食750menu_kar0
ダミーデータ

from locust import task, SequentialTaskSet

class LocustTask(SequentialTaskSet):
    def on_start(self):
        self.user.reset()
    @task
    def simple_get(self):
        request_params = {
        }
        self.client.get(
            url="/",
            params=request_params,
            headers=self.user.request_headers(),
            name=f"simple_get [GET /] "
        )
    @task
    def end_task(self):
        self.interrupt()

RDS Proxyを利用しない場合

直接データベースにコネクションを生成するのでコネクションに関する問題が発生する可能性があります。

今回使用しているデータベースインスタンスdb.t2.microは最大コネクション数が65 (推奨値 DBInstanceClassMemory/12,582,880)となっているため、65以上のコネクションを生成した際に問題が発生します。

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 65    |
+-----------------+-------+

これを確認するためにlocustから100ユーザーによる同時リクエストを行いました。

その結果、locust上では10,000件のリクエストの内3,500件のエラーが発生しました。 lambda_handler 内でtry-catchした際のstatusCode=500 を応答しているため、コネクション生成時かクエリ実行時にエラーが出ていることがわかります。

locust実行結果-RDS Proxyなし

実際にCloudWatchには以下のようなToo many connectionsエラーが確認でき、コネクションの生成数が多すぎることが分かります。

2022-02-24T13:59:25.286+09:00	START RequestId: a17a17d2-1a12-4ce9-a5ce-ae7f7bb7eca4 Version: $LATEST
2022-02-24T13:59:25.740+09:00	(1040, 'Too many connections')

また、CloudWatchメトリクスでデータベースコネクション数を確認すると、上限の65を超えて75に達しているようです。

データベースコネクション数-RDS Proxyなし

以上の結果から、LambdaとRDSに対するデータベースコネクションの相性の悪さが確認できました。

次にRDS Proxyを利用していきます。

RDS Proxyを利用する場合

RDS Proxyを利用する場合は以下のような構成図になります。

RDS Proxy作成

まずはRDS Proxyを作成します。RDSページのメニューから[プロキシ]を選択して作成メニューを表示します。

RDS Proxyは基本的にはデフォルト設定で、IAM認証を利用するためTLSが必要となります。

RDS Proxy プロキシ設定

プロキシのターゲットは事前に作成しておいたproxy-targetデータベースです。接続プールの最大接続数は70%にしておきます。これでこのプロキシを経由するとproxy-targetデータベースにはコネクション最大数の70%までしか接続されないことになります。残りの30%は別のシステムからアクセスされる可能性を考慮しておきます。

プロキシからデータベースへの接続にはUser/Password認証を利用します。このときの認証情報はPlainTextではなくSecrectsManagerで保護されている必要があります。今回はキーローテーションなしでSecretsManagerを利用しています。さらにクライアントからプロキシへの認証はIAM認証を必須としています。

以上でプロキシの作成は完了です。プロキシが作成されると以下のような「プロキシエンドポイント」が利用できるようになります。

experiment-db-proxy.proxy-xxxxxxxxxxxx.us-east-1.rds.amazonaws.com

LambdaにRDS Proxyを導入

LambdaからRDS Proxyへの接続についてはデータベースエンドポイント用の環境変数ENDPOINTをプロキシエンドポイントに切り替え、pymysqlが利用するssl認証ファイルの環境変数CA_FILEをRDS Proxy用のものへ変更します。もともとIAM認証を導入しているシステムであればプロキシを利用するように簡単に切り替えることができます。

環境変数を切り替えてLambdaを実行したところデータベースから定食屋のメニューのレスポンスがあったので問題なく接続できているようです。

START RequestId: fcc8ae58-e350-4d84-b641-32e91760ab24 Version: $LATEST
Response
{
  "statusCode": 200,
  "body": [
    [ 1, "目玉焼き定食", 500, "menu_med", 0 ],
    [ 2, "唐揚げ定食", 750, "menu_kar", 0 ],
    [ 3, "カツ丼", 650, "menu_kat", 1 ],
    [ 4, "ラーメン", 600, "menu_ram", 1 ],
    [ 5, "チャーハン", 400, "menu_cha", 1 ],
    [ 6, "生姜焼き定食", 800, "menu_sho", 1 ],
    [ 7, "うどん", 300, "menu_udo", 1 ],
    [ 8, "牛丼", 380, "menu_gyu", 1 ],
    [ 9, "カレーライス", 450, "menu_cur", 1 ]
  ]
}

それではこの状態でlocustから100ユーザーによる同時リクエストを実行します。その結果、10,000リクエスト中にエラーは発生しませんでした。代わりに若干平均応答時間が遅くなっているようです。

locust実行結果-RDS Proxyあり

Lambdaの実行ログでもエラーは一切確認できませんでした。

2022-02-24T14:37:11.269+09:00	START RequestId: 273371cb-aa3e-4e31-a5f2-e8e1412e0c49 Version: $LATEST
2022-02-24T14:37:11.272+09:00	lambda_handler
2022-02-24T14:37:11.879+09:00	END Requ2022-02-24T14:37:11.269+09:00

CloudWatchメトリクスからデータベースコネクションを確認すると、RDS Proxyに対するコネクションは65に対して、データベースに対するコネクションはわずか8となりました。Too many Connections が発生するほどのコネクションをRDS Proxyが吸収し、コネクションを使いまわしている状況を確認することができました。

データベースコネクション数-RDS Proxyあり

まとめ

今回はLambdaからRDSを利用する際の問題点を確認しました。実際にToo many connectionsが表示され、データベースのコネクション問題を見ることができました。さらにその解決策としてRDS Proxyを利用してデータベースコネクションが使い回されている状況を見ることができました。

サーバーレスアプリケーションでLambdaを利用することがあり、その環境でRDSが必要となるならばRDS Proxyも必須となるでしょう。プロジェクトにもぜひ利用していきたいと思います。

最近人気な記事