2019年度の未踏を終えて

2019年度の未踏が終わったのでこの1年を振り返ります.

未踏とは

IPA情報処理推進機構)が行なっている「未踏IT人材発掘・育成事業」のことです.

「未踏事業」は、ITを駆使してイノベーションを創出することのできる独創的なアイディアと技術を有するとともに、これらを活用する優れた能力を持つ、突出した人材を発掘・育成することを目的としています。

未踏事業ポータルページ:IPA 独立行政法人 情報処理推進機構

ざっくり言うと,IT技術を使って自分のやりたいことをやらせてもらえるプロジェクトです. プロジェクト達成のために依託金をもらえて,その使途は自由です. そして,プロジェクトマネージャ(PM)によるアドバイスを受けながらプロジェクトを進めていきます. 私たちはさくらインターネットの田中さん(@kunihirotanaka) に指導していただきました. いつも優しくも厳しいアドバイスをくださったり, いろんな人を紹介してくれたり, 本当にお世話になっています.

未踏期間で作ったもの

大学の同期(@mc475_46)と二人で, IoTデバイスの監視を誰でも簡単に実現できるSaaSmotch」を開発しました.

motchを使うと,SDKをインストールして2行追加するだけでIoTデバイスの監視が可能になります. また,直接インターネットに接続できないデバイスに対応するため,motch daemonを提供しています. motch daemonをインストールしたコンピュータのUSBポートにIoTデバイスを挿入するだけで, デバイスの管理ができるようになります.

SDKdaemonの内部では,motchのバックエンドに対して定期的に生存報告が行われていて, それが途切れればユーザーに通知がされるようになっています.

また,motchのバックエンドに対して,Webhookとして直接リクエストを送ることで デバイスの管理も可能になっています.

現在テスト中で,3月中にリリースするために開発を進めています. 応援していただけると嬉しいです🥰

未踏期間でやったこと

相方は主にデバイスSDKとWebフロントエンドを, 私は主にバックエンドを担当しました. 応募当時,クラウドコンピューティングとサーバーレスに興味があったので, 今回は自分で勝手にサーバーレス縛りで開発を進めていきました.

サーバーレスアーキテクチャとは

サーバーレスアーキテクチャとは,ざっくり一言で言うと, FaaS(処理時間だけ起動するサーバのようなもの)と BaaS(アプリケーションに必要な部品(DB,MQなど)をAPIを通して利用可能なサービス) を組み合わせてアプリケーションを構成する設計手法のことです1

なぜサーバーレスか

一般的に,サーバーレスを利用すると,常にサーバーを起動してクライアントからのリクエストを待ち受ける 従来のアーキテクチャ(サーバーフルとも言われます)に比べて,運用コストが低くなると言われています.

その理由は,DBやMQを自分でホストしたりメンテナンスしたりする必要がなく, サーバーが落ちることを心配しなくていいからです.

また,アプリケーションのローンチ初期はアプリケーションのアクセス回数が少ないため, 従量課金型のサービスを組み合わせた方が常時起動するサーバーを抱えるよりも安く済みます.

サーバーレスを採用した本音は

単なる技術的興味です笑

実は,未踏応募前の私はクラウドも初心者でサーバーレスもほとんど触ったことがなく, その特徴を聞いていつか使ってみたいなあと思っていました. しかし,周りに誰もサーバーレスの経験がある人がいなくて,友達との開発案件でも, 何度か提案はしたものの却下されてしまいました.

そんな時に相方から未踏に誘われました. 未踏なら実装にこだわっても許されるのではないかと思い, サーバーレスでやってみたいと提案書に書いたのがきっかけです.

結果的に,考えられる他のアプローチよりも低コストでそこそこスケーラブルな バックエンドができたのでよかったです.

実装したアーキテクチャ

最終的には,こんなアーキテクチャを実装しました.

f:id:arailly:20200301112321p:plain

運用に必要な部分はまだまだこれから実装しなければいけませんが, 機能要件としては,自分が作れる中で最高のものができたと思っているので, 心から満足しています.

アーキテクチャの詳細の解説記事もそのうち書きます.

追記:書きました.

arailly.hatenablog.com

サーバーレスを使い込んだ感想

辛いところもたくさんありますが, Webアプリを作るときのファーストチョイスとして間違いないと思います.

いいところ

第一に,クラウドベンダがインフラを丁寧に整備してくれてることです. サーバーの設定・運用の手間がないと人生がこんなにも豊かになるのかと再認識できました. そして,安くてそこそこスケールします. 規模が大きくなってくると高いのでリプレースが必要ですが, それはユーザーが増えたときに考えればいいです.

辛いところ

まだまだ新しい分野なので,サービスによっては情報が少ないことです. 特に辛いのは,AWSのドキュメントが読みにくいことです.

このチュートリアルでは、Amazon DynamoDB テーブルを AWS AppSync に移行してそれを GraphQL API に接続する方法について説明します。

AWS AppSync がユーザーに代わって DynamoDB リソースをプロビジョニングするようにできます。または、必要であれば、データソースとリゾルバーを作成することで、既存のテーブルを GraphQL スキーマに接続できます。いずれの場合も、GraphQL ステートメントを使用して DynamoDB データベースへの読み取りと書き込みを行うことができ、リアルタイムデータをサブスクライブできます。

GraphQL ステートメントが DynamoDB オペレーションに変換され、レスポンスが GraphQL に変換されるように、特定の設定ステップを完了しておく必要があります。このチュートリアルでは、いくつかの実際のシナリオおよびデータアクセスパターンを使用して、その設定手順の概要を示します。

チュートリアル:DynamoDB リゾルバー」より

初見で読めたらすごいと思います.日本語で書かれていないことは確かなので, 私はAWS語と呼んでいます. 一方で,ドキュメントがあるだけありがたいのは確かなので, 社会貢献として,時間があるときにノウハウをブログで共有しようと思います.

また,運用が楽である反面, ローカル開発環境でクラウド環境を再現するのが難しいです.

そして,サービスによってはCloudFormation管理が大変です. CloudFormationを書きたくないので 私はAWS SAMを使ってましたが, SAMは基本的にはLambdaの開発ツールだと思っているので, Lambdaを使わない選択肢を取るのが難しいです. APIGWのService Proxyとか.

あとは,クラウドのシステム障害時はどうしようもないです. ユーザーへの謝罪と神頼みしかやることがありません.

未踏を振り返って

頑張ったこと

応募当初,私はサーバーレスだけではなくAWSそのものの初心者でした. しかし,プロジェクト名に「サーバーレス」という単語を入れたからには, そのプロジェクト名に恥じないようなアーキテクチャを実装して, 最終報告会で発表しよう,と心に決めました.

そこで,手の空いた時間にはAWSのドキュメントを片っ端から読み込みました. このおかげでAWS語が読めるようになりました.

また,ドキュメントを読むだけではなく, とにかく手を動かしてサービスを実際に触ってみることを心がけていました. 実際に,20以上のAWSのサービスを実際にシステムに組み込んでみて, 使えるかどうか判断していました.

自分の部屋に閉じこもっていると視野が狭くなるのを感じたので, AWSやサーバーレスの勉強会,ワークショップ, コンペティションに積極的に参加して学びました.

それ以外にも,AWSで大規模なモバイルアプリを構築している会社の方にAWSをハックする方法を聞いたり, AWSのソリューションアーキテクトの人にもフィードバックをもらいながら開発を進めました.

その結果,そこそこスケーラブルで低コスト,かつメンテナンス性の高い motchのバックエンドを実装することができました.

また,100個以上のAWSリソースを組み合わせてアプリケーションを作った経験から, AWSのサーバーレス系サービスについて深く理解することができました.

院試や本業の研究,そのほかのプロジェクトとの並行作業だったのも少し大変でした. 結果的に,本業をおろそかにすることなく,未踏を完遂させられてよかったです. 研究室の指導教員の理解があって本当に助かりました.

未踏のいいところ

未踏はいいぞ.

最先端の技術を知ることができることです. そしてそれ以上に,それを実現する優秀な人々と話せることです. 未踏関係者みんなすごいです.尊敬してます.

さらに,PMやOB,外部のアドバイザーなど, 普通に生きてたら話せないようなすごい人に指導してもらえるのも素晴らしいところだと思います.

また,進捗報告が基本的に東京開催なのですが, 私のような首都圏在住者以外の人には交通費, 宿泊費をきちんと出してくれます. 朝早い時や夜遅くまでかかる時は,前泊, 後泊の宿泊費まで出してくれるので, その度に東京観光ができます (結局未踏関連でやることが多いので忙しくて遊べた試しがないですが).

お金を出してくれるだけではなく, 毎月クリエータやPMとしっかり議論する機会があるので, とても有意義でした.

そして,事務局の方が親切で対応が丁寧なことです. 一応国が絡むプロジェクトなので, お役所仕事的なタスクが降ってきたり, ややこしい制約があったりするのですが, 事務局が間に入ってきちんと面倒な仕事を吸収してくれます. ミーティングの準備なども本当にいいです.

残念だったところ

唯一残念だったのが,未踏期間を通して, 私の成果をきちんと評価してもらえなかったところです.

未踏には,言わばフルスタック信仰および 低レイヤー信仰が存在するように感じます. それに対して,クラウドのような抽象化された技術を組み合わせた提案はそれらと両極に位置するものです. そのため,未踏関係者にクラウドに詳しい人が少なく, 未踏の定期進捗報告会においても, アーキテクチャに関して有意義なフィードバックが得られたことはほとんどありませんでした. それどころか,誰でも簡単にできるんだろう,そんなこと小学生でもできるよ, というようなことを言われたのが辛かったです.

サーバーレスコミュニティや未踏の外部のAWSに詳しい方々には 私の実装したアーキテクチャを評価してもらえましたし, そのような方々からのフィードバックの方が参考になりました.

おそらく,クラウドを応用した提案が今まで未踏にほとんどなかったのだと思います. 今思うと,進捗報告にサーバーレスに詳しい人を招待してもらえるように提案しておけばよかったです.

最後に

少し悔しいこともありましたが,この未踏期間, 全力を尽くして頑張って本当によかったです. 自分が心から満足できるアーキテクチャを作り込むことができました. 同期のクリエータ,PM,OBとの交流も本当に有意義で, かけがえのない9ヶ月間になりました. 今後もこのつながりを大事にしていきたいと思います. IT技術を使ってやりたいことがあるという人は, 遠慮なく応募してみてください! 2020年度以降から依託金も増えましたし!

最後に,PMの田中さん,同期・OBのクリエータ,事務局の方々, お世話になった方々,本当にありがとうございました.

これからも頑張ります.