Harumaki Blog

2026/4/20 0:57:47

Reactをちゃんと理解するぞ

昨日からタイピングのアプリを本格的に開発しており、一旦タイピングゲームをするためのガワの部分としてReactでフロントエンドを作っている。

Reactはインターンの時も何となく書いているという感じなので、しっかり理解しないとやばいなと感じる今日このごろ。この個人ブログの記事の執筆部分とか自動保存部分とかは結構Reactっぽく細かい制御をしていた気がするので、その時に改めて状態とかコンポーネントのライフサイクルとかについてしっかり頭に入れたという感じだったが、もう4ヶ月前のことなので、かなり忘れてしまっていた。

てなわけで、今日はReactのリハビリを行いながら、タイピングアプリの開発に精を出していた1日である。と言っても対して集中して書いているわけでもないんだけど。

今日大きく詰まったところは

  • ReactでsetIntervalを使用したタイマーの作成

  • stateの値が即時反映されないこと

  • ひらがなをローマ字入力する際の揺れを吸収する方法

の3つだった。上の2つはReact中級者の人にとっては当たり前のことなんだが、いつも雰囲気でやっているせいで結構理解に戸惑ってしまった。

1つ目のReactのsetIntervalを使用したタイマーの作成については、useEffectを使用して実装したが、あまり参考になる良さそうな記事がなくて少し手間取った。一旦はuseEffect内でそれっぽい感じに処理を書いてみたのだけど、多分書き方が微妙だと思うので、コンポーネントを切り出す時には少し修正が必要そう。ちなみに、以下の記事はそこそこ参考になった。

https://qiita.com/FumioNonaka/items/587c3ed8545d820f330c

2つ目のstateの値が即時反映されない問題については、そもそもuseStateのsetterは非同期関数なので、呼び出しタイミングでは、キューにレンダリングのスケジュールを追加する処理を行い、良きタイミングでReact側で再度レンダリングをするらしい(公式docにはトリガー→レンダ→コミットとして記述されている)。つまり何が言いたいかというと、stateの更新タイミングというのはあくまで非同期でReact側で制御されるものなので、stateの更新後の値を何らかの処理に使いたい(例えば、stateが特定の値になったタイミングで何か別の処理を行う)場合には、更新後の値を別の変数として持っておくなりして使用する必要があるということだ

3つ目はReactとは直接関係ないが、日本語のタイピングアプリを作る上での少し厄介になるポイントなので、少し説明しておく。
前提として、私が現在開発しているタイピングアプリは、変換操作を含まないタイピング(寿司打やe-typing)の形式のアプリである。(変換操作を含む場合は、単に変換後の文字列を比較すれば良いだけ)

かな文字の入力方法は大きく分けて訓令式とヘボン式の2種類があることはご存知の通り。また、「ん」は、次に来る文字が存在しない、または「なにぬねの」の時はnnでなくてはならないが、それ以外では、nでもnnでもんに変換される。このように、あるひらがな文字列を入力するローマ字の組み合わせは1つに定まらないというのが、日本語のタイピングを照合する際の難しさの一つである。
例えば、「しんじゅく」というひらがなに対応するローマ字入力は

  • sinjuku

  • sinzyuku

  • shinjuku

  • shinzyuku

  • sinnjuku

  • sinnzyuku

  • shinnjuku

  • shinnzyuku

の8通りある(siとshi、nとnn、juとzyuで2通りが3つあるから2の3乗で8通りになる)。お

https://adalabtech.com/blog/typing-game-romaji-converter

上記記事のconverterが具体的に内部でどのように文字列評価をしているのかまでは具体的には追えていないが、出力がおかしい箇所があるので後で直す必要がある。500行くらいあるファイルなので、まぁまぁめんどくさい。GithubのRepositoryを見に行ったら、コード置いてあったんだけど、Claude Codeが作ったっぽい雰囲気だった。本人のタイピングアプリ内は日本語対応していなかったのは、Caludeが吐き出したこの合致評価アルゴリズムを修正できなかったのだろう。こうなったら自分で読んで修正するしかないcar。(AIでやらせてもあまり勉強にならないので、個人開発は基本的に自分で手を動かしてやるつもり)

あとは、ReactのonKeyDownイベントハンドラで入力キーを一文字ずつ受け取ってそれを元に逐次入力キー列を評価していくという感じの処理なので、普通に結構めんどくさい。
ただ、Reactの勉強という観点では、タイピングアプリはかなりおすすめかもしれない。JSのイベントなどの概念にも触れつつ、ReactのState周りをかなり丁寧に見ていく必要があるため。(WEB開発のチュートリアルとしてTODOアプリをやるみたいな感じ)

明日からは技術研修の開発も本格的にスタートする感じで、おそらく持ち帰りで作業することも増える気がするけど、配属されたらReactも当然書くので、少しずつ感を取り戻しつつ、同時に本質的な理解を進めて行かねばという感じ。頑張ろう💪

ちなみに、今日の日中は自由が丘に買い物をしに行って、雑貨屋さんが並ぶストリートマーケットをぶらぶらしていた。インド風の藁?ぽい材質の手提げ鞄が、プレゼントを詰め合わせるのにちょうどよくて、買おうとしたのだけど、前の客がずっと店の人としゃべっててかれこれ10分くらいうろうろと待機する羽目になった。自由が丘で買い物するような東急沿線に住んでいる主婦は土日なんて本当に時間を持て余しているのだろう(クソデカ主語

2426文字)

2025/12/17 19:48:50

同じtimestampのはずなのに表示が違う時(Next.js)

ブログサイトをNext.jsで開発している最中だが,以下の問題が発生している.前提として,DBから取得した同じ日時データを編集ページ,閲覧ページで表示...

2025/12/12 0:24:16

初投稿

個人ブログを作成してみた.はてなブログとかCMSを使っても良かったんだけど,ブログ自体が,自分で使う機会が多そうなのと.色々機能追加の余地があって個人...

2026/1/10 12:14:15

米社会と小麦社会における性格の違い

https://youtu.be/aGvqMW4aAUc?si=gOXWjg2zfxiw-77b上の動画は,日本人が英語が不得意な理由を,農業の違いか...

2026/1/21 21:30:27

モチベが湧かないことを言い訳にしない

明日までに教授に一次提出,来週中に最終稿提出だが,全く書き進まない.本当に気が進まない.頭の中でモチベが湧かない言い訳をしているけど,それは言い訳には...

2025/12/12 17:39:17

うまくいかない

修論の締め切りまで残すところあと1ヶ月と少し,来週には学会発表が控えているし,やることは無限にある一番やばいのが内定者インターンのタスクで,かれこれ1...

2025/12/17 18:11:17

学会発表を控えて

明後日に学会発表を控え,一通りのタスクが一旦完了したので,直近の状況を記録する.ここ1ヶ月は,ただでさえ追い込まれた研究に加えて,バイトがうまくいかな...

2026/1/26 10:27:33

PC作業中の姿勢改善アプリ「SitApp」を試してみた

https://sitapp.app/PC作業中の首の凝りがひどいので,SitAppという姿勢改善アプリを入れてみた.SitAppはバックグラウンドで...

2026/2/4 0:55:10

一貫性のある人生の目標を立てたい

生成AIの顕著な進歩に伴って,ソフトウェアエンジニアの仕事の将来性はかなり危ぶまれるものとなっている.エンジニアという仕事の未来については,いろいろな...

2026/4/4 22:29:48

【小ネタ】homebrewのFormulaeとCaskとは?

homebrew経由でインストールしたパッケージを一覧表示しようとすると、下のように、FomulaeとCasksという二つのカテゴリーに分かれてパッケ...

2026/4/13 1:43:42

初めての技術書展

技術書展に初めて行ってきた。池袋のサンシャインシティが会場だった。(ちなみに、先月あった女性店員が刺殺された事件の現場も、サインシャインシティ内のポケ...

2026/4/19 2:07:32

aerospace気持ち良すぎだろ

今日は昼に起きてから、洗濯をしたりちょっと買い物をしたりして、あとはひたすらPCを触っていた。さすがに4月も折り返しを過ぎて、もうそろそろ会社以外の時...

2025/12/23 14:22:52

富山旅行

先日,学会で富山を訪れた.19日の昼過ぎに新千歳空港を出発し,羽田で乗り継いで富山に着いたのは18:00.さらにそこから電車とバスとを2回の乗り継いで...

2026/1/15 16:24:42

マグレブとは

マグレブとは,アフリカの北西部に位置するモロッコ,アルジェリア,チュニジアの3カ国(+リビア)を指す.マグレブ(Maghreb)とは,アラビア語で「日...

2026/4/3 1:34:51

目黒線は5度止まる

今日の出勤では電車が5回も緊急停止して「ご迷惑をおかけされた」俺の家の最寄りは洗足駅で、東急目黒線で東京の方向に登る感じ。1日に5回は流石に多すぎると...

2026/4/15 1:10:47

先入観の力

今日の朝は月に一度の社内表彰があった。年度はじめの第一回ということで、新入社員の自己紹介や役員の方々のスピーチ、社長のお話などがあり、かれこれ1時間、...

2026/3/15 15:21:55

3月の近況

しばらくこっちのブログで日記を書いてなかったので、近況を記しておく。東京に来て今日で昨日で丁度2週間。ここ1ヶ月は結構休みなく色々なことに動き回ってい...

2026/1/6 22:38:45

不動産業界の産業構造とDXについて

上京まで3ヶ月なので,物件探しに取り掛かっている.物件探しの上で一つめんどくさいのが物件探しで,インターネットがあるにも関わらず,更新されていないSU...

2026/4/10 2:41:39

パターンの箱を増やす

今日から技術研修の本番が始まった。今日から約1ヶ月の期間で、社内で使用されるツールを開発することがノルマとして与えられている。生成AIの使用は禁止とい...

2026/4/21 0:43:44

マーシャルのヘッドホンを3回見つけた

今日の出退勤で、マーシャルのヘッドホンをつけている人を合計3人も見つけた。俺も元々知らなかったのだけど、最近人気みたい。ブラックで耳当てが正方形に近い...

2026/4/8 1:32:34

向島の街並みについてなど

この1週間で通勤にかなり慣れた。朝9時に家を出ると、洗足駅からちょうど東急目黒線の南北線直通の電車に乗れるみたいだ。自宅から大岡山駅のアップダウンがこ...

2026/4/4 19:44:46

社会人として初の休日

昨日は仕事が終わった後23:00から彼女と地獄の3時間電話をして、その後もすぐに寝ずにダラダラとプライベート用のMacのターミナル設定をああでもないこ...

2026/1/22 3:10:19

宇宙全体ではエネルギー保存則が成り立たないらしい

エネルギー保存則は物理学における普遍的な法則である.エネルギー保存則はあらゆる状況で必ず成り立つと思っていたのだが実際にはそうではないらしい.物理学で...

2026/4/8 23:15:53

技術研修開始

入社後1週間の全体研修が終わり、今日から技術研修がスタートした。全体研修は基本的に話を聞くだけだったし、ある程度リラックスして話をきていたのだが、さす...

2026/4/21 21:56:55

ブログ閉鎖の危機

彼女から急にLINEがきて、やましいことがないかと聞かれた。今日のLINEはやたらと返信を丁寧に返したので、それが原因なのか。。。(丁寧な返信は、単に...

2026/4/2 1:04:41

今日から社会人

待ちに待った(?)社会人としての1日目が終わった。無事乗り切った。乗り切ったというと大袈裟だが、昨日も夜中まで彼女と電話して寝不足の状態の中で、寝坊せ...

2026/3/31 16:16:53

明日から社会人

2026年3月31日をもって、18年の長きにわたる学生生活が終わる。明日からはようやく社会人になる。これまでは、家族や学校や制度からは何かを与えてもら...

2026/4/6 0:35:02

憂鬱な日曜、爆弾

昨日は途中まで完璧な一日だったが、最後の最後で台無しになった。彼女との電話が長引いたせいで、気づいたら朝の3時を過ぎていた。一番楽しいタイミングで切り...

2026/4/14 1:13:38

高自由度なフォームのテーブル設計について

データベース設計に関する議論が大白熱した1日だった。というのも、現在技術研修で開発しているアプリケーションは、フォームが一つ重要になる。フォームのテー...

2026/4/11 23:17:53

ソフトウェアアーキテクチャの基礎

昨日も長電話のせいで4時に寝て、今日起きたのは13:30。連日の長電話は体に来る。それだけではない。技術研修で社内ツール開発がスタートして2日目だが、...

2026/4/3 22:25:24

東京初一人拉麺〜目黒の藤しろで〜

今日の朝は電車がスムーズに進行してくれたので、始業30分前に到着してしまった。真面目君じゃん。。。〜本日は研修3日目だったが、先日よりも偉い人が講義に...

2026/1/22 22:32:21

光回線と電話回線の違いについて(素材と配線方式)

同期と引越しの話からインターネット回線の話になり,色々疑問が湧いたので調べてみる.通信回線の契約について,回線の種類は2つある.電話回線光回線ケーブル...

2026/2/4 16:11:34

エンジニアとしてのキャリア戦略を考えてみる

社会人Debut(デビュー)する前にエンジニアとしてのキャリア戦略を一旦考えてみる.ここ数週間の間,プライベートや研究が上手くいかなかったりで悩む時間...

2026/4/17 0:00:44

自分の力で進める、決めることが大事

今日も相変わらず、開発には入れず。今日思ったことは、手を動かすのが早いやつが得をするということ。特に0→1を作る場面では、とにかく手が早いことが正義。...

2026/4/6 22:10:05

東京の都市計画

日に日に通勤がスムーズになっていく。実際、今日の通勤は一度も電車が止まらなかったので、家から会社までに要した時間はジャスト40分であった(最短記録)。...