自己紹介

AIテクノロジー推進室仙台に所属しております櫻井と申します。

2013年に入社、学生時代にアプリ開発を行っていた経験を買われ、エンジニアとしての第一歩はAndroidアプリ開発からスタートしました。それからJavaを用いた業務システム開発や、親会社のクルマ・ポータルサイト「グーネット」でのAPIプラットフォームの新規開発業務など様々な分野の案件を経て、現在は当社が展開しておりますSaaS「受付クラウドシステム ラクネコ」のプロジェクトで開発セクションリーダーを担当しています。

ラクネコでは先日インターホン機能という、来訪者が受付端末を介して担当者と通話できる機能をリリースしました。

こちらのインターホン機能はWebRTCという技術を用いて実装しておりまして、来訪者が受付操作を行った際に担当者のモバイルアプリケーションに電話発信を行い通話を行うことができます。

本記事ではWebRTC技術についての説明と、どのような構成によって通話機能を実現させたかをご紹介したいと思います。

WebRTCとは?

Web Real-Time Communicationの略で、ウェブブラウザやモバイルアプリケーションが音声や動画などのデータをリアルタイムに通信するための技術です。

端的に説明すると上記のようになりますが、正確には映像の圧縮技術や画面共有で使われるスクリーンキャプチャ技術なども含まれており、さまざまな技術の集合体とも言えます。

従来にもオンライン会議アプリケーションは存在しておりましたが、それらは専用のプラグインやクライアントアプリケーションのインストールが必要で、また開発コストも高いものでした。

しかし現在にいたってはモダンウェブブラウザがWebRTCを標準でサポートしており、誰でも簡単にリアルタイムなコミュニケーションに参加することが可能になりました。

コロナ禍で世界中の人々にオンラインでコミュニケーションを行う文化が普及した今、WebRTCは無くてはならない技術になりつつあると思います。

WebRTCの仕組み

次にWebRTCがどのような仕組みでリアルタイム通信を実現しているかを説明します。

まず大事なキーワードとしてP2P(Peer to Peer)を理解する必要があります。P2Pはネットワーク上で端末同士がサーバを介さずにデータをやりとりする通信方式で、中央サーバを用意するクライアントサーバ方式と比較するとサービス提供者が低コストで運用でき、耐障害性も高いなどのメリットがあります。

WebRTCは基本的にP2Pで映像や音声といったデータをリアルタイムで送受信するようになっています。ただ、P2P通信を確立させるにはお互いに通信相手の情報が必要なわけで、事前にいくつかのサーバ通信が発生します。

まずはWebサーバ・シグナリングサーバに接続し、SDPと呼ばれる通信確立に必要な自身のIPアドレス・ポートなどが含まれた情報をシグナリングサーバ経由で相手に送信します。相手は受け取ったSDPを登録します。この処理をお互いに行います。

ここで通信経路上にNATの存在することによる問題があり、その対処が必要です。

NATはネットワークアドレスを変換する役割を持ち、プライベートIPアドレスをポートに割り当てることにより、ひとつのグローバルIPアドレスで複数端末の通信を可能にします。この変換処理の存在によって、SDPに含まれたIPアドレスでは相手と通信できない状態となってしまうため、それを対処するためSTUNサーバを利用します。

STUNサーバは外部ネットワークから見た時のIPアドレス情報を返してくれます。そのIPアドレスと自身のIPアドレスを比べることで、NAT越えの処理が必要かを判断します。

NAT越えでの接続が必要な場合、外部ネットワークから見た時のIPアドレス・ポートでの通信をしたいことをシグナリングサーバ経由で相手に通知し、その情報を受け取ってもらいます。これによりP2Pが確立します。

ただ、このSTUNでの対処は確実なものではなく、NATやファイアウォールの設定によっては通信を遮断されてしまうことがあります。その時の最後の手段として、TURNという仕組みが用意されています。P2Pによる通信は不可能と諦め、TURNサーバを中継させることにより、データを受け渡せるようにします。

通話アプリケーションを構成するまで

ここまででWebRTCの仕組みを簡単に解説しましたが、シグナリングサーバなどを自前で用意するとなると流石に面倒です。現在はそれらを提供してくれるWebRTCプラットフォームを利用することで、リアルタイム通信アプリケーションを少ない開発量で構築することができます。

有名どころのサービスとしてTwilioやSkywayの他、多くのサービスが提供されています。それぞれクライアントライブラリや料金(無料のものもある)、導入実績などに違いがありますので、利用する際は比較検討をするのがおすすめです。ラクネコでは国内にサーバがあり、低コストで運用できるSkywayを採用してアプリケーション開発を行いました。

設計について

さて、WebRTCを使って通話アプリケーションを作るとなった場合、オンライン会議アプリケーションとは違う点について考慮が必要となります。一般的なオンライン会議アプリケーションでは、時間や会議URLを示し合わせて、各々が自ら通話に参加する形かと思います。しかし通話アプリケーションの場合は、一方が通話発信を行った後に相手に通話のリクエストが来ている事、つまり着信通知の仕組みが必要となります。

iOSでの開発を例にあげますが、着信通知を実現させるためにはPushKit、そしてVoIP Pushを使うことができます。VoIP Pushは標準のPush通知とは異なり、受信時にアプリが動作していなくてもバックグラウンド処理を確実に行え、また遅延が少なく安定性が高いといわれています。まさに通話リクエストのようなリアルタイム処理のためにある仕組みです。またPushKitはVoIP Pushを受け取るためのフレームワークとして用意されています。

次にVoIP Pushの配信に使うサービスですが、もしAWSでシステムを構築しているならAmazon SNSの採用が良いと思います。他のAWSサービスとの連携ができ便利です。

使用する技術・サービスの紹介は以上で、ここからはラクネコで実装した通話を成り立たせるための処理フローをご紹介します。

まずは事前準備として、VoIP Pushを受け取られるようにするために端末の登録が必要となります。デバイストークンと呼ばれる情報が取得できますので、それを自前のAPIを経由させてAmazon SNSに登録します。するとPush通知をパブリッシュ(配信)する際に必要なtarget ARNが返されますので、ユーザに紐づける形でデータベースに保存しておきます。これを通話の発信側、受信側の端末それぞれで行います。

次がいよいよ通話を確立させるまでのフローです。始めにSkywayにPeer作成のリクエストを行います。PeerはSkywayにおける概念のひとつで、Skywayのシグナリングサーバや他の端末との接続を管理するエージェントです。1:1通話においては発信側、着信側の2つのエージェントが存在することになります。

Peer IDを受け取った後は発信したい相手の情報をパラメータに、自前の通話発信APIをリクエストします。すると、DBに保存されているtarget ARNをもとにVoIP Pushが配信されます。VoIP Pushには通話発信側のPeer IDを含めており、着信側は通知受信後にそのPeer IDとの接続をSkywayに要求します。これでP2P通信が確立され、インターネット回線を使った通話が行われます。

今回ラクネコでの構成を紹介させていただきましたが、こちらは実装の一例ですので実現したいシステムイメージにあわせて設計を検討されることが望ましいかと思います。

最後に

一昔前であれば、自分が開発するサービスに音声通話機能を付けるなんてことはハードルが高いと感じていたと思いますが、今こうして機能として実装・リリースできていることから、リアルタイム通信技術がだいぶ身近な存在になったということを実感しています。

コロナ禍で生活様式が大きく変化し、なるべく人との接触を避けるようになった事を考えると、手軽に遠隔でのコミュニケーションを実現するWebRTCは時代にマッチした技術であると言えます。

これから更に活用され身近な存在になっていくかと思いますので、存在や仕組みをなんとなくでも理解しておくと役立つ日が来るかもしれません。

SaaSエンジニア

SaaSエンジニア

仙台本社では一緒に働く自社プロダクト(SaaS)開発エンジニアを募集しています

システムエンジニア、その他多数募集中!

こんにちは。編集部の福田です。

突然ですが皆さん、1日に何回くらいネット検索しますか?

私は20~30回くらいでしょうか。

よく「ググる」なんて言ったりしますが、世界中で38億人のネットユーザーが存在する中で、1日に平均32億回ネット検索がされているようです。
※2012年にGoogle Zeitgeistが言及。それ以降は公表していない

少し古い情報ではありますが、1日の検索回数が30億超えには驚きですよね?

その検索行為そのものがエコに繋がるとしたらどうでしょう?

今回は、ある検索エンジンを使うことで誰でも手軽に環境保全活動へ貢献できるアプリをご紹介します!

検索エンジン『Ecosia』

Ecosiaはドイツ生まれの検索エンジン。

検索で発生した広告費用の利益を一部、植林・森林再生活動を行う非営利団体に寄付しています。

ご存じの通り、ドイツは世界の国のなかでも環境活動への意識が高い国として有名。

学校の教育方針に「自然と環境に対する責任感を身につける」という指針が追加されているほどなんですね!

例えば、

・屋上緑化⇒緑地に家を建てるなら屋上を花壇にするなどして埋め合わせをする

・市内駐車料金を高く設定⇒マイカー利用を減らすことで渋滞とCO2の削減

・「プファンド」というデジポットの制度⇒ペットボトルや缶・ビンなどの飲料を買うと、先に保証金を払うシステム(飲んだ後に容器を返せばお金は戻る)

などなど、かなり本気で取り組んでいるんです!

そんなドイツ生まれのEcosiaの仕組みはどういうものなんでしょう???

『Ecosia』の仕組み

Ecosiaで検索した結果は、Microsoftの検索エンジン『Bing』から提供されていて、Bingの検査結果プラス、Ecosiaのアルゴリズムを採用しているそう。

で、ここからが本記事のメイン部分。

Ecosiaで検索をすると、およそ0.5ユーロセント(0.005 EUR)の利益が発生。1本の植樹に必要な金額がおよそ22ユーロセント掛かるので、

22÷0.5=45

つまり、45回の検索で1本の木を植えることが出来るんです!!

検索での利益は広告費から発生するので、Ecosiaはその広告からの利益8割を植樹・植林活動に使用しているんですね。

実績として

「Ecosia」の公式Twitterでは2021年4月実績として、およそ700万本の樹木が植樹されたという財務報告を公表しています。

以下、Ecosiaのブログでは国ごとの活動実績が掲載されています。

植樹の本数、規模、植えた場所などが明記されています。非常に分かりやすい


日常的に使うために

さて、私たちが普段使っている検索エンジンをEcosiaに変えるだけで、世界中に木を植えることが可能になります。

今日から取り入れられる、日常的にEcosiaを使う方法をご紹介します。

■PCの場合

EcosiaへアクセスしてGoogleの拡張機能へ追加する方法。

普段使っている検索窓に「Ecosia」と検索。cheromeの拡張機能を使います。

自身のブラウザへ簡単に拡張できる


■スマホの場合

スマホでEcosiaを使う場合は、アプリをインストールする必要があります。もちろん無料^^

使いやすいように、スマホのドックへ追加。


「せっかく追加したんだから使ってみないとな!」

ってことで検索しまくる。

検索結果の右上ツリーのアイコンの下に、累計検索数が表示される。

たしか45回の検索で木を1本植えることになるから、あと28回ってことですね♪

つかってみての感想

環境保全活動と聞くと一見ハードルが高そうなイメージですが、検索なら一日に何回もするのでそこまで難しいことはありません。

45回の検索につき1本の植樹を行うので、私は既に1回植樹をしたことになりますね!!


さいごに

いかがでしたか?

普段行っている“検索”という行動を変えるだけで、自然と環境保全活動に協力していることになるので、カンタンに出来るエコですよね!

近年では、環境問題について日本でも関心が高まってきています。

エコバッグ、マイボトル、マイストローなど私たち個人で出来る環境保全もありますが、企業による経済活動のなかでも、CO2排出を削減し、それでも排出されるCO2の数値を知り、その分の埋め合わせをするという『カーボンオフセット』という考え方が誕生しています。

Ecosiaの植樹5,000万本によって、およそ250万トンものCO2が除去されるそうですので、これも『カーボンオフセット』の例ですよね。

日常で取り組める環境保全活動は他にもたくさんあります。

環境問題と真摯に向き合いながら、私たちの住む地球を守っていきたいですね^^

icon_福田

icon_福田

この記事を書いたひと:福田 聡樹(ふくだ さとき)

株式会社プロトソリューション Webマーケティング部所属。自社ホームページ編集長。ブログ/インタビュー/動画などのコンテンツを使って、プロトソリューションのサービスやタレント情報を発信しています。
好きなもの:爬虫類全般、本のにおい。


CODE

2019年8月10日(土)に「tech美られでぃ#2」を開催し、13名の方が参加しました。tech美られでぃは、やこさん、ごまさん、美奈さんの現役エンジニア3名がオーガナイザーの沖縄県内の女性ITコミュニティです。今回は「夏の自由研究」をテーマに、気になる技術や最近の活動内容などを発表していくLT大会を開催しました。飛び入りの登壇者も含めて6名の方が発表しました。

まずはじめに「なごみタイム」がありました。「なごみタイム」は参加者同士が仲良くなっていくためにトークテーマに沿って会話していく時間です。最近のマイブームなど気軽なトークテーマなので、初対面同士の方でも仲良くなっている印象でした。

「なごみタイム」が終わった後、LT大会が始まりました。今回は6名の方が参加しました。まず始めはオーガナイザーのごまさん、やこさん、美奈さんの順で発表していきました。
ごまさんは「VPNつくるよ」というテーマで技術のお話をし、やこさんは「私が目標を達成するまで」、美奈さんは「自己分析してみた」というテーマでエモいお話をしました。現役エンジニアの技術の話と活動内容の話を参加者は真剣に聞き入っていました。

CODE

続いて次のLTに移りました。CODE BASEのプログラミング教室7期を受講している内間さんと、6期に卒業した富山さんがLTを行いました。内間さんは「プログラミング学習3ヶ月の軌跡」というテーマでプログラミング教室でも意識してもらっている習慣化の話をしました。富山さんは、「教材研究」をテーマにプログラミング教室の指定書籍である「Ruby超入門」についてお話してくれました。

CODE

次に飛び入りでまゆみさんが子供向けにプログラミング教室の講師になった話をしたあと、LTの最後にごまさんが再び登場し、「Vtuberになるための技術を調べた」というテーマでVtuberを作る過程を説明してくれました。LTが終わった後、懇親会ということでお菓子を食べながら、エンジニアの業界の話や悩み事の相談など各々交流し、楽しんでいる印象でした。

CODE

tech美られでぃは、沖縄県内のIT女性コミュニティとして、女性ならではの悩みや相談できる場所として、未経験から経験者まで集まるコミュニティです。CODE BASEでは女性が活躍できる場をこれからも応援していきたいと思います。次回も開催すると思いますので、Twitterやconnpassをチェックしてみてください。

4月27日(土)にCODE BASEのプログラミング教室の卒業生である島袋さんと仲嶺さん主催で「Docker勉強会」を開催しました。お二人ともプログラミング教室を卒業後、継続して学習を続け、現在ではLaravlの開発等などを行っている現役のエンジニアです。今回はDockerについて、Dockerでどのようなことができるのか、どんな使い方をすると良いのかを、実際に手を動かしながら学びました。1期生から5期生の卒業生が集まり、初対面の方々もいたということでアイスブレイクも兼ねて、まずは自己紹介からスタートしました!

自己紹介も終わり、早速Dockerの解説から始まりました。
Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェアであり、VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 作成や起動は速く、性能劣化がほとんどないという利点を持ちます。現場でも使い勝手が大変よいということでDockerの利用が広まっています。今回の勉強会はかなり役立つのではないでしょうか。初めてDockerをインストールする方向けというのもあり、丁寧に進めていました。分からないところがあれば、手をあげて聞いたり、隣同士で教えあったりしました。少しでも詰まったらすぐに質問できるなど、現役で活躍しているエンジニアがいるのは心強いですね。

勉強会の終盤ではDockerでLaravelの環境構築ができるように設定しました。Laravelを扱うことが初めての方もいたので、ディレクトリ構造とMVC(Model-Controller-View)処理の流れも具体的な例を交えながら解説しました。OSがwindowsで始めはうまく動作できなかった方も教えてもらいながら動くようになりました。

最後に、参加者の感想を聞くと「久々に会うと卒業後の勉強の仕方が参考になったり、新しいコミュニティに繋がれたりして有意義だった。」と話してくれました。卒業後もイベントに参加することで様々な刺激があり成長できるコミュニティとして、CODE BASEでは自主的に勉強会を企画しています。さらなる成長にむけて精進していきましょう!

ページトップへ戻る