ホーム ブログ

【合格体験記】Tableau Desktop Specialistで「データ思考」を習得する方法

0

Webコンサルタントの田畑です。

先日、Tableau Desktop Specialist という資格を取得しました。
データ活用を推進する上で重要な資格ですので、その価値や合格ポイントをご紹介します。

Tableau Desktop Specialist とは

Tableauの基本的なスキルと知識を証明できる公式認定資格です。

Tableauは、BIツール(ビジネスインテリジェンスツール)の一種であり、データの可視化と分析に特化したソフトウェアです。
Tableauを使用すると、企業が持つ膨大なデータを直感的なグラフやチャート、ダッシュボードとして視覚的に表現できます。
データのパターン、トレンド、異常などを素早く発見し、ビジネス上の意思決定に役立てることが可能です。

Tableau Desktop Specialist では、単にTableauの操作方法を知っているだけでなく、データを正しく理解し、効果的に可視化する能力、そしてその結果を適切に解釈するためのデータ分析の基礎的な思考力が問われます。

なぜTableau Desktop Specialist が重要か

日頃からデータに基づいた意思決定を組織に浸透させるべく活動していますが、Tableau Desktop Specialist は単なる操作スキルの証明ではないと考えています。

ツールを使いこなす以前に、データを「どう見るか」「どう解釈するか」というデータ思考を身につけること。
まさにこのデータ思考の基礎を体系的に習得できるのが、Tableau Desktop Specialist です。

データを見る力

どのようなデータがどのように整理されているか、データの粒度や構造を正確に理解する力と、分析に必要なデータを見抜く力を養えます。

データを整理する力

複雑なデータを分析しやすい形に加工・変換する、データの「準備」段階の重要性を深く理解できます。
具体的にはデータソースの接続から、結合、ユニオン、ピボットといった前処理、そして計算フィールドでの加工を理解できます。

データ思考

なぜこのグラフを選ぶのか、なぜこのフィルターが必要なのか。
単なるツールの使い方ではなく、データから本質的なインサイトを引き出すために、どのような手順で、どのような思考を持って分析を進めるべきかという、データ分析の「型」が身につきます。
「問い」を立て、データで検証するプロセスに直結します。

Tableau Desktop Specialist の試験概要

対象者

公式試験ガイドによると、Tableau Desktop の基礎的な知識をもとにして、使用経験が3ヶ月以上あることが推奨されています。
ただ私の場合は2ヶ月ほどの使用経験で合格しましたので、あくまで目安と捉えてよいでしょう。

出題形式

  • 択一・複数回答のみで実技問題なし
  • 試験時間:60分
  • 問題数:45問
  • 合格点数は750/1000点で、スケールドスコアで採点される

受験方法

オンライン受験も可能ですが、試験前の環境チェックや試験中の監督体制が大変厳しいため、試験センターでの受験をおすすめします。

▼ ちなみに今回は、アピリッツからすぐのこちらの試験センターで受験しました。
渋谷テストセンター

受験費用

100ドル

対応言語

英語・日本語・中国語

合格までの学習ロードマップ

① 基礎学習から始める

模擬試験を解く

▼ まずは以下の模擬試験を解いて、満点を取れるまで何度も繰り返し解き、完璧にしました。
【Tableau Desktop Specialist】最短で合格するための模擬試験問題集【2024年最新版】

ただし問題を解くだけではなく、「なぜこの答えなのか?」「不正解の問題はどこが誤りなのか?」「この問題では何の理解を求められているのか」を調べ、実際にTableauを操作しながら血肉化することがポイントです。

▼ 他にも以下の問題を解きました。

各模試・問題集の正答率をまとめたクロス集計表

見つけた過去問や問題集は全て解く気概で、試験ギリギリまで粘りました。
Kindleでも問題集を見つけましたが、時間切れで解き切ることができませんでした。

② 試験ガイドの各項目をTableauで操作する

公式試験ガイドの「試験内容」に記載されている各項目を理解度チェックリストに見立てて、理解が曖昧な項目がないか一つずつ潰しました。
曖昧な項目はTableau Desktop を操作して理解します。

キャプチャを撮ってFigJamにまとめながら総なめにしましたが、そのまま試験前に見直すことでムラなく全体網羅できました。
Tableau Desktop Specialist に限らず、おすすめの学習方法です。

Tableau Desktop Specialistの学習内容をまとめたFigJamのキャプチャ

③ Udemyの動画を観て実際に操作する

上記2つ学習と並行して、食事の合間などにUdemyでの動画学習も行いました。
試験対策をしながら基礎スキルを身につける! ゼロからのTableau Desktop Specialist試験対策講座

ただ最初から最後まで全てしっかり観たわけではなく、流し見しつつ、理解の浅い操作や機能はじっくりTableau Desktop を操作する、というやり方をしました。

学習時間

試験1ヶ月前から学習開始しました。
平日は1-2時間、休日は1-6時間の間でまちまち。試験直前の土日は1日10時間ほど学習しました。

試験結果

986/1000点で合格しました。
試験を終了するとすぐに合否が分かるため、小躍りしたい気持ちを抑えて静かに退室しました。
残り14点、何が不正解だったのか気になります。

まとめ

Tableau Desktop Specialistは、Tableauスキルを証明する最初のステップです。
今後は、さらに専門的な知識が問われる “Tableau Certified Data Analyst” や、Data Saberプログラムを目指し、データ分析のプロフェッショナルとしての継続的な学習と成長を続けてまいります。

個人がTableau Desktop Specialist の資格を取得し、データ活用の力を高めることは、決して自分だけのメリットに留まりません。
その力が組織全体のデータリテラシー向上や、データに基づいた意思決定文化の醸成につながり、ひいてはデータ駆動型社会の実現に貢献できると信じています。
皆様のデータ活用・資格取得への挑戦を、心から応援しています。

アピリッツの「データエンジニアアサインサービス」のご紹介

アピリッツでは、データ基盤設計やデータ分析、BI開発に関して壁打ちできる、60分の無料相談/壁打ち会を実施しております。
データエンジニアアサインサービス

「データドリブン組織を目指したいものの、何から始めればいいのか分からない」
「現場がうまく回っていない」
「対応できる人材が社内にいない」
などのお悩みがございましたら、データ活用の実績・ノウハウが豊富なアピリッツにお気軽にご相談ください。

アピリッツのデータエンジニアアサインサービス
https://appirits.com/service/dataengineer_assign/

データエンジニアアサインサービス

田畑有佳子(タバタ ユカコ)
デジタルマーケティング・オファリング学部、デジマケ支援を得意としたWebコンサルタントです。
どこに行っても姐さんと呼ばれます。
座右の銘は「たくさん食べてたくさん飲んでどこでも行くわよ~」

【女性テックリードにインタビュー】~昨日の自分より一歩前へ!テックリードが語る成長とチームを導く秘訣~

0

今回はテックリードとしてご活躍されている保坂さんにインタビュー!

入社してからテックリードになるまでの道のりや、チームをリードする上で大切にしていることなどを聞いてきました!(2025年5月取材)

社員紹介

モチベーションは「成長したい」という気持ち!

–保坂さんは中途でアピリッツに入社されたんですよね。前職ではどんなことをされていましたか?

前職ではWebデザインやコーディング、Webディレクターなど浅く広くやっていました。

入社して3年目ぐらいのタイミングで転職を考えはじめ、Webの仕事の中でコーディングが一番楽しく、もっとコードを書く仕事に特化したいと思いエンジニアを目指し始めました。

現在は、Webエンジニアとして子供のための観光情報サイトや、医療系の人材紹介サービスなどにも携わっています。

–テックリードになるまでに、意識したことや大事にしてきたことはありますか?

周りの人が優秀な方ばかりなので、少しでも追いつくために「昨日の自分より成長する」ことを常に意識していました。

目の前の業務をしっかりとこなすことはもちろんですが、通勤時間やプライベートの決まった時間を日々勉強に充てていました。

また、ミーティング中には、勉強になると感じた先輩方の動きをメモして、自分が同じ立場になったときに活かせるよう心掛けていました。

最初はテックリードを目指していたわけではないのですが、

「頑張ろう!」という意識を持ち続けていたらテックリードのお話をいただくことができました。

–テックリードに決まったときの感想や不安、またその不安を乗り越えるために行ったことはありますか?

最初は自分に務まるのか不安でした。テックリードに決まったのが今年の4月なので、正直なところ不安が尽きることはなく、まだ克服できたわけではないです。。

特に、前任の方が非常に優秀な方だったので、その役割を自分がきちんと果たせるのかというプレッシャーはとても感じています。

ただ、困ったときには周囲の方々が支えてくださる環境のため、自分だけで全てを抱え込まず、手が回らない部分は他のメンバーに助けをお願いしながら進めています。

その上で、自分の立場として果たすべき役割にしっかりと向き合い、できる限り最善を尽くすことを心掛けています!

テックリードって何してるの?

–実際、テックリードって何をしているんですか?保坂さんが思うテックリードの役割と、必要な能力を教えてください!

案件の代表としてお客さんと調整をしていく役割を担っています。
お客さんの要望を踏まえた上でのシステムの提案や、チームのメンバーに仕事を振ったり、コードレビューなどをしています。
また、エンジニアの領域では分からないことは、部署を超えてお力添えのご依頼をしています。
自分としても勉強になることが多く、いつも大変助かっています!

必要な能力としては、今がどういう状況かを正しく判断して、それを踏まえてまわりにどうアプローチしていくか考える力が重要だと感じています。

–仕事をする上で意識していることや、成長を感じたエピソードを教えてください!

何事に対してもさらにもう一歩踏み込んで考えることを意識し、細かいことでもメモを取るようにしています。

うまくいかなかった時は、なぜ失敗したか・今後どうしていくべきかを考えて、文章に書き起こし、PDCAを回すようにしています。

このことで、前までは上手くいかなかったことが改善したときは、テックリードとして頑張ってきて良かったなと思います。

入社した時は自分が戦力になれるか不安でしたが、テックリードを引き継ぐことになった時は、尊敬する先輩方に一歩近づけたのではないかなと、自分の成長を感じました。

チームを導く秘訣とは??

–チームをリードする上で大切にしていることはありますか?

チームのメンバーがどんなタイプなのかを見極め、その人にとって最適なやり方を判断することを大切にしています。

例えば、メンバーとのコミュニケーションにおいて、テキストベースでやり取りするのが良いのか、直接会話するのが良いのか、その人とその時の状況に合わせてコミュニケーションの方法を変えています。

また、その人の得意分野を、チーム全体の業務効率や成果にどのように活かすか、さらに個々人の成長にもつながる形で総合的な良い影響をもたらす方法を考えています。

ーメンバーそれぞれに合わせた対応を心がけているのですね!

ちなみに、テックリードに就任したらポストインセンティブ(就任報酬)をもらえますが、もらったら何に使いますか?

ペンギンが大好きなので、和歌山の動物園にいるエンペラーペンギンを見に行きたいです。

実はもう見に行ったことがあるのですが、何回見ても良いので、是非みなさんにも見に行ってほしいです!!

–最後に今後の目標と、これからテックリードを目指す人に伝えたいことや

アドバイスをお願いします!

目標というほどのものではないですが、今自分が苦手としていることが得意になっていたらいいなと思っています。

個人的にはとにかく実践が一番学べると思っているので、テックリードを目指すならそういった経験ができる場に自分の身を置くと良いと思います。

入社したばかりの場合は、実務でリーダー的な役割を担うのは立場上難しいかもしれませんが、例えば自分で同年代限定の勉強会を企画してみると、自分が実質その勉強会チームのリーダーとしての役割を担うことができます。

こうした形で「何か自分にできることはないか?」と常に模索する意識を持つと良いと思います。

もし積極的に動く自信がまだ持てないのであれば、まずは継続的に勉強を続けてみるのも良いと思います。

学びを深めるうちに自信がつき、少しずつ積極的に行動できるようになると思います。

–保坂さん本日はありがとうございました!今後のご活躍を心から応援しています!

テックリードは自分自身の成長にもつながる貴重な経験です。

もちろん、責任も大きく大変な場面もありますが、その分成果を上げたときの達成感や、喜びは何にも代えがたいものになります。

自分自身のスキルや視野も大きく広がっていくので、挑戦する価値は十分にあります。皆さんもぜひ、テックリードを目指してみませんか?

懇親会も企画から運営まで一気通貫!?アピリッツの懇親会に潜入してみた!

0

ボードゲームで社内交流・・!?

アピリッツでは、社員同士の交流を深めるため、毎月1回社内イベントを企画しています。

今回のアピスピでは、5月に開催された懇親会の様子についてレポートしたいと思います!

当日は、お酒やジュース、軽食を取りながら、部署や年齢・年次を超えた多様な交流が見られました。^^

そして今回の懇親会では、懇親会委員のメンバーがボードゲームイベントを企画!

最初は、普段関わらない人との交流にやや緊張気味の様子でしたが、ゲームが始まるとそれまでのぎこちない雰囲気が噓のよう・・!

<参加者の声>

先輩方が席をまわってくださり、ボードゲームを交えて親睦を深めることができました!楽しかったです!

他部署の方々や普段話さない方と、業務のお話やそれぞれの状況などをお話しすることができました!
意外と共通の趣味が多くて、楽しく会話させていただきました。

部署や年次を問わず、ランダムなメンバーが集まってゲームをしていたので、色々なお話ができました!

ゲームをきっかけに、業務の話や趣味の話などへと広がり、参加者同士の距離もぐっと縮まったようですね。^^

文化の担い手は若手メンバー!

毎月実施しているこの懇親会は、なんと4月に入社した新卒社員が企画・運営してくれているんです!(改めて新卒社員の皆さんいつもありがとうございます!)

今回の懇親会は、今年入社した25新卒のメンバーが初めて企画・運営を行ったイベントとなりました。

そんな25新卒の懇親会メンバーに今回の企画の思いや感想について聞いてきました!

ーー今回の懇親会で、意識したことを教えてください。

初めて話すメンバーとも打ち解けやすい雰囲気作りを意識しました!
そのためにも、参加してくれたメンバーが楽しめるような企画を、運営メンバー、一人ひとりが意見を出しあって、皆で今回の懇親会を作り上げるということも意識していました。

ーー今回、懇親会の運営を担当してみていかがでしたか?

いつの間にか、別のテーブルでポーカーをしているメンバーや、共通の趣味で盛り上がっているメンバーがいて、
社員同士の交流を深めるきっかけづくりができたんじゃないかと思います!

初めての懇親会運営で準備から当日の運営まで大変でしたが、運営を通して自分自身もメンバーとの親睦を深めることができたと感じました!

ーー懇親会大成功でしたね!改めて、懇親会委員の皆さん、素敵な企画をありがとうございました!次回も楽しみにしています♪

共につくり、共に生きるスクラム型の組織づくり

アピリッツでは、人と事業が”継続して成長し助け合える”スクラム型を目指したコミュニケーションを大切にしています。

そしてその文化形成にメンバー自信が主体となって様々な取り組みを行っています!

また、アピスピ編集部が所属する我々CCO室でも、毎月開催している懇親会で生まれた輪が、仕事へも繋がるような工夫を考えてまいりますので、

このような我々のカルチャーに共感を持っていただける方は、ぜひ一度選考にお進みください。

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

  

Wantedlyで採用活動を行っています!

0

皆さん!アピリッツがWantedlyで採用活動を行っていることはご存じですか??

採用HPだけではお伝えしきれなかった、私たちが大切にしていること、文化、社員の仕事に対する思いなどを、Wantedlyを通してよりリアルにお届けしています。

例えばーー

アピリッツが大切にしている価値観って?

アピリッツの社名の由来は?

ーーその疑問、Wantedlyを読めば解決します!ぜひチェックしてみてください!

・アピリッツが、どのような思いをもって事業を行っているのか

・アピリッツでは、具体的にどのようなポジションにチャレンジできるのか

“カジュアル面談”で会社の理解を深められる!まずはフランクにお話しませんか?

私たちアピリッツは、候補者様のこれまでのご経験や今後やってみたいことをお聞かせいただくことを、採用活動の中で重要視しています。

その中で、Wantedlyでは、皆さんにいきなり選考へ「応募」することを求めるのではなく、まずは弊社について「知っていただく」相互理解の場として、選考とは関係のないカジュアル面談を実施しています。

例えばーー

・アピリッツの事業や仕事内容に興味はあるが、選考に進むか迷われている方

・転職活動はまだ具体的に考えていないが、今後のために情報収集をされたい方

・社内の雰囲気を肌で感じてみたい方 etc..

上記に当てはまる方は、ぜひ一度Wantedlyで「まずは話を聞いてみたい」とご連絡ください!

繋がりが成長のカギ!アピリッツの中途ランチ会に参加してみた!

0

今回は、中途ランチ会に潜入取材!「アピリッツに入社を決めた決め手は?」「入社してからのギャップは?」等、中途入社メンバーに気になるあれこれを聞いてきました!(2025年4月取材)

アピリッツでは、中途入社メンバー同士の交流のきっかけ作りとして、中途ランチ会を定期的に開催しています。

今回は、そんな中途ランチ会の実際の様子をご紹介します!

「中途ランチ会ってどういう取り組み?」と感じられた方は、ぜひこちらの記事もご覧ください!

いざ中途ランチ会へ!

ランチ会メンバー ※50音順
・塩﨑 敬祐(シオザキ ケイスケ)さん ゲームエンジニア
・末田 雄之(スエダ ユウシ)さん Webコンサルタント
・髙木 ひとみ(タカギ ヒトミ)さん Webエンジニア
・西山 葵(ニシヤマ アオイ)さん Webデザイナー
・畠山 葵(ハタケヤマ アオイ)さん ゲームプランナー

ーー前職ではどのようなお仕事をされていたのですか?

前職では、SESの営業をやっていました!ただ、お客様のコストに対して最適なエンジニアさんを提案しても、エンジニアさんの意向でなかなか決めきれないということがあって、より自分の力でお客様の課題を解決したいと思い、Webコンサルタントをメインで転職活動をしていました!

私は、前職ではデザイン系には触れておらず、主にPHPやCMS系を扱うエンジニアとして働いていました!今は前職の知見を活かしつつ、Webデザイナーとして働いています。

私はアパレルで販売員をしていました。元々学生の頃からエンジニアのお仕事に興味があって、アピリッツではWebエンジニアとして働いています。

前職はSI事業の会社で、エンジニアとして働いていました。元々ゲームが好きで、アピリッツのゲームをプレイしていたということもあり、今はアピリッツでゲームエンジニアとして働いています。

私は前職でゲームの攻略サイトを制作する会社で働いていました。今は前職の知見を活かして、よりユーザーさんに情報が伝わりやすくなるように、改善点を探しながら、お知らせやSNSなどを制作・投稿しています。

左から、ゲームプランナーの畠山さん、Webデザイナーの西山さん、Webエンジニアの髙木さん

入社の決め手は、面接・・?!

ーー皆さん今と同じ業界ご出身だったり、はたまた未経験でご入社されたりと、多様なご経歴をお持ちですね!ちなみに、アピリッツに入社を決めた理由は何でしたか?

大学生の頃独学でプログラミングを勉強していたのですが、転職を考え始めた時に、「やっぱりエンジニアに挑戦したい!」と思いエンジニアメインで転職活動をしていました。その中でも、アピリッツは大手の企業様が取引先に多いので、エンジニアとして成長できそうだと感じたことが入社の決め手です。

私は、面接でお話を聞いた時にスキルアップがとても明確にされていたことが決め手になりました。入社の前からアピリッツでどうやってスキルアップができるのか、どんなキャリアを築けるのかがイメージしやすかったです。

私も面接の際のエピソードになるのですが、アピリッツの面接で自分のやりたいことをお話しした時に、ちょうど自分のキャリアとぴったりのポジションを面接官の方々に提示してもらって、「ここだ!」と感じ入社を決めました。

私も面接のお話になるのですが・・笑 
アピリッツの面接で自分の好きなゲームについてお話しした時、面接官の方々とそのゲームのお話で盛り上がったのですが、その時の会話から「これは信用できるオタクだな~!分かってるな~~!」と感じました。笑 
その時に、「この会社で働きたい!」と思ったんです。

ーー皆さん、面接がかなり印象に残っておられるのですね。入社してから今までどのような業務に携わっていらっしゃるのでしょうか?

今は既存のお客様に対して課題解決のプレゼンテーション・追加提案を行うための準備をしています。分からないこともありますが、メンターの方々に時間を作ってもらって相談しながら進めています。

チームの方々に教えてもらいながらではありますが、ワイヤーフレームの制作からお客様との折衝、実装までWebサイトの制作全般の業務を担当しています!

今はRuby on Railsの勉強をしつつ、システム検証班の業務をお手伝いしています。RubyやAWSに今まで触れたことがなかったので覚えることが多くて大変ですが、今までユーザーとしてプレイしていたゲームを、今度は作る側として関われることがとても貴重な経験だと日々感じています。

左から、ゲームエンジニアの塩﨑さん、Webコンサルタントの末田さん

入社してからのギャップー黙々と作業しているかと思いきや・・?

ーーぶっちゃけ入社してギャップを感じたことはありましたか??

エンジニアが社員の半数を占めている(※)ので、黙々と作業している人が多いイメージでしたが、入ってみるとMTGや雑談が多くて、コミュニケーションが活発にされて良いギャップでした!

※参照:データで見るアピリッツ

自分はコンサルタントですが、エンジニアさんの席まで行って話をしに行ったりしているので、髙木さんの言う通り皆さんあちらこちら動き回っている印象はありますね。笑 
4月に入社された新卒の方とも話すことがあるのですが、新卒の方々に負けないように毎日頑張っています!!

私が所属するチームにも新卒の方がいらっしゃるので、MTGでよく話しますね。
他にも2週に1回チームメンバーでランチ会があるので、私もコミュニケーションは活発な印象があります。
ちなみに、毎月開催されている懇親会にもいつも参加しています!笑

私もお昼は定期的にプランナーチームの方々でランチに出かけています。
ちなみに、前職では今回のような中途入社同士のランチ会はなかったので、いい取り組みだな~と感じています。

ーー新卒中途問わず、メンバー同士のコミュニケーションも盛んなのですね!最後に、皆さんの趣味を教えてください!!

私はネットフリックスで韓国ドラマを見たり、フットサルをやっています!
フットサルは大学生の頃からやっていて、最近はリフティングを10回達成できるように練習中です!

ゲームが好きなので、休みがあればゲームのライブやオタク活動をしています!!この前のお休みも好きなゲームのライブに参加してきました!学生時代はバトントワリングをやっていました!

自分もゲームが好きなので、休みの日もスマートフォン向けのゲームを中心に遊んでいます。
学生の頃は部活やサークルで、バドミントンやスカッシュをやっていました!

趣味が野球とバイクなので、休みの日は広島カープの試合を観戦しに行ったり、自分でバイクをカスタムしてツーリングに出かけています。高校時代は野球部に入ってました!

新しいことにチャレンジすることが好きで、この前は初めて競馬場に行ってきました!(負けました!笑)
学生時代は映画製作のサークルに入っていて、動画編集なんかもしていました。今でも映画は見に行っています。

ーー皆さん、ありがとうございました!改めまして、アピリッツへようこそ!これからよろしくお願いいたします!

意外とアクティブな趣味をお持ちの皆さん!これから、どうぞよろしくお願いいたします!!

終わりに

アピリッツの中途ランチ会はいかがでしたか?

アピリッツには、多様なバックグラウンドを持つメンバーが集まり、互いに刺激し合いながら成長できる環境があります。

今回の記事を読んで少しでもアピリッツに興味を持たれた方、ぜひ弊社の選考にお進みください。

選考の中で、皆さんのやりたいこと・挑戦してみたいことについてお話ししましょう!

皆様のご応募お待ちしております。

栢森 結(カヤモリ ユイ)
CCO室 採用業務・採用広報を担当
学生時代はハンドボール部と吹奏楽部に所属
当時は、マラソンとシャトルランが得意でした。現在はコジコジの推し活中。

MCP (Model Context Protocol) とAIエージェントによるゲームデータ分析の可能性

0

2025GWはパウンドケーキを焼きました。ファンカルチャー・デザイン学部 中村です。

前回の記事ではLLMを利用したAIエージェントによるデータ分析を試すためにダミーデータを用意して、いくつかのプロンプトを指示してデータ分析を行いました。記事中でも触れましたが、AIエージェントにアップロードするcsvファイルにはサイズ制限が存在します。実際に運営しているタイトルのデータを分析しようとしたときにはそのサイズ制限がネックになってしまうでしょう。そのため、AIエージェントから直接データベースに対してクエリを実行してもらう必要があります。

しかしながら、ChatGPTやClaude、Geminiに代表されるようなAIエージェントがデータベースに接続するとはどういうことでしょうか。Model Context Protocol (MCP)という仕組みを利用して、実際に postgres へ接続する方法を見ていきましょう。

Model Context Protocol (MCP)

2024年11月に Anthropic から MCP が発表されました。以下に、Anthropicの発表から引用します(Google翻訳)

本日、私たちはモデルコンテキストプロトコル(MCP)をオープンソース化します。これは、コンテンツリポジトリ、ビジネスツール、開発環境など、データが存在するシステムにAIアシスタントを接続するための新しい標準です。その目的は、最先端のモデルがより優れた、より適切な応答を生成できるようにすることです。

https://www.anthropic.com/news/model-context-protocol

問いかけることで様々な応答を返してくれるAIエージェントは、その発展によって精度が向上し幅広い分野での利用が想定されます。このとき、AIエージェントとデータが切り離されていることが利用拡大の障壁となります。そこで、AIエージェントとデータソースを接続するための仕組みがMCPなのです。

仕組み

MCPの仕様やGet Startedはこちらに記載されています。構成の画像もお借りしています。

https://modelcontextprotocol.io/introduction

AIエージェント(Host With MCP Client)から何らかのデータ(Local Data Source)へ接続する場合、その間にMCP Serverを起動します。これによってAIエージェントはこのMCP Serverを経由してデータを取得可能となります。同じく何らかのWebサービスへ接続させたい場合も、専用のMCP Serverを起動する必要があります。このように、AIエージェントとMCP Server間の通信で用いられているデータ構造がMCP Protocolです。

MCP Serverは接続するデータソースやWebサービスに応じた機能が求められます。すでに Google Drive や Slack、Githubなど多くのWebサービスに対応したMCP Serverが開発されており、一覧として提供されています。つまり、例えばAIエージェントに対してGithubのコミットログを参照させ、特定の情報を抽出したり、レポートを作成したりといったことが可能になります。独自のニーズに合わせてカスタムしたMCP Serverを開発することも可能です。

MCP Clientを手軽に試すのであれば、Claude Desktopが最適です。開発者設定から構成をONにし、設定ファイルに適宜利用したいMCPサーバーを指定するだけで済みます。

しかしながら、私のFree Plan環境ではおおよそ5回程度の試行でメッセージ上限に到達してしまうため、なかなか実験が捗りませんでした。

いよいよ有料プランへ課金すべきかと考えましたが、せっかくなので Build With Claude からAPI Keyを取得し、Streamlitでやりとりしてみようと思います。

Streamlit

Streamlit はデータ分析を手軽にWebアプリとすることを目的に開発されました。Pythonコードを記述するだけでフロントエンドを考える必要がなく、簡単にデータの可視化や分析ができるフレームワークです。そのため生成AIを利用する場面でも非常に簡単にチャットツールが作れてしまいます。

まず、単にClaudeとやり取りするだけのチャットWebアプリを実装してみます。Python環境は uv で用意しました。

$ uv init
$ uv add anthropic streamlit 
import anthropic
import streamlit as st

API_KEY = 'sk-xxxxxxxxxx'
AI_MODEL = 'claude-3-7-sonnet-20250219'

st.title("MCP App")

client = anthropic.Client(api_key=API_KEY)
if "messages" not in st.session_state:
    st.session_state.messages = []
for message in st.session_state.messages:
    st.chat_message(message["role"]).markdown(message["content"])

if prompt := st.chat_input("May I help you?"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    st.chat_message("user").markdown(prompt)
    with st.spinner("Thinking..."):
        response = client.messages.create(
            messages=st.session_state.messages,
            model=AI_MODEL,
            temperature=0.7,
            max_tokens=1024,
        )
        st.session_state.messages.append({"role": "assistant", "content": response.content[0].text})
        st.chat_message("assistant").markdown(response.content[0].text)
        st.rerun()

uvanthropicstreamlit をプロジェクトに追加し、上記コードを記述します。その後、以下のstreamlitコマンドを実行します。

$ streamlit run streamlit-app.py
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501

以上のようにClaudeと会話するチャットボットWebアプリが完成しました。その他、履歴の表示やモデルの選択なども追加することもできますが、単純に会話するだけならこれだけでも十分です。

それではこれをもとにしてMCP ServerとやりとりするAIエージェントを作成しましょう。

MCPエージェント

とは言え、すでに先人たちがStreamlitで利用できる mcp-agent を開発しているので利用させていただきます。まず uv からプロジェクトへ追加します。

$ uv add "mcp-agent"

以下のようにMCPエージェントが参照するMCPサーバーをconfigファイルに記載します。

$schema: schema/mcp-agent.config.schema.json

execution_engine: asyncio
logger:
  type: console
  level: debug
  batch_size: 100
  flush_interval: 2

mcp:
  servers:
    postgres:
      command: npx
      args:
        - -y
        - "@modelcontextprotocol/server-postgres" 
        - postgresql://root:password@localhost:5432/game
# openai:
#   # Secrets (API keys, etc.) are stored in an mcp_agent.secrets.yaml file which can be gitignored
#   default_model: gpt-4o
anthropic:
  default_model: claude-3-7-sonnet-20250219

今回はpostgresデータベースのデータを参照するので@modelcontextprotocol/server-postgres を利用します。server-postgresnpx で動作するため事前にインストールしておくと良いでしょう。オプションでは単にローカルのDockerで起動したpostgresのエンドポイントを指定しています。

streamlit から mcp-agent を利用するために、以下のようなエージェントを記述します。

async def streamlit_input_callback(request: HumanInputRequest) -> HumanInputResponse:
    return HumanInputResponse(request_id=request.request_id, response="Approved.")

async def get_agent():
    """
    Get existing agent from session state or create a new one
    """
    if "agent" not in st.session_state:
        mcp_agent = Agent(
            name="MCP Agent",
            instruction="*** System Propmt ***",
            server_names=["postgres"],
            connection_persistence=False,
            human_input_callback=streamlit_input_callback,
        )
        await mcp_agent.initialize()
        st.session_state["agent"] = mcp_agent
    if "llm" not in st.session_state:
        st.session_state["llm"] = await st.session_state["agent"].attach_llm(AnthropicAugmentedLLM)
    return st.session_state["agent"], st.session_state["llm"]

MCP ClientはエージェントからMCP Serverへの接続を許可するために認証が必要です。streamlit_input_callback でその承認を行っています。エージェントに関しては mcp-agent で用意されたクラスをシステムプロンプトとともに初期化することで生成できます。また、生成されたエージェントには AnthropicAugmentedLLM でClaudeを利用するよう設定しています。 さらに以下のように mcp-agentのAppを初期化します。

app = MCPApp(name="MCPChat", human_input_callback=streamlit_input_callback)

async def main():
    await app.initialize()
    # streamlit code below
    
if __name__ == "__main__":
    asyncio.run(main())

MCPAppは初期化を async/await を用いるため、streamlitのコードを記述する前に済ませておく必要があります。そのために asyncio.run で初期化処理を実行しつつstreamlitコードを記述すべきです。MCP Agentとチャットベースでやり取りする streamlit コードは以下のとおりです。

agent, llm = await get_agent()

if prompt := st.chat_input("Type your message here..."):
    st.session_state["messages"].append({"role": "user", "content": prompt})
    st.chat_message("user").write(prompt)
    with st.spinner("Thinking...", show_time=True):
        request_params = llm.default_request_params
        request_params.maxTokens = 8192
        response = await llm.generate(
            message=prompt,
            request_params=request_params,
        )
        for msg in response:
            st.session_state["messages"].append({"role": "assistant", "message": msg})
        st.rerun()

ここでは mcp-agentで生成された llm に対してユーザーのプロンプトを送信しています。MCP Serverとの通信中、エージェントは内部で複数の処理を実行しており、その結果として複数のメッセージがまとめてレスポンスとして返されます。

以上でmcp-agentを利用してMCP Serverとのやり取りができるようになります。

postgresデータベースと接続する

仮データ

MCPエージェントがpostgresデータベースへ接続できているのか確認するための仮データを用意します。構造は前回の記事と同じく以下のようにしています。

codenamestart_atend_atdetail
event_001大冒険!! スキー大会イベント2024-01-102024-01-24草属性キャラクターの素早さアップ, 闇属性キャラクターの防御力アップ
event_masters
idnameregistered_atrankdevicecountry_code
1杏奈2024-01-01 03:57:2541iOSJP
player_data
player_idevent_codeprogresscreated_at
1event_0071642024-06-02 03:57:25
player_event_progresses
player_idcreated_at
12024-01-01 03:57:25
player_login_logs

また、前回の記事で挙げたLLMのアップロードサイズ制限に対して、postgresデータベースを用いることでこの課題を克服できることを示すため、player_data を20万件、player_login_logs を7200万件用意しました。

それではMCPエージェントからこれらの仮データへ接続してみましょう。

MCPエージェントへのプロンプト

まず、エージェント自身のシステムプロンプトを定義します。以下のとおりです。

* あなたはPostgreSQLのデータベースにアクセスできるエージェントです.
* ユーザーからの指示に従ってデータベースにアクセスしてください.
* ユーザーはそのデータベースのデータを分析したいと思っています.
* 視覚化する場合には必ずHTML、Javascript、chart.jsを使用し、このときHTMLコードをmarkdownで出力してください.
* chart.jsのcanvasは高さ制限を200pxとしている点に注意してください.
* 複数のチャートを表現する場合には必ず別のhtmlとして分割して下さい.
* PostgreSQLによるクエリ結果は必ずHTMLとは別でjsonでも出力してください.
* また、ツールを使用するかどうかはエージェントが判断できます.

基本的な方針として、エージェントにはデータベースへ接続したうえでユーザーの希望を叶える動きを行います。ただし、視覚化についてはstreamlit標準のチャートを利用するための調整が困難なため、HTMLを生成する方式を採用しています。生成されたHTMLをstreamlitの components.v1.htmlでiframeに描画します。

それでは、データベースへの接続を確認するために以下のプロンプトを実行します。

postgresにはどのようなテーブルがありますか?

postgresデータベースへの接続に成功しました。また、それぞれのテーブルの特徴についても理解できました。

さらに以下のプロンプトで視覚化も確認しましょう

player_data テーブルからユーザー数をrankでビニングしてプロットしてください

player_data テーブルの構造を理解し、指定された rank でのビニングを実行しました。グラフから読み取れる内容についても説明しています。これにより、データベースへの正常な接続とチャートの表示機能が確認できました。

それでは本題です。ゲームデータを分析しましょう。

ゲームデータを分析

ここまでの準備でMCPエージェントからpostgresデータベースへ接続できることが確認できました。これを利用してゲームデータの分析が可能です。

しかしながら

前回の記事ではGeminiとの一問一答のような形で、各種データの可視化と分析を行っていきました。AIエージェントを活用する上で、データ分析の進め方には様々なアプローチが考えられます。個人的には、AIエージェントが自律的に分析を進めてくれることが理想です。

というわけで、一旦履歴をリフレッシュした状態で以下のプロンプトを実行しました。

postgresデータベースにはスマートフォンゲーム「AAA Heroes」に関するイベントとプレイヤーのデータが保存されています。 このデータを"イベントの盛り上がり"について分析したいと考えていますが、どのような分析をすればよいでしょうか。テーブル構造を確認し、分析手法を複数提案してください。

「AAA Heroes」というのはわたしがダミーデータを生成するときに使う仮名です。非常に曖昧な表現として”イベントの盛り上がり”を分析せよと指示します。5分程度の長考の後、テーブルデータ構造を確認するクエリの後に以下の回答がありました。

AIエージェントから5種類の分析手法が提案されました。それぞれの提案には対応するクエリが示されており、個別に確認できます。これらの提案は、プレイヤーのログイン数、イベント進捗度合い、参加率に基づいてイベントの盛り上がりを分析しようとしており、妥当な方針と言えるでしょう。

続けて以下のプロンプトを実行し、回答を得ました。

> 1. イベント期間中のログイン数の推移分析
についてグラフをプロットし、それについてあなたの意見を聞かせてください

提案された分析手法の1つに関してグラフをプロットさせ、それに対するAIエージェントの意見を確認することができました。「効果的なイベントサイクルがユーザーベースを維持・拡大している」「イベントがユーザーエンゲージメントの持続性に貢献している」など、かなり褒めてくれますね。改善提案も出してくるとはなかなか気が利いてますね。

続けて、次の分析手法についても質問しましょう。

> 2. イベント参加率分析
についてグラフをプロットし、あなたの意見を簡潔に教えてください。

「簡潔に」と指示したので、意見がかなり見やすくなりました。イベントのタイトルに含まれる文字列でその差異を分析しているようです。できれば event_masters.detail カラムの情報を見てほしかったところですが、そういった要望は最初のプロンプトで指示しておくべきでした。

こういった形で、AIエージェントから出てきた手法に対して、気になる点、確認すべき点を追加の質問で深く理解していくというのは非常に有用な使い方だと思います。残り3つの分析手法がありますが長くなってしまうので、以下のプロンプトで一旦まとめさせてみましょう。

ここまでの分析をもとに、スマートフォンゲーム「AAA Heroes」のイベントの盛り上がりについて簡潔にまとめてください。

2つの手法についてプロットと分析をしたので、その内容をまとめさせました。「特に成功しているイベント」「改善の余地があるイベント」として、現状と発展についてAIエージェントの意見を述べています。

さて、前回の記事でも最後に実行した以下のプロンプトで、次回イベントの提案を確認してみましょう。

次回イベントは 2025-05-17 からの開催を予定しています。どのようなイベントを行うと良いでしょうか?

非常に長い文章が出力されました。「命名」「内容」「効果」「参加促進」ではどのようなイベントを実施すべきかを簡潔にまとめています。まさか「予測される結果」まで提示してくるとは思いませんでした。この通りに実施してDAUが5%増加するのであれば素晴らしい限りです。しかしながら、「2.イベント内容の提案」で「水属性と月属性の新キャラクターを期間限定で実装」とありますが、新規属性の実装などそう簡単にできるものではないと思います。そういったところの取捨選択は必要になるでしょう。AIエージェントに対しては、ある程度方針があるなら(工数を短く等)事前に提示しなければなりません。

ただ、AIエージェントがデータを見てこういった提案をしてくるというのは非常に便利で参考になります。

最後に

今回はAIエージェントからpostgresデータベースへ接続するため、Model Context Protocol (MCP)に基づいてstreamlitとmcp-agentで環境を構築しました。先人たちが構築したフレームワークとプラグインによって、かなり手軽に実装することができました。

AIエージェントがデータベースのデータを参照できるようになったことで、データ分析の幅が大きく広がったと思います。常に参照できる状態にしておけば、いつでもその洞察を得ることができます。ただ、本来データ分析基盤としてはpostgresデータベースにクエリを実行するべきではなく、AWS S3+AthenaやBigQuery、Snowflakeなどを利用すべきでしょう。すでにそれぞれに合ったMCP Serverも公開されているので、今回紹介した方法でも問題なく実行できます。

MCPはまだまだ使い道が広がりそうです。

中村翔吾 
ファンカルチャー・デザイン学部 
個人でゲーム開発をしている。うさぎ2羽の世話係。

ソーシャルゲームのデータ分析にGeminiは使えるのか?実験で効果を検証

0

自宅のLANケーブルを6Aに敷設し直したいと思っています。ファンカルチャー・デザイン学部 中村です。

最近のLLMはcsvをアップロードすることでそのデータを分析することができます。特にClaudeのanalysis toolが強力なようですが、ChatGPTでもGeminiでも同様の分析ができてしまいます。実際にどのような分析ができるのか試していきましょう。

ゲームデータの分析

わたしはゲーム部門に所属しているので、ソーシャルゲームを運営しているとユーザーの行動に関する様々なデータが集まることがよくわかります。しかしながら、多数のデータをどのように分析すればいいのか、予測と合っているか、効果測定は正しいのか、活かせているか、等はなかなか難しいところがあります。それらについてLLMから何らかの提案や洞察が得られるとしたら、それは素晴らしいことでしょう。

仮データを用意する

ソーシャルゲームのそれらしい仮データを用意します。今回は特にソーシャルゲームによく見られる「イベント」に関してデータを用意し分析したいと思います。分析されることを考慮してある程度偏りが出るようなデータをPythonで生成します。

まず、イベントの基本情報として event_master.csvplayer_data.csv をよくありそうな形で定義します。event_master には2024年1月から2025年5月までのイベント情報を21件、player_dataにはユーザー情報を100件用意しました。

codenamestart_atend_atdetail
event_001大冒険!! スキー大会イベント2024-01-102024-01-24草属性キャラクターの素早さアップ, 闇属性キャラクターの防御力アップ
event_002毎日 節分イベント2024-01-312024-02-19草属性キャラクターの素早さアップ, 火属性キャラクターの素早さアップ, 雷属性武器の出現率大幅アップ
event_003大乱戦!! ホワイトデーイベント2024-02-262024-03-15草属性キャラクターの攻撃力大幅アップ, ショップの全商品半額, 獲得経験値2倍, 消費アイテムドロップ率増加
event_master.csv
idnameregistered_atrankdevicecountry_code
1杏奈2024-01-01 03:57:2541iOSJP
2大輝2024-01-01 03:20:4430iOSJP
3Nora2024-01-01 12:17:1236AndroidTW
player_data.csv

さらに、イベントに参加したユーザーの進捗データとして player_event_progress.csv を500件、ユーザーがログインした履歴データとして player_login_logs.csv を4,000件それぞれ用意しました。

player_idevent_codeprogresscreated_at
1event_0071642024-06-02 03:57:25
2event_0041202024-04-08 03:20:44
player_event_progress
player_idcreated_at
12024-01-01 03:57:25
12024-01-04 03:57:25
12024-02-02 03:57:25
player_login_logs

この4つのcsvをGeminiにアップロードしてイベントデータ分析を行います。

データ分析を開始

今回はGemini Advancedの2.0 Flashを利用します。

csvのアップロードとデータ構造の説明と簡単なプロット

csvをGeminiのプロンプト入力画面にドラッグアンドドロップすればアップロードできます。同時にこのデータでどのような分析をしたいのか伝える必要があります。また、何度か試した結果、CSVにどのようなデータが格納されているかの説明も必要だと感じました。そうしないと、以降のプロンプトの意図が伝わらないことが多々ありました。今回はcsvをアップロードしつつ以下のプロンプトを入力しました。

これはスマートフォンゲームに関するイベントとプレイヤーのデータです。
それぞれのcsvには以下の情報が含まれています。
* event_master: 過去に開催したイベント情報
 * code: イベントの識別コード
 * name: イベント名
 * start_at: イベント開始日
 * end_at: イベント終了日
 * detail: 開催されたイベントの特徴をカンマ区切り
* player_event_progress: プレイヤーのイベントへの参加情報
 * player_id: レコードの対象プレイヤーID
 * event_code: 参加したイベントの識別コード
 * progress: イベントの進捗パラメータ
 * created_at: そのイベントに参加した日時
* player_data: 各プレイヤーの情報
 * id: プレイヤーの識別子
 * name: プレイヤー名
 * registered_at: ゲームへの登録日
 * rank: プレイヤーの強さを表すランク
 * device: プレイヤーの使用端末
 * country_code: プレイヤーの国コード
 * birthday: プレイヤーの誕生日
* player_login_logs: 各プレイヤーがログインした際の履歴
 * player_id: 対象のプレイヤーID
 * created_at: ログインした日時
 これを分析したいと思います。

 まず、プレイヤーの人数を国別でプロットしてください

すると、Geminiの分析のあと棒グラフが表示されました。表示された棒グラフはマウスオーバーすると詳細情報を確認できるようです。

また、「コードを表示」ボタンをクリックするとPythonコードが表示されました。Pythonコードは主にcsvデータの構造確認、pandas を利用した国別での件数カウント、altair を利用したプロットと分割されて実行されているようです。

import pandas as pd

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)

# Read the CSV files into Pandas Dataframes
df_player_data = pd.read_csv('player_data.csv')

# Display the first 5 rows of each DataFrame
print(df_player_data.head().to_markdown(index=False, numalign="left", stralign="left"))

# Print the column names and their data types for each DataFrame
print(df_player_data.info())
# Count the number of players by country
player_counts_by_country = df_player_data['country_code'].value_counts().reset_index()
player_counts_by_country.columns = ['country_code', 'num_players']

# Print the first 5 rows of the dataframe
print(player_counts_by_country.head().to_markdown(index=False, numalign="left", stralign="left"))

# Print the column name and their data types
print(player_counts_by_country.info())
import altair as alt

# Create the bar chart
chart = alt.Chart(player_counts_by_country).mark_bar().encode(
    # Set `country_code` to x-axis and set the label as 'Country Code'
    x=alt.X('country_code', title='Country Code'),
    # Set `num_players` to y-axis and set the label as 'Number of Players'
    y=alt.Y('num_players', title='Number of Players'),
    tooltip=['country_code', 'num_players'] # Add tooltip
).properties(
    title='Number of Players by Country' # Set the title of the chart to 'Number of Players by Country'
).interactive() # Make the chart Interactive

# Save the chart
chart.save('number_of_players_by_country_bar_chart.json')

ひとまず入力したcsvを理解してプロットまではできているようです。

MAU(Monthly Active User)をプロット

それでは次に、運営タイトルではよく確認される MAU をプロットさせます。追加で以下のプロンプトを入力しました。

player_login_logs をもとに各月のユーザー数をプロットしてください。これをMonthly Active User(MAU)と定義します。

再度Geminiの分析が始まり、その後以下のプロットが表示されました。

プロットの下部メニューには「表で表示」「グラフをカスタマイズ」「グラフを画像としてコピー」「画像としてダウンロード」「JSONファイルを保存」の機能が搭載されています。「グラフをカスタマイズ」するとグラフの種類やタイトルを変更できます。

イベント参加率を考える

ここまでの操作で視覚化の使い方がおおよそ理解できたので、イベントデータの分析を始めます。

まず、どの程度のユーザーがイベントへ参加したのか確認しましょう。その際に単に参加した人数を確認するだけではなく、アクティブユーザーのうち、何%が参加したかを示す参加率を考えます。各イベントには期間が設定されているため、その期間中にどれくらいのユーザーがアクティブだったのか、そしてそのうち何人が参加したのかをプロットします。

まず、以下のプロンプトでイベント期間中にアクティブだったユーザー数をカウントします。

event_masterにはstart_atとend_atが指定されており、イベント開催期間が設定されています。このイベント開催期間にログインしたユーザーをplayer_login_logsを参照してプロットしてください。X軸はevent_masterのcodeとします。これをEvent Active User (EAU)と定義します。

次に、実際にイベントに参加したユーザー数をカウントします。イベントへ参加するためにはログインする必要があるので、参加ユーザー ≦ アクティブユーザーとなるはずです。以下のプロンプトを実行します。

次に、player_event_progressのデータから各イベントへのユニーク参加者数をプロットしてください。これをEvent Participants User(EPU)と定義します。

それでは参加率をプロットしましょう。参加率は、イベント開催期間中にログインしたユーザー数に対する、実際にイベントに参加したユーザー数の割合で計算できます。そのため、各イベントに対して 参加率 = EPU / EAU となります。以下のプロンプトでプロットします。

各イベントに対して EPU / EAU を計算し、アクティブだったユーザーがどの程度の割合でイベントに参加したかを表すプロットを生成してください。これをイベント参加率とします。

以上のように各イベントの参加率をプロットすることができました。ここまで進めて感じたことですが、EAU・EPUというのはその場で思いつきで作った単語であるにもかかわらず、Gemini側がその定義を理解していることに驚きました。

さて、参加率のグラフを見ると、ところどころ異様に低いイベントがあるようです。どのような特徴があるでしょうか。Geminiに聞いてみましょう。

ところどころ参加率の低いイベントがあるようです。参加率の低いイベントの特徴を調べるためにはどうすればよいですか?

聞いてみると、以下のようにGeminiは参加率の低いイベントを列挙しつつその共通点を解説しました。

共通点だけ見れば確かにその通り、「特定のキャラクター属性や武器属性に焦点を当てている」「ショップの割引や経験値ブーストなどのボーナス」は参加率の低いイベントに含まれています。しかしながら参加率の高いイベントも同様の特徴を持っています。そうなると、これらの特徴だけで単純に参加率が低いとは確定できません。もっと具体的な数値が必要です。

特徴量エンジニアリング

というわけでGeminiに対して特徴量エンジニアリングを指示しましょう。今回はイベントのdetailカラムに対してワンホットエンコーディングを行い、参加率に対する相関を出力します。ワンホットエンコーディングについてはGoogle Developersで詳細に解説されています。以下のプロンプトを実行します。

event_masterのdetailには開催イベントの内容をカンマ区切りで入力しています。このイベント内容についてワンホットエンコーディングしてください。そのうえで、各イベントの参加率に対する相関を教えて下さい。

今回は分析に時間がかかったようですが、detail に含まれる特徴と参加率の相関を出力しました。また、その傾向についても解説されています。

(ダミーデータに基づいた結果ですが)これによってどのようなイベントがユーザーに好まれているのかを理解できるようになります。Pythonコードを見るとpandasを使用してワンホットエンコーディングを行っているだけですが、非エンジニアにはなかなか理解が難しいでしょう。問いかけるだけでそれを実行してくれるというのはなかなか素晴らしい機能ですね。

効果測定

さて、実は20回分のイベントには火・水・草・雷・闇・光の6属性のみ入力し、最後の21回目のイベントには新しい”空属性”を追加してあります。これは新たな属性を追加することにより、そのイベントの参加者数や参加率にどのような影響を与えるか、効果測定を行うためです。

codenamestart_atend_atdetail
event_021春爛漫 新生活応援キャンペーン2025-04-262025-05-12空属性キャラクターの攻撃力大幅アップ, 空属性武器の体力アップ, 空属性武器の攻撃力アップ, 獲得経験値2倍

特に詳しい説明はせず、シンプルに以下の質問をしました。

直近で開催された event_021 では新たに "空属性" が追加されました。新たな属性を追加したことで、イベントの参加者数や参加率に対してどのような影響を与えたでしょうか。

Geminiは event_021 の参加率と参加者数を過去のイベントと比較したようです。その結果、参加率が高いことから、新しい空属性の追加はポジティブな影響を与えたと判断できたようです。こういった効果測定にLLMを利用するのは有用な使い方ですね。

次回イベントの提案

LLMの活用方法の一つとして、過去の情報に基づいて新しい提案を生成することが挙げられます。今回のイベントデータ分析においては「次にどんなイベントを開催すればよいのか」という提案が成されると良いでしょう。ユーザーにポジティブな印象を与え続けるようなイベントを企画するのは非常に大変な作業です。そこでGeminiに協力を仰ぎましょう。

これまでの分析を踏まえて、次回 event_022 はどのようなイベントを開催するとよいでしょうか。おすすめを提示してください。

まずGeminiはこれまでの分析を要約しました。

そして要約をもとにして空属性をメインとしたイベントを提案してきました。「ショップの消費アイテム半額、消費アイテムドロップ率増加、獲得経験値2倍などの高参加率に繋がるボーナスを全て盛り込む。」というのは少々欲張りすぎでしょうか。「初心者・復帰勢向けの施策」については重要な項目ですね。

イベント名についても提案がありました。イベント期間や告知方法も重要な検討事項です。

ただし、空属性が好評だったからといって、安易に空属性ばかりを推すのはイベントの流れとして好ましくない可能性もあります。したがって、これらの提案を鵜呑みにするのではなく、効果がありそうな要素をいくつかピックアップして採用するのが賢明でしょう。とはいえ、アップロードしたデータに対して、壁打ちのように質問を繰り返しながら分析を進め、未来の提案を得るという一連の流れは、まさにLLMならではの活用方法と言えるのではないでしょうか。

実はちょっと困ったこと

今回Geminiにアップロードしたcsvは player_data 100件、player_event_logs 4,000件で 合計120KB程度です。実は最初に作成したデータは player_data 500件、player_login_logs 100,000件で 合計3MBほどありました。Geminiの公式ヘルプには、1ファイルあたりの上限が100MBと記載されていたため、合計3MB程度であれば問題ないと判断していました。しかしながら4回ほどのプロンプトでエラーが発生しそれ以降の質問を受け入れてもらえなくなりました。そのため、なんとか120KB程度までデータサイズを削減したところ、今回のすべてのプロンプトを実行できました。アップロードしたファイルに対する分析は、できるだけ1度のプロンプトで完結させる方が良いのかもしれません。

最後に

今回はLLMによるデータ分析を試すためにダミーデータを用意して、いくつかのプロンプトを指示してデータ分析を行いました。MAU等一般的な指標から独自に定義した指標まで、適切に説明すれば理解し、指示した通りのプロットを表示する、という点について非常に役立つ機能だと思います。様々な分析結果から未来を提案させるというのも参考になります。

ただし、最後に述べたように、LLMにはどうしてもデータサイズの制限がある点は考慮すべきでしょう。今回はダミーデータのサイズを切り詰めて対応しましたが、実際に運営しているタイトルのデータを分析しようとしたとき、csvにしても100MBに収まるようなサイズではないでしょう。したがって、大規模なデータを分析する際には、CSVをアップロードするのではなく、直接データベースに対してクエリを実行してもらう方が効率的かもしれません。

そのような場合に活用できる仕組みが、Anthropic社から提案されています。次回、MCPを利用したデータ分析に関して記事をまとめたいと思います。

中村翔吾
ファンカルチャー・デザイン学部
個人でゲーム開発をしている。うさぎ2羽の世話係。

『伝わる技術』の紹介

0

今回は、アピリッツの知識共有サイト「ナレッジベース」から、
プロジェクトマネージャーを担当している神 宏伊(ジン ヒロヨシ)さんの記事をご紹介します。
是非最後までご覧ください!(初版:2025年5月6日)

概要

社会人になってからずっと、人とのコミュニケーションに悩んできました。

特にプロジェクトマネージャーを担当するようになってからは、
「自分では伝えたつもり」でも「相手に伝わっていない」ということがよく起こりました。

そのせいで、期日に間に合わなかったり、要件定義が中途半端になったりして、
社内メンバーやお客様に迷惑をかけてしまうことも何度かありました。

そこで今回は「相手に伝わらない」を減らすために役立った会話の工夫と、
私が普段から意識している3つのポイントをご紹介します。

【動いてほしいこと】を最初に伝える 

「何をしてください」「助けてほしい」など、
相手に動いてほしいことをできるだけ短く伝えることで、相手の興味や関心を引くことができます。

興味・関心が持てれば、その後の説明も聞いてもらえるようになり、結果的にこちらの意図が伝わります。

たとえば、次のように伝えると「緊急性」と「やってほしいこと」が明確になります。

  • 「助けてほしい。いつまでに〇〇が必要なんです。」
  • 「〇〇をお願いします。期限は〇月〇日です。」

この技術はメールでも使えます。

  • 【緊急】◯◯で問題が発生。至急確認願います
  • 【見積依頼】◯◯(4月1日まで)

私自身もそうでしたが、最初は文章をきれいに書こうとしすぎて長くなることが多かったです。

たとえば、「動いてほしいこと」の前に概要や理由、経緯を説明し、最後にお願いを書くようなパターンです。

するとどうなるか——

  • 緊急性や期限が相手に伝わらない
  • 話が長くなり、集中力が切れてしまう
  • 前提を忘れられ、もう一度説明する羽目になる
  • 結果、忙しい人から返事がもらえなくなる

このようにデメリットの方が多くなってしまいました。

だからこそ、まず「相手に動いてほしいこと」を最初に伝えることが大事だと考えています。

質問は複数重ねない

次のように、質問を続けてしまうケースはよくあります。

「AAについてどうしたら良いでしょうか?
たとえば、BBになったときはABとなるでしょうか?」

このように質問をいくつも重ねると、相手は複数の回答をしなければなりません。
しかし実際には、

  • 前提や最初の質問を相手が忘れてしまう
  • 質問の数が多くなり、回答するのが負担になる
  • 会話が複雑になり、お互いに混乱する

といった問題が発生します。

たくさん質問すれば効率的に思えますが、結局は非効率になってしまうことが多いのです。

そこで、質問は必ず1つずつ行うように心がけましょう。

その方が相手も答えやすく、会話もスムーズに進みます。

一度の説明は最大3つまでに絞る

最後に、人間が一度に記憶できる情報の量についてお話しします。

個人差はありますが、コミュニケーションを改善するための自己啓発書などでは、
「伝える内容は多くても3つまでにした方がよい」とよく言われています。

試しに「説明は3つまで」とGoogle検索すると、こんな記事が並びます。

  • 説明の上手な人が「3つにまとめる」を徹底する理由
  • なぜ、プレゼンの達人たちは「3」の魔術にこだわるのか?
  • 「プレゼンのポイントは3つにまとめる」。説得力を増す効果…

「3つにまとめるのは古い」といった意見もありますが、
まず3つに絞って話せるようになってから次のステップに進めばよいのです。

私自身もこれにならい、常に3つまでを意識しています。

■ 使用例

プロジェクトの進捗管理でも、1人が抱える課題は最大3つまでと決めています。
課題が片付いたら、次のタスクを追加する形です。

このルールにより、情報の整理やチーム内のやり取りがとてもスムーズになりました。

まとめ

今回ご紹介した3つのポイントを意識すると、相手にしっかり伝わるコミュニケーションができるようになります。

  • 【動いてほしいこと】を最初に伝える
  • 質問は複数重ねない
  • 1度の説明は最大3つまでに絞る

ぜひ、日々の仕事や会話で試してみてください。

おわりに

おわりに、コミュニケーションや自己啓発のヒントを分かりやすく学べるおすすめチャンネル・動画をご紹介します。

フェルミ漫画大学

学識サロ

コミュニケーションや人生に悩むことがあったときに、わかりやすく聞けるYoutubeチャンネルです。

神 宏伊(ジン ヒロヨシ)
デジタルサービスオファリング学部 エンジニア 
掃除得意なエンジニア。プログラムの掃除・整理や、日常生活での掃除・整理何でもござれ。 
座右の銘は「汚物は消毒だ〜!」

ーー神 宏伊さん、ありがとうございました!

アピリッツでは自分が得た情報や技術を社員間で積極的に共有し合い、それらを吸収しながら各々のスキルアップを目指しています。

アピリッツに少しでも興味をお持ちいただけた方、エントリーお待ちしております!

潜入!アピリッツのパパランチ会

0

アピリッツでは、子育てをしながら働くパパママ社員向けに様々な取り組みを実施しています。
今回は、その取り組みの一環として、先日社内で開催されたパパランチ会の様子をご紹介します!(2025年4月取材)

パパママ社員の声を制度へ

アピリッツでは、子育て経験者・子育て中の社員が主体となって、

定期的に意見交換の場を設け、会社独自の育児支援制度の検討や策定を行っています。

その取り組みの一環として毎月行われているパパママ社員のランチ会で、初の試みとなるパパ社員限定のランチ会が開催されました!

今回は、そんなパパランチ会に潜入してきました!

パパランチ会へいざ潜入!

左から、伊藤さん、鳴瀬さん、廣瀬さん、深澤さん

ーー皆さんの自己紹介をお願いします!

PL学部でスマホエンジニアをしています、伊藤です。
ちょうど1年前にアピリッツに転職してきました。
1歳9か月の男の子のパパをしています。
子供がよく歩くようになり、道草を食って登園に時間がかかってしまうことが最近の悩みです。笑

FG学部でプランナーをしています、深澤です。
子供は6歳と2歳の男の子がいます。
このランチ会の2日前にちょうど下の息子が誕生日でした!

伊藤さんと同じPL学部でスマホエンジニアをしています、鳴瀬と申します。
今回初めてランチ会に参加します。
今年の9月に子供が生まれる予定で、エコーの結果を見たり、どのベビーカーを買うか調べてみたり、
生まれてくるのが今からとても楽しみです!

SS学部でWebエンジニアをしている廣瀬と申します。
自分は今年の8月に男の子が生まれる予定です。
何をしたらいいのか分からないことが多くてドキドキなので、皆さんからアドバイスをいただきたいと思っています!
よろしくお願いします!

ーーありがとうございます!今回のパパ限定ランチ会は、どういう背景で開催に至ったのでしょうか?

社内のパパママ社員が集まって、毎月ランチ会を行ってはいるのですが、
「パパ同士の交流ってそもそも社内・社外問わず少ないよな~」と思ったことがきっかけで、
今回パパ限定のランチ会を実施することになりました!

ーーそうだったんですね!素敵な企画です!

今回、初めてのご参加になる鳴瀬さんや廣瀬さんは第一子が生まれるということで、色々と不安なこともあるのではないでしょうか・・?

子供が生まれて成長したら、送り迎えをしつつ、家でお世話をしながら仕事を両立できるか不安です・・

そうですね~。
でも、アピリッツには、子育てをしている社員の方々が意外といるおかげで、
子供事での対応の理解やそれに伴う業務のサポートが比較的あると思うので心配しなくても大丈夫ですよ。

周りに子育てしている人がいると、今日のように情報共有もできるし、ちょっとした雑談もできて気持ちも楽ですよね。
子供服で質問なんですが、洋服を選ぶ上で注意した方がいいことはありますか?

着替えがしやすい服を選ぶことですかね。
すぐ服を汚すので、1日に2・3回洗濯をするんですが、
脱がせにくい洋服だと、親も大変ですしね・・
あとは、親が着させたいと思っても着てくれないので、子供が着たい洋服を着させてます。笑

ーー取材を終えた後も和やかな雰囲気で盛り上がっていたパパランチ会。皆さんご協力いただきありがとうございました!


終わりに

働くパパママ社員が多いアピリッツでは、今回のランチ会の他に、

社内のSlackチャンネル「#アピリッツ-パパママ交流チャンネル」で子育てに関する相談や情報交換等を積極的に行っています。

実際に、パパママ社員の声がきっかけで生まれた、追加でリモートワークを取得することができるパパママリモート制度も現在試験運用中です。

そんな仕事も子育ても妥協しないアピリッツのパパママ社員について、他の記事でも取り上げていますので、ぜひチェックしてみてください!

お客様とチームを結ぶ架け橋。その裏側とは?~PM対談インタビュー 後編~

0

前回に続いて、アピリッツでプロジェクトマネージャー(以下、PM)として活躍している川畑さん、志賀さんの対談インタビューの続きをお届けします。
後編の今回は、PMとして大切にしていること、今後PMに求められることなど、深堀してきました!(2025年3月取材)
前回の記事はこちらからご覧ください!

チームを動かし、お客様と真正面から向き合う

ーー複数の案件のPMを担当されてきたお二人が、PMを担当していて意識していることはありますか?

(川畑)一番はメンバーとのコミュニケーションですね。

メンバーそれぞれが今どんな状況なのか、抱えている問題は無いか、精神的に大丈夫か等、

色々な側面におけるメンバーの状況を、PMである私が把握する必要があると思っています。

ただ、自分一人で20人~30人のメンバーの状況を把握することには限界があるので、

チームをユニットに分割して、それぞれのユニットのリーダーに、自分たちのメンバーの管理・報告をしてもらっています。

そうやって、メンバーの協力のおかげで、PMである自分がチーム全体を把握することができているんだと思います。

(志賀)自分は、お客様との関係性をどう築いていくかを一番意識しています。

そのために、お客様のご要望に対して常にイエスマンの立場にいるのではなく、

実現が難しいことにはしっかりその旨をお伝えして、着実に案件を成功させることが、お客様との信頼関係を構築するために重要だと思っています。

そうすることで、お客様とワンチームで案件を取り組むことができ、その後も継続した関係性を築くことができると思います。

川畑)自分も志賀さんと同じく、お客様と良い塩梅での関係性をどう持つかは重要だと思います。

どうすればお客様が喜んでくれて、かつ開発メンバーに負担をかけずに案件を成功させることができるかを一番に考え、

時には直接お客様のところへお伺いして、ひざを突き合わせて提案をしに行ったり、最大限の努力をしています。

ちなみに前職では、顧客折衝から開発まで全ての工程を自分一人で担当して、とても大変な思いをした経験があるので、

そんな思いをメンバーにさせたくない、という思いも原動力になっていると思います。

ーーお二人とも、お客様とメンバーの視点に立って、色々な工夫をされていらっしゃるんですね。

お客様との折衝では、具体的にどのような提案をされているんですか?

(川畑)そうですね。お客様のご予算とリクエストにずれがあると感じたら、

「こういう機能の方が使いやすいのではないか」と提案して工数を調整したり、

不要だと感じた機能はしっかりお客様にその旨を説明して、サービスがリリースしてから追加機能として開発しないかと提案したりしています。

お客様のご要望に全て断ってしまうとお客様との関係性が悪化してしまうので、どう折り合いをつけていくかは肝になってきますね。

(志賀)自分も川畑さんのように、「これはできないけど、こういう形であればどうですか?」と代案を出して交渉する等、

お客様にもしっかり満足してもらえるように工夫をしています。

ーー企画から運用保守まで一気通貫で行っているアピリッツだからこそできる提案ですね!

これから求められることは、”AIを活用する力とコミュニケーション能力”

ーー今後、PMにはどのようなことが求められていくと思いますか?

(川畑)最近AIが進化・加速をしている中で、どんどん作業の効率化が進んでおり、

PM業の中でも、スケジュール作成や提案、リスクヘッジ等も、今後はAIに対応・補助してもらう時代になるかと感じています。

その中で、そういった新たな技術を使いこなす力、そしてそれを精査して判断していく決断力が求められてくると思います。

逆にAIの技術がより進んでいくにつれて、AIにはできないであろう、

クライアントとの関係構築やコミュニケーション能力は、今後ますますPMに求められてくるとも思います。

提案内容はAIを活用しながら作成し、いかにそれを上手くお客様に伝えることができるか、これこそが大事になると思います。

(志賀)PMとして求められることですか・・これは自分も絶賛模索中です。笑

自分もPM業についてまだまだ勉強中ではありますが、

少なくとも、周りの先輩や同期、後輩、部長の方々とのちょっとした雑談が、PMとしての今の自分に繋がっていると思います。

ーーAIが進化していく中で、コミュニケーション能力、自分から情報を積極的に掴みに行く力がより重要になってくるんですね。

AIのお話が出ましたが、、お二人は業務の中でどのようにAIを取り入れていますか?

(川畑)エンジニアに聞くまででもない技術的な内容をChatGPTに聞いています。

業務提案でもAIが使えそうなので、そのへんも勉強しないといけないなと感じています。

(志賀)どう調べていいかが分からないとき、かつブラウザで調べるにもフックがなさすぎるときに、

足掛かりになる単語をAIに聞いてみたり、たまにコーディングの仕方を聞いてみたりして活用しています。

QCD管理から大規模案件へ

ーーお二人の今後の目標や、伸ばしていきたいスキルがあれば教えてください。

(川畑)生産管理の基本的な考え方であるQCD(品質・コスト・納期)の管理を、今以上にできるようにしていきたいです。

エンジニアのパフォーマンスを上げるにはどのように動いてもらうべきか、与えられた予算の中でどれだけ効率よく案件をこなしていけばよいか、

クライアントの要望をどれだけコスト・期間内で叶えることができるか等、

常に流動的に動いていく案件の中で、どれだけ素早く判断・行動ができるかがPMの要だと思っているので、

これらの考え方を常にアップデートしていかなければいけないと。

ちなみに、飯場部長(SO学部部長)から紹介してもらった『仕組み化がすべて』という書籍はPMとしてとても参考になったのでおすすめです!

(志賀)より規模の大きい案件のPMとして働けるようにすることが今の目標です。

スキル面では、PMとして、調整能力、中長期的なマネジメント能力等を伸ばしていきたいと思っています。

ーーお二人ともありがとうございました!

アピリッツでは、更なる事業成長のため、プロジェクトマネージャーを募集しています。

顧客折衝、要件定義等の上流工程からサービスのリリースまでを一気通貫で提供できるアピリッツで、

エンジニアとしての成長の可能性をもっと広げてみませんか?

ご興味がございましたら、ぜひ採用HPからご応募ください。ご応募お待ちしております。

チームを動かしお客様と共にサービスを作りだす。~PM対談インタビュー 前編~

0

今回は、アピリッツでプロジェクトマネージャー(以下、PM)として活躍する川畑さん・志賀さんにインタビュー!
前編では、二人のこれまでのキャリアと、やりがいについてご紹介します!(2025年3月取材)

メンバー紹介

「やりたいようにやっていいよ」色々な選択肢がある会社が、ここだった。

ーー川畑さんから、アピリッツに入社するまでの経歴を教えてください。

(川畑)大学時代にPHPアルバイトとして入社した会社に就職して、

ポータルサイトやコーポレートサイト等の一般的なWEBサイトの構築や、EC・業務WEBシステムの開発を行っていました。

10人以下の小さな会社だったので、入社してからは徐々にPM関連や営業等、多岐にわたってWEB制作に携わっていました。

そこで3年間働いて、アピリッツに入社したという流れになります。

ーー大学時代からPHPエンジニアとして活動されていたんですね!川畑さんは学生時代バンド活動も行っていたんだとか。

(川畑)そうですね。5~6年ギターメンバーとしてバンド活動をしていました!

そのときに自分が所属するバンドメンバーのWebサイトを作ろうということになって、HTMLの本を買って読んだんです。

そしたら「楽しい!」ってなって。笑

そこからどんどんのめり込んでいって、PHPという言語があることを知り、前職でPHPエンジニアとしてアルバイトに参加していました。

ーーきっかけはバンド活動のWebサイトからだったんですね。初めての転職活動でどうしてアピリッツに入社を決めたんですか?

(川畑)アピリッツなら、色々な選択肢があると感じたからです。

当時は、PMやエンジニア等、色々なことを経験していたため、最終的に自分が何をやりたいのかまだ定まっておらず悩んでいたのですが、

アピリッツの面接で話を聞くにつれ、色々なことができる会社なんだと感じました。

その時の面接官の和田さん(社長)と利夫さん(鈴木部長/現SS学部部長)に、

「やりたいようにやっていいよ」と言ってもらったことが、今でも印象に残っています。

ーー懐の広さを感じますね!笑 代わって、志賀さんは新卒でアピリッツに入社されたんですよね?

(志賀)そうですね。自分は情報系の大学で初めてプログラミングに触ったことがきっかけで、

就職活動中はIT企業のエンジニアを中心に会社を探していました。

当時は、若手のうちから色々な経験ができそうな中小企業やベンチャー企業を中心に企業を探していて、アピリッツを見つけました。

ーーその中で、どうしてアピリッツに入社を決めたんですか?

(志賀)面接官の方たちの雰囲気がとても魅力的だったからです。

他の企業の面接もいくつか参加しましたが、アピリッツの面接を通して、この会社で自分も一緒に働いてみたいと思いました。

入社して7年経った今でも、先輩・同期・後輩含め自発的に動く人が多くて、一緒に働いてる人たちに恵まれているなと感じます。

一人ひとりの個性を生かしたメンバーアサイン

ーー入社してから今までどんな案件を担当されてきたんですか?

(川畑)車両メンテナンスサービスの管理画面及び会員用マイページの構築におけるPMや、

こどものためのイベントやお知らせなどを掲載する官公庁のポータルサイトとそのCMS構築におけるPMを担当してきました。

基本的にどの案件も要件定義からアサインされて、リリースまでのスケジュール調整や仕様・設計の作成を行ってきましたね。

今は、20人~30人のチームメンバーで、

医療系人材紹介のWEBサイト及びその管理システムの構築を担当しています。(開発言語はRails、インフラはAWSで構築予定)

(志賀)私は現在3つの案件のPMを担当しています。

1つ目は新卒の時から関わっているECサイトの保守運用案件(開発言語:RoR インフラ:AWS)、

2つ目はスマホアプリの保守運用案件(開発言語:Kotlin/Swift)、3つ目は新規システムの開発案件(開発言語:PHP)です。

ーーお二人ともPMとしてチームマネジメントも行われているとのことですが、チームメンバーのアサインは、どのようなところを基準に決めているんですか?

(川畑)そのメンバーの得手不得手を見て判断しています。

エンジニアでゴリゴリ開発できる人は難しいところ、そうじゃない人は簡単なところを担当してもらう、とかですね。

そのために一人ひとりの強みや苦手なところを自分が把握しておく必要があるので、チームメンバーとの会話は密に行っています。

前職では自分よりかなり年が離れた人が多くてコミュニケーションを取ることが大変だったこともあったのですが、

自分と同年代の人が多いアピリッツは、かなりコミュニケーションが取りやすいなと感じます。

同年代のチームメンバーと一緒の案件に携われることもアツいですね!

(志賀)それぞれ私の他に1人~3人のメンバーが参画しているのですが、

保守案件は優先度の高いところを自分が対応して、他の細かい部分はメンバーにある程度任せる等、

できるだけ一人ひとりが自分で考えて動けるように、エンジニアとしての成長に繋がることを意識してアサインしています。

お客様と二人三脚でサービスを作り上げる。

ーー色々な案件でPMを担当されてきたお二人にとって、「PMのやりがい」とは何ですか?

(川畑)やはりリリースされた時に一番やりがいを感じますね。

お客様と我々がやりたかったことが形になって、世の中に公開されるときが一番嬉しいです。

また、リリースのために、チームメンバー一人ひとりが責任感を持ってプロジェクトに向き合っている姿を見ると、

チーム全員が同じ方向を向いていることに、PMとしてとても嬉しいなと感じます。

(志賀)お客様とのMTGで相手方から感謝の言葉をいただけるとやりがいを感じます。頑張ってよかったなと。

そのためにも、当たり前ですが、期限を守ったり、お客様からのリクエストにできるだけお応えしたり、

明るく元気に話す等、基本の積み重ねでお客様との信頼関係を構築して長期的に関係を作っていくことが大切だと感じます。

ーーお二人、とても素敵なお話をありがとうございます!最後に、大型案件や複数案件で多忙なお二人のリフレッシュ方法を教えてください!

(川畑)趣味の料理やゲームをしたり、休日に家族と過ごしてリフレッシュしています。

前職がかなり忙しかったので、オンとオフの切り替えを意識するようになりました。

(志賀)自分は平日に行きつけのバーで知人とお酒を飲みながら雑談して息抜きをしています。

休みの日はロードバイクに乗って趣味のサイクリングをして過ごしています。

(川畑)サイクリングとは違いますが、実は大学生の時に原付に乗って日本中を旅していました。

ちなみに自分もお酒が好きで、一時期家にビールサーバーを借りてましたよ!笑

ーー意外なところに共通点が!笑 お仕事もプライベートも充実させているお二人

次回はPM対談後半戦!PMとして大切にしていること、今後PMに求められることなどを深堀していきます。次回のアピスピもお楽しみに!

中途ランチ会ー深まる中途同期のつながりー

0

実はアピリッツ、在籍する社員のうち、中途入社の社員数が、新卒入社の社員よりも多いんです!(参照:データで見るアピリッツ
今回は、そんな中途入社の社員が多いアピリッツで、定期的に実施している「中途ランチ会」についてご紹介します!

1.中途ランチ会って?

中途社員は新卒社員と違って、長い時間をかけて会社に慣れたり、同期同士のつながりを構築することは難しいですよね。

また、新しい環境に慣れることができるか、不安に感じる方も多くいらっしゃるのではないでしょうか。

そこでアピリッツでは、同じタイミングで入社した中途入社社員、いわゆる「同期」同士が、

気軽に交流し、つながりを深めるきっかけ作りとして、「中途ランチ会」を定期的に開催しています!

日々の業務から少し距離を置いて、リラックスした雰囲気でランチを楽しみながら、コミュニケーションを深めるこのイベント。

今回は、そんな中途ランチ会についてご紹介します!

中途社員だけでなく、新卒社員向けの新卒ランチ会も開催しています!
こちらの記事もぜひご覧ください。

2.実際にランチ会に参加した中途社員に聞いてみた!

入社してから1か月程経つと、CCO室の担当者から、「中途ランチ会」のお誘いが・・!

ランチ会当日は会社近辺のお洒落なお店でランチを楽しみます。

ランチの費用は全額会社負担。社員同士のつながりを大切にしてほしいという経営陣の気持ちがよく表れていますね。

入社日から1か月経って、「今どんなお仕事をされているのか」「会社には慣れたか」「休みの日は何しているのか」など、

ざっくばらんに皆さんでお話をしていきます。

このランチ会でお互いの共通点が見つかり、ランチ会終了後も共通の趣味で交流されている社員さんをよく見かけます!

ときには、今困っていることや不安に感じていることを聞いて、入社後の不安もランチ会で解消していきます。

ここで、直近1年以内に入社した中途メンバーに、実際のランチ会の感想について聞いてみました!

ーー中途ランチ会に参加してみてどうでしたか?

中途入社は新卒と違い、業務以外でつながりを持つことができないので、
こういった会があると仲間意識みたいなものが持ててとても嬉しいです!

中途ランチ会に参加してから、他のイベントなどで会った際に一緒に楽しんだり
関係が続いた先で、部をまたいで一緒の案件を担当した際はとても心強かったです。

いつもと違う昼食時間を過ごせて楽しかったです!
小規模な企画ではあっても、会社が社員のことを考えて、予算を取って人員を動かしているというのは有り難いことだと感じました。

3.終わりに

アピリッツでは、このランチ会を通じて、中途入社の社員が安心して働ける環境作りに力を入れています。

中途ランチ会以外にも、懇親会や文化祭など、部署や事業、年齢や役職関係なく、

縦と横、時には斜めの仲間づくりができるようなイベントを企画・実施しています。

少しでも興味をお持ちいただけた方は、ぜひご応募ください!

次回は、実際のランチ会へ潜入捜査!次のランチ会記事も楽しみにしていてください!

Mastraで学ぶ!AIエージェントってどうできてるの?

0

はじめに

AIエバンジェリストの浅田です。
AIエージェント、話題ですよね。様々な企業がAIエージェントの発表をするとともに、AIエージェントを作成するためのツールも色々出てきています。

そんなツールの一つにMastraというTypeScript製のオープンソースフレームワークがあります。現時点で、同時期に出たOpenAIのAgentsSDKや、先発のLangChainのAgent構築フレームワークであるLangGraphよりもGitHubのスター数が多く、その注目されぶりが伺えます。

そこで、今回はMastraのコードを見ながらAIエージェントを実装する際の構成要素について書いてみたいと思います。

準備

まず、インストールします。公式の手順に従いインストールしますが、npmが使える環境であれば、以下のコマンドでインストールできます。

npm create mastra@latest

そうするといくつか質問されます。

  • What do you want to name your project?
    • 任意の名前をつけます
  • Where should we create the Mastra files? (default: src/)
    • デフォルトのままにします
  • Choose components to install:
    • Agents, Workflowsの選択肢が出るので、両方にチェック(スペースキーでチェックできます)を入れてEnterを押すと、Add tools?と質問されるので「Yes」を選択します
  • Select default provider:
    • AIのプロバイダーの選択肢はデフォルトのままOpenAIを選択し、Enter your openai API key?と聞かれるので、Skip for Now(default)を選択します。
  • Add example
    • 「Yes」を選択します
  • Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)
    • Skip for now (default)を選択します

上記が完了すると、最初に決めたproject名のディレクトリが作成され、その中に.env.developmentというファイルがあります。このファイルを開くと

OPENAI_API_KEY=your-api-key

となっているので、your-api-keyを自分のOpenAIのAPIキーに修正します。

これで準備完了です。

起動

インストール時に出力されるメッセージにも書かれていますが、以下のコマンドでMastraプロジェクトを起動できます。

npm run dev

Mastraは、デフォルトで二つのインターフェースを持っています。

  • API(別のツールから呼び出すためのエンドポイント)
  • Playground(定義したエージェントの挙動を確認できるブラウザ上のGUI)

http://localhost:4111/ にアクセスすることで、Playgroundにアクセスできます。以下のような画面が表示されれば起動成功です。

画面上の「Weather Agent」をクリックし、「Write a message…」と書かれているところに「渋谷の天気を知りたい」と入れて送信すると、現時点(2025/3/31の午後6時)だと以下のような結果が返ってきます。後で説明しますが、これはopen-meteo.comという緯度経度から現在の天気を教えてくれるAPIの結果をもとに出力されています。

Shibuya's current weather is overcast with a temperature of 7.6°C, but it feels like 4.5°C due to the wind. The humidity is at 76%, and there is a wind speed of 11.3 km/h with gusts up to 29.9 km/h.

Agent

AIエージェントのフレームワークであるMastraの中心となる構成要素はAgentです。MastraのExampleにおけるAgentはsrc/mastra/agents/index.tsに記載されています。

export const weatherAgent = new Agent({
  name: 'Weather Agent',
  instructions: `
      You are a helpful weather assistant that provides accurate weather information.

      Your primary function is to help users get weather details for specific locations. When responding:
      - Always ask for a location if none is provided
      - If the location name isn’t in English, please translate it
      - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
      - Include relevant details like humidity, wind conditions, and precipitation
      - Keep responses concise but informative

      Use the weatherTool to fetch current weather data.
`,
  model: openai('gpt-4o'),
  tools: { weatherTool },
});

ここからWeather Agentについて以下のことがわかります。

  • instructionsで天気情報を提供することを命じられている
  • modelでopenaiの”gpt-4o”のAIモデル(LLM)を使用するように設定されている
  • toolsでweatherToolが指定されている

instructionsはそのAgentの基本動作を規定します。これをもとにAIモデル(openAIのgpt-4o)は何をユーザから聞き出し、何を実行し、何をユーザに提供するかをの指針を得ることができます。今回の例であれば天気を調べるにあたり必要な情報(location)を理解します。そして、天気の情報を得るために、weatherToolというツールを使えること、およびユーザに提供する情報に含めるべきこと(wind conditionsなども含める)や、形式(concise but informative)について理解します。

さて、もし同じことをLLMを使わずにやろうとするとどうなるでしょうか。

  1. ユーザの発話が天気に関することかどうかを判定する
    1. 発話に天気関連のキーワード、例えば「天気」が入っているかどうかを判定する
    2. 発話が天気に関するものではない場合には、最初の処理に戻る
  2. ユーザの発話の中にlocationに関する情報があるかを判定する
    1. locationの情報がなければユーザに質問し、判定の処理に戻る
  3. locationが与えられた場合に、情報が英語かどうかを判定する
    1. 英語でなければ、locationを英語に翻訳する
  4. 天気情報(weatherTool)の出力をパースし、目的の出力形式に整形して、ユーザに提示する

上記のようにユーザに天気の情報を提供する状態にたどり着くまでに多くの処理が発生することがわかります。上記の例であればユーザの発話を判定する際に「天気」というキーワードが入っていたとしても「脳天気な性格だね」や「天気以外のことを話そう」などといったパターンを処理しようと考えると気が滅入ってきます。

一方、LLMを利用することで、先述のinstructionsを定義するだけで、それらのことが処理できるようになります。これだけでもLLMが利用できることによるメリットが感じられます。

  • ユーザが求めるタスクを判定する
  • ユーザからタスクに必要な情報を引き出す
  • ユーザにタスク実行の結果をわかりやすく提示する

といったことをAIを用いて処理するのがAIエージェントにおけるLLMの果たす第一の役割になるかとおもいます。

Tool

AIエージェントの定義はまだ定まりきっていないかと思いますが、少なくとも以下のような特徴があるかとおもいます。

  • ユーザの代わりにタスクを自律的に実行する

「ユーザの代わりに」ということは、ユーザがやろうとしていたことをAI側で代行する必要があります。ですが、AIモデル(LLM)ができることは、基本的には与えられたテキストデータや画像データを入力して、テキストデータを生成することです。外部のデータを入力として取りにいくこともできなければ、結果をファイルとして保存することもできません。

そこでToolという概念が登場します。

Toolは簡単にいえば、LLMと連携させることを前提にした関数です。簡単に動作を説明すると、プログラムが関数の情報をLLMに渡して、タスクを実行する際に必要であればLLMに「タスク実行のためにこの関数をこの引数で呼び出して、その結果ください!」と出力させます。そして、その出力情報に応じてプログラム側で関数を実行し、その結果をLLMに戻すことで、LLMは情報を得たり、外部へのアクションを起こします。

先ほどのweatherToolは、src/mastra/tools/index.tsに定義されています。getWeatherは与えられたlocationの情報をもとに、open-meteoのAPIを使って、緯度経度を算出し、その緯度経度の天気情報を取得する関数となっています。

export const weatherTool = createTool({
  id: 'get-weather',
  description: 'Get current weather for a location',
  inputSchema: z.object({
    location: z.string().describe('City name'),
  }),
  outputSchema: z.object({
    temperature: z.number(),
    feelsLike: z.number(),
    humidity: z.number(),
    windSpeed: z.number(),
    windGust: z.number(),
    conditions: z.string(),
    location: z.string(),
  }),
  execute: async ({ context }) => {
    return await getWeather(context.location);
  },
});

このToolが求める入力情報と、出力情報のスキーマ(構造)、および実行する関数が定義されています。

これによって、LLMは「天気を調べる」というユーザのタスクにおける「特定のlocationの天気情報を調べる」というタスクを代行することができるようになります。

さらに、Toolは複数指定することができます。つまり、今回のケースであれば天気情報を取得するというweatherTool一個ですが、別にメールを送信するためのToolを定義し、与えることができます。

export const sendMailTool = createTool({
  id: 'send-email',
  description: 'Send result mail.',
  inputSchema: z.object({
    mailAddress: z.string().describe('MailAddress'),
  }),
  outputSchema: z.object({
    status: z.string(),
  }),
  execute: async ({ context }) => {
    return await sendMail(context.mailAddress);
  },
});

上記のようなToolを追加し、weatherAgentのtoolsに与えることで、weatherAgentにメール送信の能力を与えることができるようになります。

それによって、「ロンドンの天気を調べて、 example@example.com に送信しておいて」といったユーザの発話によって天気調査とメール送信といったタスクを実行できるようになります。

また、「ロンドンの天気を調べて」とだけ言われた時にはメールを送らず、上記のようにメール送信の依頼があった時にメールを送るようになります。

このように、if文などの制御文を挟まずに複数のToolと目的を与えることでAgentが自律的にタスクに必要な処理を判断し、実行してくれるようにフローをシンプルに組めるのがAgent機能の強力な点だと言えます。

Workflow

一方で、ユースケースによっては、必ず実行したいタスクの組み合わせもあるでしょう。ユーザの特定の発話に限らずセットで実行したい処理などです。先ほどの例であれば、AIの判断によらずメール送信を必ずセットで行いたい場合などです。

もちろん、weatherToolの処理の最後にメールを送信することも考えられますが、そのような場合に、Mastraで利用できる仕組みにWorkflowがあります。これは名前のごとしですが、規定の順番で決められた処理を実行するワークフローをつくるための機能です。

例えば、MastraのExampleコードでは、src/mastra/workflows/index.tsに、以下のようなWorkflowが定義されています。

const weatherWorkflow = new Workflow({
  name: 'weather-workflow',
  triggerSchema: z.object({
    city: z.string().describe('The city to get the weather for'),
  }),
})
  .step(fetchWeather)
  .then(planActivities);

weatherWorkflow.commit();

fetchWeatherはweatherToolと同じように、open-meteoのAPIで天気情報を取得する処理、planActivitiesは、fetchWeatherによって取得された天気情報から、LLMに活動予定計画を生成させる処理になります。

このように、Workflowを利用することで、より構造的にタスクの流れを定義できます。失敗時のエラーハンドリングや回数実行の制御など一般的なワークフローを制御するための仕組みもあるので、Mastra単体でタスク実行のワークフローを組めるのはメリットだと言えるでしょう。ただし、このようなことは、普通のワークフローツールでもできるので、Mastraじゃなくても(というよりAIエージェントじゃなくても)可能です。

では、MastraのWorkflowを使うと嬉しい点はなんなのか。それは、ワークフローの各ステップにおける処理でAgentを指定できるので、Agentの処理結果による分岐をシームレスに定義できることだと思います。

たとえば、「直近の業界ニュースを取得」し、「特定の業界に深刻な影響を与えるか判定」した上で、「影響ありの場合に通知する」といったワークフローを組みたい場合に、ネックとなるのは「深刻な影響を与えるかどうかの判定」をどう実現するかになります。その一つの解は、(どのような指標を基準とするか、instructionsの工夫は必要ですが)Agent(のLLM)に判定させるという方法です。

そのようなケースにおいて、Agentをワークフローにシームレスに結合し、Agentの判定結果によって処理フローを構築できるWorkflowは便利かとおもいます。

Agent Network(Experimental)

Workflowを使うことによっても、複数のAgentを組み合わせてタスク実行を行うことができますが、Mastraには複数のエージェントを共同させるための仕組みがもう一つ用意されています。

それがAgentNetworkという仕組みです。これは複数のAgentの集まりに対して、「RoutingAgentと呼ばれる制御用のAgentが、求められたタスクに応じて仕事を動的に割り振っていく」という仕組みです。

import { AgentNetwork } from '@mastra/core';
import { openai } from '@mastra/openai';

// Create specialized agents
const webSearchAgent = new Agent({
  name: 'Web Search Agent',
  instructions: 'You search the web for information.',
  model: openai('gpt-4o'),
  tools: { /* web search tools */ },
});

const dataAnalysisAgent = new Agent({
  name: 'Data Analysis Agent',
  instructions: 'You analyze data and provide insights.',
  model: openai('gpt-4o'),
  tools: { /* data analysis tools */ },
});

// Create the network
const researchNetwork = new AgentNetwork({
  name: 'Research Network',
  instructions: 'Coordinate specialized agents to research topics thoroughly.',
  model: openai('gpt-4o'),
  agents: [webSearchAgent, dataAnalysisAgent],
});

// Use the network
const result = await researchNetwork.generate('Research the impact of climate change on agriculture');
console.log(result.text);

上記はMastraの公式のサンプルですがこのように、複数のAgentをAgentNetworkに集めて、’Research the impact of climate change on agriculture’というプロンプトから適切なAgentを自律的に選択しながら、気候変動の農業の影響を調査するタスクを実行します。

このような仕組みはマルチエージェントシステムと呼ばれます。それぞれのAgentを専門化させて、それを適宜使い分けてタスク達成を目指すという流れです。ここで次のように思われた方もいるかと思います。Agentに色々なツール、例えば上記の例で言えば、webから情報を取得するToolとデータを分析するToolを搭載するのではだめなのでしょうか。

上記の例でいえば問題になることはないと思います。マルチエージェントシステムが必要になってくるのは、より大規模で複雑なタスクをAIエージェントシステムで実行する状態になった時だと思います。

Agentにおける利用に限らず、LLMに渡すテキストが巨大になればなるほど、その解釈の精度が悪くなっていきます。また、外部APIを利用している際には、LLMに与えるテキスト情報が長ければ長いほどコストがかかってくることにもなります。ローカルでLLMをホストしている場合でもCPU、メモリ、ネットワークといったリソースをより多く消費することになります。

つまりAgentにおけるinstructionsやToolの役割などの定義情報が巨大になっていけばいくほど、Agentとしてのタスク処理の精度やコストの面で不利になっていきます。そこで各Agentをより専門化し、それらを連携させることでなるべく効率的に実行させる仕組みがマルチエージェントシステムとなります。

終わりに

Mastraを構成する代表的な要素について紹介してきました。

  • Agent
  • Tool
  • Workflow
  • AgentNetwork

これらの要素は他のAIエージェントフレームワーク、例えばLangGraphや、AgentsSDKでも似たような要素が存在します。それはAIエージェントの本質がそこに凝縮されているからだと思います。

  • Agentに何をサポートさせるかを定義し、適切なinstructionsを与えること
  • Agentがタスクを実行するのに必要なTool(外部処理)を適切に用意し使い分けさせること
  • Workflowを組んで目的の処理を構成する要素を適切に定義すること
  • 適切に専門化させたAgentを用意し、それらをうまく協調させること

「適切」という言葉を連発していますが、AIエージェントシステムの肝は上記の要素を如何に適切に調整していけるかだと思います。

以上、参考になれば幸いです。

浅田大輔
クラウドサービスソリューション学部・AIエバンジェリスト。
認定ホワイトハッカー。映画・歴史好き。
座右の銘は「酒は人類の友だぞ。友人を見捨てられるか」。

2025年度アピリッツ入社式、67名を迎えました!

0

2025年4月1日にアピリッツは入社式を行いました。今年は67名の新入社員が入社!
今回も当日の様子をご紹介します。

新しいオフィスで新しい気持ちで

昨年9月にサクラステージに本社移転をしたアピリッツ。

今年は、新しいオフィスのカフェスペースで入社式を執り行いました!

緊張した新入社員の顔を見てわたしたちも気が引き締まる思いでした。

まずは役員の歓迎の挨拶から

今年も経営陣から新入社員への挨拶から式がスタート。

社長の和田から始まり、役員陣からも熱いメッセージをいただきました。

左上から順に和田、永山、八木、長谷

一緒に働く仲間としてよろしくお願いします。皆さんが今後進んでいく方向性というのは、単なるプログラムがかける作業員、3Dのモデルができる作業員ではなく、お客様と話して要件を詰めたり等の上流の仕事を目指していかないと、将来自分たちの仕事がなくなるということを理解してください。人を育成して事業をまわしていくという構造をとれなくなってきている世の中です。上流工程の仕事を学んでいく姿勢がないと職がなくなるということを考えて行動していただければと思います。(代表取締役社長・和田)

社会に出ると自分で決めないといけないことがたくさん出てきます。人生は思った通りにならないことが増えていきます。その時の置かれた状況で何ができるか、どの選択が良いか、を自分で考えなければいけなくなります。そんな状況を逆に楽しんで、こんなピンチ乗り超えちゃったぜと言えるような選択をできるように頑張っていただければいいのかなと思います。冒険を楽しんでください。(執行役員・永山)

皆さんと同じで、期待や不安を抱えて新卒入社した新卒17年目になります。なぜ長くいるかというと、長くいればいるだけ仕事はやりやすくなり、自分がやりたいことが楽に実現できるからです。そして、大きな実績や大きな成長につながっていくのであれば、それを利用して自分の人生を楽しむ。楽しむために仕事を利用する。皆さんも自分自身でできることやれること、楽しいと思えることで、実績を上げてください。一方で、チャンスは訪れますが、チャンスには限りがあって、チャンスを見逃すリスクもあります。自分の過去の考え方でブレーキかけるのではなく、様々なことに挑戦をして目の前のチャンスを掴んでください。(執行役員・長谷)

思い通りにならないことが、ぼーっとしてても一生懸命やってても無限に訪れます。思い通りにならないことが嫌だと思う気持ちが、一番自分の成長や前に進む力を阻害していく要因になるので、上手く向き合えるようにストレスを解消できるようなものを色々見つけてください。すこしでも話せる仲間の輪をひろげていってください。(執行役員・八木)

新入社員から抱負を一言!

役員陣の挨拶が終わった後は、一人ひとり抱負を話してもらいました。

座右の銘をもう一つつけました。座右の銘に負けないように頑張りたいと思います!

精進という言葉が好きです。その言葉に恥じない人になります!

入社したばかりの私はまだ初期化されたばかりの変数みたいなものですが、日々頑張っていきますのでご指導ご鞭撻、私のデバッグのほどよろしくお願いします!

様子を見に来た社員も見守る中の決意表明。

たった一言ずつでしたが、言葉から熱意が伝わってきました!!!

そんな新入社員の皆さんは早速新卒研修が始まったようです^^

そして、今年も来年に向けて2026新卒の採用も始まっております。

学生の皆様のエントリー、お待ちしております!

ゲームでいざ尋常に勝負!

0

アピリッツでは懇親会と題して、社員同士のコミュニケーションが取れるイベントを開催しています。
今回は、先日行われたゲーム大会の様子をお届けします♪

ゲーム会社ならではの発想?

懇親会委員のメンバーが「社員と一緒に自分たちの好きなゲームを楽しみたい!

そんな思いで今回企画してくれたのはゲーム大会!!!

一緒にゲームをやりませんか?」という呼びかけにたくさんの社員が集まりました。

(やりたいことをさせてもらえるなんて理想的、、!笑)

早速懇親会開始!かんぱ~~い!

おいしそうな食べ物とたくさんの飲み物も用意されていました^^

甘いものが好きな社員が多いためドーナツがいっぱい!

まずは懇親会委員の開始の合図とともに、あちこちから乾杯の声が!

 おいしそう~~!!!
元同部署の先輩後輩でお話ししているところにお邪魔しました!

お待ちかねのゲーム大会もいよいよ開始です!

ある程度飲食を楽しんだ後はメインイベントのお時間です!

委員会メンバーからのゲーム大会開始のアナウンスとともにトランプが配られグループ分けが行なわれました。

グループ分けはランダムのため、話したことのない他部署の人ともみんなで盛り上がっていました!

こんなに大きいテレビで、しかも社内でゲームができるなんて夢みたいですよね~☆

負けられない戦いがここにはある。

勝者にはささやかな景品、お菓子のつかみ取り!!!

大量に用意されていました、、!

参加した皆さんのお話も伺いました!

普段喋らない他部署の人とも、お酒やゲームを通して交流することができたので、とても話しやすかったです!
定期的にこういった交流ができる機会があるのはとても良いなと感じました!

皆さんゲームがとても上手でびっくりしました・・!!
新しい一面が見れて、とても楽しかったです^^
オンとオフを切り替えて、楽しむときは全力で楽しむことができるチームって、改めて素敵だな~とも感じました!

社員の楽しそうな様子を見て、委員会メンバーも嬉しそうでした!

これからの企画にも期待大ですね♪

アピスピでもたくさん発信していきますので、お楽しみに!

アピリッツにカムバーーーック!!!

0

カムバック採用って?

様々な方にご入社いただいているアピリッツですが、実は退職された方の再入社、カムバック採用にも力をいれているんです!

アピリッツで身につけた知識・技術と、退職後に身につけたスキルや価値観、

様々な経験を活かし、パワーアップしてアピリッツでさらなる活躍をしてみませんか?

選考フローは下記のようになっています!

—————-
Step1.HPからエントリー
Step2.書類選考
Step3.面接(2~3回程度)
Step4.ご内定!
—————-

実際にカムバック採用で再入社された社員さんにお話を伺いました!

ーーーカムバック採用を通じて戻ってきてくださったわけですが、どうしてまたアピリッツで働きたいと思ったのか思ったのか教えてください

他の会社で働いてみて改めて比較したときに、アピリッツであれば希望する働き方ができると考えるようになったからです!

カムバック採用があって再応募のハードルが低く、また、働いたことがある企業だからこそキャリア形成のイメージがつきやすかったからです!

入社してみないと分からないことが多い転職活動。

知っていることが多く、入社後のイメージがつきやすいのは安心感がありますよね^^

ーーー改めて感じるアピリッツの魅力はなんですか?

やりたいことやキャリアプランを相談しやすく、さらにそれを汲み取ってくれるところです。
パパママリモートなど社会的方針に関してのアップデートが多いところも魅力に感じます。

ほかの会社で働いた経験があるからこそ、比較対象ができてよりアピリッツの魅力を感じやすいのかもしれませんね!

パパママリモートに関する記事はコチラ

ーーーアピリッツにカムバック(再入社)してみた、今の率直な感想を聞かせてください

歓迎されている印象を受けました!

選考も知っている人が面接官で話しやすく、再入社時もあたたかく迎えていただけて嬉しかったです!

新しい会社に入社するときは緊張しますが、再入社だと少し負担が減りそうですよね!!

最後に

様々な経験を活かしてパワーアップしたメンバーのさらなる活躍に期待値が爆上がりです!

詳しくは採用サイトをチェックしてくださいね♪

GitHub Copilot 活用法【とあるエンジニアの実装例】

0

はじめに

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

生成AIの日々の進化スピードは目を見張るものがありますが、その中でも特に顕著な分野の一つがコーディング性能だと思います。

弊社では、希望する社員はGitHub Copilotを利用することができます。GitHub Copilotは、GitHub社が提供する、生成AIによるコーディング支援ツールです。

そこで、今回はGitHub Copilotの活用法を紹介したいと思います。

準備

Insiders版 Visual Studio Code のインストール

GitHub Copilotは基本的に統合開発環境(以下IDE)上で利用しますので、まずIDEを準備します。GitHub Copilotは、複数のIDEで利用することができますが、今回はAgent Modeでの利用をするので、Insiders版のVisual Studio Code(以下、VSCode)を利用します。2025年2月末時点ではGitHub CopilotのAgent ModeはPreview機能のため、Insiders版のVSCodeでのみ利用可能となっています。以下VSCodeという記述は特に断りのない限りInsiders版を指します。

(3/6に通常版のVSCodeにも、Agent Modeが追加された旨のアナウンスがありました。しかし、順次展開なのか手元の環境で通常版のVSCodeでAgent Modeを確認できなかったため、Insiders版で話を続けます)

なお、Agent Mode以外の機能は通常のVSCodeでも利用可能です。

公式サイトより、お使いのOSに合わせたものをダウンロードしインストールします。

Macの場合、デフォルトでzipでダウンロードされるので、ダブルクリックで解凍します。すると「Visual Studio Code – Insiders.app」というファイルが出てくるので、それをダブルクリックすることで、VSCodeを起動することができます。通常のVSCodeはブルーのアイコンになっていますが、Insiders版はエメラルドグリーンのアイコンになっています。必要に応じて、アプリケーションフォルダに移動することで、Launchpadからも選択できる様になります。

GitHub Copilotの設定

VSCodeを起動すると、エディタ画面上部に「Copilotアイコン」が表示されています(画像赤枠)。

アイコンをクリックすると、以下のような設定画面が開きますので、「Sign in to Use Copilot for Free」のボタンをクリックします。

GitHub アカウント選択画面になり、お使いのGitHubアカウントを選択します。

Continueをクリックすると以下のポップアップが出てくるので、「Visual Studio Code – Insiders.app を開く」をクリックします。

Copilotの画面が以下のようになれば設定完了です。

GitHub Copilotの活用例

さて、GitHub Copilot(以下、Copilot)の準備ができたので、Copilotを使うとどんなことができるのかを紹介したいと思います。

こんなストーリーを考えてみます。

あなたは新人エンジニアです。ある日の昼下がり、上司から「J-CARDというプログラムの改修を頼みたい。リポジトリはここね。今は最終ラウンドでの決着後、点数関係なくクリアになっているんだけど、100点以上じゃなければ負けというロジックに改修してほしい。勝利時のメッセージは”勝利!!”、敗北時のメッセージは”敗北…”でお願い」と依頼されます。J-CARDというプログラムについて、あなたは一切の事前知識を持っていません。

コードベースを理解する

まずは、現状を理解する必要があります。リポジトリをVSCodeで開き、Copilotアイコンを押してCopilot Chatを開きます。

開いたら、

@workspace どんなアプリケーション?

と入力欄に打ち込みます。「@workspace」と打ち込むことで、Copilotがリポジトリ全体に基づいて質問に答えてくれます。

どうやら、じゃんけんに基づいたカードゲームのようです(気づいた方もいるかと思いますが、福本伸行先生の漫画「賭博黙示録カイジ」に登場する「Eカード」をベースにした架空のアプリケーションです)。

最後の勝敗の実装内容についても確認します。

Game.svelteのnextRound関数内に、最終決着後の処理が書かれていることがわかりました。if文内に、既定のスコア以上かどうかでの分岐を入れれば良さそうです。gameStateとgameResultをどう変更すればよいかが不明なので確認します。

なるほど、6ラウンド終了時における目標スコア未到達の敗北時はgameStateをVICTORY、gameResultをLOSEにすれば良さそうです。gameLogic.jsに新しく関数を作り目標スコアに合わせて、gameState, gameResult, gameMessageを動的に変化させる方針でいきます。

コード補完

 
gameLogic.jsに関数を追加します。Copilotは、ユーザがプログラムを書く際に、コンテキスト(文脈)から続きを予想し、コードを補完してくれます。その際に、コメントを書き添えることで、よりユーザの意図に沿った補完を行ってくれます。

内容を確認し、良さそうであれば、TABキーを押してエディタに反映させます。補完は完璧ではないので、必要に応じて修正します。

コードをレビュー

Copilotによってコードをレビューしてもらうことも可能です。レビューしてもらいたい関数の記述エリアで右クリックし、コンテキストメニューからCopilot -> Review and Comment を選択することで、Copilotによるレビューを実行できます。なお、ほかにも関数を説明させたり(Explain)、エラーが出ている箇所の修正(Fix)を行うことも可能です。

実行すると、以下のように関数名のtypoを指摘してくれました。

ドキュメント(コメント)を書く

同じように関数のエリアで右クリックし、コンテキストメニューからCopilot -> Generate Docs を選択することで、コメントを生成できます。

以下のように、より詳細なコメントが生成されました。

インラインチャット

コメントが生成されましたが、英語になっているので日本語に変換しましょう。そのようなときにCopilotのインラインチャットを使って変換できます。

変換したい部分を選択し、コンテキストメニューから、Copilot -> Editor Inline Chatを選択します。

入力欄が出てくるので、”日本語にしてください”と入力します。

すると以下のように日本語に変換されました。このように、インラインチャットを使うことで、指定したエリアに対して、コードの修正などをさせることができます。

テストコードを書く

同じように関数のエリアで右クリックし、コンテキストメニューからCopilot -> Generate Tests を選択することで、テストコードを書かせることができます。

以下のようなテストコードが生成されました。

Copilot Editsでコードを編集させる

さて、finalJudge関数を作ることができたので、Game.svelteのnextRound関数内の処理を書き替えましょう。

もちろんエディタで書き換えてもいいのですが、ここではCopilot Editsを使って書き換えてみます。

Copilot Editsは、Copilotアイコンをクリックして開くエリア上部の「COPILOT EDITS」タブをクリックすることで使えます。

今回はGame.svelteを編集してもらいたいので、そのファイルを編集してほしいことをCopilotに伝えます。やり方は複数あって、入力エリア上部にあるAdd Filesのボタンをクリックして選択もできますし、エディタ上で対象のファイルをドラッグアンドドロップしても問題ありません。エディタ上で開いているファイルはデフォルトで対象になります。いずれにしても、入力エリアに対象のファイル名が出てくれば対象です。

また、ファイル上の選択したエリアだけを指定することも可能です。その場合は、ファイル上で対象エリアを選択し、右クリックのコンテキストメニューから、Copilot -> Add Selection to Copilot Editsと選択することで行えます。ファイル同様、エディタのアクティブ画面で選択しているエリアはデフォルトで対象になります。

Game.svelteおよびgameLogic.jsを選択させた状態で、Copilot Editsに「Game.svelteのnextRoundにfinalJudge関数を組み込んでください。目標点数は100点です。gameMessageにはfinalJudge関数のgameMessageをそのまま渡してください。」と入力して実行します。

すると、以下のように修正してくれます。ここには載ってないですが、別ファイルからのimport文やtargetScoreを100で初期化する処理についても書き加えられています。内容を確認し、問題なければ「Keep」ボタンを押すことで反映完了です。もし問題があれば「Undo」のボタンを押すことで元の状態に戻せます。

以上で、目的の「100点以上じゃなければ負けというロジックに改修」が完了しました。

Copilot Edits Agent Mode

実際に動作確認をすると、ちゃんと100点に満たない場合は敗北というメッセージを表示できるようになりました。

しかし、ここで問題に気づきます。画面上に目標スコアが出ていないので、プレイヤーは何点取ればクリアなのかわからず戦略が立てづらい、と。なので、目標スコアを画面に表示するように修正したいと思います。

先ほどやったのと同じようにやってもよいのですが、ここではCopilot EditsのAgent Modeを使ってみます。

Agent ModeはCopilot Editsの入力欄下部にあるモード切替プルダウンで、「Agent」に切り替えることで実行できます。冒頭でも述べたように、現在はInsiders版のVSCodeでのみ選択が可能です。出てこない場合は、VSCodeがInsiders版かご確認ください。

Agent Modeに切り替えたら、以下のように入力します。

目標スコアを画面に表示したいです。位置は持ち点の上に赤文字で表示してください。

すると、Copilotは以下のように、Editsの時のように対象のファイルを指示しなくても自律的に関連ファイルを確認しつつ、目的のコード変更を提案してくれました。Editsの時と同じように問題がなければ「Keep」をクリックすることで反映できます。

再度画面で確認してみると、目標スコアを表示できていることが確認できました。

では、最後にtestを実行して問題ないことを確認します。テスト実行もCopilotにやってもらいましょう。Agent Modeの特徴の一つは、コード生成や説明だけでなく、コマンドの実行も任せることができる点です。

入力欄に「テストを実行してください」と入れて実行すると、以下のように実際のファイルを確認して、テスト実行コマンドを提案していることがわかります。

問題がなければ「Continue」をクリックすることで、実際にターミナルでテストコマンドが実行されます。

このようにAgent Modeは

  • 自律的に必要な行動を判断し実行する
  • ターミナルでのコマンド実行を行う

といった特徴があります。

終わりに

このストーリーに出てくる架空のアプリケーション「J-CARD」は、この記事を書くにあたり作成したものですが、これもAgent Modeを用いて作成したものです。

入力したプロンプトは以下のようなものです。

Svelteで、以下の様なゲームを作ってください。

# ルール  

プレイヤーと対戦相手のCPUはそれぞれの持ち札から一枚を選び場に出します。 勝敗はじゃんけんに準じます。 つまり、グーはチョキにつよく、チョキはパーにつよく、パーはグーに強いということです。  
持ち札の組み合わせは、以下どちらかです。  

1. チョキ1枚、グー4枚
2. パー1枚、グー4枚

プレイヤーが1のセットを持っていたら、対戦相手は2のセットになります。 同じにはなりません。  

# ゲームの進行  

- ゲームは全部で6ラウンドです。
- プレイヤーは持ち点10点から始まります。
- ラウンドごとにプレイヤーは持ち点をいくら賭けるかを設定します。 必ず1点は掛けなければなりません。 
- プレイヤーと対戦相手の持ち札は 奇数ラウンドはプレイヤーがセット2、対戦相手がセット1になり、偶数ラウンドはプレイヤーがセット1、対戦相手がセット2になります。  
- ラウンドごとに、お互いに持ち札からカードを選んで場に提示し、じゃんけんのルールにあわせて勝ち負けが決まるまで続けます。 つまり、アイコの場合は5枚目まで続けますが、勝ち負けがついた時点で、そのラウンドは終了です。  
- プレイヤーが勝てばプレイヤーのセットが1の時はかけた点数の10倍、プレイヤーのセットが2の時はかけた点数の2倍の点数を得ることができます。
- プレイヤーの持ち点が0になった時点でゲームオーバです。 6ラウンドが終了した時点で合計点数を表示して終了です。

# レイアウト

- 画面の上には5枚のカードが伏せられた状態で置いてあり、 画面の下には5枚のカードが表の状態で置いてあります。  
- 画面の真ん中にはお互いの選んだカードを表示する場があります。  
- 画面右上にはプレイヤーの現在の持ち点や、現在賭けている点数を表示します。

かなりアバウトな指定ですが、Agent Modeはsvelteプロジェクトのセットアップ実行から始まって、各種のファイルを作成し、実際にプレイできるアプリケーションを数分で構築してくれました。その後、プログラムのロジックの調整、UIの調整、テストのセットアップなどを行いましたが、それも全部Agent Modeに対する指示で行ったので、自分では一切コードを書いていません。もし同じことを自分の手でやっていたら、数倍の時間はかかったでしょう。

生成AIによるコーディング支援はすごい可能性を秘めていると思います。ただし、的確にコントロールするには、利用者側にもある程度のスキルや知識が必要です。生成されたコードの確認のためにもスキルは必要ですし、生成AIに対して的確に指示を与える際にも知識が必要です。自分は普段はフロントエンドエンジニアではないのでUIの調整に手間取りましたが、本職の方ならもっと的確にもっと高クォリティのものを作れるような指示を与えることができたと思います。つまり、「利用者のスキル×生成AIの性能=出力」であり、自身の能力を磨いていくことも相変わらず重要であると感じます。

Copilotには「Custom Instructions」をはじめ、今回は紹介しきれなかった便利機能がまだまだありますし、現在開発中の機能もたくさんあります。Copilotを活用することによって、エンジニアは今までよりも効率的に頭の中のアイディアをコードに落とし込むことが可能になりますし、できることがどんどん広がっていくと思います。わくわくしますね。

以上、参考になれば幸いです。

【第二弾】社員寮が、またまたTVで放送されました!!

0

アピリッツの社員寮制度が、前回に続いて、TBS様の情報番組『ひるおび』でも取り上げていただきました!

前回の記事はこちらをクリック

株式会社共立メンテナンス様が運営する社員寮を導入しているアピリッツ。

寮によっては、食堂や大浴場など、ホテル『ドーミーイン』の運営も行っている共立メンテナンス様ならではの設備が完備されています!

アピリッツでは、初期費用を全額、家賃を半額、会社が負担しているため、

その住み心地の良さと立地、費用面など総合的な観点から、

社員寮制度は地方出身者問わず、一都三県出身の社員も幅広く利用しているんです!

栄養満点のご飯に、安心なセキュリティ。社員寮ならではの暮らしとは。

実際、社員寮を利用している社員に、お気に入りポイントを聞いてみました!

ーー社員寮のお気に入りポイントを教えてください。

朝夕の食事がついていて安くて美味しいご飯が食べれるところです。
栄養とバランスを考えた献立になっているので、一人暮らしでも健康的な食事ができています!

困った時でも、寮の管理人さんや社員同士で気軽に相談できるところが心強いです。
管理人さんは常駐してくださっているので、セキュリティ面も安心です。

社員寮に興味のある方は、ぜひ選考の際、採用担当へお問い合わせください!

26新卒の本採用がスタートしました!!

0

君の話を、ぜんぶ聴きたい。

3月1日から、アピリッツ26新卒の本選考がスタートしました^^

アピリッツは「セカイに愛されるインターネットサービスをつくり続ける」ことをミッションに掲げ

Webシステムから、Webサイト、スマホアプリの開発、スマホゲームの開発・運営を行っています。

本当に良いと思ってもらえる、そんなモノづくりに携わりたい、という方は、ぜひ選考でお話を聴かせてください!

アピリッツで具体的にどんなことができるのか、私たちからお伝えできることは全てお話ししますし、

皆さんのやりたいこと、それがアピリッツでどう実現できるのかを一緒に考えていきたいと思っています!

新卒採用の選考フローはこちら↓

—————-
Step1.マイナビ2026リクナビ2026からエントリー
Step2.会社説明動画視聴
Step3.本エントリー(書類選考)
Step4.面接(2~3回程度)
Step5.ご内定!
—————-

採用担当一同、皆さまのご応募、お待ちしております!!!

新卒採用に関する記事はこちら

他の記事もよかったら参考にしてみてくださいね♪

【2024新卒インタビュー記事】はこちらをクリック!

【内定者アルバイト】についてはこちらをクリック!

教えて!アピリッツ先輩社員の就活体験記

0

まもなく新卒採用の本選考がオープンするということで、2023年・2024年新卒の皆さんに、当時の就職活動について聞いてみました!

楽しそうに働く社員の姿が、入社の決め手

アピリッツ入社の決め手を聞いてみると、半数以上が色々な経験が積める・会社の雰囲気が決め手と回答。

先日の新卒インタビューでも、若手のうちから様々な経験が積める・会社の雰囲気に魅力を感じて入社を決めた、というメンバーもいましたよね!

ーー新卒社員の声

当時、社内見学で話した社員さん達が、楽しそうに業務していたことが、入社の決め手です。
オープンでフラットな雰囲気が印象的で、入社した今でもその印象は変わりません!

エンジニアとして色々な経験ができそうだと思い入社を決めました。
また、エンジニア以外にも様々な職種の人が在籍しているので、
この会社なら社内にいても、多様な人と関われて、色々な価値観に触れられると思いました。

社員同士の距離が近くコミュニケーションが取りやすい環境で、資格支援制度もあり、
アピリッツでなら働きながら学ぶことが意欲的にできると思いました。

先日の新卒インタビュー記事はこちらをチェック!

「社員に、潤いのある社会人生活を」

「働きながら学ぶ」というキーワードが出ましたが、アピリッツではまさにこの考えをもとに組織づくりを行っています!

テーマは、潤いのある社会人生活を送れる組織、名付けて「カンパニーの学園化」

こちらをビジョンに掲げ、社員一人一人が豊かな人生を送れるよう、文化祭や社内イベント等、全社的に様々な取り組みを行っています。

部署やセグメントの壁を越えたコミュニケーションを通じて、社内にいても自分から学びのチャンスを掴みにいく楽しさもありますよね!

第1回目の文化祭の様子はこちらをチェック!

将来自分が叶えたいキャリアをイメージして

続いて、アピリッツの先輩社員たちに、当時のアピリッツの選考についても聞いてみました!

ーーアピリッツの選考で意識していたことを教えて下さい。

5年後の自分がどうなっていたいかを意識して、そこから今できること・これから挑戦したいことを深堀りしていきました。
理想の人生設計を考えておくことで、やりたいことにしっかりと挑戦できる企業を選択することができたと思います。

自分が経験したことや実力を、ありのまま話すということを意識しました。
そのおかげで、入社してからは自分の適正が高く、かつ自分がやりたいことに近いセクションに配属してもらえました!

ーーアピリッツの逆質問ではどんなことを聞きましたか?

・活躍している社員に共通していることは何か
・どんなキャリアを築く人が多いか
・どれくらい経験を積めば、PMや テックリードになれるのか etc.

今回先輩社員に当時の就職活動を調査してみて、

将来自分のなりたい姿・挑戦したいことを言語化する、自然体で選考に臨むことを意識していたメンバーが多かったです。

皆さん、学生のうちから自分のキャリアをしっかり考えていたなんて、素晴らしい・・!

アピリッツでは、メンバーがやりたいこと・叶えたいキャリアに全力で向き合い

積極的にメンバーへチャンスやきっかけを与えていく会社です。

ぜひ選考の中で、皆さんのやりたいこと・叶えたいことを聴かせてください!

ネットで見ても分からない、アピリッツで具体的にどんなことができるのか、自分のやりたいことがアピリッツで実現できるのか等、

面接の中で、我々からお伝えできることは全てお話しします。

選考を通して、皆さんのキャリアについて、一緒に考えていきましょう!

参考:アピリッツの文化について

最後に

皆さん、アピリッツの就活体験記は、いかがでしたか?

3月からいよいよ新卒採用が本格化しますが、

今回の記事が、皆さんの就職活動の一助になれば、アピリッツメンバー一同とても嬉しいです!

そして今回の記事を読んで、アピリッツで働いてみたいと思ってくれた方がいれば、なお嬉しいです!!

皆さんのご応募お待ちしております!

【2024新卒インタビュー】入社してから1年を振り返って

0

2024年に新卒としてアピリッツに入社したWebエンジニアの2名に、入社の決め手やどんなお仕事をしてきたのか、お話を聞きました!(2025年1月取材)

プロフィール

システムサービス・ソリューション学部の米田 泰斗です。
中学生の頃から自分でゲームを作ってGitに上げるなど、小さい頃からモノづくりが好きでエンジニアを志望していました!

同じくシステムサービス・ソリューション学部の中村 夏帆です。
自分でアプリを使いやすくしたい!という思いをきっかけに、就職活動の時からWebエンジニアを志望していました!

入社の決め手は・・⁉ 色々な経験を積める会社が「アピリッツ」だった

ーーアピリッツ 入社の決め手を教えてください。

米田若いうちから色々な経験ができると感じたからです。

アピリッツが、Web・ゲーム・人材派遣と、様々な事業を展開していることを知り、

「この会社なら、色々な経験を積めそう!」と思って入社を決めました。

フレックス制度を活用して、資格勉強など自己研磨の時間を確保できる点も、

この会社なら、より自分の幅をより広げられるなと感じましたね。

中村:私は自分の姉がアピリッツで働いていたことが、入社の決め手になりました!(アピリッツの社員紹介制度について

最初からWebエンジニアに絞って企業を受けていましたが、アピリッツで働く人や職場の雰囲気を、

姉から聞いていたということもあって、この会社なら安心して働けそうと感じて入社を決めました。

髪型や服装が自由な点も、嬉しかったですね(笑)

ーー実際入社してみてどうでしたか?

米田:入社してからバックエンドの案件をメインで担当させてもらっているのですが、

バックエンドエンジニアの仕事の面白さを再確認することができました。

バックエンドはフロントエンドと違ってやり方がたくさんあるので、自分で最善策を考えるプロセスが楽しいです

中村:実際入社してみて、会社の雰囲気も、姉から聞いていたイメージや面接の雰囲気とギャップはありませんでした。

同期はもちろんですが、先輩達がお昼ご飯に誘ってくれたり、柔らかくて優しい雰囲気の人が多いです!

~1年を振り返って~今は上流工程にも挑戦中。。

ーー入社してから今までどんな案件に携わりましたか?

米田:最初はキャンペーンサイトの開発を行っていました。

今は、バックエンドエンジニアとして、プラントのDX化を推進するWebアプリケーション開発の新規機能の要件定義や、API設計・開発を行っています。

中村:入社当初は、メンターの先輩が担当していたToB向けの案件で、フロント周りの実装を行っていました。

今は、ToB向けの新規案件で、フロントエンドとして要件定義や詳細設計を一人で担当しています!

ーー入社して一番大変だったことを教えてください。

米田:今、ベトナム人のエンジニアチームと一緒に案件に携わっているのですが、

会話の中でニュアンスが上手く伝わらないことがあり、大変だなと感じます。

ただ、ChatGPTを使うなど工夫して、今では円滑にコミュニケーションを取れるようになりました!

大変なことも多いですが、一段上のレベルの業務を任せてもらえるようになり、

上司からいいフィードバックをもらうことも増えて自信にも繋がっています!

中村:今担当している案件で、要件定義や詳細設計をしているのですが、

お客様に企画して提案することが、想像以上に大変だなと感じます。。

ですが、自分が要件定義から携わった機能が無事リリースされた時は、達成感とやりがいを感じますね。

後輩と一緒に、自分達も成長していきたい

ーーお二人の今後の目標を教えてください。

米田アーキテクチャ設計もできるエンジニアになって、もっと自分の幅を広げていきたいです。

近くの先輩やメンバーとの会話の中で、最近の技術やトレンドが話題になることが多いので、

普段から積極的にインプットすることを意識して自分の知識も広げています。

中村:私は先輩にしてもらったように、周りの人をサポートできるエンジニアになりたいです。

今、内定者アルバイトに来ている子たちの朝会を行っているのですが、雑談の時間を作るなど、

後輩たちが話しやすい・質問しやすい雰囲気作りを意識しています。

ーー既に新卒の早期選考がスタートとしていますが、お二人はどんな人と一緒に働きたいですか?

米田:正解、間違い問わず、自分で考えて答えを持ってきてくれる人と一緒に働きたいです。

今後、自分が教える立場になるにあたって、どこが分からないかを明確にしてから聞いてくれる方が、その子にあったアドバイスができるからです。

せっかくなら、お互いが成長できる有意義な時間にしたいですね。

中村:私自身、話すことが好きなので、誰とでも自然体で会話ができる人が入ってきてくれると嬉しいですね。

後輩が出来たら、たくさんコミュニケーションを取って、頼りになる先輩になりたいです!

ーーお二人とも、ありがとうございました!

最近人気な記事