todo-app つくった (auth 編)

https://user-images.githubusercontent.com/1157309/60028163-ce04c700-96d9-11e9-936f-2ce6ba79944c.png

  • 全ページ(まだ1ページしかないけど...)、ログインしていないとみれないようにした。 Amazon Cognito の UserPools を用いて、ここからのみユーザ登録は可能という設定

API

  • JWTの署名をチェックして、直接API を叩かれるのをはじく
  • JWK (JSON Web Key) は https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json に置かれている

クライアント側

  • aws-amplify のSDKを用いれば数行でおわり
  • Typescript 用に、declare module "aws-amplify-react"; などしてあげればエラー消せる
  • User Poolが発行するJWT (id_token が localStorage に保存されている) を Authorizationヘッダに入れて、APIをよぶ

ログイン後の画面

https://user-images.githubusercontent.com/1157309/60028199-e1b02d80-96d9-11e9-8dd4-73db98c12bf5.png

diff

merge なし

github.com

これから

  • current_user のみのコンテンツ出すとかやる
  • UserPools で Google とのヒモ付もできるっぽいのでやってみる
  • react-router などで、public・private のページを分けれるようにしたい
  • ユーザ情報をどこでも使えるようにするには redux なども使った方がいいのか?も
  • firebase の方がいいのかな?

todo-app つくった (pagination 編)

Image from Gyazo

API

  • Qiita, GitHub などの API を参考に、RFC 8288 - Web Linking にのっとり、レスポンスのLinkヘッダを使ってページの情報を返すことにした
  • Total-Count で全体の件数も返すようにした
  • Rails では pagyapi-pagination を使ってページ情報をLinkヘッダで返すことにした

クライアント側

  • 次のページや前のページが存在するかどうかをLinkヘッダをみて確認して、ボタンを出すようにした
  • 次のコンテンツを取得するときに、history.pushState() を用いて、URLのパラメータも変更した(これで、リロードしても大丈夫)
  • useState で管理するものが5つも増えてしまった(これはもっとうまいことできそう...)

これから

  • 1ページ目以外で、todo を足したときに、現在いるページの上部に todo が追加されたように見えてしまうのでいい方法考えたい
  • スクロールイベントをトリガーにして、次のページへ遷移するようなものもやってみる

Diff

github.com

github.com

「失敗から学ぶRDBの正しい歩き方」を読んだ

失敗から学ぶRDBの正しい歩き方 (Software Design plus)

失敗から学ぶRDBの正しい歩き方 (Software Design plus)

  • 仕事でちょくちょく MySQL でインデックス貼ったり、クエリ見直していたのでちょうど良い (めちゃくちゃよい) 一冊だった
  • ORDER BY 狙いのキーの話はよく仕事でも思い出してやってるやーつ
  • DB設計は、事業の設計にも関係しているし、未来を予測できる能力と経験がものを言う感じはする
  • 目の前に delete_flag をなくしたいものがあるが、集計のやり方も見直さなければならないのでなかなか大変そうだ
  • トピック(リアルすぎる失敗体験)ごとに、より詳しい書籍の紹介やオンラインのリンクをたくさん載せてくれていたのでそっちも確認してみよう
  • PostgreSQL は触ったことないけど、つぎなんか作るときは使ってみよかな