10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クソアプリAdvent Calendar 2024

Day 14

1日1ハム語🐹 ハムちゃんが適当にお返事してくれるチャットアプリつくってみた

Posted at

クソアプリ Advent Calendar 2024 14日目の記事です。

初アドカレです

ごきげんよう!株式会社スーパーハムスターでエンジニア見習いをしているちなっちゃんです。授業レベルのC言語以外ほぼ何もわからないレベルの完全未経験からスタートして、React/Typescriptを触り始めて9ヶ月くらいが経ちました。普段はフロントエンドに参画してます。
今回はアドカレに登録して、自分でcreate next appから業務外で作ろう!という環境をつくることで、趣味開発デビューしました✨

▼リポジトリはこちら(publicリポジトリ作るのはじめて)▼

想定外にも前日夜しか時間が取れず、高倉町珈琲で修論がやばい友達と一緒に限界作業祭でなんとか完成👏 所要時間4時間くらいです

できあがったもの

ハム語でおしゃべりしてくれるwebアプリをつくりました‪🐹

▼ここから遊べます(アプリ名は初期のまま変えてないクソ仕様)▼
https://hamu-language.vercel.app/

会社がハムちゃんなので、ハムネタにしたいなと思いハムベースで考えてました。そういえば私ハム語マスターだな!と思いハムちゃんとおしゃべりできるもの作りたいな〜というのがきっかけです。

みため

斜めストライプです🩵🤍🩵🤍
作りながら見た目を考えたので、CSSで指定している数値は目分量です。
最初はレスポンシブ非対応で作ってましたが、スマホの方が使うかなと思ってスマホでも見た目が(あんまり)崩れないように記事投稿前にちょっと修正しました。

パソ(MacBookAir13inch)

スマホ(iPhone13mini)EF3FB4EC-B3B2-4E6E-96F0-CE1D7045EA48.JPG

(クソみたいな)仕様

任天堂のハムご!(https://www.nintendo.co.jp/n02/dmg/b86j/hamugo01/index.html )に掲載されているハム語を完全ランダムで返してくれます。

ハム語はワードリストとしてデータを持っているので、その中から適当にハムちゃんがお返事してくれるという感じです

ハム語リスト
const hamWords: string[] = [
        "アウチッチ",
        "うちゃー",
        "あかいトーン",
        "うにに~",
        "あたっちゅ",
        .....以下略
        ];      

const randomWord: string = hamWords[Math.floor(Math.random() * hamWords.length)];

ランダムなのにたまにぴったりなお返事が来ることがあって、ちょっと嬉しい🐹✨

ユーザーからメッセージが送られたら、1秒後にハムちゃんがお返事をくれます。この部分はちょっと工夫しました。

メッセージの表示部分
try {
      const res = await fetch("/api/randomWord");
      if (!res.ok) {
        throw new Error("Failed to fetch random word");
      }
      const data: { word: string } = await res.json();

      // ユーザーのメッセージを会話履歴に追加
      setConversation((prevConversation) => [
        ...prevConversation,
        { ham: '' , user: message}, // ハム語はまだ空で追加
      ]);

      setMessage(''); // メッセージを送信後、入力欄を空にする

      // 1秒後にハム語の返答を会話履歴に追加
      setTimeout(() => {
        setConversation((prevConversation) => {
          const updatedConversation = [...prevConversation];
          updatedConversation[updatedConversation.length - 1].ham = data.word;
          return updatedConversation;
        });
      }, 1000); // 1秒後にハム語を更新
    } catch (error) {
      console.error("Error fetching word:", error);
    }

つくるプロセス

大体何するか考える→適当に作り始める→困ったらGPTに聞く→…を繰り返したらできました。
特に、ランダムに単語を返すAPIの部分は全然わからなかったのでGPTに頑張ってもらいました〜時代だ〜!

ちょっとしたこだわりポイント

  1. ハム語の返答が表示されるのを「1秒後」にしました。考えてる感を演出したく…🧐
  2. チャットみたいな見た目にしました!喋ってる感出るかなと思って
  3. メッセージ送信ボタンを「送信」じゃなくて「📤」にしました、スマホで見るとちょうど良くなります

さいごに

create next appから作るの難しいと思ってたけど、適当で良ければ思ったより簡単に触れるということがわかってよかったです!!次はちゃんとした何か作りたい〜!!

来年もクソアプリアドカレ参加したいです!!最後までご覧くださりありがとうございました!!

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?