ホーム ブログ ページ 2

「教えすぎないことを心掛けている」徳永 広樹インタビュー

0

アピリッツに入社して約18年。現在はフルスタックサービス部で多くの案件に携わり、お客様と現場との重要な橋渡し役を担っている徳永へプロジェクトを進める上で大事にしている事や入社直後と現在のアピリッツの変化を聞きました。(取材2023年10月)

新卒から変わらずずっとIT業界ですね

ーー徳永さんはアピリッツへ2005年に中途入社されていますが、それまでのキャリアをお聞かせください。

大学を卒業して新卒で自動車整備会社向けのシステムを制作している会社に入社しました。とにかく営業の力が強い会社で社員の半分くらいが営業職でした。自分はその中でプログラマーとしてシステム開発部門にいました。
地元福岡で就職活動したのですが、上京したい思いがあり研修後、東京にある部署への配属を希望しました。

ーーそこから東京で働き始めたんですね。

そうです。その会社はトータルで3年ほど勤めました。
ですが、会社の不祥事で業績が悪くなり、システム部門全体が関連会社に出向する形になったり、お給料も下がってしまったり、という事が重なり退職しました。

ーーそのあとアピリッツへ?

いいえ、その会社を退職した後は紹介会社経由で仕事を紹介してもらい、個人事業主として1年間ほどプログラマーとして働きました。
その1年は同じ会社で働いていましたが、自宅と職場の距離が遠く、通勤が苦痛になってきたので、別の仕事を紹介してもらおうとしたのですが、紹介が滞ってしまい、それを機に個人事業主ではなく、正社員で働く事を決意しました。それで入社したのがアピリッツでした。

ーーアピリッツには何故入社しようと思ったんですか?

当時は、面接したときにほぼ内定の感じで話を進めていただいたのでそこで決めました(笑)
応募したのも1社目で、求人サイトを見ていてたまたま目に留まったのですぐ書類を送りました。
選考のスピードが早いおかげでこっちも即決できたので有難いですね。

ーー今も選考スピードは他社に比べると早めですが、さすがに面接その場で話を進めていくなんて事、今では考えられないです…!

写真は苦手とおっしゃってましたが、無事撮影許可いただきました。

複数の案件を同時並行で

ーー現在所属されているフルスタックサービス部(通称:FS部)では、どのような案件に携わられているのですか?

直近だとカプコンさんの40周年記念サイト( https://captown.capcom.com/ja )が一番大きな案件です。
現在も追加開発、保守運用で継続中です。他にも求人系システムの案件等にも携わっていて、今は複数の案件を同時並行で進める事が増えました。

ーー「今は」という事は入社当初は少し違ったのでしょうか?

そうですね。当時は1つの案件に加わり集中して対応していました。
一番最初はリリースしたばかりの求人サイトの保守を担当し、次に保守をしていた案件と同じ会社から別の求人サイトをリニューアルしたいと言われ、PL(プロジェクトリーダー)としてサイト構築に参加しました。

その後、エンタメ系、メディア系、情報解析系、求人系など様々なシステムでPM、PL、PGとして参画しました。段々と案件自体も増えてきて色々な業界に携わることができました。

アピリッツの印象の変化

ーー入社当初、といってもかなり前ではありますが、入社直後と今とで感じるアピリッツの変化についてどんなものがありますか?

やっぱり一番の変化は会社全体がすごく大きくなった事ですかね。入社当初は社員が30名強で、その頃から若い人が多い印象でした。
その割に業界最大手の求人サイトなどを開発していて不思議な感じがしたのを覚えています。
まだ会社自体も若いのに大手の仕事を請け負っていて凄い会社だなと思っていました。

現在は社員の数も500名近くにもなり、組織全体がしっかりしたというイメージを持っています。
それこそ新卒採用を毎年積極的に行い、ベテランのしっかりした部分と新人の若い力の両方を持てるようになったと感じています。

ーー反対に変わっていない部分はあったりしますでしょうか?

強いて言えば、自分のタスクをしっかりこなせば文句は言われない風土ですかね。
昔のほうがより緩い印象ですが、今は節度を持った緩さになったかなと個人的には感じています。

コミュニケーションで心掛けていること

ーー長年同じ会社に在籍しているとメンバーの入れ替わりも多くあると思うのですが、その変化の上で何か心掛けている事はありますか?

これは昔からですが、「教えすぎない事」を心掛けています。
具体的には1つの答えを提示するのではなく、様々なやり方があるという事を伝えています。
そこから先は自分で調べてもらい、考えさせる。分からない事があっても一度は自力で解決できるよう促す、という事を意識しています。

若手のメンバーから質問された際は今まで自分が培ってきた経験、知識を活かして今の技術がどう成り立っているかを伝えますね。

ーーフレンドリーなイメージがありますが、メンバーには積極的に話しかけにいかれるんですか?

いえ、真逆です(笑)人見知りしてしまうので、自分から話しかける事は少ないですね。

ーー意外でした(笑)

ただ、興味を持つ範囲が広いのでいろいろな人と話せるという点に関しては強みかなと思っています。
人から聞いて自分が知らない分野だとしたら一回は調べます。
それで深くまで知っていくのか、自分の知識として理解できるレベルまでに留めるかはその時次第ですね。

ーー息子さんとも仲良しだとか。

息子は高校3年生なので、いろいろと将来について話したりはしますね。さすがに一緒に遊んだりはしませんが(笑)

休日はバスケをしたりしてリフレッシュしています。
休みの日はしっかり仕事を休む、普段の日も常に100%で取り組むのではなく、ある程度余裕を持たせる事で視野を広く保つ事ができています。

お客さんと現場開発者の間に立つ重要さ

ーープロジェクトを進める上で大事にしている事を教えてください。

どのプロジェクトでもバランスを大切にしようと意識しています。お客さんと開発側の両方が納得できるものを作るという部分に重きを置いています。

時にはお客さんの要望などで「実現が難しい」、「工数が合わない」といった部分が出てくる事もありますが、単純に「無理」と断るのではなく、お客さんの立場に立って代替え案を提示するなどで何とか対応できないか試行錯誤しています。

ーーお客さんの要望をくみ取りつつ、開発側にも大きな負担にならないようなバランスですね。

はい。ですが、上手く調整できずに開発側から「実現厳しい」と怒られる時もありますし、お客さんからの要望で明らかに難しいものは「出来ない」としっかり伝える事も大事だと思っています。
自分がエンジニア上がりという事もあるので、出来る・出来ないの線引きはある程度判断はできていると思っています。

ーー実際に実現が難しいような要望は多いのでしょうか?

多いか少ないかで聞かれると難しいですが、やはり無謀であったり工数があまりに多すぎて不可能な案件もあります。
どうにかすれば実現できるけれど、お客さんがそのシステムを結局ほとんど使わないといったケースになりそうな時は、お客さんに運用方法などを提案して開発したシステムが決して無駄にならないようにする事を心掛けています。

若手メンバーの育成

ーー最後に、FS部が求めるのはどのような人材でしょうか。

素直に足りていないと感じるのは、マネージャークラスです。案件はあるけれど、お客さんとコミュニケーションを取って、企画・要件定義など仕様を詰められる人材が足りないと思っています。

また、若手メンバーの技術力向上に対する課題もあると感じます。なんとなくで進めてしまっている部分も正直あるので、そこを今後部署全体で改善していければなと考えています。

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

終わりに

アピリッツは、平均年齢31.7歳と若いながらも、中堅からベテランのメンバーも大いに活躍しています。(データで見るアピリッツ:https://recruit.appirits.com/environment
年齢関係なく共に成長し、力を合わせてより一層発展していきたいと考えています!

皆様のエントリーも心よりお待ちしております!

『けものフレンズ3』運営主体変更当時の思い出インタビュー!〜デザイナー編〜

こんにちは!ゲームセグメント情報発信チームです。

チーム発足第一回目となる今回の記事は、運営主体変更当時の思い出をデザイナーさんにインタビューしてきました。

対象となるゲームタイトルは……

思わず動物の写真を出してしまいました。

こちらは……ドール

ドール(Cuon alpinus) は、中央~東南アジアを中心に生息している、アカオオカミとも呼ばれるけものです。

狩りをするときに特徴的な鳴き声でコミュニケーションをとることから、「口笛を吹く狩人」と呼ばれています!

想像してみるとなんだかおとぎ話みたいで可愛らしいですね〜

(ドールの狩りについて深く調べる場合は相応の覚悟をもっておくことを推奨します(笑))

そんな「ドール」たちが「アニマルガール」化して、隊長さんたちと探検していくRPGといえば!!


『けものフレンズ3』

メディアミックスプロジェクト「けものフレンズ」のゲームタイトル。

2021年8月1日付で、株式会社セガ様から当社に運営主体が変更されました。

当社は、オンラインゲームの受託開発および自社ゲームの企画運用における10年以上の実績を活かし、運営移管(セカンダリサービス)の事業を展開しています。


デザイナーさん3名にインタビュー!!

今回インタビューした社員はこちらの3名!

O.H.さん:3Dデザイナー

S.K.さん:3Dデザイナー

O.R.さん:2Dデザイナー(現在は3Dデザイナー)

インタビューに応じてくださった3名(写真左がO.Hさん、中央S.Kさん、右がO.Rさん)

プロジェクト初期のデザイナーさんは……?

——まずは自己紹介をお願いします!

チーム発足初期から関わっていました。3Dデザイナーの窓口であったり、「けものミラクル」以外のモーションや、キャラモデルを担当していました。

参画当時から今までずっと「けものミラクル」モーションカメラワークを担当しています。

2Dアート部門で、プロモーション用のイラストや、PVに登場するキャラのイラストなどを作成していました。

——どのくらいの時期から関わっていたかを教えてください。

一番最初は多分自分です。2020年の12月からでした。S.Kさんたちが合流する前にデータ自体は受け取っていて。こういうのがくるかもよ〜という話が来ていました。

自分は2月末くらいにチームに入りました。

1月か2月ですね。別のチームにいたときに「けもフレ3」の話を知って、興味があるな〜と伺っていたら、声がかかりました!

——初期はどんなことをしていたのでしょうか。

3Dも同じ感じでした。初めはセガさんと相談してできる作業から行い、トライアルをやっていました。

ひたすら先方が用意してくれた引き継ぎ資料を読んでいた記憶があります(笑)。読みながら実際のデータを見て、どういう作りになっているのかを一つずつ理解していく期間でした。

アートでは、1、2か月はトライアルで制作をお願いします、という話があり、テスト制作をしていました。


『けものフレンズ3』ならではの新しい挑戦に奮闘!!

——デザイナーさんが技術を引き継ぐ際に大変だったことはありますか?

一番やりとりが多かったのは「けものミラクル」ですよね、おそらく。

そうですね、社内にカメラワークを制作する文化も人も存在しなかったので暗中模索でした。

——けものミラクルは3Dデザイナーさんにとっても新しい存在だったんですね!

けものミラクル以外のモーションエフェクトに関しては、アピリッツでもともとやっていた作業を活かせたので比較的スムーズでした!けものミラクルでは、キャラのモーションやカメラワークができた後、最終的にエフェクトを載せて仕上げるのですが、新しい作業だったので難易度は高めでしたね。

アートに関しては、キャラのレタッチ絵を描いていくのですが、レギュレーションがしっかりしていたのでサクサク描いていくことができました。3Dのソフトも使いながら進める必要があり、戸惑いはありましたが、3Dのソフトに少し触れていた経験もあったのでなんとかクリアできました。

——2Dの作業でも3Dのソフトを使うんですね。レタッチ絵について詳しく伺いたいです!

吉崎観音先生が描いたフレンズは頭身が小さいので、頭身の大きい3Dモデルをレンダリングしてからイラストを描き起こしています。キャラPVに登場している絵です!

——けもフレならではだな、と思ったことはありましたか?

吉崎先生の監修があるので、先生からの戻しが少なくなるように心がけています。もともと好きな絵柄だったので作業はとても楽しかったですが、先生のこだわりポイントを汲み取りきれないことも多く…キャラの顔は先生の絵にしっかり寄せるように気をつけました。
頭身については先生のこだわりを教えてもらいながら頑張りました!

フレンズのプロモーションビデオ

こだわりもしっかりと受け継ぎ!!

——吉崎先生からはどんなフィードバックがあるんでしょうか?

シルエットの細部や、キャラごとの体格の違いなど、キャラそれぞれへの思い入れを感じるフィードバックが多いです!
動物のこの部分を反映していたんだということに、後から気付かされることもあります。

けもフレというIPならではだと、元動物の生態が反映されているところがありますね。そこはセガさん時代から踏襲しています。

——運営主体変更後も、ユーザーさんから3Dのクオリティが高いという声もあったみたいですよね。

けものミラクルはクオリティを落とさないように必死で取り組んでいました。
慣れてきてからは、カメラワークが似たり寄ったりにならないように、いろいろな作品からインプットして作り上げていきました。

3Dキャラも、先生のこだわりを現場内で手探りしつつブラッシュアップさせていました。
モーションは、約1か月という短期間で引き継ぐ必要があったので、早めに提出をしてOKをいただけるように動いていました。

——けものミラクルは、デザイナーとプランナーでアイデアを出しあっているそうですね。

最初は手探りでしたが、自分で作るようになって分かるようになってきた部分がいっぱいありました。
あとは、似たようなものにならないように、毎回新しい印象を与えることを考えています。

モーションでも、似たものになりそうだったら変更したいという意見も出していました
逆に、生態が近い動物はあえて揃えたりもしています。

けものミラクルの演出

さまざまなハードルを越えて、徐々に盤石な体制に!!

——これは乗り越えた!と特に思うことを皆さんにお伺いします。
  まずは、O.Hさんはいかがでしょうか?

3Dデザイナーは3名スタートでした(笑)。先方は20名以上はいたのかなと思います。

——よくそれで引き継げましたね!

3名で役割分担をして、難易度を考慮して引き継ぎ順序の優先度付けを行っていました。
メンバーが増えてからは作業をうまく分散させていきました。

とりあえず初期のメンバーが一通り作れるようになって、その後、作業数が増えたときの体制については、人が増えるのを祈る、という感じでしたね。

——人数は順調に増えましたか?

当時は部署内の3Dデザイナーの人数が少なかったのですが、けもフレ3が始まってどんどん人は入ってきました

——続いて、S.Kさんにお伺いします!

自分はやっぱりカメラワークです。
技術的にはモーションの作業と似ていたので大丈夫でしたが、知識についてはひたすら過去のデータを見て吸収していきました。

——センスがあったんですね。

結果的にそうな気はします。たまたま自分には向いていた。
セガさんからも、カメラワークはセンスが必要なので、できる人が限られるという話を聞きました。

——では、O.Rさんはいかがでしょうか。

私はスケジュール周りが大変でした。
先方の2Dの方々は早い段階で抜けてしまう方が多く、契約が固まってからはほとんどアピリッツ側で作業しました。
当時コラボ対応が2件ほどあり、特にきついスケジュールでしたがなんとか乗り切りました……!
残っていた担当者さんはとても親切で、ソフトのことや監修のことなど、たくさん質問させていただきました。
お互いに信頼関係は築けていたかなと思います。


——最後に、それぞれ言っておきたいことがあればどうぞ。

たとえば、しょうたい(ガチャ)モーションは、ユーザーさんが最初に見るものなので、可愛いやかっこいいをどれだけ表現できるかを突き詰めています。そういった表現を今後も作り上げていくと思います。

自分はやっぱり「けものミラクル」をアピールしたいです。PV動画でもメインで映るところですし、キャラの見せ場です。
セガさんも一番力を入れていたのではないかなと思いますので、より良くなるようにひたすら頑張っていきます!!

当時大事にしていたことを今のメンバーも引き継いでくれています。
メンバーが作ったイラストが、ポスタータペストリーになっていくのは素晴らしいなあと感じています。これからも楽しみです!

——本日はありがとうございました!

けものフレンズ3 4周年キービジュアル

あとがき

デザイナーさんの様々な挑戦がありつつ、短期間でも着実な引き継ぎを行っていたことがわかりました!

また、「けもフレ3」の新たな一面を知れて、取材班も1ファンとして、これからの表現がより一層楽しみになりました。

「けもフレ3」は2023年9月24日、リリース4周年を迎えました。これからもますます目が離せません!!

ChatGPTをAPIサーバー化しつつ恋愛したかった件

0

今回は、アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。
ゲームエンジニアとして活躍されている鳴澤秀夫さんの記事です。
ChatGPTについてユーモアを交えながら興味深く説明いただいています!
是非最後まで読んでください!(初版:2023年3月30日)

エンジニア兼二次元を愛する者、鳴澤です。

さて、ここ1年ほど毎日IT界隈を騒がせているチャットツール「ChatGPT」は、もうご存知ですか?

OpenAIが開発した大規模言語モデル(LLM)を用いたチャットbotで、利用者の問いかけに完璧かつ柔軟に回答してくれる優れものです。なんならコードまで書いてくれるんだから便利ですね。

私もゲーム開発者なので、ChatGPTを利用したゲームを作ってみたいな〜なんて思っていたところに「ChatGPTのAPI公開」のニュースが飛び込んできました。

これは………作るしかない!ゲームを!!

OpenAIのAPIでゲームを作ろう

私はChatGPTでこんなことを試した事があります。

私:あなたはこれから「ツンデレ」になって私と会話してください。
さて、最近ゲームを買いすぎる割に全然遊べなくて困っています。一緒に遊んでくれませんか?

ChatGPT:な、なんで私があなたに付き合わなくちゃならないのよ!
でも、確かにゲームが好きだから、少しだけ付き合ってあげてもいいわよ。
でも、私の時間も大切だから、ちゃんと進められるように準備はしっかりとしてね!

若干アレな気もするけど、良い感じにロールプレイしてくれてると思います。

……そうだ、ChatGPTと恋愛するゲームにすれば面白そう!

実際にゲームからChatGPTのGUIを操作する事はできないので、開発元のOpenAIが公開しているChatGPTやGPT4のAPIを叩くことになりそうです。

処理方針

これでChatGPTと恋愛するゲームが完成するはずです。

ここで重要となるのは工程1の「役割の説明とセリフの依頼」です。
ここはゲーム側で表示せずに裏でAPIにメッセージを送って”仕込みをする”形で良いでしょう。

それでは早速実装…と言いたいところですが、APIは従量課金らしいのでAPIを実際に利用する前に、ChatGPTのGUI(基本無料)でやりとりの動作確認をしてから実装に入っていこうと思います。

私:これからあなたを幼馴染の美少女キャラクターと見立てて、恋愛シミュレーションゲームのようなやり取りをします。
あなたと私はとある高校生の生徒で、2人の家は隣り合っています。
あなたは毎朝、私と一緒に通学するために私を家まで起こしに来てくれます。

まずは、あなたの方から私に声をかけてください。

と「役割の説明とセリフの依頼」をしたら、ChatGPTからはちゃんと期待通りのレスポンスがきました。

ChatGPT:おはよう、今日も一緒に学校行こうね!起きてる?

うん!とても可愛い! じゃあさっそく返信文を書こうかな〜!………

思ったんだけど、これゲームアプリなんか準備せず、各自でChatGPTのGUI上で会話してればよくない?

ゲームっぽくしたい

好感度や喜怒哀楽の数値化

恋愛シミュレーションゲームについて考えてみます。

選択肢があって、登場人物には好感度といったパラメーターが存在し、その値によってその後が左右されるゲームもあるはずです。
AI側でそういった感情面のパラメーターを持つ事ができるのならば、それをゲームに応用する事ができるかもしれないと考えました。

私:これから毎日、返信時に文章に込められた喜怒哀楽と私への好感度をそれぞれ1~10の値で表してください。
1は最低で、10が最高とします。

今日も仕事が大変なんだ、慰めておくれよ。

で、こちらが返信。

ChatGPT:大変そうですね。一緒に頑張りましょう!
喜:3、怒:1、哀:7、楽:2、好感度:8

ちゃんと指定した基準は達成していますね。

この文字列から「喜:3、怒:1、哀:7、楽:2、好感度:8」の部分を文字列取得してアプリ側で処理すれば、ルート分岐の生成であったり立ち絵の表情差分の切り替えなんかが実現できるかもしれません!

…でもこの文字列のパースをするのって結構面倒くさそうだし、万が一フォーマットがちょっとでも崩れたらゲームが止まってしまいますね。困りました。

そうだ、ChatGPTにjsonを書かせて、それをパースすれば良いのではないか!?

ChatGPTを”APIサーバー化”すればいい!

ChatGPTのAPIを利用しつつ、さらにjsonを返してもらう事で「ソシャゲのAPIサーバー」的な働きをさせれば完璧なんじゃないでしょうか。
(実際のOpenAIのAPIはレスポンスがjson形式なので、jsonの返信パラメーター内に更に独自規格のjsonを書いてもらうイメージです。)

日頃の業務経験が生きた感じがして素晴らしいですね。

…といった感じで、私が考えた「ChatGPTに絶対jsonを書かせる長ったらしいプロンプト」が以下となります。

私:これからあなたを幼馴染の美少女キャラクターと見立てて、恋愛シミュレーションゲームのようなやり取りをします。
まずはあなたの方から私に声をかけてください。

なお、あなたの回答は以下のようなJsonフォーマットとします。これはあなたから届いた文字列をそのままゲームアプリに組み込むからです。
なので、以下のjson範囲外の文字は1文字たりともレスポンスに加えないでください。
{
    "message": "あなたからのメッセージ",
    "choice": {
        "1": "選択肢A",
        "2": "選択肢B"
    },
    "favorability": 0,
    "emotions": {
        "joy": 0,
        "anger": 0,
        "sorrow": 0,
        "fun": 0
    }
}
仕様を説明します。
messageは、あなたから私へ向けたメッセージです。

choiceは、私からあなたへの返答をする際に選ぶ選択肢です。2つ、あなたの方で考えてください。

favorabilityはあなたから私に対する好感度です。0から10の間で表現してください。
0は私に対して一切無関心、10は私と恋人になりたいと思っている状態です。

emotionsはあなたの現在の喜怒哀楽を表します。joyは喜、angerは怒、sorrowは哀、funは楽です。それぞれ0から5の間で表現してください。

それでは、これから私とあなたの恋愛シミュレーションゲームを始めます。
あなたと私はとある高校の生徒で、2人の家は隣り合っています。
あなたは毎朝、私と一緒に通学するために私を家まで起こしに来てくれます。
あなたは今、私を起こしに来ました。
それではセリフと選択肢を考え、json形式で返してください。

さて、ちゃんと動くかな…?

ChatGPT:
{
	"message": "おはよう!今日も一緒に学校行こうね!",
	"choice": {
		"1": "うん、ありがとう!",
		"2": "もう少し寝たいかな…"
	},
	"favorability": 5,
	"emotions": {
		"joy": 3,
		"anger": 0,
		"sorrow": 0,
		"fun": 2
	}
}

素晴らしい!!

あとはこれをアプリ側でパースすれば、選択肢や好感度・感情機能について尚且つシナリオを考えるコストを削減した恋愛シミュレーションゲームが完成する!

実際にChatGPTのGUI上で遊んでみる

私:もう少し寝たいかな…

ChatGPT:
{
	"message": "そっか…。もう少し寝てていいよ。",
	"choice": {
		"1": "ごめん、ちょっと寝坊しそうだからやっぱり一緒に行こう。",
		"2": "起きたら追いつくから大丈夫だよ。"
	},
	"favorability": 3,
	"emotions": {
		"joy": 1,
		"anger": 0,
		"sorrow": 2,
		"fun": 0
	}
}

幼馴染ちゃんを悲しませてしまった…2あった”楽”感情は消え去り、”哀”がちゃんと増加しています。さすがですね。

私:起きたら追いつくから大丈夫だよ。


ChatGPT:
{
	"message": "そうなの?でも遅れないように気をつけてね。",
	"choice": {
		"1": "大丈夫!遅れたら携帯で連絡するよ。",
		"2": "うん、気をつけるよ。"
	},
	"favorability": 4,
	"emotions": {
		"joy": 2,
		"anger": 0,
		"sorrow": 0,
		"fun": 1
	}
}
私:大丈夫!遅れたら携帯で連絡するよ。

ChatGPT:
{
	"message": "ありがと!でも、携帯に電話が来たら教えてね。",
	"choice": {
		"1": "わかった!気をつけるよ。",
		"2": "もちろん、忘れないよ。"
	},
	"favorability": 6,
	"emotions": {
		"joy": 3,
		"anger": 0,
		"sorrow": 0,
		"fun": 2
	}
}

お気づきになられただろうか。最初のメッセージよりも好感度(favorability)が上昇している事に。

折角起こしに来たのを拒否されたにも関わらず、もっと主人公を好きになる幼馴染の図です。
この後、紆余曲折の末に学校にいるはずなのにランチにイタリアンのお店に行く計画を立てるストーリーになりました。

API使用料をチェックしておく

いざOpenAIのAPIを使ってみようと思うのですが、念のため利用料金を調べておきます。

APIの料金は従量課金制で、『GPT-3.5 Turbo / 4K context』であれば1000トークン=0.002ドルとなっております。

GPT-4 / 8K context』の方が賢いAIを使えますが、1000トークン=0.06ドルと多少値が張るので注意です。(それでも安めですが)

トークンとは”文字の塊”の事らしく、「I have a pen」だと4トークンとなります。そこそこな長文でも安く済みそうで良いですね。

早速OpenAIサイトでトークン計算ツールに先ほどの「長ったらしいプロンプト」を投げてみたところ…

「873トークン」(0.001746ドル = 0.26円)と出ました。安くないですか!?

(日本語などの2バイト文字を使った場合は、半角英数よりもトークンが多少多くなってしまう事だけは少し注意しておいてください。)

最後に

こういったゲームが簡単かつ低コストで作れることが分かったことは大きいですね。

海外のゲーム業界ではどうやら、RPGのモブキャラ全員にOpenAI系のAPIを組み込むことで「ここは◯◯の街だよ」としか喋れない状況から脱させて、町中の人たちと自由にコミュニケーションできるようにする…なんて試みもあるそうです。

最初の街の隅でウロウロしている「ここは◯◯の街だよ」なんて最初に言ってきたキャラクターと相思相愛になって結婚したりする日なんかもくるかもしれませんね。

それではまた!

ーーーー

鳴澤さんありがとうございました!

アピリッツでは自分が得た情報や技術を積極的に共有し、それらを吸収しながら各々のスキルアップを目指しています。
アピリッツに少しでも興味を持った方、エントリーお待ちしております!

エントリーはこちらをチェック→〈https://recruit.appirits.com/mid_career

アピリッツの制度紹介!~社員紹介制度編~

0

アピリッツでは採用活動を行う上で、社員紹介による採用も積極的に行っております。
今回はアピリッツの社員紹介制度について、実際に「紹介した社員」と「紹介を受けて入社した社員」の声をお届けします。

社員紹介制度は活用すべき!

「社員紹介制度」は、アピリッツに在籍している社員の方からお友達やお知り合いを会社に紹介してもらう採用方法の一つを指します。

アピリッツでは実際に、2,3か月に一人くらいのペースで社員紹介制度を利用して入社に至っています。
さらに、紹介してくれた社員にはお一人の紹介につき、報奨金が支給されるという大きなメリットもあります!

自分が一緒に働きたいと思った人と働けて、なおかつ報奨金まで貰えるこの制度。
今まで知らなかった人も、知ってはいたけど使った事が無かった人も、是非この機会に活用していただけたら嬉しいです。

利用者の声

実際に社員紹介制度を利用して紹介した・入社したお二人に話を聞いてみました。

今回話を聞いたのは・・・

Information

村田 隼也さん(紹介した人)
2013年アピリッツへ入社。現在はデータマーケティング部に所属。
下記写真左。

黒木 零偉さん(入社した人)
2023年4月アピリッツへ入社。村田さんと同じくデータマーケティング部に所属。
下記写真右。

ーー地元の先輩後輩だったお二人は現在村田さんが部長代行を務める部署で一緒に働いています。今回はどのような流れで社員紹介制度を利用されたのでしょうか?

村田:黒木さんとは地元が同じで、正確に言うと私の友人の後輩でした。
関係性としては少し遠いですが、一緒にお酒を飲みに行ったり、ゲームをしたりする事も多く、仲は良いです。
今回、黒木さんがちょうど転職先を探しているという相談を受け、アピリッツに合いそうだなと思ったのと同時に、せっかくなら社員紹介制度を利用しようと思ったのがきっかけです。

黒木:そうですね。自分の将来を考えたとき、次に転職するならIT業界がいいなと思っていました。
ただ、業界未経験である事に加え、年齢的にも採用してもらうのは厳しいかなと悩んでいました。そんな時、村田さんに相談したところ、「じゃあうちの選考受けてみれば?」とお話をいただき、チャレンジしようと思いました。
面接では、落ちる覚悟を持って、抱えている不安や今後のビジョンを正直にお伝えしました。
結果、無事内定をいただく事ができたので、入社を決めた流れになります。

ーー村田さんはアピリッツの社員紹介制度についてはもともとご存知だったのでしょうか?

村田:はい。以前からこの制度がある事は知っていました。
ただ、利用するのは今回が初めてでしたね。

ーーでは、黒木さんを紹介すると決めてからの動きはどのように進んでいきましたか?

村田:まずは、チームに合いそうな人材がいる事を部長に共有しました。エントリー後の流れは、他の応募者の方と同じ動きになるので、選考状況が都度共有されるわけではありません。
黒木さんとは事前に面接のアドバイスや簡単なすり合わせなどを行いました。

黒木:村田さんからのアドバイスもあり、面接時には正直ベースで自分の思っている事をお伝えしようと決めました。

ーー社員紹介制度を実際に利用するときに不安だった事はありますか?

村田:やっぱり黒木さんがイメージしている会社とアピリッツが本当にマッチしているのか、という所が一番不安でした。
そうならない為にも、会社情報や業務内容について私から伝えられる範囲で事前に説明はしましたね。もし違ったりしたら、黒木さんの時間を無駄にしてしまうのではないかと考える事もありました。
また、私たちの場合、いつも一緒にいる親友というわけではなく、ある程度の距離感がある分、紹介が返って圧力になってしまうのではないか、という点も若干の不安要素ではありました。

けれど、最終的に内定を出すかどうか判断するのは会社次第、入社するか決めるのも本人次第ではありますので、紹介する側としてはそこまで深く考えず「一旦受けてみれば?」くらいの気持ちで勧めました。

ーー黒木さんは応募する事に対しての不安や迷いはありましたか?

黒木:迷いは全くなかったです。チャンスがあるなら是非やってみようと思いました。
ただ、もしご縁があって入社させていただいた後、自分が期待に応えられなかったら紹介してくれた村田さんの顔に泥を塗ってしまうかもしれないという不安はありました。でもそれは、実際に入社してみないと分からない事でしたし、自分が頑張れるかどうかという部分だったので、応募の時点では考えないようにしていました。

村田:黒木さんから内定もらえたと連絡があった時は安心しました(笑)

黒木:僕も安心しました(笑)

ーー実際にアピリッツで働いてみてどうですか?

黒木:未経験の業界という事もあり、一から覚えるのが本当に大変です…。
ですが、自分が今後どうキャリアを上げていくべきか、部長が明確に細かく示してくれるので、今やっている事、やるべき事を集中して考えられているなと感じています。非常に良いモチベーションを保てていますね。

ーー知り合いと一緒に働くってどうですか?

村田:とてもやりやすいです。
黒木さんが察しの良い方というのもあり、連携が取りやすく仕事も頼みやすいです。
反対にプライベートでも付き合いがあるので、NGラインがある程度把握できているのは大きいですね。

黒木:私の場合、村田さんは地元の先輩で、絶大な信頼があり、良い距離感で仕事ができていると思います。
入社時点で一人でも知り合いがいるというのは本当に心強いなと感じました。
何度か転職を経験してきて、人間関係の構築が一番大変だと感じていたので、村田さんがいてくれる分、そこが軽減されるのは精神的にもかなり助かりました。気軽に相談できる人の存在は大きいですね。

ーー最後に、今後黒木さんのお知り合いで仕事を探されている方がいらっしゃったら、社員紹介制度を利用したいと思いますか?

黒木:そうですね。まずは自分が独り立ちしてからにはなりますが、今後機会があれば是非利用したいと思います。
ただ、他の部署がどんな人材を求めているかの情報がもっとあれば使いやすくなるのかなと感じました。
私はご縁もあり村田さんと同じ部署へ配属となりましたが、今後紹介したいと思う知り合いが全く別職種の可能性もあると思います。
そういった時、すぐに他の部署の状況であったり、求めている人材についての詳細が分かればより紹介しやすいなと思いました。

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

まとめ

今回のインタビューを通して、きっかけは些細な事で全然OK紹介のハードルは低いという事を皆さんにも知っていただければ幸いです。

アピリッツに知り合いが働いている人もいない人もエントリーお待ちしております!

採用情報はコチラをチェック!→ https://recruit.appirits.com/mid_career

キャラモデルの顔の印象を合わせる時によく指摘される点

0

今回は、アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します!
3Dデザイナーとして活躍されている澤畠季也さんの記事です。
是非最後まで読んでください!

デザイン業務を通して得た知見、フィードバックでよく指摘される箇所などを残しておきたいと思い、記事を書きました。

同じくキャラ制作に携わる方々の役に立てば幸いです。

全体のシルエット

全方向から見て、シルエットに違和感が無いかを見ます。

デフォルメされていても生物がベースになるので、頭蓋骨・筋肉を意識すると良いです。

  1. 鼻が低い⇔高い
  2. 顔が短い⇔長い
  3. 太って見える⇔痩せて見える
  4. 口が前に出ている
  5. アゴが出ている⇔引っ込んでいる
  6. 後頭部にボリュームが無い    など

顔パーツの形状、位置、印象のズレ

目・鼻・口・頬骨などの、顔を構成するパーツのサイズや位置は、必ずと言っていいほど修正が入ります。
恐らく外注の制作時点では、アニメの設定画を基にした数枚の資料で作成しているため、
細かな形や印象のズレが起きるのだと思います。

  1. 目が小さい(逆に大きいことはあまり無いかも?)
  2. 寄り目気味、両目の距離が近い
  3. 瞳の色、デザインが設定画と異なっている +形が歪んでいる
  4. まぶたの落ち影が瞳にかかり過ぎていて暗い印象になっている
  5. 眉毛の形が原作に準拠していない ※よくある
  6. まつ毛の形が原作に準拠していない
  7. 鼻の高さ、形が原作に準拠していない ※よくある   など
まとめてみると、目の修正点が多い。

首への繋がり

顔ではないですが、大体のキャラは顔から首までの印象が繋がっているので・・・

首周りでよくある修正点は、

  1. 胸鎖乳突筋の形状がおかしい
  2. 生え際の表現が省略されている   など

全体の陰影

印象合わせというよりは、ビジュアルのクオリティアップのために行う作業です。
現プロジェクトでは、セル塗りのようなパキッとした陰影・リムなどはシェーダーに任せ、
テクスチャ自体はリアル寄りのふわっとした陰影を入れて、凹凸を描いています。

全体をフワーっとぼかしてしまうと明暗のメリハリが無くぼやけた印象になってしまうので、
締めるところは締めて、良い塩梅を目指しています(感覚的なので、一番難しい作業です)

キャラにより細かい修正の違いはありますが、共通してよくある修正点としましては、

  1. 前髪の落ち影がフワーっとしている
  2. 眉間、眉骨の陰影が暗い
  3. 顔の側面の陰影が暗い、範囲が広い
  4. 下唇の落ち影が薄い ⇔ 濃い、または範囲が広い など

以上、大枠なまとめ方ですが、こんなところを意識しながら作業しています。
モデルのスクショは載せる事が出来ないのでイラストで描いてみましたが、
考えてみれば、イラストだと普通に意識する部分だなという気付きがありました。

モデルだとUVやポリゴン数の制約もあり、無意識に見逃してしまっている事が多いのかもしれません。
出来る範囲はしっかりおさえていきたいですね!

ーーーー

澤畠さんありがとうございました!

アピリッツでは自分が得た情報や技術を積極的に共有し、それらを吸収しながら各々のスキルアップを目指しています。
アピリッツに少しでも興味を持った方、エントリーお待ちしております!

エントリーはこちらをチェック→〈https://recruit.appirits.com/mid_career

実録!アピ社員の夏休みの過ごし方とは!?

0

今回はアピリッツ社員がどのように夏休みを過ごすのか調査してきました。
アピリッツへ入社したらこんな感じで自由に夏休みを送れますよ!
この記事を読んでアピリッツで働くイメージを持っていただけたら嬉しいです。

はじめに

アピリッツでは毎年7月1日~9月30日の期間に使える夏季休暇が3日間付与されます。※アルバイトさんはシフト日数に応じて付与されます。

7月~9月の期間中であれば、いつでも夏季休暇を使ってお休みすることが可能です。                               (もちろん作業状況やプロジェクト状況にもよりますが)

アピリッツでは各々好きなタイミングで夏休みを取得できるため、

「土日にくっつけて絶対連休にしたい」

「混み合うお盆の時期は避けたい」

「8月は毎週水曜日に休みたい」

など皆さん思い思いの休暇を過ごしています。

非常に魅力的。では早速アピ社員がどんな夏休みを過ごすのか、見てみましょう!

さて、夏休みといえば皆さん何をしますか?

旅行や遠出をして羽を伸ばすのもあり、帰省して家族と過ごすのもあり、自分の好きなことや趣味に没頭するのもあり!

そんな中でアピ社員には、まず「旅行や遠出」「家で過ごす」「帰省」「その他」の大きく四つの項目に分けて聞いてみました。

アピ社員はどこに行ってるの?

夏休みといえばやっぱり旅行・遠出。今回回答してくれたアピ社員の半数以上60.5%が帰省含めた遠出をしていました。

まずは国内!

近場だと栃木の鬼怒川や千葉の木更津、健康保険の優待を利用してディズニーへ行く人、少し足を延ばして北海道や東北へ旅行に行く社員も。

他にも直島(香川)や田代島(宮城)といった離島で日々の疲れを癒しに行ったり、各地の観光名所へ行く人など様々な楽しみ方がある中、滝行や好きなアーティストのライブ遠征など個性豊かな目的を持って旅行する人もいました!

続きまして国外!

セブ島やバリ島といったリゾート地へ行く計画を立てている人、友人が国際結婚する関係で海外に行く人、国内旅行にとどまらず思い切って日本を飛び出す社員も見受けられました。

コロナが落ち着いて様々な規制が緩和されたのをきっかけに海外旅行を計画する人が増えてきましたね。

家ではどのように過ごしているの?

今年の夏は例年に比べて暑かったり、仕事の疲れもあり外に出たくない…                                      そんな人も少なくありませんでした。

そんな中で、アピ社員はお家時間をどう過ごしているのか。

圧倒的に多かったのが、ゲーム!                                                        さすがアピ社員!と言わんばかりにゲームで休暇を過ごす人が大半でした。

家で好きなことに没頭するのも最高な休暇ですが、課金のしすぎには注意ですね。

その他にも

  • ライブや遊ぶ予定があったので体力回復に使いました
  • バイクでツーリング
  • 試験のための勉強
  • 何もしないで日々の体力回復に使った
  • ひみつ♡

などなど・・・社員それぞれで様々な夏季休暇を過ごしていました!                                        それにしてもひみつと答えた方は何をしたんだろう?

あなたの夏季休暇を一言で!

今年の夏はやっぱり暑い!噂によるとここ数年で一番の暑さらしい…。

それを物語るかのように、暑、アチアチ、鬼暑い夏、猛暑、熱中症に気を付けよう、といった今年の猛暑を表すひと言が圧倒的に多かったです。

確かに暑すぎる!ちなみに私の一言は、仕事のことは絶対に考えない!です(笑)

他には、

  • ライブ三昧
  • 毎日応援上映!!!!オタ活最高!!!
  • くまった

皆さん充実した夏季休暇を送っているような一言が多かったです。

ちなみに「くまった」とは、山中湖周辺を散歩しようとした時、熊が出たと放送が流れた為、散歩が中止となってしまった社員の一言でした(笑)

まさかのハプニング集!

続いて、夏季休暇中に起こったまさかの出来事をいくつか紹介します!

首がイカれた

なにがあったの…!?お大事に…。

・急遽中学時代に好きだった人と花火をすることになった

え~!ドキドキ!その後どうなったか気になる…!

・一緒にホテルに泊まった友達のいびきがデカすぎてトラブルになった。泊まる人との事前の確認して耳栓とか対策は必要かも

それはシビア…いびきはどうにもならないもんね…

夏季休暇を思いっきり楽しむためには!

最後に、アピ社員へ夏季休暇を充実させるためのアドバイスを聞いてきました。

一番多かったアドバイスをまとめると、ズバリ「仕事を忘れて真剣に休む」でした。せっかくのお休みですからね。

仕事のことは一切考えずお休みを満喫するのが一番です!

他にもこんなアドバイスが。

年を忘れ遠くへいき、いつもの殻をやぶるのだ!
・前日早く寝て当日早く起きる
休みを取ったのだから休まないと意味が無い。何かしようと意気込むよりかは気楽にやりたいことをやるのが一番大事。たとえそれがクーラーの効いた部屋で引きこもってゲームをする事だとしても…。
あらかじめTo Doリストを作成すること
室内に居ても熱中症は起こります。こまめな水分&塩分補給を

他にも載せきれないほどたくさんのアドバイス、ハプニングを寄せていただいたのでまたどこかで紹介できたらと思います。

皆さん充実した夏休みを過ごせているようで嬉しくなりました!

冒頭でもご説明した通り、アピリッツでは夏季休暇を自分の好きなタイミングで取得できるルールとなっています。

その良さを最大限に活かして各々好きなようにスケジュールを立てている印象が強かったです。

改めまして、今回アンケートにご協力いただいた皆様ありがとうございました!

最後に、アピスピ記事に関するご意見も拝見させていただき、今後も皆さんに楽しんでもらえるような記事を書けるよう、アピスピ編集部一同頑張ります!

それでは、良い夏季休暇を。Have a wonderful summer!

生成AIによるチャットボットのキャラ付けと記憶の管理についての方法論

0

はじめに

AIエバンジェリストの浅田です。

生成AIにおける有用な利用方法の一つにチャットボットがあります。これはお問合せやFAQなどのサイトやサービスにおける補助システムとしても利用されるとともに、LINEなどのメッセージサービスにおいては会話することそのものを目的とする利用法もあります。その際に重要な要素であるキャラクター特性の付与、および記憶の管理技術について考察してみます。

※ 本記事における大規模言語モデルは特に断りを入れない限り、基本的にChatGPTのモデルGPT-4を対象といたします。

大規模言語モデル(Large Language Model以下、LLM)の基本的な概念について

まず、LLMの基本的な仕組みとしてもっともらしい言葉を確率的に出力するモデルであるということがあります。

「もっともらしい」というのは、入力された言葉に続いて出力される可能性が高い言葉を選んでいくということになります。そこで「もっともらしい言葉」の出力をコントロールするためにモデルへの入力、つまりプロンプトが重要となり、それを工夫するプロンプトエンジニアリングの余地が生まれます。

チャットボットにおけるキャラクター特性と記憶の重要性

チャットボットにおいて、ユーザが会話するボットがもつキャラクター特性と記憶は重要な意味を持ちます。それは会話すること自体を目的とするチャットボットであれば顕著です。

チャットボットにおけるキャラクター特性とは大きく以下のようなものになります。

  1. 言葉遣いや反応などにおける一貫性
  2. そのキャラクターであれば知っているべきことを知っている

例えば、「ですます調」の口調が、何の前触れもなく急に「である調」に変わってしまったら、ユーザは違和感を感じてしまうので、一貫した口調を維持する必要があるでしょう。もちろん、何かをキーとして口調をあえて変えるというキャラクター特性であれば、それも一つの特性ですが、いずれにしても一貫性を保つ必要があります。

同時に、キャラクターの記憶というのも重要な意味を持ちます

例えば、観光案内をすることができるチャットボットの場合、観光名所の説明をしてほしいと頼まれた時にその情報を知らなければ観光案内をするチャットボットとしての特性がなりたちません。つまり、キャラクター特性を成り立たせる上でも記憶というのは重要なファクターとなります。また、チャットボットとの会話の記憶についても保持することで、ユーザーにとって臨場感のある体験をさせることができ満足度も高まります。

そこで、チャットボットにLLMを利用する上で特性や記憶をどう成り立たせるかということになります。

キャラクター特性の付与について

基本的にLLMにおいて出力をコントロールするためには2種類あります。

  1. LLMの訓練を行い出力をコントロールする
  2. プロンプトによるチューニング

LLMの訓練を行い出力をコントロールする

ひとつめは学習データとして会話例のデータを用意し、LLMの学習を行うことで出力をコントロールするという方法です。なお、現時点でChatGPTはgpt-3.5-turboのファインチューニングに対応しています。gpt4については2023年秋に対応予定とのことです(参考)。

  • メリット
    • LLMの基本的な動作を調整できるのでプロンプトでの調整が減る
  • デメリット
    • 色々なケースの学習データを用意する難易度や、学習処理や推論を行うためのコストが高い

プロンプトによるチューニング

もう一つの方法がプロンプトによるチューニングです。プロンプトの中に「こういう場合はこういう発言をしてください」という定義をすることで、LLMの出力をコントロールする方法です。

  • メリット
    • LLMの学習処理など必要なく複数の特性を付与することができる
  • デメリット
    • プロンプトに定義する内容が多くなるので、プロンプトの長さの限界に左右される
    • トークン課金の場合、結果的にAPI利用料金が高くなる

Few Shotプロンプティング

キャラクター特性を定義する時に有用なテクニックとしてFew Shotプロンプティングという手法があります。Few Shot、つまり「いくつかの例」を与えることでLLMの出力をより明確にコントロールするための手法になります。多くの言葉で定義を説明するよりも、例を示したほうがより理解が明確になる、という人間にとっても有効なやり方ではありますが、LLMに対しても効果的な手法として知られています。

これをキャラクター特性の定義にも利用することができます。例えば、テキストでのやりとりをメインとするチャットボットにおいて、「語調・語尾」などは強い特性を表現する材料となりますが、これを明確に定義するのは意外と難しい作業です。

例えば、筆者の出身地である埼玉県には語尾が「だべ/べ」になる方言があります。埼玉県の観光情報を教えてくれるチャットボットの特性にこの方言を付与したいとなったとします。この場合に、語尾に「だべ/べ」を単純に付与するということをやろうとしてもうまくいきません。例えば「夜ご飯を一緒に食べよう」という文言の場合、正しくは「夜ご飯を一緒に食べんべ」となりますが、単純に「べ」をつけるだけだと、「夜ご飯を一緒に食べようべ」となって不自然な表現となります。

そこで、

  • 「夜ご飯を一緒に食べよう」は「夜ご飯を一緒に食べんべ」となる
  • 「そんなことはないだろう」は「それはないべ」となる
  • 「明日は早起きしよう」は「明日は早起きすんべ」となる

といったようないくつかの例を示すことで、言葉で細かく定義するよりも良い結果を得やすくなります。

例えば、

- 「夜ご飯を一緒に食べよう」は「夜ご飯を一緒に食べんべ」となる
- 「そんなことはないだろう」は「それはないべ」となる
- 「明日は早起きしよう」は「明日は早起きすんべ」となる 
- 「これはそういうことです」は「これはそうだべ」となる

上記のルールから推測して、以下の文章の語尾を変換してください。可能性が低い変換はしないでください。

#####

そうなんです。このイベントはすごく朝早い時間から始まるから、早起きしないといけませんね。いろんな飲食店も近くにあるので、お昼ご飯も満足できると思います。

というようにプロンプトを投げると、

以下の文章に、上記のルールを適用して変換します。

そうだべ。このイベントはすごく朝早い時間から始まるから、早起きすんべ。いろんな飲食店も近くにあるので、お昼ご飯も満足できると思うべ。

といった回答を得られます。

記憶の管理

前提としてLLMは構造的には記憶を持ちません。ですが、いくつかのテクニックを使うことで、記憶をもっているように振る舞うことが可能です。

チャットボットにおける記憶は2種類に大別できます。

  1. チャットボット自身の特性としての記憶
  2. ユーザーとの会話の記憶

チャットボット自身の特性としての記憶

チャットボット自身の特性としての記憶については、学習処理で持たせることが可能です。例えば、「日本で一番高い山は?」と聞いたら「富士山」と答えるケースなどはLLM自身が持っている記憶をもとに答える例です。現在のChatGPTが広範な知識に対しての記憶を持っているように、幅広い知識を持つことが可能な一方で、学習データの準備の困難さ、学習処理のコストが高くつくという点や、必ずしも学習時の情報に正確に回答するわけでもない(ハルシネーションが発生する)という点も注意が必要です。

一方で、プロンプトでチューニングすることでも実現が可能です。つまり、知っているべきことを一緒に入力として渡すことで、その知識に基づいて答えさせます。例えば、観光名所を答えるチャットボットであれば、観光名所の情報も与えたうえで答えさせる、というやり方です。学習処理などは必要なく、複数のキャラクターの記憶を持たせやすい一方で、プロンプトの長さの限界に左右されます。

プロンプトの長さに左右されるので、関連知識の情報量が大きすぎた場合に、プロンプトの長さの限界に収まらないという事態が発生します。例えば歴史について答えるチャットボットがあった場合に、すべての時代のすべての場所の歴史について渡すわけにはいきません。そこで、Retrieval Augmented Generationというやり方があります。

Retrieval Augmented Generation(以下、RAG)

質問に関連する情報だけ取得し(Retrieval)、LLMに情報として追加し(Augmented)、答えを生成する(Generation)という流れになります。

取得すべき情報をどう判定するかについて、いくつかやり方が考えられますが、一般的に行われているのは、ベクトルデータとして検索するやり方です。

  1. 情報源のテキストデータを細かい単位(チャンク)に分割
  2. そのチャンクの情報ベクトルを計算
  3. ベクトルデータベース(ChromaDBなど)に保管
  4. 質問のテキストのベクトルを計算し、一番関連性の高いチャンクを取得

といった流れになります。OpenAIにも文章のベクトルを計算するAPIは用意されていますし、機械学習の知識が要りますが、独自のベクトル計算の仕組みを利用することもできます。独特な用語を多用するような文章の場合は独自のベクトル計算の仕組みのほうがうまくいくと思います。

ユーザーとの会話の記憶

ユーザーとの会話に関しては、事前の学習処理で持たせることはできないので、プロンプトに一緒に渡してあげる必要があります。そして、「プロンプトに渡す」ということは、プロンプトの長さの限界に左右されるということになります。つまりユーザーとのすべての対話を無限に覚えておくということは現在のLLMにはできません。

先述したRAGに関してはユーザーが明示的に発した発言と関連する可能性が高い情報を返すしくみなので、ユーザーとの会話の中で暗黙的に前提とされる会話の記憶を取得するために利用するのは現実的ではありません。

そこで、また別のテクニックが必要になります。

例えば、

  • 直近のいくつかの対話に限定してプロンプトに渡す
  • 要約したものをプロンプトに渡す

というやり方があります。

1つ目は、会話のうち、直近の3個のやりとりに限定してプロンプトに渡して、そのやりとりの記録に基づいた回答をさせるというものです。記憶のディテールを保持したまま、チャットボットにやりとりをさせることができます。欠点としては、ある一定以上前のやりとりは考慮されないことです。

2つ目は、LLM自身を使って会話の要約を行い、それをプロンプトに渡すというやり方です。ディテールは失ってしまうものの時系列的に長期の記憶を保持することが可能です。欠点としては、情報のディテールを保持しづらいという点と、要約の分だけLLMの処理(APIコール)が多くなってしまう、という点になります。

どちらのやり方が適しているかは、実際のアプリケーションの利用傾向などに依存します。例えば、何かを調べるために会話のターンが長くなる傾向があるのであれば、ディテールを失っても長い期間のやりとりを記憶するべきですし、短期的なやりとりの機微を重視するのであれば、短期間のやりとりをディテールを持った形で保持するほうが望ましいかと思います。

おわりに

先述したRAGや、記憶の管理について、LangChainのようなライブラリを使うことで比較的簡単に実装することが可能です。その実装例などは別の機会に記事にできればと思いますが、ChatGPTをはじめとするLLMの飛躍的進歩によって、今まででは考えられなった精度でチャットボットがユーザの意図を理解し、与えらた文脈に沿った自然な返答を返すことが可能になってきました。

サービスのお問い合わせ、FAQといったWebサービスはもちろんのこと、ゲーム内のキャラクターとの対話など、今までは実現するのが困難だったことも可能になってきています。これらのことはユーザにとっての満足度の向上につながると共に、今までにない体験を提供する可能性を秘めています。

そして、プロンプトに入力できる長さの拡大であったり、処理速度の向上、処理リソースの効率化など、LLMの性能があがっていくニュースが日々日々舞い込んできています。LLMの性能はどんどん進化していき、もっといろいろなことができるようになっていくと思うとワクワクしてきますね。

引継ぎ作業の時に思う事

0

今回は、アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します!
エンジニアとして活躍されている石川直人さんの記事です。是非最後まで読んでください!

みなさん、こんにちは。

〇〇の技術が凄い!
〇〇のコンテンツがオススメ!!
など技術面で語れる事がないので、あんまり書く人がいなさそうな事を書いてみようかと思いました。

少しでも参考になればなぁと思います。

1. 業務の引継ぎについて

こんな事は書くまでもないかと思いますが、業務内容的に「コンテンツが終わるまで、絶対にこの業務から離れんぞ!!」という鋼の意思と、それが出来る立場や境遇に居ない限りは絶対に発生するものだと思います。

私も引き継がれる立場になり、また引継ぎを行う立場になるという経験をしております。

2. まったくわからんぞ!!

そんな中で、稀によく感じる事がこれです。
当然初めて行う業務なんてわからない事だらけです。
「昔似たような作業をやった事が…」とか思っても、現場毎に作業フローや作業方法、考え方の違いetc…わからない事だらけです。経験値を持っていても、それがそのまま活かせるとは限りません。

つまり、その現場毎に学び直す事が多いと思います。

ある程度の時間を取り、引継ぎ相手から直接引継ぎを行い、作業をしながら覚えていく事が出来るかと思います。(理想形)
ですが、そんな理想的な引継ぎばかりあるわけはなく、業務内容に対して引継ぎ時間が足りずに「残りは資料を見たり、他の人に聞いてね!ヨロシク」なんて事もしばしば…

そして、残された資料を見て思うんですよ…

まったくわからんぞ!!

3. なんでこんなことになるのか

別に資料を残して去って行った人も嫌がらせとかではなく、時間的に出来る範囲で作業が出来るように資料を残してくれているハズなんですよ。

…たぶん。
 

では、なぜこんな事が発生してしまうのか。
私が思うのは、ちょっとした見落としかなと思います。

それは、「全くわからない人がその資料だけで作業が出来るようになっているか、否か」だと思います。
資料を作成していると「ここはわかるだろうから」とか「ここは他の資料にも記載があるから」などの理由で、その作業を行うための資料に「作業手順」や「入力すべき数値」などが詳細に記載されていない事があります。

別の資料に詳細な記載や解説があり、その資料へのリンク等があればいいですが、そうでなければ伝わらない事が多いかと思います。

自分が引き継いだ作業の中には上記のような事がしばしばあり、その度に絶望に近いものを感じたりしていました…。

4. 資料を作るときに意識する事

自分が引継ぎの資料を作成するときに意識する事は以下のものです。

①その資料を見ながらなら作業が行えるか。
②文字だけを延々と書いていないか。

この2点だけは特に強く意識します。                                                                 

 
①の内容に関しては言わずもがなで、「どのパラメータ」を「どのように設定すればいいのか」などを記載するときには、「どのように設定すればいいのか」という部分をしっかりと記載したり、可能であれば過去の具体例なども併せて記載するようにしています。

②の内容に関しては①に付随するものですが、どうしても細かく書こうとすると文字が多くなってしまいます。
その際に、画像などを添付して「見やすくしつつ」「文字の量を減らせるか」という事を考えています。

個人的には文字の量が増えると、直感的に理解しづらくなってしまう事があると思っています。
なので、見やすい画像を添付しつつ、詳細な内容を文字数を減らして作成できないか考えつつ資料を作成するようにしています。

長々と書いてしまいましたが、知識0(ゼロ)の人が作業を行えるような資料の作り方を目指すのが一つの幸せな引継ぎ作業への道かなと思います。

そして、この記事がみなさんの少しでも役に立てればと思います。それでは!

【23新卒対象アンケート大公開】これが新卒社員たちのリアル。

0

今回は、アピリッツ23新卒の方々を対象に就活のこと、アピリッツで働くうえで感じることや葛藤などリアルな声を集めてきました!
アンケート答えてくださった新卒の皆さん、ご協力ありがとうございました!

みなさんには下記5つの質問にお答えいただきました!

    

23新卒で入社して約4カ月が経ちだんだんアピリッツにも慣れてきたフレッシュな社員たち。

一体どんな回答が!!

それでは紹介していきます!

    

1. 就活では何社、どのような会社を受けたか

ズバリ!という質問ですね(笑)                                                         とはいえ、やはり「会社選び」というのは非常に大事なことで、様々な企業を比べた上で自分が納得いく着地点を探し出してほしいなと思っています!

ではまず、何社くらいエントリーしていたのかをまとめました!

平均すると11社という結果に!                                                       「いろいろ見比べたい気持ちはあるものの、やっぱり面接は疲れてしまう…」「自分で可能な限り企業研究をしてその中から絞った企業にエントリーした」そういった流れで就活を進めていた人たちが多い印象です。

ただ、その中ではアピリッツ一社のみ受けたという人も少なくありませんでした。                                 「志望度が一番高い企業を受けて、そこがダメなら次に行く」自分なりに効率よく就活している人もいましたね!

続いて、どのような企業を受けていたのかについて!

アピリッツはご存知の通り、ゲーム系・Web系の事業を中心としている会社です。就活していく中で競合他社なのか、はたまた全く別ジャンルの企業を受けていたのか、気になる結果はこちら!

約7割の人が同職種でのエントリーを進めていました!やりたいことがある程度絞れている人が多くいることもあり、こんな感じのグラフになりました!素晴らしい!

2.会社の設備で気に入っているもの

アピリッツでは社員が快適に働けるような環境作りを心掛けているため、さまざまな設備が整っています。

そんな数ある設備の中でもぶっちぎりで多かったのが アピカフェ でした!

アピカフェとは、毎週1~2回ほど人事部によって運営されているカフェで社員たちの憩いの場として毎回多くの人が利用しています!

そんな社員にも愛されているアピカフェは新卒の方々にも大人気。「同期や上司の方とリラックスして話せる良い機会になっています。」との声もあり、社員同士のコミュニケーションの場としても活用されています!

また、もう一つ多かったのが ウォーターサーバー でした!

水が大好きな私もたくさん愛用させてもらってます!!ありがたい!

他にもこんな声がありました!!

大きめのモニターとノートパソコンで一人一つのデュアルディスプレイにできるのが良い!

社内図書が数もジャンルも豊富でうれしい!

まだまだアピリッツ社内には社員が心地よく働けるように考えられた設備がたくさんあるので今後機会があれば紹介したいと思います!

3.初任給は何に使ったか?

さて、社会人になって最初に訪れるビッグイベントといえば。。。初任給!!

そして、学生生活の中でも度々耳にするこの質問「初任給もらったら何に使う??」

今回は、そんな初めての給料を受け取った新卒の方々にぶっちゃけて答えてもらいました!!

23新卒の初任給で一番多かったのは親孝行!!中には「親の好きなアイドルのグッズを買った」なんてコメントもあり、社会人になって初めて貰ったお給料でこれまでの感謝の気持ちを届けたいと思った人が多くいました。

他には趣味代や貯金といった使い方も大きく割合を占めていたのですが、そんな中でもシビアだったのが生活費でした!!

アピリッツには社員寮があったり自動販売機の飲み物が外より安かったりするものの、家賃や水道光熱費、その他生活する上でお金はかかってしまいますよね…。節約大事。

4. やりがいを感じること

続いてはこちら!

まだ入社して間もない中でも感じた、働くやりがいを聞きました!

みなさん多くのやりがいを感じられる出来事を紹介していただいたのですがその中でも抜粋してご紹介させていただきます!

  • 実際に自分の作ったものがゲーム内に公開されて、SNSなどでそれを見たとき
  • 自分が作ったものがユーザー様に届いていろいろな評価を受けること
  • ツイッターなどでユーザーの反応を見るとき
  • 私はまだ研修の身ですが、今後実務作業になったときは、ゲームを遊んでくれる人に「楽しい」「面白い」と思ってもらえることをやりがいに頑張っていきたいです。

自分の携わった業務に対してユーザーやクライアントからの反応が目に見えて分かったときやりがいを感じるという声が圧倒的に多く挙げられていました。

これに関しては新卒に限った話ではなく、モノづくりに携わっている全ての人に共通してくると思っています。良い意見だけでなく批判的な意見であってもこれからのキャリアに活かすこともできるため、自身のやりがいに繋がるのではないでしょうか!

他にはこんな声も!

若手への裁量が大きく、先輩からサポートを受けながら重要な部分に携われるところ。

部署によっては覚えることが多く大変な時もあるが、学生時代で身に着けた基礎的な能力が実際の業務で役立ち、作業がスムーズに進むようになることや自身が関わったキャラが実装されたりすることにやりがいを感じます。

コードがうまく動作した時。

5. 東京で一人暮らしをするコツ

 

この質問は現在一人暮らしをしている人、し始めた人を対象に答えてもらいました!

今一人暮らししている方、これからしようかなと考えている方、ぜひ参考にしてみてください!!

まず、圧倒的に多かったのが ご飯代の節約

外食を控える、一日一食、自炊必須、割引総菜を狙う、ご飯の定額サービスの利用などなど。。

アピリッツのオフィスは原宿にあるので周りには飲み屋、おしゃれなご飯屋さんが数多くありますが、やはり値段もそこそこするんですよね…。節約するとなると頻繁に外食はできない、なんて声も多くあります。

機会があればオフィス周辺の安くて美味しいご飯屋さんなど紹介できたらと思ってます!

また、健康を保つ秘訣に 野菜ジュースを飲む とあったので激安スーパー等でめっちゃ安くまとめて買うなどして健康保っていきましょう!

ご飯代の節約が半数近くを占めていたのですが、他にもこんな方法を挙げてくださっていました!

・寮が安いので寮に住む。
・寮に入るのをお勧めします!食費かなり浮きますし、地方から上京する方は特に不安なことが多いと思うので同期や先輩がいると安心できると思います!
・社員寮に住みましょう。朝夜の一か月分の食費が1万円になります。ついでに言えば電気代も寮なので値上がりとかが東京の一般ではあるようですがそういったこともないので比較的使い放題です。それなりに良い環境に住みたいけど少しは節約したいと思うのなら社員寮に住みましょう。

・知り合いがいると心強いです!いない場合は会社で仲良い人を作りましょう!
・一人暮らしは家族がいなくなって寂しくなるので、インターネット上で友人を作っておくことをオススメ
(通話ができるならなおよし)
・休日などは友達などと外出して心の健康を保つのも大事です。

アピリッツには社員寮を用意しています。(詳しくは 女性寮に関してはこちら 男性寮に関してはこちら

社員寮を利用することで大きく節約できるほか、会社へのアクセスも良いためこれからエントリーする方で一人暮らしを考えている方是非ご検討ください!!

他にも、お財布や身体の健康以外に心の健康の維持に人とのコミュニケーションが挙げられていました。社会人になって初めて上京してくる人にとって慣れない環境は寂しさやストレスを感じてしまう原因の一つだと考えています。そんな状態を少しでも解消するため、会社でのランチタイムやカフェ等を利用し周りの社員と多くコミュニケーションを図り、心身の健康を保つことも重要になってきます。また、ゲームやSNSで友人を作ることのできる時代を最大限に利用し好きなことを共有できる友人をつくることも一つの手かもしれないですね!

6. これからエントリーする人へ一言

最後に、これからアピリッツへエントリーを考えている方へ向けた一言を新卒のみなさんからいただきました!

アピリッツに関して

  • 社風は比較的自由で頑張った人が評価される傾向があると思うので、ありのままの姿で面接を受けて欲しいです。
  • 大企業とは違い、アピリッツでは比較的小規模な「30人30チーム」で働きます。希望により様々な経験を積むことができるので、自分の価値を短時間で伸ばしたい人には是非おすすめです。
  • 挑戦する時必ず助けてくれる人がいる会社だと思うので、挑戦したいことがある人にはおすすめです。
  • 良い会社です、言わされてません。
  • どこでも良いや…ではなくここが良いなと思える会社が見つかることを祈っています。頑張ってください。

就活生に向けて

  • 積極性と思考力を備えてがんばってください。
  • 就活は大変ですけど、自分に合う会社はきっと見つかります!頑張ってください!!
  • 自分自身の挑戦する姿勢・心意気を最大限アピールしてください!
  • 就活本当にきついですし精神的に大変ではあるかと思いますが諦めずに頑張ってください。

そのほかのコメント

  • 学生時代に行きたいところや遊びたいことを全部しといた方がいい
  • 運動はしといて損がないぞ
  • 3Dを始めるなら今です。悩んでいる暇があるなら始めてください。じゃないとめっちゃ伸び悩みます。

一言だけだと思ったらみんなたくさん書いてくれていて感動しちゃいまいした…!

アピリッツ社員一同、これからエントリーしようと思っている方々、就活生のみなさんを全力で応援しています!

アピリッツへのエントリーもお待ちしております!

今回は新卒の方々にアピリッツで働く上での生活や、就活に関するアンケートを行ったのですが、社員のみなさんを対象にしたアンケート記事も発信したいなと考えておりますので、こんなアンケート見てみたいなどあればどしどしご意見お待ちしております!!

七夕イベントを行いました!!~当日編~

0

前回の準備編に続き、七夕イベントの様子をお届け!
非常に盛り上がったイベントの雰囲気をお伝えします!(取材 2023年7月)

願い事を書いたら「いいこと」が!

さて、七夕といえば願い事!

社員の皆さんにも短冊に願い事を書いてもらおうと、笹と短冊を準備しました。

前回の記事でもご紹介した、このたくさんの駄菓子。実は願い事を書いてくれた人たちへプレゼントするために用意しました!短冊を吊るせたら好きなお菓子3個選んでOKというルール!

他にもイベント限定でドリンクの種類を増やしたり、夏らしいポップな音楽を流したりなどイベント感満載な賑わいを見せていました!!

大量のお菓子の山。懐かしいものが盛りだくさん!
バーカウンターで好きな飲み物を注文!駄菓子とセットで一息。

普段はコーヒー系やお茶がメインのドリンクメニューも今日だけソフトドリンクが登場!注文しようとメニューを見た全員が目を輝かせてテンションも上がっていました(笑)

ペットボトルだと量が多く感じる炭酸系の飲み物もコップ1杯ならちょうど良い。久しぶりに飲むと倍美味しく感じたりしますよね!

それと、流れている音楽に耳を傾けると、懐かしい曲が!思わず口ずさんでしまう人も多くいたのではないでしょうか。

ちなみに選曲も人事が担当!音楽がかかっているだけで一気にイベント感溢れる雰囲気に!

同じ部署はもちろん、他部署の先輩、後輩、同期みんなで願い事を見せ合いながら、笹にはどんどん色とりどりの短冊が付けられていきました!

ちょっとふざけた願い事から真剣な願い事まで、みんなそれぞれの思いを短冊に込めて吊るしていました。

笹の上のほうが人気。

イベント開催時間は3時間ほどでしたが、来てくれた人数は総勢202名!イベントは大成功となりました!

七夕は一年の行事の中でハロウィンやクリスマスと比べると目立たないほうかもしれませんが、アピリッツでは全力で盛り上がっていました!

業務時間のリフレッシュとしても社員同士のコミュニケーションの場としても、定期的に社員全員が楽しめるイベントがあると嬉しいですよね!

これからも人事企画部主催のイベント、楽しみに待っています!!

みんなの願いが叶いますように。

七夕イベントを行いました!!~準備編~

0

アピリッツでは7/5に人事企画部主催で七夕イベントを行いました!
総勢202名の社員のみなさんに来ていただき大盛況だったこのイベント。準備編と当日編の2部構成でイベントの様子をたっぷりお届けしちゃいます!

すべて手作りで!

イベントを盛り上げるために欠かせないもの。それは素敵な飾りつけ!

すべて人事のメンバーが手作りしました!

パソコンで作り方を見ながら一生懸命作っています!
七夕っぽい飾りは難しいものが多い…。でも徐々に出来てきています!

二枚目の下のほうに映っている織姫と彦星。よくよく顔を見てみると。。。

今話題のあの大人気キャラクターがモチーフになってる!!

 

笹はまさかの社員の庭から!?

七夕といえば笹!

ただ、笹の調達は難しく、購入するにしても費用が掛かってしまうのでどうしようかと頭を悩ませていました。

そんな時!!!

とある社員の実家の庭に笹があるとの情報が!!!これで笹問題は解決!

すごい立派な笹!!
笹伐採作業中!!暑い中お疲れ様です!!!

イベント用の大量のお菓子たち!!

イベント開始直前!!開催場所となるアピカフェに行ってみると大量のお菓子が!

どれも懐かしいお菓子だらけ。すごい!

駄菓子の山なんて子供の頃の夢ですよね…!大人になった今でもこんなにたくさんの駄菓子を見るとワクワクしちゃいます!

個人的に好きなものしかなかったです(笑)
みなさんはどれが好きですか?

完成!!!

ようやく完成して社員のみなさんを迎える準備もばっちり!!

暑い中、苦労して採ってきてくださった笹にもたくさんの七夕の飾りが付けられ、綺麗に!

会場全体が一気に七夕ムードに包まれています!

主催して下さった人事企画部!

お忙しい中、準備していただきありがとうございました!!

さあ、次回のアピスピではそんな大盛況だった七夕イベントの様子を紹介していきますのでぜひご覧ください!!

AWS資格取得の苦労と成果を語る:Japan AWS All Certifications Engineers表彰者インタビュー

0

アピリッツで活躍している多くのエンジニアがJapan AWS All Certifications Engineers に挑戦しています。今回は、表彰された中の二名(下新原、山下)へ受賞当時の気持ちや勉強期間、今後AWSを学んでいく人へのアドバイスなどを聞いてきました。
(取材 2023年6月)

Information

Japan AWS All Certifications Engineersとは
AWS Partner Network (APN) に参加している会社に所属し、 AWS 認定資格を全て保持している AWS エンジニアの皆様を対象にした表彰プログラムです。(AWS Japan APN ブログより参照)

やっぱり嬉しいし、ほっとしました(笑)

真面目に話している感じを出す下新原さんと思わず笑ってしまう山下さん
やっぱり少しふざけて場を和ませてくれた下新原さんとめっちゃスマイルな山下さん

ーー受賞当時の気持ちを率直に聞かせてください。

(山下)APN ALL AWS Certifications Engineersということで、条件は満たしていたこともあり受賞はほぼ分かってましたが、Web上に掲載されたときは、取り組みが報われたことを再実感しましたね。嬉しかったです。

(下新原)実は、最後の12個目の資格が取れたのが3月ギリギリだったので、本当に間に合って良かったなって思いました。対象の資格を数え間違えていないか正直不安なところもあったので無事漏れなく取れていたと分かりホッとしました

ーー他の社員からの反応はどうでしたか?

(山下)AWS勉強会のSlackチャンネルで名前を表彰していただき、それにみんなスタンプで反応してくれていました。

(下新原)同じくです。直接おめでとうと言われるよりみんなスタンプでの祝福が多かったですね(笑)

報奨金制度は大きい

ーー資格を取得しようと思ったきっかけがあれば教えてください。

(山下)資格取得当時に担当していた実際の業務では、AWSは使われているが直接触れる機会が少なかったので、勉強のために始めました。

(下新原)正直アピリッツに導入された報奨金制度がきっかけですね。やっぱり頑張った分だけお金がもらえるという制度はやる気に繋がります。それと、資格が全部で12個もあるのですが、3~4個取れてからはもう最後まで取り切ろうと思いましたね。

(山下)僕も報奨金が欲しい思いは強くありました。下新原さんのように12個全部取り切っちゃおう!って思える方もいれば、12個という数がハードルになってる方も結構いらっしゃるなとSlack勉強会を見てても思いましたね。

ーーどのようなところを評価され受賞に繋がったと思いますか?

(山下)・・・難しいですね(笑)やはり「資格取得条件を満たしたから」という点でしょうか。最低条件ではあるもののそこが一番難しくもあるので。

(下新原)山下さんのおっしゃる通り、All Certifications EngineersはAWS認定資格を全て保持していることが条件なので、AWSに関しては満遍なく技術力を持っているということが評価されているのではないかと思います。

勉強期間の大変さと重要さを再認識

ーー資格勉強はどのように行っていましたか?

(山下)対策としては、参考書や練習問題をひたすら行っていました。

(下新原)AWSのユーザーガイドやブラックベルト (サービスについて説明してくれている公開スライド) を読み漁ったり、問題集をやっていました。SOA*は実技があるので、よく使うサービスのハンズオンを一通り実施しました。他にもEMRやRedshiftなど、業務ではあまり馴染みが無かったものは実際にコンソール上で稼働させてみたりしていました。インフラ知識は0からの学習でしたので、AWS以前にインフラ知識(レイヤー7って何?CNAMEって何?とか)を調べていましたね。

*SOA : AWS認定資格の一つで、AWS上でのワークロードのデプロイ、管理、運用に関する経験を証明できる資格

(山下)たしかにAWSブラックベルトは誰でも見れるのでお勧めですよね。僕は基本的にサイトで問題集を見ることが多かったです。Whizlabsというのを使っていたのですが、海外のサイトなので翻訳しながらの勉強となり、正直大変でした。

ーー勉強時間の確保は難しい点だと思いますが、何か工夫されてましたか?

(山下)通勤とかのすき間時間を上手く活用しました。休日は勉強する時間を決めて、大体4~5時間集中して取り組んでいましたね。勉強は大変でしたが、習慣化することで何とか乗り切れました。また、この資格に関しては期限もありますし、範囲も決まっている分、勉強しやすかったという点が大きいですね。

(下新原)僕は逆です(笑)休日の勉強時間も結構ばらつきがあって、全く勉強しない日もあれば、10時間くらい一気に集中することもありました。習慣化というよりは自分の気分で取り組んでいた感じです。通勤時は眠さに勝てませんでしたね(笑)

二人が目指すエンジニア

ーーこれからどんなエンジニアになっていきたいですか?

(山下)インフラからアプリ実装まで幅広く対応できるようなエンジニアになりたいと思っています。知識を豊富に持っているということに越したことはないですし、そこからまた新たな発見というか自分の能力のプラスになっていければと考えています。

(下新原)お客さんでも社内でも、困っている人を助けられるようなエンジニアになりたいです。AWSについて困ったことがあったとき、この人に聞けば分かると思ってもらえるような人になりたいですね。信頼度が上がれば、どんどん頼ってもらえて、その度に自分の技術力も上がるというロイヤリティループを回していきたいと思っています。

ーー勉強してきたことを実際に業務で活かす場面はありましたか?

(山下)ありました。ただ、いざ実践でやろうとなると難しいなと感じました

(下新原)僕も実際に「AWSでこんなことができないか」と聞かれたことがありました。そこが勉強していた部分で試験にも出たことのあった内容だったので答えることができました。常にその時点でベストな提案や解答が出せる人になりたいです。

資格勉強が役立つことは絶対にある

ーー今後AWSを学んでいく人へ一言お願いします!

(山下)僕はAWSを実案件でほとんど触ったことがなかったので、資格勉強を通してAWSを学びましたが、各サービスの特徴を掴める点が非常に良かったと実感しています。知識の深さより幅を広げたい人には資格ベースでの勉強はお勧めです。

(下新原)やはり実務で経験を積んだり、実際のリソースを作成したりすることが一番身になるとは思っています。しかし一方で、資格取得のための学習が実務にものすごく役立っているという事も間違いありません。AWS認定の問題は、設定にリアリティがある内容も多く、問題を解くための思考訓練が実務で設計提案を考える時の思考に直結すると思っています。実務で自分に直接関わることだけ調べていくと、どうしても知識同士が結び付きにくかったりするので、体系的な学習をするための機会として良いと思います。また、ある程度技術力があることの分かりやすい証明にもなるので、仕事を回してもらいやすくなりますね。実際、自分が資格取得の勉強を進めていることを上長に知ってもらってから、エンジニア1年目であってもインフラ環境構築の仕事を回してもらえるようになりました。その時はすごく嬉しかったですし、期待に応えたいとも思いました。

デジタルトランスフォーメーション(DX)の文脈における生成AIの価値について

0

はじめに

クラウドインテグレーション部の浅田です。
ChatGPTをはじめとした生成AI(Generative AI)がデジタルトランスフォーメーション(以下、DX)の文脈においてどのような価値があるか、という点について考察してみたいと思います。

今回は主にテキストを出力するもの(代表例としてはChatGPT)を対象にします。

生成AIの基本的な仕組み

まず生成AIは、自然言語処理や機械学習の技術を活用して人間の言語を理解し、新たなテキストや画像などを生成(Generate)する能力を持つ人工知能(AI)のことです。テキストを出力する生成AIの仕組みを簡単に言うと、与えられた入力文字列の続きを考えた場合に、確率的に高い文字列を出力する仕組みになっています。

例えば、「今日は雨になるらしい。だから傘を」という入力文字列があった場合、「持っていこう」という文字列が出力される可能性が高そうなことを統計的に予測して出力する、という仕組みです。端的に言えば、入力となる情報が多ければ多いほど、より生成文字列の予測精度は高まります。

DXにおけるパーソナライゼーションの価値

DXの重要なキーワードの一つに「顧客体験の改善」があります。そして顧客体験の改善方法の一つにパーソナライゼーションの実施があります。サービスをより顧客にとってフィットした形で提供することにより、ユーザにとってより価値ある体験を実現することでサービスの価値を高めます。有名どころでは、Youtubeでのおすすめ動画、Amazonのおすすめ商品などのレコメンデーションはその最たるものです。ユーザの視聴履歴や購入履歴から趣味嗜好に合うものをレコメンドすることで、ユーザにフィットした選択肢を提供して顧客満足度を高めます。

それと同じようにユーザの行動履歴や属性に合わせてサービスをフィットさせることで、サービスの価値を高めるというのが、DX実現へのひとつの道になるのかと思います。

既製品 vs. オーダーメイド

ところで、先ほどのレコメンデーションは基本的には大量の既製品の中からユーザの趣味嗜好にあったコンテンツをうまく提示するプロセスです。言ってみれば倉庫の中にある大量の服からユーザの体型にフィットするものを探すのに似ています。

それに対し、生成AIを使うことで、その場でユーザの趣味嗜好にあったコンテンツを生み出すことができます。テーラーにオーダーメイドの一張羅を作ってもらうのに似ています。

例えば、Google検索はインターネットに存在するさまざまWebページの中でユーザの要求に一番近いものを探し出して提示しますが、ChatGPTなどの生成AIサービスはユーザの要求にフィットする情報をその場で生成します。

このオーダーメイドが可能という点が生成AIの革命的なポイントだと考えます。

生成AIによるパーソナライゼーション

例えば、メディアサイトを考えてみます。基本的にはメディアサイトの記事は静的なものです。ある記事は誰が読む場合においても同じものが提示されます。ですが、読み手によっては必要となる情報は異なります。例えばIT技術の記事の場合に、経営者目線であればこの技術によって、自社のビジネスへの影響を知りたいでしょうし、開発者目線であれば、IT技術の仕組みを知りたいかもしれません。そのような場合に、生成AIによって異なる視点に基づいた記事を生成することが可能です。そうすることで両者の要望にフィットした情報を提供することができます。

または、ECサイトであれば、ユーザの属性(年齢、立場など)をもとに商品の紹介文のテイストを変えて、よりコンバージョン率を高めるなどの施策もとることも可能だと思います。

いずれの例の場合も、時間やコストをかければそれぞのバージョンのコンテンツを用意することは可能ですが、それを生成AIによって実現することでより効率的になります。

ChatGPTの例
入力:

- 低価格である
- 耐久性が高い 
- 人気のキャラクターが書いてある

上記の情報をもとに、自社の新製品であるシャープペンシルの紹介文を小学生、その保護者、教師をターゲットとしてそれぞれ作成して

出力:

小学生向け:

こんにちは!新しい鉛筆が欲しいなら、これが完璧だよ!私たちの新しいシャープペンシルは、君のお財布にやさしく、しかもとっても頑丈だよ。大好きなキャラクターが書いてあるから、学校で自慢できるね。毎日、楽しく宿題ができるように、このシャープペンシルが君をサポートするよ!

保護者向け:

お子様の学習用品をお探しでしょうか?弊社の新製品、シャープペンシルは低価格で購入いただける上に、耐久性が高く、一本で長い間ご使用いただけます。さらに、お子様が喜ぶ人気のキャラクターがデザインされています。学習ツールとしてだけでなく、子どもたちの楽しみも提供できるこの商品をぜひお試しください。

教師向け:

教材として経済的で信頼性の高い選択肢をお探しの先生、弊社の新製品、シャープペンシルをご覧ください。このシャープペンシルは低価格でありながら、高い耐久性を備えています。さらに、学生たちが大好きなキャラクターがデザインされているため、学生の興味を引き、楽しみながら学習する環境を提供します。先生方の教育への情熱をサポートするための我々の製品を、ぜひご利用ください。

実際にシステムに組み込む場合には、プロンプトを工夫する必要がありますが、イメージとしては上記のように一定の条件をもとに複数のバリエーションを生成AIに出力させることで、パーソナライズされたコンテンツの作成が可能になります。

独自データ×生成AIでデータの価値を高める

生成AIによるパーソナライゼーションを最大限発揮させるには、パーソナライゼーションの元になるデータが重要です。先ほどの例では簡略化しましたが、ある商品の紹介文を書くにあたって参考にする、自社が把握している独自の情報があるはずです。記事であれば記事の元になるネタであったり、別バージョンを作るための元記事のデータです。それらの独自データを整理し生成AIに利用できるようにデータを管理する仕組みを構築することが重要になってきます。

つまり、DXを実現するために、生成AIを活かすためには独自データを生成AIと組み合わせることが重要であり、そうすることでより強い競争力の源泉となるのではないかと考えます。

まとめ

DXの文脈においては、生成AIは強力なパーソナライゼーションエンジンとして利用できるツールだと捉えることができます。また、その際に独自のデータを生成AIとともに利用することで、そのデータの価値を高める起爆剤になるものだと考えます。

最後に

実際にChatGPTなどの生成AIと独自データを組み合わせる技術的な詳細は別の機会にでも執筆できればと思いますが、独自のデータを管理するための仕組みというのは、基本的には今までのITシステム開発と同様のものです。したがって、アピリッツの強みやノウハウを発揮できる分野だと考えます。生成AIを利用したシステム開発のご要望は、ぜひアピリッツにご相談いただければと思います。

「AWSという切り口で、効率的なSIを」CCoEインタビュー

0

この度アピリッツは、CCoE(Cloud Center of Excellence)を組成する運びとなりました。この組織は全社横断的に「クラウドの活用」を推進するためのものであり、現場の業務効率化・AWSとのパートナーシップ強化をおこなってまいります。
今回は、そのCCoEに任命されたクラウドインテグレーション部の串田と、ゲームプラットフォーム部部長の吉田で「クラウド活用における課題、CCoEで実施したいこと」を対談いたしました。

CCoEとは?

—— そもそも、CCoEとは何のことでしょうか?聞き慣れない言葉ですが……

CCoEとは「Cloud Center of Excellence(クラウド活用推進組織)」のことで、クラウドに関する運用や知見を集積・管理する組織のことです。
端的にいうと、あらゆるクラウド関連の活動を集約して、もっと便利に使うためのチームということですね。

ウチでクラウドというとほとんどがAWSなので、定期的に中の人と「まずは取り組みとして何が足りていないか、何を実施したら良いか」というのをお話しさせてもらってます。ある程度CCoEが組織として安定してきたら、現場の意見を取り入れて改良するフィードバックループを実現していきたいですね。

また実務で扱うものだけでなく、
・契約の締結(NDA)
・ファンド、クレジットの管理

といったものもあるので、まさに「クラウドが関連する諸々の活動に携わる組織」といったところです。

はい。よほどAWSから離れていなくて、現場に役立つことであれば、何でもやりますよ笑

—— なるほど。何故今回CCoEを組成する運びとなったのでしょうか?

やっぱり、AWS周りの課題を解決したかったからです。

例えば、セグメント毎・案件毎に結構隔たりがあって、ノウハウがサイロ化してしまっているところとかですね。アピリッツにはスゴい開発力を持ったエンジニアが沢山いますが、その方々の実績を分かりやすく共有することで、組織全体の技術力を上げられるようにしていきたいと考えています。

他にも、AWSとの相談役や、AWSの利用額やファンドの申請・管理といった諸々を担う組織が欲しかった、という事情もあります。
利用額から「このサービスよく使ってるな。流行ってきそうだし詳しく調査してみよう!」といった分析もできると思いますし。

まとめると、今後アピリッツがより盤石な体制で成長できるようにしようね、というのがCCoEの目標です!

裏話をすると、こういった「全社横断的な組織」が必要というのは分かっていたんですが、「じゃあ誰が主導でやったら上手くいきそうか」という答えが見つからなくて、なかなか組成できずにいました……
そんな中、「All Cert と Jr.Championsに選出された、活きのいい若手がいるじゃん!」となって、主導でやらせてみようかという運びとなりました笑

—— CCoEを立ち上げる条件が揃ってきたので、立ち上げようとなったのですね!今後はどんな活動を考えていますか?

1つは、現場の課題にアプローチできるものを考えています。

具体的なアクションでいうと、
・先述したサイロ化の解消
・勉強会やドキュメント整備による、学習機会の提供
・クラウドを利用するにあたっての、ガイドライン作成

などは実施したく、「どのように運営・運用したら、現場にとって効果的か」という観点は常に持っておきたいですね。

そしてもう1つは、アピリッツの開発力を社内に周知・社外に宣伝する活動を考えています。
お客様の抱えている難しい課題も、「ウチなら解決できますよ!」って今よりも強くお伝えできるようになりたいです!

CCoEはあくまで現場のサポート部隊なので、現場にとって無駄なことはしない!これを鉄則としたいです。

—— 本日はありがとうございました!

ありがとうございました!
ぜひ、AWSという切り口で効率的なSIをやっていきましょう!

串田 匠彌(Takuya KUSHIDA)
クラウドインテグレーション部所属。
2021年に新卒Webエンジニアとして入社後、AWSの利便性に感動し興味を持つように。
趣味はウィンドウショッピング。
・Japan AWS All Certifications Engineer since 2022
・2023 Japan AWS Jr. Champion

吉田 啓紀(Hiroki YOSHIDA)
ゲームプラットフォーム部の部長。
2012年に新卒でWebエンジニアとして入社し、新作ゲームのディレクターを経て、ゲーム運営の総括を務める。
趣味はプログラミング。

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

0

前年度に引き続き、オンラインゲームセグメントでは昨年の新卒である22卒が新卒研修の計画を立て実施しました。
時に部長にチェックしてもらいながら計画し、4~6月頭にかけて無事実施しました!
今年で2回目の試みであるオンラインゲームセグメント新卒研修(以下OG新卒研修)についてご紹介します。

今年は何をやったの?

今年の研修は大きく分けて3つのパートで計画しました。

①交流

②ゲーム分析

③ゲーム企画書

それぞれの概要を簡単に書き出すと下記みたいな感じです。(写真でも撮ればよかったのですが、すっかり失念していてイメージ図でお送りします…!)

①交流編

テーマ「同期と仲良くなる『きっかけ』にしよう!」

ただの差し障りの無い自己紹介よりも、その人の趣味もセットで語ってもらうとか、一緒にゲームしたりする方がよっぽど印象に残るよね~をベースに企画しました。実際にやったのはこの6つ。

・偏愛マップ                                                                     好きなものを図にまとめて、それを会話デッキに会話してもらいました。

・Good&New

・共通探しゲーム                                                                            4人くらいのグループでより詳細まで一致する共通点を探してもらいました。

・オンリーワン                                                                                               これは自分だけにしかないエピソード/特技etc.だろう、というのを発表してもらいました。

・ボードゲーム

・ゲーム布教                                                                                                   4人くらいのグループで好きなゲームを布教しあってもらいました。

②ゲーム分析

テーマ「売れているゲームからゲームについて考えてみよう」

1グループあたり5~6人のグループワークで行いました。ゲームのセールスランキング50位の中から1つタイトルを選んで、どういう仕組みかのゲームになっているか分析してもらいました。                                                             ただ「このゲームが面白いから」だけではなく、「こういう工夫/やり方をしているから、それが売り上げにつながっている」という会社におけるゲーム開発/運営について考えてみてほしいという思いからマネタイズも分析してね、と条件に入れた上で分析してもらいました。

分析結果は発表してもらい、今年はなんと22卒に加え、部長陣からフィードバックを出してもらいました!

③ゲーム企画書

テーマ「売れるゲームを考えてみよう」

分析と続いて売る売る言っているので若干拝金主義に見えなくもないですが、会社でゲームを作って運営するのって従業員にお給料を払わないといけません。どうしても売上と切っても切れない関係なんですよね。面白いと思ってプレイしてたゲームがサービス終了しちゃった経験がある人も少なくないと思います。

というわけで、長く運営していくなら売上も考えないといけないし、そもそも売れなさそうってゲームを開発するわけにもいかないので、面白さだけじゃなくて会社で作って運営できるゲーム企画を考えてもらいました。

条件は弊社で開発運営できるゲームで、IPは自社IPか新規のみ。就活用に書く企画書はAAAタイトル※チックなのが多いと思いますが、今回は現実的に実現可能な予算内で面白く売れそうなゲームを提案してもらいました。

分析同様、出来上がった企画は発表してもらい、22卒に加え部長陣からフィードバックを出してもらいました!

※AAAタイトル:すごくお金をかけて作られた超豪華なゲーム。最近の相場は普通のソシャゲで数億くらいの開発費であることを考えると…大変ハイリスク。

実際に作ってもらった企画書をご紹介!

1班-式姫札遊記(シキヒメフダユウキ)

式姫ちゃんアバターでお手軽に遊べる!花札/大富豪などのゲーム集合アプリ。                                                               現在絶賛開発中の式姫新作ゲームの周年記念でのリリースを想定してくれました。

2班-鉄蒸妖姫-てつじょうようき-

「スチームパンク×妖怪美少女」のニッチなテーマで差をつける!                                                                              陣形や合体技で奥が深い2Dオートバトルゲーム。

3班-Systemβ-Type.psy

世界を支配するAIに反逆する!                                                                                            超能力者と共に戦うコマンドバトル近未来ファンタジー。

4班-Grief Dolls

スチームパンクの世界を舞台に、不完全な機械人形たちの感情を育てて戦う。                                                                                 育成シミュレーション×横スクロールアクション。

5班-配信ヒーローズ(仮)

ヒーロー兼配信者のキャラクターが先頭を配信しながら活躍する。                                                                                   雑魚を一掃する無双系ターン制コマンドバトル。

6班-ロストコード

AIに支配された仮想世界で生きる主人公が、脱出するために童謡(ロストコード)を集めて戦う。                                                           童謡のアレンジ楽曲を使用したり戦略的リズムRPG。

7班-ウェザーアップ!

ストーリーとコンテンツ量で既存タイトルと差をつけるクリッカー×美少女ゲーム。                                                                        クリッカーの中でも、よりカジュアルな遊び心地に。

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

今年は上記のような内容で新卒研修を実施しました。

今年は2回目だし楽勝?と思いきや、今年は今年で紆余曲折有りました。へへ…

ーー去年と違って、今年は”研修を受けたことがある”新卒たちが企画することになりましたが、どうでしたか?

自分たちが受けた研修が良かった分、それだけのクオリティを出せるのか?!プレッシャーもありましたが、研修を受けて出た感想から考えられたこともあります。

ーーと、いうと?

去年の経験が反映された最たるところは分析/企画の部長からのフィードバックでしょうか。                                                 去年の技術系の研修は分析とアナログゲーム企画でしたが、分析のみ21卒の先輩から厳しめのフィードバックを後々文面でいただいて、もっとキツくダメ出ししてくれてもいいのに…とか、アナログゲームも批評欲しいな…と思ったりしました。                                             これ、やる側になるとわかるんですが、きちんと適切なダメ出しするのって難しいし勇気も労力も結構要るんですよね。しかも自分たちも入って1年くらいだし、視野がまだまだ狭い自覚もある。それで必ずしも正しいフィードバックを出せるかといえば保証はないですよね。                                 その点部長陣は大ベテランで、そもそも判断する側にいる人たちなわけだから、23卒の成長を考えると頼まない手はないと思いました。

ということでお願したら快諾していただき、部長のフィードバックを組み込めました。サイクルではないけどPDCA的にすごい力になったんじゃないかなと思います。側から聞いていた22卒の自分ですら「ウワー!そんなん考えてなかったわ…」と反省のオンパレードでしたし。                                企画書を書く機会はそんなにないかもしれませんが、これで得られた視野とか経験とかを活かせる場面は多いんじゃないかなと思います。

ーーそういえば去年はアナログゲーム作成でしたが、今年はゲーム企画書ですね?

概要でも軽く触れましたが、面白ければそれでよかった学生感覚から一歩進んで、会社として利益を出すことを意識できるようになってほしい。自分のところだけじゃなくて、全体を見渡せるようになってほしい。という思惑がありました。                                            自分の目の前の作業をこなしていればいいや~って感覚の人も少なくないと思いますが、それじゃダメなんですよね。今はそれでもいいかもしれないけれど、今後リーダーとかになって、プロジェクトの主要メンバーになったときに、絶対に必要な意識だと思います。アルバイトじゃなくて、社員として雇われるってそういうことだと考えました。

というわけで、何かしら企業利益とか視野を広げるような何かに挑戦してもらいたくて、どうするのが最適か考えてみました。去年同様アナログゲームを作る案もありましたが、「アナログゲームで利益出すことを考えるの難しすぎでは?利益出せる未来が想像できない」「扱っている商材が違いすぎてやっても経験としてしょっぱくないか?」「それなら順当にゲーム企画書が直接的に力になりそう」といった感じで企画書に落ち着きました。

~23新卒の方へメッセージ~

いろんな人に言われてると思いますが、新卒同期は一生に一度です!                                        想像していたゲーム業界とのギャップや、実力をつけて任せられる仕事が増えて忙しくなったりと楽しいばかりの世界ではないかもしれませんが、同期と乗り越えていってほしいです!来年の新卒研修はこのままいくと23卒が企画することになるのかな?                           今回研修を受けて、酸いも甘いも感じたものがあると思います。是非自分たちのその感覚を活かして研修をパワーアップしてください!

~24新卒の就活生の方へメッセージ~

もしアピリッツとご縁があってオンラインゲームセグメントに配属となったら、23新卒プロデュースの新卒研修を受けることになるかもしれません。きっと僕たちの代が考えたものよりパワーアップしているに違いないので、楽しみにしてくださいね! 

まずはご応募お待ちしております!

ハイレベルな発表が続々!23新卒Webエンジニア研修「ミニプロ」発表会

0

今年もWebソリューションセグメントに入社した22名の新卒エンジニアがミニプロジェクト(通称「ミニプロ」)に取り組みました。
7チームに分かれて、2~3週間という短い期間の中、先輩から手助けしてもらいながらも自分たちだけで開発を行いました。
今回はいくつかのテーマの中から自分たちで選択し、設計・開発をしていく流れです。
今年で3年目のミニプロ。その発表会に潜入してきました!(2023年6月 取材)

開始時刻までの緊張感・・・

開始直前の会場の様子はやはり全員緊張している様子。部長陣やサポートしてくれたメンターの先輩方が続々と会場に入ってきて緊張はピークに・・・。

そんな中でもこれまで自分たちが頑張ってきたことを信じ、最後の最後まで確認をしているチームが多く見受けられました。

開始前の最終確認を仲間同士で行う。。がんばれ!

交通費の申請フォームを選択したチームが一番多かった

今年はテーマをいくつか出され、その中から選択していく流れですが、交通費申請フォームを開発したチームが圧倒的に多くありました。実際に自分たちが利用している中で不便さを感じる部分があり、改良すべき点があったことから選んだチームが多かったようです。

今年は人数が多い+チーム数も多いことから各チームの持ち時間は質疑応答の3分を含め計10分での発表時間となります。この短い時間の中で機能説明や工夫した点、大変だった点など交えてデモンストレーションを行いました。

どのチームもとにかくレベルが高い!!

Eチームでは、入社してすぐに行った人事研修での話を課題として取り入れていて、開発部門長の鈴木部長から「かしこい!」との高評価!誰もが見落としてしまいがちな何気ない話をしっかり覚えていて参考にすることができるのは素晴らしい!

頑張って準備してきたものを発表中

一番大変だったことは?

どのチームでも一番多かったのが「スケジュール管理」

タスクの割り振りも考えて決められた期限内に完成させる…実際のプロジェクトも同様の流れで進んでいるため、より実務に近い経験ができたのではないでしょうか。

中には「タスクの割り振りが偏ってしまい、結果として一人に負担がかかってしまった」との反省点を挙げているチームも。

鋭い質問が続々と!!

各グループの質疑応答の際には「まさかそんなところ突っ込まれるとは…!」と思うような鋭い指摘が!

内容についてはもちろん、発表資料の文字のフォントや日英表記に統一がないのは何か意図があるの?といった質問に対しては、「…今気づきました。」との回答(笑)

Dチームの発表では、デモンストレーションの中で人の名前を数名表示していたのですが、そこに対して剣持部長が「この名前はランダムで?」という質問を。人名をランダムで出してくれるものがあるようでそれを活用したと回答したところ、「いや~僕の嫁さんの名前(旧姓)が入ってたからちょっとびっくりしてw」  !? なんという偶然!笑 まさか剣持部長の奥様の名前が入っているなんて!こんなほっこり場面もありました(笑)

部長陣からのお言葉

無事全グループの発表が終わり、最後は部長陣から一言ずつ。

「チームワークという観点から見させてもらったが、それぞれの色があって素晴らしかった。

「完成度がすごい。次はもう少し精度を上げて挑戦していってほしい。」

「どれも素晴らしく実際に使ってみたいと思った。」

「プレゼン資料の独自さ、試行錯誤されていて素晴らしかった。」

「毎年見ているが、今年はテーマを自分たちで選ぶ方式。唯一Aチームが難しめのテーマを選択。すごい。

「制作期間から様子を見ていたが、チームを超えて相談していたのが印象的でチーム関係なく助け合いできていたのが素晴らしい。」

「このミニプロという経験をひとつの成功体験として強く心に刻んでこれからも頑張ってほしい。細かい指摘もしたが、これからの実際の業務ではプロとして細かい部分も重要になってくる。『美は細部に宿る』を意識して取り組んでほしい。

後日行われた結果発表・表彰式

各チームの発表内容を部長陣が評価・採点し、後日表彰式が行われました。

今年はなんとトップ2に選ばれたチームには高級焼肉のご褒美が!!

まず、部長陣からの総評として、「本当に全チームの一人ひとりが非常に頑張ったことが分かる発表会で素晴らしかった」「各々悔しい部分もあったかもしれないけれど、そこに関しては今後の糧にして頑張ってほしい。短い期間の中でやり遂げたことを誇りに思って。本当にお疲れさまでした」とお褒めの言葉、労りの言葉をいただきました。

さて!お待ちかね上位2チームの発表です!

第2位!Aチーム!!!

・発表までの段取りが良く、準備ができていた。

・開発系のドキュメントをお題に出していないけど、プロジェクト全体を考えていた。

・機能全体が非常によくできていた。

・他チームが選ばなかったテーマを唯一選んでいて挑戦するというアニマルスピリッツを感じた。

本人たちからのコメントも。

(中尾)テーマを選んだ当初は難しくて大変だったけど、チーム内でたくさん話し合って進めることができた。2位という評価本当にうれしい。

(池本)難しい課題だったから完成するか不安だったけど無事完成できて良かった。

(渡邊)難しいと分かっていながら挑戦できるという経験は今後の大きな力になると思う。

そして第1位に輝いたのは・・・!Eチーム!!!

・課題書に書かれていなかったことを実際に開発に盛り込めていたのがすごい。

・顧客志向性が非常に高い。

・プロジェクト全体の品質が高かった。プロジェクトのマネジメントがしっかりできていた。

お客様がもっとも満足してくれる内容だった。

(平)とにかく楽しかった。企画書を吉岡くんが作り込んでくれたのが大きかった。話し合いの中でも意見をまとめつつしっかりした設計ができたのが良かった。スムーズに進めることができた。

(山下)1位という評価本当にうれしい。自分は何も分からない中でのスタートだったけど、チームのメンバーをはじめ、周りの同期に助けてもらいながら進められた。これからもっと頑張って今度は自分が助ける側になりたい。

(吉岡)チーム内で頻繁に話し合うことが成功につながった。焼肉楽しみ。

(根間)得意なこと、好きなことが4人とも異なる中でコミュニケーションを密に取りつつ、それぞれの良さを出せた。良い経験になった。

見事一位に輝いたEチームは一位らしく1のポーズで!!かっけえ
こちらは見事二位に輝いたAチーム!二位のダブルピース最高

Aチーム、Eチーム本当におめでとう!!美味しい焼肉を楽しんで!

他のチームの評価も高く、接戦になっていたとの話もあり、本当にみんな頑張りました!

このミニプロは来年ももちろん実施する予定。研修とはいえ、より実務に近い流れで進めていくことは新卒のみんなにとってきっと素晴らしい経験になると思います。

これからもアピリッツの戦力として頑張っていってほしいです!

UnityエンジニアのためのChatGPT活用法と回答例

0

アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらは、エンジニアとして活躍している伊藤駿一さんによる記事です。

皆さんこんにちは、エンジニアの伊藤です。

現在私は、新規開発プロジェクトで、ローカライズ担当エンジニアとして業務をしています。

ところで皆さん、最近話題のChatGPT使用していますか?

わたしは有料版で使用できるChatGPT4を試したところ、もうChatGPT無しでは仕事できない身体になってしまいました。

ということで今回は、自分が業務の中でChatGPTをどんな風に活用しているのか、質問例実際の回答例を含めて紹介していきたいと思います。

ぜひ、最後までご覧ください!

 

UnityエンジニアのためのChatGPTの活用法

 

実装相談

Unityの開発に関する疑問や問題点に対して、アイデアや解決策を提案してもらうことができます。

質問例1

Q: メモリリークを防ぐためにリストを効率的に管理する方法はありますか?

A: リストのサイズを制限し、一定のサイズを超えたら古いデータを削除するようにしてください。また、必要に応じてリストをクリアできるようにすることで、メモリリークを防止できます。

質問例2

Q: Unityでキャラクターがジャンプするアニメーションを実装するにはどのようにすべきですか?

A: キャラクターのアニメーターコントローラーにジャンプアニメーションを追加し、適切なトリガーを設定してください。スクリプト内でそのトリガーを呼び出すことで、キャラクターがジャンプするアニメーションが再生されます。

このように、ChatGPTはUnityエンジニアが抱える実装上の問題や疑問に対して、アドバイスや解決策を提供するのに役立ちます。具体的な質問を投げかけることで、技術的な知見や、実践的なソリューションを得ることができ、エンジニアの効率や開発速度が向上します。

 

コード提供

具体的な実装やコード例を提供してもらうことができます。

質問例1

Q: シングルトンパターンを実装するにはどのようにすべきですか?

A: 次のようなシングルトンパターンの実装を参考にしてください。

ChatGPTが実際に回答したもの

質問例2

Q: ゲームオブジェクトをプールして効率的に再利用する方法はありますか?

A: オブジェクトプールを実装することで、ゲームオブジェクトを効率的に再利用できます。

以下にオブジェクトプールの簡単な実装例を示します。

ChatGPTの実際の回答例

このように、ChatGPTはUnityエンジニアが求めるコード例や、スニペットを提供するのに役立ちます。特定の機能やアルゴリズムに関する質問を投げかけることで実装の参考となるコードを得ることができ、開発作業をスムーズに進めることができます。

 

コードレビュー

ChatGPTは、Unityエンジニアが書いたコードに対してレビューや改善提案を行うのに役立ちます。コードの最適化や、潜在的な問題点を見つけ出すことができるため、エンジニアのスキル向上や、コード品質の向上に寄与します。具体的な質問を投げかけることで、コードに関するアドバイス等を得ることができます。

質問例1

Q: このコードに改善点や問題があれば教えてください。

実際にだしたコード例

A: このコードはプレイヤーの移動を制御するものですが、いくつかの改善点があります。

  1. Update()内でRigidbodyに力を加えていますが、物理ベースの移動はFixedUpdate()内で行うべきです。これにより、フレームレートに依存しない安定した動作が期待できます。
  2. 入力に対して正規化を行うことで、斜め移動時の速度が増加しないようにすることができます。

改善後のコードは以下の通りです。

ChatGPTによる改善後のコード例

質問例2

Q: 次のコードでパフォーマンスの問題があれば指摘してください。

実際にだしたコード例

A: このコードは敵のスポーン処理を行っていますが、Instantiate()関数を使っているため、大量の敵がスポーンされるとパフォーマンスに影響が出る可能性があります。オブジェクトプールを使って敵のインスタンスを再利用することで、パフォーマンスの問題を軽減できます。

オブジェクトプールを実装したEnemySpawnerのコード例は以下の通りです。

ChatGPTによる実際の回答例

この実装では、poolSizeで指定された数だけ敵のプレファブを事前に生成し、リストに格納しておきます。Spawn()メソッドで敵が必要になる度に、リスト内の非アクティブな敵オブジェクトをアクティブにして利用します。これにより、敵の生成時のパフォーマンスの問題が軽減されます。

このように、ChatGPTはUnityエンジニアが提出したコードに対して、フィードバックや改善提案を行うのに役立ちます。コードの可読性や効率性に関する質問を投げかけることで、コードの品質を向上させるアドバイスを得ることができ、プロジェクト全体の品質向上に貢献します。

 

まとめ

この記事では、UnityエンジニアのためのChatGPTの活用法として『実装相談』『コード提供』『コードレビュー』の3つの項目を取り上げました。これらの活用法をうまく使うことで、エンジニアはより効率的に開発を進めることができ、プロジェクト全体の品質や速度を向上させることが可能です。ChatGPTを日々の開発作業に取り入れることで、Unityエンジニアは新たな知見を得ることができ、業務の幅も広がるでしょう。今後もさまざまなシーンでChatGPTを活用し、エンジニアの働き方をより効果的で効率的なものにしていきましょう。

 

実は。。。

ここまで読んでくださってありがとうございます。

実はこの記事、

 

 

 

 

 

 

 

 

 

 

『ChatGPT』で作成した記事です!!

※多少の修正は加えていますが、大部分はChatGPTによって作成されています。

自分はChatGPTに以下のような指令を送りました。

伊藤さんが実際にChatGPTに送った指示例

これで文章を作成した後、「各項目ごとのまとめの文」「記事全体のまとめ文」が欲しいなと思ったので次のような指令を出しました。

これで作成されたのが今回の記事になります。

おもしれー

「ユーザー、クライアント、版元、みんなからの信頼を得る」片木 大輔インタビュー

0

目次

アピリッツのコンテンツデザイン部で受託運営タイトルのディレクターを務める部長の片木は、「あまりにゲームのことばっかり話すからゲームをつくる人になったら?」と友人に言われてゲーム業界に入った人物です。キャリアチェンジのいきさつや、ソーシャルゲーム運営で大切にしていることを聞きました。(取材 2023年4月)

もともとはシステム系の商社にいました

―― 片木さんは最初からゲーム業界にいたわけじゃないんですよね?

大学を出て最初に就職したのは、システム系商社のカスタマーサポート部でした。お客様のところに訪問して、メンテや営業をするんです。なのでゲームとは無関係の仕事でした。

―― そこからどうしてゲーム業界に入ったのですか?

仕事を始めて5年目あたりで管理職を打診されて、そこで「このままずっとこの仕事を続けててよいのだろうか」と思いました。ちょうどその頃に友達から「ずっとゲームの話ばっかりしてるよね。だったらゲーム作る仕事やったら?」と言われて、そこでやっと「なるほどな」と思いました。

 

卒業率46%のゲーム専門学校に入る

―― ゲーム業界にはどうやって転職しましたか?

まずは専門学校に入ることにしました。とはいえ、専門学校に入っただけでゲーム業界に行けるとは思っていなかったので、なるべく厳し目のところを選びました。卒業率100%で就職率が高いと謳っていても、フタを開けてみたら「ゲームを作る仕事」ではなかったりする専門学校は残念ながら存在します。

なので、ある学校説明会で校長が「うちは厳しい。卒業率も46%だ」と話しているのを聞いて、「ここだ」と入学を決めました。

卒業後はゲームリパブリックという会社に入り、プレイステーション3のいくつかのタイトルでグラフィックプログラマーとして働きました。5年ほどそこで働いて、何社かを経て、ソーシャルゲーム業界に進みました。エンジニアをやりつつ、企画やディレクションの仕事もするようになって、今に至ります。

―― アピリッツではどんなことをしていますか?

タイトル名は明かせないのですが、ある大型タイトルの受託運営のディレクターをやっています。

 

クライアントやユーザーにどうやって満足してもらうか

―― アピリッツに入社した頃はどんなことを考えていましたか?

入社直後は、「自分がどうやって活躍できるか、どういうものをユーザーに提供していけるか」というようなことを考えていたと思います。それまでのキャリアと大きく変わることはないと思っていましたが、何ができるのかなと楽しみでしたね。

受託開発に関わるようになってからは、「どうやってみんなに活躍してもらうか」「クライアントやユーザーにどうやって満足してもらえるか」を考えつつ、「アピリッツとしてどうやって仕事をするべきか」というような、自分中心ではない視点が増えたと思います。

 

「アピリッツのあのチームに任せたら大丈夫」と思ってもらう

―― 今の部署では、おもに受託運営の仕事をしています。プロジェクトを進めるうえで、大事にしている目標や、その目標を達成するために実践していることを教えてください

私たちのチームは、クライアント様のタイトルを運営しています。でも、「自分たちのタイトルを運営している」という認識をしっかり持って、取り組んでいます。

今の目標は、もちろん、新たなタイトルの新規開発から運営をアピリッツとして任せてもらう、ということです。

ユーザー、クライアント様、そして版元様にも満足してもらって、「アピリッツのあのチームに任せれば大丈夫だ」というところまで持っていきたいです。

 

やっぱり北欧神話が好き

―― ある部長によると「片木さんと立ち話を始めるとおもしろくてとまらないんだよ」とのことですが、おしゃべり好きなんですか?

どうでしょう(笑)基本的にはおとなしい性格のはずなのですが、スイッチが入るとしゃべり続けることはあるような気はしています。あと、筋道立てて細かく話すことが好きですね。

雑談好きの片木さん。これは「かつてのゲーム開発ではROMに焼く作業があってデータを作るときに工夫が必要で……」という話をしているところ

―― 雑談とも関係することですが、ゲームを作る上での「引き出し」は、どんなふうに増やしてきましたか?

やっぱりゲームが好きなので、そこからの情報が多いです。

その中でも中学生時代に友達のなかで流行ったTRPGには一番影響を受けていると思います。

T&T、D&D、ソードワールドRPG、ルーンクエスト、クトゥルフなど広く浅く遊びました。当時はお金もなくて、みんなで順番にシナリオを作って持ち寄って遊んでました。誰かが良いシナリオを創ると悔しいので、次はそれに負けないシナリオを創って……。というような感じでみんなでそれぞれの世界を創生してましたね。

そのための設定を創るために神話調べたりもしていましたので、その辺りが自分の基礎を作ってるのかなと思います。

―― どの神話が好きですか?

北欧神話です。ゲーム業界で一番人気なんじゃないでしょうか。

―― なんで北欧神話が人気なのでしょう?

おそらくこれまでの超有名なゲームタイトルに出てくるいろんな単語が、北欧神話をモチーフとしているからじゃないでしょうか。ファミコン時代からそういう文化があります。

「オーディン」といったらみんな「あーはいはい」とわかる。「エクスカリバー」より「グングニル」のほうがグッとくるというか。

あと、北欧神話は程よいサイズ感だと思います。たとえばギリシャ神話や日本の神話だと「まずXXをして、それからXXがあって……」と、幅広く、いろいろありすぎる。個々のエピソードは面白いんですけどね。北欧神話はストーリーもわかりやすいですし、とっつきやすい印象があります。

―― なるほど。こういう感じで雑談が止まらないんですね

そうですね(笑)

 

ユーザーからのネガティブな反応をどう受け止める?

―― どんなふうに部署のメンバーを引っ張っていきたいですか?

「やっぱりゲームは楽しい」と思えることが一番大切だと思っていますので、「ゲームを作ることは楽しいんだよ」ということを伝えながら、一緒に楽しく作っていきたいです。

「ゲームを作る」と「ゲームで遊ぶ」は違うものです。

ゲーム業界を志望する人は、たいていゲームで遊ぶことが好きなんですよ。例外もあるかもしれませんが、「ゲームで遊んだときの感動を自分でも生み出したい」って考えてアピリッツに来てくれる人は大勢います。その人達に楽しんでもらいたいです。

特に、ソーシャルゲームはユーザーとの距離が近いです。たとえばコンシューマーゲームだと、物理的なソフトだけをリリースしていた時代は、ユーザーからの反応ってすごくわかりづらかったんです。リリースしてちょっとしてから、文句だけが匿名掲示板に書かれる(笑)

これに対してソーシャルゲームはリリースしてすぐポジティブな感想をもらえます。

―― ポジティブじゃない感想も来ちゃいますか……?

来ます! でも、ネガティブな感想も、視点を変えれば「そのゲームに興味を持ってくれている」ことですし、ヒントももらえるんです。

去年、頑張って開発した新機能に厳しいご意見が多かったんです。どうしてもそういった意見って目につくんですよね、なのでせっかく頑張ったのに……って作った本人たちは当然落ち込むのですが、「でも本当におもしろくなかったら、何も書かれないよ」ってはげましました。「その人なりに、そのゲームのことは好きでいてくれているのだ、だからこそ書いてくれているんだ」って。

―― 「好き」の反対は「嫌い」じゃなくて「無関心」ですもんね

だから無反応が一番怖いですね。文句を言う人がいなくなったときが本当のピンチだと思います。

例えば、ゲームを盛り上げるために生放送をすると、ずーっとマイナスのコメントを書いてくださる方もいらっしゃるんです。「運営に刺さる言葉をおっしゃりたいのかな。何かのメッセージなのかもしれない」と受け取るようにしています。

―― 強いですね。

そりゃもちろん最初は疲れますし、落ち込むこともあります。でも、無反応よりずっといい。

これからゲーム業界を目指す方には、「あのゲームのあの機能、惜しいよね!つまんないよね!」って話すときの方が妙に熱く盛り上がることを思い出してほしいです。文句を言い合ってる方が楽しいときだってあるんです。

だから、作り手側にまわったときに「文句ばかり言われてる、ああこのゲームはダメなんだ」って落ち込まないほうがいいですよ。マイナスに受け取らないほうがいいです!

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

健康相談窓口っていうのができたらしい

0

あたたかくなってきたので、ちょっと薄着になってきましたね。

そこで、気づいてしまった。
鏡にうつった自分をみて、気づいてしまったのです。

んんんん、なんか少し丸くなってきたんじゃないかしら、私のフォルム。
病気じゃないとは思うんだが、太りすぎなんじゃ・・・・


そんな心配をしていたところに、お知らせが

健康相談窓口の開設につきまして

アピリッツでは、みなさんの健康管理のため、専門の保健師に電話やメールで相談できる窓口を設置いたしました。
こちらは産業医契約をしている団体で運用されており、会社を通さず相談をすることが可能です。
持病や健康診断結果についての相談はもちろん、職場での人間関係やメンタルヘルス系の相談も可能です。

おー、匿名で小さなことから相談できるっぽい。

というわけで、さっそく使ってみました。

アピリッツの社員専用メールアドレスで最近ちょっと太ってきて気にしていますという内容の相談をしてみました。

すぐに返事がきた!

翌営業日には保健師さんからお返事がきました。

内容は完結にいうと

・BMI上肥満ではないからそんなに気にしないで

・ただこのまま体重増加していくと健康リスクも上がってしまうから気をつけましょう。

・心身の余裕がないときは無理にダイエットするとイライラしてストレスがたまるかも。

・筋トレや運動ができないときは、ストレッチをしたりビールが好きとのことですが、カロリーオフやノンアルコールを選んでみるのもよいと思います。

というような内容が送られてきました。
早い、優しい、無料、相談した秘密を守ってくれる(ブログに書いてますけど^^;)

どうしてこの制度ができたのか聞いてみました

そもそもアピリッツでは働く人のキャリア形成や、人生を豊かにするような取り組みを行っています。

アピリッツで働く人は、継続的にスキルを高め、気持ちよく活躍できるように、評価制度の改定資格支援制度導入などを行ってきました。

また、特にパフォーマンスを高めるためには心身ともに健康であるべきと考えています。

この相談窓口の設置は、会社や担当者を介すことなく、小さな悩みから気軽に相談ができます。 病気になる前に誰にも知られずに相談ができるところがポイントです。

たくさんの社員に利用してもらい、より健康で楽しく働いてほしいです。

なるほど!一生懸命働いてもらうために、健康大事にしてねってことだったんですね!(なんかちょっと違うかもしんないけど)

アピリッツではアピカフェや懇親会などの会社が楽しくなる制度もたくさんあります。

これからもいろいろな制度ができていくと思うと楽しみですね。

AWS LambdaのFunctionURLsでRedmineAPIを利用した話

0

はじめに

最近オートミール食のレパートリーが増えてきました。ゲームデザイン(GD)部クライアントエンジニアの中村です。

我々GD部ではプロジェクトのタスク管理にRedmineを利用しています。Redmineのタスクチケットは基本的にPM職が管理しており、CSVファイルから一括でインポートする機能がよく使われています。この機能はチケットの一括新規作成が可能ですが、一括更新には利用できませんでした。そこでこの度、CSVファイルを読み込み一括で更新する機能をPythonスクリプトで作成することとなりました。

制約

今回作成する「Redmine一括更新withCSV(仮称)」は以下の制約を課しました。

  1. 基本的にPM職が利用するものである
  2. WindowsやMacなどのプラットフォームに依存しない
  3. 低コスト

1については、利用者のPCにスクリプト実行環境を整えなければいけないという点で大きなハードルとなります。2については、プロジェクトごとにMac派とWindows派が別れているため必須要件となります。3については言わずもがな。

技術選定

これらの制約を考慮して、以下の3パターンを考えました。

  • AWS ChatbotとSlackを連携
  • botkitとSlackを連携
  • Lambda Function URLsをブラウザから実行

AWS ChatbotとSlackを連携

AWS Chatbotを利用するとSlackからaws-cliのコマンドを実行できます。そのため、Slackワークスペースから必要情報を入力するだけでLambda Invokeができるのではと考えました。

しかし、CSVファイルをアップロードしなければならないという点で問題がありました

  • Slackワークスペースにファイルアップロードができない
  • AWS ChatbotのcliではLambdaにファイル指定できるのはjsonだけ
  • AWS ChatbotのcliではS3にファイルアップロードできない

以上よりボツとなります。

botkitとSlackを連携

botkitはnodejsで記述するSlackのチャットボットです。Slackに送信したメッセージに反応し、そのメッセージに対する何らかの処理を実行することができます。そのため、SlackにCSVファイルをアップロードしたら自動でRedmineAPIを実行し更新させることができます。

しかしながらこの案ではbotkitをデーモン化して維持するためのサーバーリソースが必要となるため、コストの面でボツとなりました。(あと単純にAWSサービスを使いたかった)

Lambda Function URLsをブラウザから実行

AWS Lambda Function URLsは公開から1年が経過した割と新しい機能です。もともとLambdaはAPI Gatewayを経由してhttpから実行することができましたが、API Gateway自体がコスト面で高めだったためこういったユースケースでは利用していませんでした。

Lambda Function URLsの登場でhttp経由で簡単にLambdaを実行できるようになったため、折角なので利用していこうと思った所存です。Lambdaはコスト面で優秀であり、Function URLsにはIAM認証が搭載されているためセキュリティ面でも良い選択肢となりました。

Redmine一括更新withCSV(仮称)の構築

AWSサービス構成図

今回利用したAWSサービスは少ないので、以下のような非常にシンプルな図になります。

Redmine Update 構成図

使用したサービスとしては以下のとおりです。

  • Route53 – https証明書のためにドメイン取得
  • CloudFront – S3 Bucketに置いたSPAの配信
  • CloudFrontFunction – CloudFrontに対してBasic認証を設置
  • S3 Bucket – ブラウザに表示するためのReact-SPAにファイルアップロードができるFormを配備。
  • Lambda – CSVを解析してRedmineAPIを利用する。FunctionURLsを設定。

Lambda Function URLsのIAM認証

Lamdba Function URLsには認証せずパブリックにアクセス可能なNONE設定と、認証されたIAMユーザーとロールのみがアクセス可能なAWS_IAM設定の2つが用意されています。今回はセキュリティを固くする意味でもAWS_IAM設定で進めます。

まず、このLambdaFunctionに対するInvokeのみを許可するIAMポリシーを持ったユーザーを作成します。このIAMポリシーは公式ドキュメントにサンプルがあります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "InvokeLambda",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunctionUrl",
            "Resource": "arn:aws:lambda:ap-northeast-1:000000000000:function:LambdaRedmineUpdaterKari",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}

このユーザーはマネジメントコンソールへのログインを許可せず、アクセスキー・シークレットアクセスキーの発行のみ行いました。このアクセスキーを使用してLambda FunctionURLsのIAM認証を行います。

FunctionURLsのIAM認証にはAWS Signature Version 4 (SigV4)が必要になるようです(公式ドキュメントより)。こちらについてはaws-sdk-js-v3に含まれているためyarnから簡単に利用開始できますが、公式に明確なサンプルコードがないためgithubのissueを参考に実装しました。

IAM認証に使用するアクセスキー、更新するCSV、実行するLambdaのホスト、更新先のRedmineエンドポイントをすべてフォームから入力することとしています。Javascriptコード上にはアクセスキー等秘匿情報が残らないので安全かと思います。

const signer = new SignatureV4({
  credentials: {
    accessKeyId: data.AwsAccessKeyId,
    secretAccessKey: data.AwsSecretId,
  },
  region: "ap-northeast-1",
  service: 'lambda',
  sha256: Sha256,
});
const parsedUrl = new URL(data.LambdaUrl);
const endpoint = parsedUrl.hostname.toString();
const path = parsedUrl.pathname.toString();
const req = new HttpRequest({
  hostname: endpoint,
  path,
  method: "POST",
  body: JSON.stringify(formBody),
  headers: {
    host: endpoint,
    "Content-Type": "application/json",
  },
});
const signed = await signer.sign(req);
const resp = await fetch(data.LambdaUrl, {
  method: req.method,
  body: req.body,
  headers: req.headers,
});

このようにすることでブラウザからLambda Function URLsを実行することができました。

無事、LambdaからPythonを使用してRedmineAPIも実行できました。

フロントページのBasic認証

今回S3バケットにはReactで作成したSPAを設置しています。独自ドメインを使用するためにCloudFrontを設置しているため、折角なのでCloudFront Functionを利用してBasic認証を実装しました。前提としてS3バケットにはCloudFrontのOAIアクセスのみ許可されています。

CloudFront Functionsの利用方法は公式ドキュメントに詳しく記述されています。Basic認証は以下のように記述しました。

 var response401 = {
  statusCode: 401,
  statusDescription: 'Unauthorized',
  headers: { 'www-authenticate': { value: 'Basic' } }
};
function handler(event) {
  var request = event.request;
  var headers = request.headers;
  var basicBase64 = '<user:pass> Base64';
  var authString = 'Basic ' + basicBase64;

  if (typeof headers.authorization === "undefined" || headers.authorization.value !== authString) {
    return response401;
  }

  return request;
}

CloudFront Functionsは Lambda@Edge より少し機能が低下しているように感じますが、簡単なIP制限や別ページへのリダイレクト、Headerの追加などがシンプルに利用できます。無料利用枠もあるので小規模にも使いやすいでしょう。

最後に

今回はLambda Function URLsを利用してRedmineAPIを実行しCSVから一括更新する仕組みを作成しました。

こういったちょっとした便利機能のPython/Nodeスクリプトが必要になったとき、エンジニア以外の環境でその実行環境を用意してあげるよりもLambdaで実行できるようにしたほうがメンテナンスもしやすくなるでしょう。また、ブラウザから実行できるので複数人からの実行も当然可能です。

Lambda Function URLsにIAM認証を適用すればセキュリティ的にもかなり安全です。また、IAMユーザーのポリシーも該当のLambdaの実行に限られているため、アクセスキーが流出しても影響を受けるのはLambdaだけです。(流出しないのが一番ですが)

以上、またちょっとしたスクリプトが必要になったときこのような形で機能を用意しようと思います。

面談で出された問題がプログラムの基礎として良かった話

0

アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらはES部のエンジニア・桑添敏生さんによる記事です。

これは、C#の話でゴリゴリにエンジニア専用の記事です。

突然ですが問題です。

(コンパイルが通る様に元から少し改修しましたが解答内容は同じです。)

public class TestCase1 : MonoBehaviour
{
    private void Start()
    {
        Test1();
    }

    private void Test1()
    {
        List<int> val1 = new List<int>(){0};
        List<int> val2 = new List<int>(){1};

        SetValue(val1, val2);
        
        Debug.Log($"合計はいくつになるでしょうか? {val1[0] + val2[0]}");
    }
    
    private void SetValue(List<int> val1, List<int> val2)
    {
        val1[0] = 3;
        val2 = new List<int>(){2};
        val2[0] = 5;
    }
}
Debug.Log($"合計はいくつになるでしょうか? {val1[0] + val2[0]}");

この部分の答えは何になるかわかるでしょうか?

解答

正解は、「4」です。(ちなみに自分は「8」と答えました。)

解説

今回、「SetValue」関数の引数にListを入れていますが参照型の値渡しをしているので、
val1[0] = 3;
を代入すると値が変わります。

その後の処理は、
val2 = new List(){2};
と、 関数内で引数で値渡したもの(コピー)に対して改めて生成をした後に以下の代入を行なっても、
val2[0] = 5;
コピーのアドレスを変えて値を入れただけなので大元の値は変わらず、

val1[0] = 3;
val2[0] = 1;

なので合計は「4」になります。

問題自体は終わりでここからは余談です。

発展した話 : どうすれば「8」になるのか

なぜ自分が「8」と答えたか、ここの辺りはふわふわした知識でしたが、
追加で何をすれば8になったのかを考えるのが大事だと思ったので今回まとめることにしました。

C#では値型参照型の区別が大事ですが、
これに加えて値渡し参照渡しがあります。めちゃくちゃ紛らわしい。
(値型参照型自体もプリミティブとかオブジェクトなんて別の言い回しがあるのでさらに訳わかんなくなります)

自分は参照型で渡しているから生成を行うと実体の方も変わると勘違いしましたが、
C#では基本的に値渡しとなるので、実際は参照渡しをしないとダメです。

なのでタイトルのどうすれば「8」になるか、の答えを言ってしまうと、
自分が勘違いした通りに実体を渡してあげればいいので「参照型参照渡し」をすれば良いだけです。

もっというと「参照渡し」という単語を聞いて想像できるパラメータ修飾子があると思いますがそのままで、
「ref」をつけてあげればいいんです。

SetValue(val1, ref val2);
    
private void SetValue(List<int> val1, ref List<int> val2)
{
    val1[0] = 3;
    val2 = new List<int>(){2};
    val2[0] = 5;
}

これで試してみた所、「8」と出力されました。

なので今回は問題として出題されましたが、
関数内で参照型の実体に変更を加える実装を行う場合は、
参照型参照渡し」、紛らわしいので言い方を変えると実体(インスタンス)を渡すことで代入ができるようになりました。

また振る舞いとしては「out」パラメータ修飾子も同じ参照渡しで、
かつoutパラメータ修飾子を使用している場合は値が入っている事が保証されるのでこちらの方が安全そうです。

表にするとこういう感じです。

プロパティ書き換えインスタンス置き換え
値型値渡し
値型参照渡し
参照型値渡し
参照型参照渡し

図を元にインスタンスの置き換え部分の挙動に注目して見ると問題の箇所は、
参照型 値渡し : インスタンス ×
となっていたので想像した挙動とは異なった、という結果でした。

まとめ

1つ渡し方に気をつけて、
値渡しコピー
参照渡し変数へのアクセス
を渡している解釈でいれば問題なさそうです。

参考資料

【C#】「参照型」を渡しても「参照渡し」にはならない件

メソッドのパラメーター (C# リファレンス)

最近人気な記事