アバナードの社内メイカソンで優勝!駆け出しエンジニアが1週間でアプリ開発した「匿名チャットアプリ」を紹介
アーカイブ動画
アバナードのDNAを喚起する社内メイカソン「!nnovate」とは?
いわゆる社内メイカソンであり、参加チームは与えられたテーマに沿ったアイデアを1週間で開発・実装し、発表する。社員の投票により優勝したチームには、プロのアーティストがメンバーを描いた幅1.5mほどもある大きな絵画が贈られる。今回のイベント告知バナーが、まさにその絵画だ。
「メンバーは全員で6名。私以外はエンジニアで、ベテラン1名、入社3年目が2名、新卒3名という構成でした。私はプレゼンで使う資料の作成や今回のイベントの告知など、広報・マーケティング的な役割を担いました」(長岡氏)
新卒入社組の近藤氏が発起人となり、メンバーを招聘した。顔合わせからアイデア出しまでの期間はわずか1日。翌日から開発をスタートし、1週間後には成果物を発表する日程で進んだ。
今年のテーマは「身近な課題から、世界の課題へ」。メンバーはこのテーマを自分たちの日常に重ね合わせ、どのようなアプリを開発すれば、身近な課題解決に繋がるのか考えた。
コロナ禍、リモートワークが浸透した昨今の状況により、これまで自然と行われていた仲間との交流が激減。Microsoft YammerやMicrosoft Teamsなど社内コミュニケーションツールは整備されているが、仕事場面ではいずれも実名でアサインすることが多い。メンバー内で、「こうした社内SNSでは、ちょっとした愚痴や世間話的な発言を発することが難しい」という課題が浮かび上がっていった。
気軽に本音でコミュニケーションできる「匿名チャット」を開発
そこでメンバーは、匿名かつ発言もカモフラージュ(デフォルメ)されるチャットを開発し、本音を言えるようなオンラインの場を作ることで、課題解決を実現しようと考えた。同時に、チーム名も決定した。そのまま「ホンネで語り合い隊」である。
ここからの説明は新卒メンバーの谷口氏が行った。谷口氏は実際に開発した匿名チャットアプリを公開。イベント参加者に「実際に使ってもらいたい」と投げかけると、参加者も続々とチャットと投稿し、イベントは一気に盛り上がった。
アバナード株式会社 システムエンジニア(Advanced Analytics)谷口 優真氏
チャットルームは「メイン」「ワイワイ」「中二病」と3つあり、ルーム毎に、言葉のカモフラージュ度合いが異なる仕様となっている。メインルームであれば、「こんにちは」と入力すると「こんにちはザマス」のように語尾のみ変換される。
ワイワイルームも同じく語尾のみ「でやんす!」に変換。対して中二病ルームは、入力された言葉とはまったく関係のない、まさに中二病らしい空想的で想像もつかない言葉に変換されるため、社内でも特に好評だったという。
イベント参加者の投稿も中二病ルームに殺到。投稿が多すぎてフリーズするなど、さらなる盛り上がりを見せた。
「入力した文章を機械学習が解析し、語尾や文章を変換しています。中二病ルームの場合は文章が長くなることや、外部APIを使っているので、文章量が多いと重くなるケースがあります」(谷口氏)
投稿者のクレジットに関しては、名前の代わりにパンダや鹿などの動物のアイコンが表示され、誰が投稿したか分からないようになっている。
アーキテクチャの説明は、入社3年目の王 昱祺氏と、入社1年目の近藤氏が行った。
アバナード株式会社 システムエンジニア(FrontEnd Development)王 昱祺氏
アバナード株式会社 システムエンジニア(IoT)近藤 寛人氏
一般的なアプリケーションと同じく、チャットを入力するUIのフロントエンド、API連携も含め言語変換を行うバックエンドのアプリケーションサービス領域である。
メッセージを保存しておくデータベース、操作履歴やエラー監視などを担うAzureモニターといった構成だ。各領域の役割や使用技術、担当エンジニアの属性も紹介した。
「アプリケーションサービスはアプリの核とも言える部分です。簡単な変換はアプリ内で完結しますが、中二病のような難しい処理は外部APIを使っています。APIを利用したのは、開発コストの削減を考えてです」(近藤氏)
語尾変換では機械学習を使っている。単に語尾を追加するだけだと言葉が重なったり、クエスチョンマークが文章の途中に入ったりなど、不自然な日本語に変化してしまうからだ。
大量の日本語データを機械学習モデルに学習させ、違和感のない言葉を生み出す。機械学習を用いたことで、Python、TensorFlow、Dockerといった技術の習得にもつながった。
【パネルディスカッション】コンテストに参加した理由は?
後半のセッションでは、3名のエンジニアによるパネルディスカッションが行われた。様々な質問にメンバーが回答するスタイルで進められた。
──エンジニアになった理由は?
近藤:気づいたら技術に興味を持っていて、専門学校でプログラミングを学んでいました。エンジニアになるのは自然な流れでした。
谷口:以前からIT業界やエンジニアに興味があったわけではなく、就職活動では幅広い業界を受けていました。コロナ禍で面接の多くはオンラインだったので、次第にITが身近に感じるようになり、ITを使った仕事をしたいと考えるようになりました。将来性、やりがいもあると思い、エンジニアになることを決めました。
──今回のコンテストに参加した理由は?
近藤:コロナ禍で入社してから出社したのは1回しかなく、交流していたのは同期だけ。しかもオンラインだけ。他のメンバーとのつながりをもっと増やしたい、交流したいと思ったことが理由です。
谷口:私もリモートで同期と話す機会はありましたが、もっと幅広い層の人と交流したいと思い、参加を決めました。
王:コンテストは今回で2回目です。前回は2位でした。前回の悔しい思いを果たすために今回も参加しました。
──プロジェクトの役割分担は?
谷口:チャットメッセージの言語変換の部分を、Pythonで開発する業務を担当しました。
近藤:リーダーというポジションだったので、調整業務を担いました。加えて、フロントエンドの開発や、インフラまわりの技術調査なども行いました。
王:経験が一番長いので、開発全般を担当しました。フロントエンド、バックエンド、インフラの基本構成などです。役割分担については開発の流れを知っているリーダーとなり、進めていきました。
──特に苦労したところは?
谷口:開発期間が短い中でモデルに1000件ほどの言葉を学習させ、自然言語処理をスムーズにさせる作業が地道だけど大変でしたね。
近藤:アプリケーションサービスとAPIが繋がらない問題が、発表直前まで続いたことです。最初は自分だけでがんばっていたのですが、最終的にはベテランメンバーに指示を仰ぎ、なんとか実現させることができました。
王:デプロイが難航したことです。オフラインの開発は済んでいたのですが、デプロイがうまくいかずアプリを公開できない状況がコンテスト前日まで続いていました。チーム全員で深夜まで検討を重ね、なんとかデプロイを成功させました。
──プログラミング言語や開発環境などのスキルや知識やどのように学習したのか
近藤:エラーがあったら、まずは検索するようにしています。ただ、一度の検索だけでは知りたい情報を得られないケースもあるので、検索ワードを工夫して再度検索する。その積み重ねが、自分的にはスキルアップの早道だと考えています。
谷口:困ったときは他の人の力も借りるよう意識しています。メンバーはもちろん、アバナードにはそれぞれの領域で強みを持つメンバーがたくさんいるので、詳しい方に聞くようにしています。先輩や年齢に関係なく、アバナードは誰にでも気軽に聞ける雰囲気があります。
──コンテストに参加して得られたことは?
谷口:Webアプリはこれまで開発したことがなく、デプロイという言葉を聞くのも、今回が初めてでした。そのため1週間という期間でしたが、多くの知識が身についたと思いますし、やりがいも大きかったです。
【Q&A】参加者からの質問に登壇者が回答
パネルディスカッションに引き続き、イベントを聴講した参加者からの質問に登壇者が回答。特に参加者と年齢が近く、エンジニア職に就きたいと考えている学生からの質問が多く見られた。
Q.プログラミングはほぼ未経験、入社前に勉強しておくといいことは?
近藤:アプリなど、実際に自分の手で開発してみるのがいいと思います。開発してみることで、理解が深まるのはもちろんのこと、実際に動くかどうかも確かめられるからです。ものによってはサポートされていない、開発環境によっては使えないといったようなことがしばしばあります。
谷口:私も手を動かすことが大事だと思います。何を作ればいいのか思いつかない場合は、書籍などを参考に、まずは簡単なWebサイトやゲームを作ることをおすすめします。
Q.プログラマになりたいと思い勉強しているので、アドバイスがほしい
谷口:IT業界は幅広いので、たくさんの人に話を聞くことが大事だと思います。具体的な仕事を聞いているだけで、モチベーションアップにもつながるからです。
近藤:興味がある会社にコンタクトを取ってみることもいいと思います。本イベントへの参加はまさにそのひとつであり、素晴らしいアクションだと思います。
Q.スキルを学習する順番は?
王:まずはWebの学習動画などで、技術概要を把握する。あとは自分で何かサービスを作ってみる。障害が出てきたら、調べて取り除く。このような流れで進めていくと、自分なりの順番も固まってくるし、スキルも自然と身についていきます。
Q.目標設定など、スキルはどこまで高めればよいのか
近藤:ざっと目標は掲げますが、100%達成することはありません。繰り返しになりますが、まずは手を動かし作ってみる。そのスタンスを続けることが大事だと思います。
王:たしかに質の高いサービスを作ろうとしたら、それこそゴールはより遠のいていく感覚もありますね。
Q.ライブラリやメソッドの覚え方や活用方法は?
谷口:Webの技術は進化が激しいので、頻繁に使うもの以外は覚えていません。3年後に使えるものはほぼないからです。必要になったときに思い出したり、覚えたりする。あるいは知っている人に聞く。覚えるよりも、キャッチアップの方が大事だと思います。
近藤:私も完全に覚えているメソッドはありません。言語によって向き・不向きがあるので、この言語であれば、こんな使い方ができるというのを把握しておくことが大事です。
Q.公式ドキュメントをしっかりと理解できるようになるには?
谷口:知らない用語などがたくさんあり、最初はどうしても難しく感じますが、だんだん読めるようになっていきます。まずは触ってみることが大切だと思います。
王:私も苦手ですが、自分が分かりそうな簡単なところから理解するようにしています。例えば、動きそうなコード部分だけを見るなど。動かなかったら、改めて説明を読むといった具合です。
Q.初めてプロジェクトに参加する心構えなど
近藤:与えられたタスクをただ実行するのではなく、求められている成果物の内容を事前にしっかりと確認し、レビューしてもらうことが大事だと思います。言われるがままにコーディングに取りかかると求められている成果物の乖離が出てしまい、手戻りするケースがあるからです。
Q.目指す職種はどのように決めたのか
王:あまり深くは考えなかったですね。Webアプリケーションの開発をしたいと思っていたので、軽いノリでフロントエンドエンジニアになりました。ただ、アバナードの場合は部署異動が可能なので、フロントエンドが合わないと思ったら、バックエンドに行くこともできます。
谷口:現在はAnalyticsを担当しています。大学のときから勉強していた分野なので、そのまま自然な流れでという感じです。
近藤:プログラミングや開発が楽しいと思うのであれば、どこの部署や職種に就いても、問題ないと思います。深く考えず、まずはトライするのがいいと思います。
Q.入社後、想像と違ったことは何か
近藤:想像はしていましたが、仕事とは開発業務だけではないことです。具体的にはクライアントへの提案などですね。しっかりとフォーマットを整えて臨むことが求められます。
王:実際の開発業務ではコーディングは少ないですからね。お客様とのやり取りやコミュニケーション、納期をしっかりと守るといったことが大事になってきます。これらを意識しておくと、入社後の違和感が防げるのではないでしょうか。
谷口:まさに紹介したコンテスト、!nnovateがいい意味で驚きました。入社後わずか1カ月でアプリ開発ですからね。アバナードには挑戦してみようという雰囲気があること。初心者でもトライすればできることを学びました。
Q.アバナードの魅力とは何か
王:個人がサービスを開発することを推奨しているため、技術者に対する福利厚生が充実しています。例えば、無料でAzureが使えたりします。
谷口:「人」だと思います。先ほども話しましたが、困ったことを相談したら、何でも答えてくれるし、挑戦マインドを持つエンジニアが多く集まっている。議論も活発で、自然とモチベーションアップに繋がっています。
近藤:谷口さんと同じく私も人です。技術が好き、技術をシェアするというマインドを根底に持つメンバーが多いからです。