Amplifyを使ってユーザ認証機能付きのリアルタイムチャットアプリを30分で作ってみたいと思います。Amplify(以下Amplify)を初めて耳にする方、ご安心ください!Amplifyはスケールするモバイルアプリおよびウェブアプリを最速で構築するためのサービス/ツール群です。画像/文字認識などのAI機能の簡単な追加オフラインのデータ同期これらを利用するためのライブラリやUIコンポーネントなどを含んでおり、モバイルアプリやウェブアプリを開発して実際にサービスを提供するのに必要なフロントエンド/バックエンドを非常に簡単に用意することができます。実際にその様子をお見せしましょう!今回作るアプリ冒頭で述べたように、ユーザ認証機能付きのリアルタイムチャットアプリを作ってみたいと思います。このアプリは次のような機能を備えています。アプリから簡単にユーザ登録してログインできるログインしたらこれまでのチャット履歴が表示される好きな文章を入力して送信できる任意の人数がチャットに参加でき、参加者のコメントは能動的にリロードする必要なくリアルタイムに表示されるログアウトしてチャットを終了できるAmplifyで作ったリアルタイムチャットアプリAPIにGraphQLを使ってみるAmplifyでAPIを追加するとき、主に2つの選択肢があります。APIについては言わずもがな。Lambdaによって実現されますが、こちらは想像がつきやすいので今回は利用しません。今回はRESTにかわる規格として注目を集めているGraphQLを利用してみたいと思います。RESTとの比較、API・フロント双方の実装から学ぶが素晴らしい記事ですので別途ご覧ください。AppSyncというGraphQLのマネージドサービスが提供されています。マネージドサービスということは、自分たちでサーバを用意しなくても簡単にGraphQLを利用できるということです!AmplifyでGraphQLをAPIに選択すると裏ではこのAppSyncが使われますが、今回のアプリを作るにあたってはバックエンドで何が使われているかといった内容はほとんど意識することなく簡単に開発することができます。今回はAndroidアプリでGraphQLを使ってみたいと思います。Studioのウィザードから普通に作成して、アプリが起動するのを確認できればOKです。CLIというコマンドラインツールをインストールして、これで対話的に機能を追加したり編集するのがAmplifyを利用する基本的な流れとなります。CLIをインストールします。AWSにIAMユーザを作成し、そのユーザ権限でCLIを実行できるようになります。コマンドを実行し、AndroidプロジェクトにAmplifyをセットアップします。app/src/main/resあたりを選択/入力すれば、あとはデフォルトで問題ありません。基本ステップの「このとき何が起きているか」を参照してください。このプロジェクトのAmplifyの設定を見ることができます。|いまは何もしていないのでこれで問題ありません。「GraphQL」を選択します。resource次にGraphQLのスキーマを変更します。今回はチャットのメッセージとして一意なIDメッセージの送信者メッセージ本文を持ったMessageというモデルを作ることにします。continueモデルは次のようにします。String!}編集したらウィザードを進めます。するとローカルに「Auth機能」と「Api機能」が追加されています。することで、このバックエンド構成がそのままAWS上にプロビジョニングされます。ユーザを作成してログインを試みたり、GraphQLのコンソールからクエリを発行したりしたいところですが、今回は敢えてそのあたりに可能な限り触れません。その辺りを意識しなくても開発できるのがAmplifyの良さだと思うからです。アプリを書き始めます。Startedを参考に必要なライブラリや設定を追加します。どれも、Androidエンジニアにはお馴染みの設定なので特に詰まることもないでしょう。いうファイルが作成されているはずです。これはAndroidアプリからAmplifyを利用するための設定を中央集権的にするための設定ファイルです。設定がきちんとされているか確認してください。設定画面で見つけることができます。}}いよいよAndroidのコードに取り掛かります。指定するのを忘れないようにします。})次に、認証画面を表示する部分を作ります。先にインストールしたdependenciesのおかげで、認証用の画面は自分で作らなくても利用することができます。認証状態に合わせてコールバックしてもらえるリスナが用意されているので次のように登録します。メソッドを呼んでやるだけです。辺りで登録解除してやるとよいでしょう。super.onStop()}これでログイン機能は実装できました!サインイン画面にはユーザの新規作成、確認コードの送信なども最初から組み込まれており完全に動作します。ここで早速ユーザを作成してログインを試してみてください。サインイン画面ここからサインアップもできる確認コードも提供されるこれでログイン状態でGraphQLのAPIを自由にアクセスすることができるようになりました。ミューテーションを実装するGraphQLではデータの作成や変更、削除などをミューテーションと呼びます。先にウィザードでMessageモデルを作ったことで、Amplifyが自動的にそのモデルを使って行うミューテーションのためのデータ型などを自動生成してくれます。対してエンキューするだけでミューテーションを簡単に行うことができます。次のようなメソッドを作って、ボタンクリックなどをトリガとして実行することで簡単にデータをGraphQL越しに永続化することができます。DynamoDBをデータソースとして扱います。したがってミューテーション後はマネジメントコンソールからデータが格納された様子を確認することができます。クエリを実装する同様に、GraphQLではデータ取得操作をクエリと呼びます。クエリもまったく同じように型安全にリクエストやコールバックを作成し、AwsAppSyncClient#queryするだけでデータを取得することができます。渡して画面に反映するのが典型的な使い方でしょう。サブスクリプションを実装する最後に、リアルタイムにミューテーションを通知してもらうためのサブスクリプションを実装します。お気づきだと思いますが、これもまったく作法は同じです。持つリストに追加して表示を更新するなどといった使い方が一般的でしょう。最後にサインアウトを実装します。メソッドを呼ぶだけです。今回はオプションメニューに追加してみました。}}サインアウトサインアウトすると自動的に認証状態の変更を検知するリスナが発火されてサインイン画面が再び表示されるはずです。まとめちょうど30分ぐらいでしょうか!GraphQLがこれほど簡単に使えることに驚かれたのではないでしょうか。AmplifyはバックエンドはすべてAWSのサービスであり、設定や組み合わせは柔軟でスケールもします。この使い勝手の良さとカスタマイズ性のバランスがAmplifyの大きな魅力だと個人的には考えています。今日の例はごくごく初歩的な内容に留めましたが、今後いくつかのエントリでAmplifyを使ったネイティブアプリ開発の実践的な例をご紹介できたらなと考えています。Amplifyで30分でGraphQL環境を用意してAndroidとつなぐぞっ!つかまれッ!Tweet広告を非表示にするもっと読むコメントを書く2019-11-02JAISTに入学してひと月が経ちましたJAISTに入学してようやくひと月が経ちました1。ひと言でいうとJAISTは最高です。働きながら大学院生になった感想を残しておこうと思います。JAISTは最高JAISTは最高です。僕は東京サテライトの学生なので以下特に「石川本校」と断りのない限り東京社会人コースのことだと思ってください。学生のレベルとモチベーションが高い社会人コースはその名の通り社会人しかいません。働きながら勉強しようという連中なので当然非常に高いモチベーションです。グループワークをするとみんなつばを撒き散らしながら白熱の議論をしますし、発表するとなるとマイクを奪い合って登壇します。いうわけかすでに高い教育を受けて世界を股にかけて活躍している第一線のビジネスパーソンがずらりと揃っています。め先などを一切明かしてはならない」というルールがあります。これは面接官にバイアスを与えないためですが、それにも関わらず彼らがきっちり勝ち残って入学しているのはとても不思議に感じます。そのおかげで授業は引き締まって高レベルに展開され、議論は実経験を反映した実りの多いものになり、みな自分の社会人生活を通じて得た知識や学びをシェアするのに惜しみがありません。これは大変な刺激です。JAISTは甘くないJAISTは浅野哲夫学長の入学の挨拶の言葉を引用すると「偏差値一辺倒の大学教育から一線を画した多様な人材を受け入れる」大学です。このため、確か数年前から「線形代数」や「英語」の筆記試験を廃止し、いまは小論文と面接一本に絞られました2。これによってこれまでは入学できなかった数学/英語が苦手な生徒も多く入学したことと思います。当然のことですが、入学したからといって修了できるとは限らないのです。JAISTの授業はレベルが高く、単位の認定は厳しいです。これは複数の教授と元卒業生の同僚の証言から確かなことです。「門戸は開いてやるから実力で這い出てこいよ」ということです。いう講義は、初回の授業で「今日はいきなりで心の準備もできてないだろうから、高校・大学の復習のつもりで聞いてくださいね」と始まった内容すら、僕にはついていくのが必死でした。まーはっきり言って僕には難しかったですね〜。フーリエ変換は近似したいf(t)に対してn個の関数g1(t)...gn(t)の総和の誤差が最小になる係数を求める作業だという概念は分かった。2019すげえ身も蓋もないけど、USの会社が「情報系の院を出てること」とか求人に書いてありますけど余裕で意味がありますね。修了してるってことはこの程度の学力を身に着けてることがインタビューする前に保証できるわけで。2019あらためて、高校まででやるような数学はごくごく基本的なパズルのピースであって、大学や大学院の授業ではそれらを使って応用的な内容を学ぶのです。院試でわざわざ問わないから君たちが当然にそれを用意してくるのですよ、さもなくば単位は与えませんよということです。必死に食らいついていくしかありません。それから内容以上にキツイのがその過密スケジュールです。2コマずつで2ヶ月で期末試験まで完了というような厳しい日程になります。土日連続開講なので予習復習の期間もほとんどなく、試験勉強も充分にできません。履修がたとえ4半期1教科でも平日夜は予習復習で必死です。授業はほとんどその確認ぐらいの余裕がないと到底ついていけません。働きながら2年での修了は現実的ではないので3年計画を立てています。JAISTは長期履修制度を使って2年分の学費で3年通うことができるのでこれもありがたい点ではあります。関心が高く、ちょいちょい自習していたので正直に言うと大学院でコンピュータサイエンスを学ぶと言ってもこれまでの復習かそれを補強するものになるだろうと高をくくっていましたが、これは大変に甘い目論見であることを知りました。コンピュータサイエンスの裾野は自分が知っているよりも遥かに広く、そのごく一分野を掘るだけでもやっとだとよくわかりました。国際標準化ダイナミクスモデリングIoTシステムアーキテクチャコデザイン集積回路プロジェクトマネジメントと楽しみな授業ばかりです。いまはBluetoothメッシュネットワーク、非同期分散データベース、信号解析(とくに音声データ)などに関心が高まっているので、この3年で研究につながる授業を幅広く取れたらなぁと思っています。JAISTに在学中の先輩方、これから入学を考えているみなさんとぜひ交流したいです。JAISTは大学を出てなくても入れるよそういえば意外にご存じない方が多かったのでここで触れておくと、JAISTは必ずしも大学の学部を卒業していなくても出願できます。詳しくは「学生募集要項」を見て欲しいですが、社会人経験や取得資格を「学部卒業相当」と見なし、受験資格を与えるための事前審査があり、概ね5年以上の勤務経験があれば受験できることが多いようです。なんでもチャレンジしてみるものです!応援しています!おわりにそういえば「34歳からの数学博士」のさのたけとさんのVoicyに呼んでいただけたので、さのさんと堤修一さんと一緒に大学教育やらについて話しました。さんも堤さんも理系修士で、堤さんは情報系なのですが、修了された立場から必ずしもコンピュータサイエンスが必要かどうか分からないといった生の意見が収録されています。良かったらぜひ聴いてみてください!ほいじゃあの!voicy.jp指導教官とは入学前からかれこれ半年も研究テーマについて議論したり面談をしてもらったりしていたのでまだひと月か!という感想が大きいです。↩その代わり面接は論文発表会さながらの緊迫感で、自分の研究計画を他の論文やデータを交えながら発表して自分が入学を希望する学科の教授4人に囲まれてボコボコにされるという厳しい場です。16:09JAISTに入学してひと月が経ちましたTweet広告を非表示にするもっと読むコメントを書く2019-10-05ゴキブリが出た乾かして取り込んだばかりの子供のお昼寝タオルを見ていると、もうすぐ小学校に行ってしまう娘のことを考えて胸が詰まった。毎週毎週洗われて少しずつ色あせ、厚みもだんだん減っていったタオルケット。保育園のベッドにフィットするようにゴムが縫い付けてあり、長女の卒園と共に退役してももはや普通のタオルには戻れない、まさに長女の幼少期に命を捧げたタオルケット。乳児クラスのときにだけ使っていたお手拭きが引退し、幼児クラスのお昼寝タオルも現役を退く。それに連れて子供は大きく強く成長し、少しずつだがそれでも確実に親からの自立の道を歩んでいる。子供の親への依存と執着はちょっとずつタオルに吸い込まれ、気付いたら子供らは親のことは忘れて自分の足で歩んでゆくのだろう。トイストーリーのおもちゃのようではないか。タオルがではない、我々親がだ。いつしか子供はおもちゃから巣立ち、親もまたその現実を受け入れて子供から巣立たねばならないのだ。子供との出会いはあまりにも破壊的で不可逆に僕の人生を変えてしまった。それ以前の暮らしがどうだったかすらよく覚えていない程だ。それほどまでに愛情を注いだ対象がだんだん我々の存在を必要としなくなるという事実を受け入れるのは難しいことだ。それは正しいことだし、確実に起こることなのだ。自分がそうだったのだから。子供がもうすぐ小学校行くの信じられんなあ。退役するお昼寝タオルを取り込んでて感慨にふけってしまった。親の手から離れてひとりの人間になってゆく。