Open15

iOSエンジニアがNext触ってみる

simorgh3196simorgh3196

https://zenn.dev/catnose99/articles/cb72a73368a547756862

これを参考に自分の記事のまとめ、自己紹介、GitHub等各種リンクを置いたページ(こういうのなんて言うんだろう)を作ってみる。

普段iOS開発していてWebフロントは初心者なので、調べたりコード見たりしながら頑張る。

simorgh3196simorgh3196

deno + Aleph.jsも新しくて面白そうだけど、初心者なのでまずは記事にあるNextで作っていく

simorgh3196simorgh3196

Nextのyarn create next-app --typescriptでプロジェクトを作る

Linter, Formatter

LintはESLintが自動で入っているがformatterは無いためPrettierを入れる
yarn add --dev --exact prettier eslint-config-prettier

ESLintとPrettierを共存させるためにeslint-config-prettierも入れ、.eslintrcの設定を変更する

{
  "extends": [
    "next",
    "next/core-web-vitals",
    "prettier"
  ]
}
simorgh3196simorgh3196

JSの日付の扱い

参考コードではdayjsを使っている。
他にもdate-fnsが有名っぽい。

dayjsはオブジェクトベース、date-fnsは関数ベースらしい。

どちらも良さそうなので一旦参考コードにあるdayjsを使う。

ちなみにjs(ts)のsortがちょっと変わっていて、booleanじゃなくて数値を返す必要があるらしい。
https://runkit.com/embed/mpmqk4tnk79y

arr.sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1))
simorgh3196simorgh3196

API通信はfetchを使う。

クエリパラメータはURLSearchParamsを使って付与するとエンコードもやってくれるっぽい。
https://zenn.dev/syu/articles/946a2b5fdf292e

こんな感じかな

const query = new URLSearchParams({
    page: "1",
    per_page: "100",
    query: `qiita user:$userId`,
  });

  const response = await fetch(`https://qiita.com/api/v2/items?${query}`);
simorgh3196simorgh3196

ちょっと表示内容いじったせいでUI崩れてるけど一旦取得したものの表示までできた

simorgh3196simorgh3196

ふと気になったけど、APIがうまく動かなくてサイトがうまく更新できなかった時のハンドリングってどうするんだろう

slackとかに通知飛ばしたり、失敗時はすぐにリトライでジェネレートし直したり?

simorgh3196simorgh3196

Zennからもとってこようかと思ったけどZennに記事出してなかった

一旦UI調整

simorgh3196simorgh3196

作ってて疑問に思った

  • export defaultよくわかってない
  • コンポーネント?をfunctionで書くのとconstで書くのどっちが良いのか、型指定は要らないのか