ホーム ブログ ページ 5

生成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# リファレンス)

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

0

2023年4月1日にアピリッツは入社式を行いました。今年は65名入社。2022年は45名入社だったので、大幅増です!(2021年は34名。着々と増えています!)今年も当日の様子をご紹介します(2023年4月 取材)

今までの会場では、65名も座れない!

去年と一昨年は、オフィスのカフェスペース(広くて芝生でステキなんです)で入社式を執り行ってきたものの、去年45名を迎えたあたりから「会場にみんな入らないかも……?」とドキドキしていました。そして今年入社するのは65名。とうとう完全なるキャパオーバーとなり、今年は外部の大きな会場を使いました。会社の成長を感じます。

大切な式典なので、今年も人事企画部が心を込めて準備・運営しました

同期を大切にね

今年も社長の和田による新入社員のみなさんへの挨拶から始まりました。「65人もアピリッツに来てくれたことは、とてもいいことで、まずはみなさん来てくれてありがとう」「学生時代は、毎年あたらしい環境とコミュニティが提供されてきたと思いますが、これからはそういった機会は少なくなります」「だから同期を大切にね」とメッセージを送りました。

「こういった公的な式典は、人生でおそらく最後になる人が多いんですよね」と和田

「初任給が出たら、お世話になった人や育ててくれた人にごはんでもごちそうしてください」と優しい言葉で締めくくりました。そしてそれぞれの役員からもご挨拶。「自分の身に起こった変化を楽しんでほしい」「会社はどんどん大きくなれる。個人も成長できるが、会社でみんなでがんばれば、10倍成長できる」「笑いながら楽しめる仲間がいるのはいいこと」「みなさんにしかできないことがある」とエールを送りました。

取締役の永山からは「思い立ったときにチャレンジしてほしい」とエールを送りました
「自分の身に起こった変化」をユーモラスに話しつつ、「みなさんも変化を楽しんでほしい」と執行役員の八木
執行役員の長谷はアピリッツに新卒入社した1人。今も同期とのつながりを大切にしているそうです

ということで、今年も入社式が無事終わりました。ただいま研修の真っ最中!

そして、来年に向けて早くも2024新卒の採用情報を公開しています。学生のみなさん、エントリーお待ちしています!

オンラインゲーム設計に必要な「プレイヤー主観性」という考え方

0

アピリッツの知識共有サイト「ナレッジベース」で公開されている内容をアピスピでも紹介します。こちらはES部のエンジニア・清水則雄さんによる記事です。

通信ゲームのイメージ 

よく、オンラインゲームを作ってるというと「同期とか大変でしょ」や、「ずれているとおかしい」などと言われる気がしています。

端末を2台以上置いて比べた時には「完全に〇秒後に両プレイヤーの状態が一緒」もしくは少しラグがあるくらい、というイメージを持ってる人が多い気がします。

よくあるオンラインゲームの動いてるイメージ

実はオンラインゲームは主観的に見られている

ただ、実際にオンラインゲームをプレイしている人たちは相手の端末を見ることがほぼ無く。自分の画面をみてプレイしていることがほとんどです。

「そんなので一緒に遊んでる感じあるの?」という疑問があるのですが、実は相手の動きが変化していることを見て、主観的な「体感」として一緒に遊んでる 、と感じ取れていると思います(錯覚・勘違いともいう)。

逐次相手の変化が自分の世界に影響している、と感じると、「マルチプレイしてるんだな」って自分の中で感じ取っている状態です。

プレイヤーは客観的に世界を体験していない

実際に端末の差を見てみると、「敵の向きが違う」「雑魚の位置がバラバラ」「エフェクトが端末によってでるタイミングと場所が違う」などとずれている事が多いです。

極端にいうと、プレイヤーAの世界とプレイヤーBの世界では起承転結でいうと”起”と”結”だけが僅かなラグを含んだ同期をしているだけで、経緯の部分を客観的にみると全く違う世界が動くようになっていますが、それでも「ひとつの世界を共有している」と感じ取っています。

ユーザーのゲーム体験が大事

大事なことはプレイヤーが、ポイントポイントで事象を共有していることで、そこまでのプレイヤー各々の経緯に関しては大きく考慮しない、というのがあると思います。

ネットワークの性質上、不安定、遅延などはある部分なので、客観的に正しいかというよりは 1プレイヤーが主観的に見たときにおかしくないか? を考える方が楽にオンラインゲームの設計をできる気がしています。

余談:チャット

最近ソーシャルゲームにおいてもリアルタイムチャットを実装する機会が増えている気がします。

リアルタイム web も流行ってきているので、このあたりの同期性を気にする場合も多いですが、個人的にはプレイヤーの体験としてどうすればいいのか?が重要視されるべきで、ゲーム性によって設計を考える部分ではあると思います(ホーム画面に秒を刻んだチャットの同期がいるのか?など)。

ChatGPTにアピリッツのプレスリリースを書いてもらったら「カンのいいアシスタントが来た~!」と思った

0

OpenAIが開発した自然言語処理モデルを活用したChatGPT。流行ってますよね。もう猫も杓子もChatGPT……という空気なので、広報のわたしも、その流れに乗っかって「プレスリリースをChatGPTに書いてもらったらどうなるか?」を、無料版を使って試しました。

結論から言うと「なるほどこれは便利だわ」と感じるレベルです。とくに広報の仕事を始めたばかりで「プレスリリースってどうやって書けば……」と困っている人(昔の自分です)にとって、ChatGPTは心強いお手伝いさんになるはず。また、仕事で文章をいっぱい書く人にとって、「大事な基本」に立ち返るいい機会になるとも感じました。

ChatGPTにオフィス増床のプレスリリースを書いてもらおう

今回は、アピリッツで過去に出したこちらのお知らせをもとにChatGPTにプレスリリースを書いてもらいました。

プレスリリース:アピリッツ、オンラインゲーム事業とWebソリューション事業拡大に伴うオフィス増床のお知らせ ニューノーマルに対応したオフィスをZ世代がデザイン

2年前にオフィス増床をしたんです。いまもカフェや懇親会やゲーム開発のオフィスとして愛されている場所です。

で、どうして既存のプレスを選んだのか? 理由は次の2点です。

情報漏洩に気をつけましょう

「未来の、未開示の情報」をChatGPTを使って書くことは情報漏洩のリスクにつながるおそれがあると考えました。今回は腕試しがしたいだけだし、じゃあ過去のプレスと見比べるのもいいかな……と思い、昔懐かしのオフィス増床のプレスをチョイスした次第です。

とはいえ過去を振り返ってばかりもいられませんし、もし「新サービスのお知らせ」などを書きたいときは、実際の社名やプロダクト名は入れずに試すとよさそうです。

インサイダー情報が漏れると悲劇が待っているので、そこは慎重にいきます(アピリッツはインサイダー情報の教育も念入りにやっています)。

当時「どう書けばいいんだろう」と私が迷った

広報として仕事を始めてまもなくの頃で、「どう書くのがいいんだろう?」とあれこれ迷ったからです。他社さんのプレスリリースを参考にさせてもらったり、社内のメンバーに相談しながらなんとか書き上げました。

なので、そんな当時の自分のことを思い出しながらChatGPTを使ってみることにしました。

ChatGPTはラフな言葉の意図を汲み取ってくれる(人間以上に)

まず一回目。

スラスラ出てきます。ChatGPTが書いてくれたプレスリリースは、タイトルと冒頭の数行を読めば「ああ、事業拡大して会社が成長しているから2/15にオフィスを増床したんだね」とわかります。さすがにこのままパブリッシュすることはありませんが、どんなことを書けばいいかの補助線としては立派に機能しています

なにより、わたしのラフな命令からこちらの意図をここまで汲み取って仕上げてくるのでびっくりしました。ChatGPTご自慢の自然言語処理のパワーを感じます。

では次に要素を足してみます。この新オフィスのデザインや設備は、当時入社間もない若手の社員が主導して考えてくれたんです。そのことを命令文にグダグダっと書き足してみました。

増床日が抜けてしまいましたが、「若手社員が中心となり、新しいオフィスの空間デザインや機能的なアイデアを提案し、活気あるオフィス環境を実現しました」なんて言い回しは参考になります。

なんというか、ChatGPTはカンのいいアシスタントのようです。

ChatGPTはタイトル案も考えてくれるよ

でもプレスリリースのタイトルがそっけないな……ってことで、タイトルも考えてもらいました。

今回は5案としましたが、これ10案でも10000案でもいいんですよね。黙々と10000案出してくれます。ここまで「!」を連呼するタイトルは、アピリッツではまだチャレンジしたことがありません。

ちょっとニュアンスを変えてみましょう。

ちゃんとこちらの雑なニュアンスを読み取って1000本ノックをこなしてくれる相棒です。自分一人で悩んでどん詰まりになるくらいなら、ChatGPTを参考にするのは大いにありだと感じました。

以上のように、オフィス増床のプレスをChatGPTに書いてもらいました。こちらからの命令文を工夫すれば、さらにいろんなバリエーションのプレスリリースの草稿を出してくれるはずです。

スクリプト(命令文)が大事

ChatGPTはユーザーとのチャット内容(命令文のやりとり)によって出力が変わります。実際に試してみると「何もしなくてもChatGPTの出力のクオリティはそこそこの及第点だが、ちゃんと使い込むともっと精度が上がる」と痛感するんです。そんな一例を紹介します。例えば「こういう表現ってこのシーンだとなんて言い換えたらいいんだっけ?」とChatGPTに相談してみると……?

まちがっちゃいないが、とても味気ない

実は、これと一語一句同じ問いかけを、私が去年から使っているChatGPTのアカウントでも試しました。するとまるで違う内容が出てきました。

あと一息だけど、こういうのを知りたかった!

こっちのほうが私は「いいな」と思います。バリエーションが多く、このフレーズの意味と効果がわかりやすい。おそらくプレスリリースを作成する場合も、同様に使い手側による命令文の工夫が必要です。

では命令文の工夫には何が必要なのでしょうか? まずは「このプレスで、わたしたちは何を伝えたいか?」の視点だと思います。

結局、「このプレスで何が言いたいんだっけ?」が重要

広報としてプレスリリースを作成するようになったばかりの頃、下書きの段階から永山CFOによるレビューを必ず受けていました。プレスリリースの内容はIRの開示とも関係することがあったからです。

ここでのフィードバックで一番ありがたかったのは「で、ポイントは?」という言葉です。そう、ポイント。たとえば「アピリッツって若手が多い会社なんだな」だとか「このサービスはどういった顧客のために作ったのか」です。

このポイントがブレることは、文章の「てにをは」が崩れることよりも致命的だと私は考えます(もちろん「てにをは」がおかしいプレスは、みっともないですし、読んでくださる人に失礼なので、超大事なのですが)。

「N月N日までにこのリリースを出さなきゃ!しかもなるべくカッコよくて、わかりやすい感じのを!」と焦ってノーシンクで文章を作ると、たいていロクでもない内容になります。ポイントを見失っているからです。

なので、「このプレスリリースのポイントは何なのか?誰に、何を、知ってもらって、どう感じてもらいたいのか?」と、ポイントをしつこく考えながら原稿を読み返すと、ChatGPTに何を書いてもらうべきで、彼らが出力した文章から、わたしたちは何を選び、調整するべきかが、おのずと見えてくるはずです。

おそらく「ChatGPTに丸任せした文章」はすぐにわかります(今のところ……の話ではあるかもしれませんが)。なぜなら「ポイント」を生み出し、ポイントを大切にして、ポイントにふさわしいアウトプットを選ぶのは、わたしたちだからです。精進します。

ということで、アピリッツのニュースはこちらです!見てね!

ChatGPTを使ったアノテーション支援ツールを作ったお話 – 自然言語処理技術を活用した高精度アノテーションの試み

0

はじめに

クラウドインテグレーション部の浅田です。

OpenAIが提供しているChatGPTが話題になっていますね。3月に入りAPIの提供も始まったので、色々なサービスへの利用が考えられ始めてます。今回はアノテーションをサポートするツールをプライベートで作ってPoC(Proof of Concept)をした話を通して、ChatGPTの魅力や性能について書いていきたいと思います。

※ここでいうアノテーションとは、機械学習の分野で「教師あり学習を行うためにデータに対してラベルづけする行為」を指します。

想定する読者

  • ChatGPTってどんなものか知りたいかた
  • ChatGPTってどうやって使うのか知りたいかた

ChatGPTについて

ChatGPTOpenAIが作った大規模言語モデルです。自然な会話でのやり取りをできるというのが最大の魅力で、自然な文章を生成することができます。

最近まではブラウザでのみアクセスが可能だったのですが、3月に入りAPIの提供が始まったことで、アプリケーションから利用することが可能になり、様々な製品への応用が始まっています。

ChatGPTができること

ChatGPTができることを一言で表すなら「対話ができる」ということです。そして、対話ができるということは「言われたことを理解し状況に応じた発言ができる」ということでもあります。

突き詰めれば、ChatGPTができることはそれだけのことですが、膨大なデータでトレーニングされていることで、様々な応用がききます。

アノテーションについて

ChatGPTをはじめとした機械学習モデルは、教師データを与えることによって学習されます。例えば文章の感情判定モデルで、ポジティブ(な感情)とネガティブ(な感情)を識別したいモデルを作りたければポジティブな文章データやネガティブが文章データをたくさん用意することになります。

教師データとして使用する際にはそれぞれの文章がポジティブに属するのか、ポジティブに属するのかという情報を紐づけて与えてあげる必要があります。一方でポジティブ、ネガティブな文章は世界中にたくさんあると思いますが、ポジティブな文章である、ネガティブな文章であるという情報とセットで管理されていることは少ないので、データ自体と、それの情報を紐づけてあげる必要ががあり、その作業がアノテーションと呼ばれる作業になります。

アノテーションの課題

アノテーションは基本的には人手で行うことになりますが、大量のデータを作成するには人的コスト、時間的コスト、結果的には金銭コストが掛かってきます。そこで、ChatGPTを利用することでテキスト情報のアノテーションを手伝ってもらおう、というのが今回のコンセプトになります。

今回のツールのつくり

ユーザはWebブラウザ上から、アノテーションしたいテキストを一行ごとに記載したファイルをアップロードし、その際にアノテーションしたラベルの内容(先述の例であれば、「ポジティブ」、「ネガティブ」など)を指定することで、ChatGPTがそれぞれのテキストごとにラベルづけし、その理由、および確信度を表示する、という内容になります。

画面イメージとしては以下です。

入力画面
結果画面

テキストファイルを選択し、タグを指定すると、その結果が表示されるといった形になります。

今回のテキストファイルの中身は以下の様になっています。

スキピオはハンニバルがローマと戦ったカンナエの戦いに参加していたのである。
スティリコは異民族でありながらもローマの将軍として異民族と戦ったのである。
ハインリヒ4世はカノッサ城でローマ教皇グレゴリウス7世に謁見した。

それに対し、古代か中世でラベルを指定して実行した結果が上記の結果画面になります。適切にラベリングされていますね。

Reason列には、ラベル付の理由も具体的に書かれており、また歴史的事実とも合致しておりChatGPTのテキスト生成能力の高さが感じられる結果となりました。

ChatGPTのAPIを使う上でのポイント

フロント用のReactコード、およびバックエンドのChaliceのコードは以下のリポジトリで公開しています。

フロント

バックエンド

(ちなみに、annot”a”tionがannot”ai”tionになっているのは意図的です)

作り自体はシンプルなので、説明は割愛させていただきますが、ChatGPTのAPIの部分だけ補足させていただきます。

冒頭で、ChatGPTができることは「対話ができる」、すなわち「言われたことを理解し状況に応じた発言ができる」と述べました。裏を返せば、「いかにChatGPTにこちらが意図していることを伝えるか」が重要なポイントとなってきます。

機械学習の世界には雑なデータで作ったモデルは雑な結果しか生まないという意味の「Garbage In, Garbage Out」という言葉がありますが、ChatGPTでは雑な質問は雑な返答しか生まないといってもよいでしょう。

つまり、ChatGPTに対してどのような言葉を投げかけるかを設計することが、ChatGPTを上手く使うポイントになります。これはプロンプトエンジニアリングとも呼ばれます。

今回であれば、以下のようなプロンプト(発言)をユーザの入力を埋め込んで作成しています。

textには入力ファイルの1行が、labelsには指定したラベル(先述の例であれば”ポジティブ,ネガティブ”)が入ります。

{text}

上記の文章について、ラベルづけしてください。
答えは{labels}のいずれかで答えてください。

また、以下のフォーマットに従ってください。

ラベル:○○
理由:△△
確信度:□□

○○には{labels}のいずれかを入れてください。
△△にはラベルづけの理由を書いてください。
□□にはそのラベルが正しいと思う度合いを0から100の数値で表してください。

ポイントは2点です。

  • どのようなタスクを実行したいかを明示します。
    • 今回であれば「ラベルづけ」でうまくいってますが、端的な言葉でうまくいかない場合は、出きるだけ明示します。例えば、「どの概念に該当するか判定してください」など。
  • 出力の形式に対して、できるだけ具体的な制約をかけます。
    • フォーマットの指定がない場合でも、結果としては同じような内容を返してくれますが、出力の形式が安定しないのでAPIとして利用する際にはハンドリングしにくくなります。
      • 今回の例であれば、何も制約をかけないと「ラベルは「〇〇」です。理由は△△だからです。」であったり、「〇〇。理由は以下です。△△。」など出力が一定の形式にならず、プログラムから利用が難しくなります。

上記により

ラベル:○○
理由:△△
確信度:□□

のようにChatGPTの出力をコントロールできるので、プログラム側で正規表現で結果を抜き出すことが容易になります。

なぜChatGPTでアノテーションなのか

上記でみたように、与えたテキストがどのラベルに該当するかを返してくれるというのが今回のツールのコンセプトになります。

これはつまり、テキスト分類のアプリケーションを作っているということでもあります。

そこで疑問が湧く方もいるかもしれません。ChatGPTでテキスト分類ができるなら、アノテーションでデータを用意することなどする必要がないではないか、と。

確かにそれは一面では正しいですが、以下に記述するChatGPTの弱点を考えた時に、独自の機械学習モデルを作成することが必要なケースはまだまだあり、その際にChatGPTによるアノテーションが役に立つかもしれないと考えたためです。

ChatGPTの弱点

テキスト分類機能を実装するにあたり、ChatGPTにテキスト分類をさせれば事足りる可能性は高いと思います。それぐらいChatGPTの性能は驚異的です。

ただ、ChatGPTにもいくつか弱点はあります。

出力の正確さに偏りがある

ChatGPTはあたかも知識に基づいて発言しているように見えますがそうではありません。与えられた文章に続けて出力するとしたら、最も可能性のある(尤もらしい)文字列を出力しているだけです。それだけで、文章として自然で、文意を汲み取ったような文章を出力することは驚嘆すべきことですが、知識に基づいて発言しているわけではないのです。

したがって、学習データの少なさなどにより、連続する文章として可能性の高低を判断しにくい場合、出力を安定させることができません。すなわち、毎回バラバラなことを発言することになります。そして、全く事実と異なることを述べる可能性があります。

欧米の事柄や世界的に見ても有名な出来事や人物についてはかなり正確な記述が作成されますが、ローカルな出来事や人物については断片的で間違った記述をする傾向にあるようです。

これは追加のデータの学習で解決するものと思いますが、今のところ学習処理をユーザ側で行うことはできないので、対処することができません。

学習データにない新しい言葉には対応できない

ChatGPTは、当然のことながら学習に使われたデータについてしか対応していません。つまり、学習処理が行われたあとに出てきた未知の言葉や概念などは判断できません。これは適宜学習の再実行である程度は解決できる問題かもしれませんが、今のところユーザによる学習処理などはできないので、OpenAIの対応待ちとなってしまいます。

インターネットの利用が前提となる

当然のことながらOpenAIのAPIにアクセスできなければ、ChatGPTの機能を利用することはできません。インフラ面の制限からインターネットに繋ぐことが許可されていないプライベートネットワークや、IoTなどのエッジでの処理が必要である場合などで、ネットワークを利用できない場合には利用することができません。

速度が必ずしも速いわけではない

もちろん人手で同じことをするよりも、圧倒的な速度でレスポンスを返してくれますが、一般的なAPIと比較した場合に特段に速いわけではありません。これは汎化するために大規模なモデルになっているがゆえ仕方がないことではありますが、特化したモデルに比べれば速度面では遅いと言わざるを得ません。ただ、これはモデルの改善でよくなっていくものと思われます。実際に数ヶ月前に比べれば速度はかなり速くなっています。

ChatGPTの力を借りる

というわけで、ChatGPTはすべてを解決するというわけではないので、適宜使い所を見極めて使用していく必要があるかと思います。

今回であれば、ChatGPTの力を借りてアノテーションという人手で行っていた作業を自動化する試みを行いました。既存でも、学習したモデル自身にアノテーションされていないデータをアノテーションさせて、確信度が高くないデータだけ人にアノテーションさせようとするアプローチはありました。しかし、その判断を学習モデルに説明させること、特に普通の人が理解できる形で説明することは困難でした。ChatGPTであれば、モデル自身に人間の言葉でその理由を説明させることができます。

最後に

ChatGPTの性能には驚くばかりです。使い方によっては、今までは困難だったり、時間がかかっていた、たくさんのことを解決するポテンシャルを秘めていると感じます。

実際、今回のツール作成時にChatGPTで出力したコードを使ったり、いろいろ質問しつつ作成した部分もあります。専門家からすればChatGPTの出力には満足できない場合もあるかもしれませんが、ReactやAWS Chaliceを普段あまり使ったことがない自分のような人間が使う分には、大きな効率化につながりました。

ChatGPTはさまざまなテキストデータで学習されています。詳細は明かされていませんが、その中にはWebページや書籍などのデジタルデータが多数含まれています(参照)。

このため、ChatGPTは人類のデジタル領域における叡智の結晶と言っても過言ではないかと思います。ChatGPTを使ってどんな面白いサービスが出てくるか、ワクワクしますね!

文字列からテキストのオブジェクトを検索する機能

0

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

クライアントエンジニアのIです。

現在Switchの新規開発(Unity)のローカライズ担当のクライアントとして仕事をしています。

今回は実際に業務の中で実装した「文字列が設定されているオブジェクトを検索する機能」について紹介をしたいと思います。

経緯  

プランナーやデザイナーの画面を見ながら会話をしているとScene上のオブジェクトを沢山クリックしてオブジェクトを探すという光景が良く見られます。

Unityでは画面上でオブジェクトを直接クリックすることでオブジェクトを選択状態にすることができ、選択したオブジェクトの状態をInspectorで確認することができますが、基本的に多くのオブジェクトが重なっているので中々確認したいオブジェクトに辿り着かなかったり、クリックをしすぎて通り過ぎてしまったりと中々オブジェクトを選択状態にするのが大変です。

実装している人は何となくオブジェクト名を覚えているはずなので簡単に検索して探せるかもしれませんが、プランナーが確認するときにオブジェクトを探す手段はやはりクリックして追いかけるしかないです。

ローカライズを対応があるので「テキストのフォントサイズ等を確認しないといけない」みたいなシチュエーションが多くありました。

そこで「画面上に出ている文字列からオブジェクトを検索できるような機能」があれば便利かなあと思って実装しました。

実装  

実装はシンプルで文字列を入力できるEditorWindowを作成して、TextMeshProのテキストに検索で入力した文字が含まれているものを一覧で表示します。

それぞれがボタンになっていてクリックするとオブジェクトが選択された状態になります。

これでInspectorにそのオブジェクトの状態をすぐさま確認することができます。

public class FindObjectByText : EditorWindow
{
    private static float WINDOWSIZE_W =  500f;
    private static float WINDOWSIZE_H = 500f;
    
    // 入力テキスト
    private string _inputText = "";

    // 検索結果
    private List<TMP_Text> _resultTexts = new List<TMP_Text>();

    private Vector2 _scrollPos = new Vector2();

    [MenuItem("Tools/FindObjectByText")]
    public static void ShowWindow()
    {
        var window = GetWindow<FindObjectByText>();
        var windowPos = window.position;
        windowPos.size =  new Vector2(WINDOWSIZE_W, WINDOWSIZE_H);
        window.position = windowPos;
    }
    
    private void OnGUI()
    {
        using (new GUILayout.VerticalScope())
        {
            GUILayout.Label("テキストを入力してください");

            _inputText = EditorGUILayout.TextField(_inputText);

            if (GUILayout.Button("検索"))
            {
                SearchObject(_inputText);
            }
            
            if (_resultTexts.Any())
            {
                GUILayout.Space(10);
                GUILayout.Label("検索結果");
                using (GUILayout.ScrollViewScope scroll = new GUILayout.ScrollViewScope(_scrollPos,EditorStyles.helpBox))
                {
                    _scrollPos = scroll.scrollPosition;
                    foreach (var tmp in _resultTexts)
                    {
                        if (tmp == null)
                        {
                            continue;
                        }
                        if (GUILayout.Button(tmp.name))
                        {
                            Selection.activeObject = tmp;
                        }
                    }
                }
                
            }
        }
    }

    private void SearchObject(string text)
    {
        _resultTexts.Clear();
        
        var textObjects = FindObjectsOfType<TMP_Text>();

        for (int i = 0; i < textObjects.Length; i++)
        {
            var textObj = textObjects[i];
            // 検索
            if (textObj.text.IndexOf(text, StringComparison.Ordinal) > -1)
            {
                _resultTexts.Add(textObj);
            }
        }
    }

まとめ  

大した機能では無いですが、あると地味に便利だと思います。

テキストだけでなく「CharacterIdからキャラのモデルを検索」したりなど色々なComponentに対して応用することが可能です。

このような「何かのComponentの情報からオブジェクトを検索する機能」は特にバグ修正の時などにも使いやすい機能だと思うので是非使ってみてください。

最近業務をする上で少しでも「自分が不便だな」と感じたり、他の人の作業を見たときに「何か不便そうだな」と感じたらなるべく効率化できる機能を実装することを心掛けています。

皆さんも今回のようなちょっとした機能でもいいので「うちのプロジェクトで使ってるこの機能地味に便利だよ!」というものがあれば是非教えて欲しいです!

アピリッツの資格取得支援は社員みんなにメリットがあるよ(ITパスポート取りました)

0

自分が頑張れば、自分に返ってくる環境

アピリッツでは資格取得支援制度をどんどん拡充させています。社長の和田がかつてインタビューで「(アピリッツを)”自分が頑張れば、自分に返ってくる環境”としたい」と答えていましたが、その環境を実現するためのステップのひとつです。

こちらもぜひ読んでください!

AWS認定をすべて取ったら100万円出します

たとえば、アピリッツは2021年の6月にAPN表彰手当を定めました。これは「AWS認定をすべて取ったり、社内外への技術発信に取り組んでAPNから表彰されたら会社から手当を出します!応援しています!」という施策です。最大で100万円以上出ます。

この「APN表彰手当」が社内に与えた効果は抜群で、AWS認定を取得するエンジニアがもりもり増え、AWS認定コンプリートまでリーチがかかっている社員も数名います(マネージャー陣曰く「想定以上のペースでみなさん勉強して取得しています」とのこと)。

社内Slackでも試験勉強について活発に情報交換がされています。

IPA資格保持手当も始まったよ

エンジニアも、デザイナーも、アナリストも、マネージャーも、みんなが勉強する環境であるならば、バックオフィスのメンバーも勉強したっていいんじゃない? ってことで、広報の私も、まずは情報処理推進機構(IPA)の資格のうち、基本のキである「ITパスポート」を取ってみることにしました。こちらはアピリッツが最近定めた「IPA資格保持手当」の対象資格にも入っています。

エンジニア以外のメンバーにも、IT企業で働く上での基礎知識を身に着けてほしい……そんな意図もあって、ITパスポートもIPA資格保持手当のラインナップに加わりました。

ITパスポート試験の受験料や合格基準は?

ITパスポートの受験料は7500円(2023年2月時点)で、合格すれば経費精算できます+報奨金ももらえます。

試験の仕組みはとても単純で、合格基準点に達すれば誰でも合格です。つまり入学試験のように倍率やライバルを心配しなくていいので気がラク。

また、日本のあちこちで毎日のように試験が開催されています。だから受験までの予定が立てやすくてありがたかったです(ただ、都内は1ヶ月先くらいまで試験会場が埋まりがちでした。やると決めたらとっとと申し込むことをオススメします!)。

自分にあったスケジュールと試験会場を選んで受験申込をすれば、あとは勉強するだけです。

やっててよかった試験対策

極端に苦手な分野は作らないほうがいいよ

ITパスポートの合格基準は2つあり、2つとも満たす必要があります。

まず、総得点が60%を超えていること。

そして、ストラテジ系、マネジメント系、テクノロジ系と3つの分野ごとに用意された合格基準点を超えていること。

後者の合格基準があるため、「ストラテジ系だけで一点突破してやるぜ!」みたいな勉強法はおすすめしません。とはいえ、易しい問題から難しい問題までいろいろあります。各分野の易しい問題だけでも必ず得点できるようにしておけば、合否ラインに豪快に引っかかることもなさそうですし、落ち着いて試験に臨めるのではと個人的には思います。

過去問がウェブ上で公開されてる

試験対策が必要かどうか? は、人によります。

まず己の実力を測るために過去問をやってみましょう。

参考書もたくさん売っていますが、それらを買う前にWebで過去問をちょっとやってみて、ざっくりと得点率を把握して、自分の勉強スタイルを決めるとよさそうです(たぶんこれで「自分ノー勉でいける」とわかる人もいるはず)。

私は、「勉強しないと合格は難しそうだな~」という際どい模試結果だったので、ウェブ上の過去問(大量)と参考書で試験対策をしました。とくに実際の試験もPCで回答していくのでPCで過去問を解きまくるのが個人的には一番合っていました。

とくにこちらのサイトのお世話になりました。

ITパスポート過去問道場

過去問道場では、過去問を試験回や分野で指定して解きまくれます。1000本ノックとかできちゃう。で、解きながら「当てずっぽうで答えてしまえ」だとか「なんだこれ?」と思った出題があれば、そこが自分の弱点なので、参考書や過去問サイトの解説を丁寧に読んで、出題の意図や傾向を理解していきました。

参考書はこちらを買いました。

令和04-05年 ITパスポート 試験によくでる問題集

理由はタヌキがかわいかったからです。あと技術評論社がなんとなく好きだったから。休みの日や朝の出勤前にソファに座ってブツブツ声に出して読んでいました。紙はパソコンの画面と違って目が疲れにくいのが利点。あとどこにいてもパッと本を開いて読める。

試験当日はこんな感じ

試験時間は2時間。ただし帰りたきゃさっさと帰ってよし

電卓や時計は持ち込めません。紙とペンは試験会場で提供されますので、暗算できない計算はその紙を使って解きましょう。

また、試験時間は2時間用意されています。正直「え!なっが!」と思いましたが、大丈夫。あなたの帰りたいタイミングで帰れます。解き終わって、気になるところを見直して「これでよし!」と思ったら、採点結果を見ましょう。己の試験結果を見終わったら、さっさと立ち去っていいです。マイペースに行きましょう。

ちなみに試験会場には老若男女いろんな人が集まっていました。試験直前までテキストを読み込む人、自作の勉強ノートを大事そうに抱えている人、ぼんやり窓の外を見ている人、いろいろでした(私はテキストを読み返していました。とくに2進数が苦手です)。

勉強はおもしろい

合格してもしなくても、とりあえず勉強するのは何歳になってもいいもんだな~と思いました。社内でエンジニアや営業のメンバーが何気なく口にしている単語の意味がわかったり、何が大事なのかが少しつかめるからです。社内でのコミュニケーションがラクになります。手当も当然うれしいけれど、こういった手応えが実は一番うれしかったりします。仕事と地続きの勉強のおもしろさとメリットを再確認しました。

ということで、次はGAIQAWSのクラウドプラクティショナーを勉強中です。がんばりまーす。

最近人気な記事