ISANAの開発について

 みなさんこんにちは、ライトハウスで開発に携わっている石川です。

 当社は、現在主に漁業のサポートを行うプロダクトであるISANA(「いさな」と読みます。)を漁師さんに使っていただいています。今回はそのISANAの開発についてざっくりと紹介したいと思います。

 ただ、技術的な話に入る前に、ISANAが対象としている漁法について簡単に触れさせてください。

 漁業といっても多種多様な漁法が存在しますが、ISANAは主に船びき網漁とまき網漁の漁師さんを対象としたプロダクトとなっています。

 そこで「船びき網漁」と「まき網漁」について簡単に説明いたします。

対象の漁法

船びき網漁とまき網漁は以下の図のとおり、複数の船によって漁が行われます。

船びき網漁(ばっち網漁):2隻の漁船で袋状になった網を曳いて魚を獲る漁法

https://www.maff.go.jp/j/tokei/census/img/funa_biki2.jpg

まき網漁:魚群を網で巻くように包囲して、網を絞り込んで獲る漁法

  • 探索船:魚群を発見する船
  • 網船:運搬船を起点としてぐるっと網で魚群を囲いこむ船
  • 運搬船:捕獲した魚を保存する船

https://www.maff.go.jp/j/tokei/census/img/makiami2.jpg

 こういった複数船隻で行われる漁の場合、これまでは無線を使って各船の魚探やソナーの情報を口頭で共有を行い、漁を行うポイントを決めていました。

 しかし、以下のような複雑な形状を持つ画像の情報を口頭で伝えるのは至難の技ですよね。

f:id:LighthouseInc:20200605145547p:plain

 そこで、ISANAを使ってタブレットで船の位置情報と画像の共有(画面共有機能)を行い、より効率的な漁を行おうという訳です。百聞は一見にしかずです。

 なお、ISANAには、上述した画面共有機能の他にも、その日の出港から帰港までどういったルートを辿ったかを閲覧する機能(操業ログ機能)、投網ごとに漁獲量を記録する機能(漁獲記録機能)などがありますが今回は割愛します。

ISANAのシステム構成

 それでは、ISANAがどのように使われるかが分かったと思うので、続いては、どのようなシステム構成でサービスの提供がなされているかを紹介したいと思います。

ISANAのシステムは、大まかに以下の二つに分けられます。

  • 船上のGPS位置情報や魚探・ソナー画像をアップロードする側
  • アップロードされた情報をタブレットから閲覧する側

構成図にすると、以下の通りです。

f:id:LighthouseInc:20200605152501p:plain

船上のGPS位置情報や魚探・ソナー画像をアップロードする

 ISANAをご利用いただいている漁師さんの船にはISANA専用デバイスが取り付けてあります。

 このISANAデバイスは、船から電源供給を得ておりスイッチを入れると、接続されている魚探やソナー、船上カメラ、GPSの各機器から位置情報や画像データを受け取り、それを専用のAPIに向けて一定間隔で送信しています。

 それを受けとったサーバーサイド側では、画像データはAPIからS3に直接保存し、位置情報(緯度、経度、時間、電波強度、補足しているGPS衛星数)などはDynamoDBに保存しています。

 ISANAデバイスは既に100船団以上に設置されていますが、同時に稼働している船が多い時間帯だと一隻あたり数秒間隔でリクエストがなされるので、多い時ですと8000リクエスト/分にもなります。

 そのため、負荷が高まった際にDynamoDBへPUTされるデータに欠落が生じないように、途中でKinesisを噛ませています。

 私がJOINした頃のISANA開発初期プロトタイプ版ではDynamoDBではなくMySQLにデータに大量の位置情報を保存していて、データが増えるにつれてRSDBSでは捌ききれず画面が全く更新されなくなっていたのを覚えています(笑

 現在もMySQL(Aurora)は使っていますが、数秒間隔で更新される位置情報などはDynamoDBへ保存し、その他のデータについてはMySQLに保存という使い分けを行っています。

 なお、現在のところISANAデバイスのプログラムはPython、Producer, ConsumerはGolangで動いています。

アップロードされた情報をタブレットから閲覧する

 漁中の漁師さんは、操舵室にタブレットを設置し、ISANAの画像共有画面で各船の情報を把握しながら漁を行います。

 タブレット上では、ISANAはAndroid アプリとして動いていて、アプリが情報を取得するために叩くAPIRailsで動いています。この辺はよくある構成だと思うので詳細は割愛します。

 なお、当初は、AngularのWebアプリでしたが、Map上に複数隻の大量の航跡を表示する際にサクサクと動かなくなってきたので、Android アプリに乗り換えたという経緯もあります。

ユーザーの声

 ISANAを使っていただいているユーザさんの声を動画としてまとめているのでよろしければご覧ください。

課題

 もちろんISANAにも課題はあります。

 船によっては、携帯基地局から電波が届く範囲外で漁を行うこともあり、そういった状況下においては、ISANAデバイスからのデータの送信やタブレットからアプリの閲覧することはどうしてもできなくなってしまいます。 画面共有機能の更新間隔は数秒に一回となっていて、もっと間隔を短くして欲しいといった要望もありますが、SIMカードの通信容量の制約やコストの側面などにより実現に至っていません。

総括

 ISANAは様々な課題を抱えていますが、今後もUIや機能の改善を行っていき、漁師さんにもっとご利用いただけるプロダクトを目指して行きたいと考えています。

 ISANAを設置したい場合はこちらのフォーム画面よりお問い合わせください。