記事

2024/7/16 個人開発LT スライド

スライド作成の流れ

  • 大まかの喋りたいことの目次の作成
  • 目次に沿った内容を肉付けしていく
    • その時に喋りたい内容を全部書いていく、できたら画像も拾っていく

喋りたいことをまとめる

  • 自己紹介
  • Mapmemo
    • 作成のきっかけ
    • 便利な点&面白い点
    • 開発に困った点
    • 開発で意識したこと
    • 実際に友達に使ってみてもらって、どうなのか?

内容の肉付け

  • 作成のきっかけ
    • 旅行にいくヘビーユーザーです
    • その時にいきたいところなどをLINEのグループに投げていて、いつも旅行が終わった後に、あの旅行ってどこにいったけ?ってなりがち
    • LINEは会話していくとどんどん流れていくので、後から探すのが困難になっていく
    • rafutabiという前作になるものはあったけど、わざわざそれを使うよりも、google mapのストックでいいじゃんってなったので、これは没になった
    • 実際に自分が欲しくて作った
  • 便利な点& 面白い点
    • シェアターゲットピッカーでbotにリンクを投げるか
    • LINEのグループに投げるだけ
      • 保存のしやすさにはこだわりました
    • 保存期間の設定ができる
  • 開発に困った点
    • 元々DB設計が苦手
    • 久しぶりにDB設計をしたときに、Firestoreは読み取り回数で課金されるので、読み取り回数を減らすように設計するのが難しかった
    • AIと壁打ちをして、DB設計で時間がとけにくくなった、かつ、自分の勉強になるなって思った
      • NoSQLなので、なんでも正規化したらいいわけではないので、重複をどこまで許していいようにするか?みたいな
    • ページネーションの実装
      • firestoreでorクエリで制限に引っかかっていることに気づかなかった
  • 開発で意識したこと
    • 新しい技術を入れるよりも、自分が一番使える技術を投入して、爆速で作った
      • Next.jsとFirebaseとVercel
    • スマホで使うことを優先的に考えた使いやすいUX
      • PCでLIFFなどを見ることは多くないし、自分はスマホでしかみないので、そこは意識しました
    • APIを全部Vercelのfunctionsに載せているので、いつでも、Cloud Runなり、Firebase functionsに移行できるようにしている
      • linebotからの値は、webhook経由で全て飛んでくるので、エントリーポイント的なファイルを一つ作っておいたら、それを移行するだけで済むので、らく
  • 実際に友達に使ってみてもらって、どうなのか?
 let q = query(
        collection(db, "Links"),
        or(where("members", "array-contains", userId), where("userId", "==", userId)),
      );

↑これだとダメ

let q = query(
        collection(db, "Links"),
        or(
          where("members", "in", [userId]),
          where("userId", "==", userId)
        ),
        limit(linksPerPage)
      );
 

これだとOK

© 2026 Shotaro Kinjo