Hirologue

年齢を理由にエンジニアになることを諦めないミドルの成長記録

EP 48: 51歳の挑戦 - 第2部 エンジニア準備編 2

2024年3月1日にHappiness Chain(以下、HC) Euforia 2期生として入会してから早いもので20ヶ月が経過しようとしています。
本記事では、この1ヶ月で学んだことをダイジェストで振り返っていきます。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp


10月の学習時間(期間:2025/10/1 - 2025/10/30)

10月の学習時間は 201.5 時間 でした。
学習日数が30日ですので、1日あたりの学習時間は 6時間43分(403分)となります。

9月いっぱいで現職の業務引き継ぎを概ね終了し、ありがたいことに10月1日から有給休暇をフル消化させていただくことになりました。
それなりに責任ある立場で仕事させていただいてましたので、何かあったら駆けつける約束をしていましたが、特に呼び出しもなくスムーズに業務が進んでいるようでホッとしています。

そんなこともあり、今月は1日8時間を学習時間の目安としました。
目標学習時間(240時間)に対して、達成率は83.9%(38.5時間不足)でした。

所用やイベントで思うように学習できない日もありましたが、全体としてはしっかり学習にフルコミットできた月でした。
振り返ってみても、まずまずの量をこなせたと思います。


10月の学習内容

10月は React, Webセキュリティ, TypeScriptを学習しました。

カリキュラム(2025年10月時点)

React

9月に終わらなかった、Reactのアウトプット課題の続きからです。

直前に学習したインプット教材で React × TypeScript を使っていたこともあり、JavaScript ではなく TypeScript で課題に挑戦してみることにしました。
(TypeScript はまだ学んでいませんでしたが)

それに加えて、これまで触ったこともなかったTailwind CSS も今後必要となるようでしたので、こちらも使ってみようと決めました。
ということで、React x TypeScript x Tailwind CSS のチャレンジングな組み合わせで挑みました!
ちょっとストイックすぎたか?とも思いましたが、このくらいの負荷がちょうど良かったりします。・・・ドMだな笑

まずは、Tailwind CSSの書き方を知るところから。
我らがCTOのUdemy講座を視聴し、Reactプロジェクトへの導入と基本的な使い方を学びました。
www.udemy.com

普段から馴染みある方が講師だと、話がスーッと入ってくる!わかりやすい!
視聴は完了していませんが、ある程度使い方を理解できました。

よし、コードを書こう。
「あれ?これどうやって書くんだっけ?」と立ち止まっては、教材を見返し、再び課題に戻る。 このムーブを幾度となく繰り返しました。

課題着手前のインプット段階で、コンポーネント分割の考え方として「アトミックデザイン」なるものを知りました。
知ったからには使ってみたくなるもので、実践してみましたが、何でもかんでもコンポーネントに分けてしまい、余計わかりづらいものになりました。

そこで、コンポーネントの再利用性や将来的な拡張性、コードの読みやすさを意識して、コンポーネント構成を見直し、納得できる形に仕上げました。
どの程度の粒度で分けるべきか、加減が非常に難しいと感じました。

これも経験あるのみなんでしょうね。

試行錯誤を繰り返し、ようやく完成したある日の真夜中にPull Requestを提出して眠りにつきました。
で、目覚めるとレビューの結果が来ていました!
思わず「はやっ!」と口にし、レビュー結果を見ると、設計の考え方からタイポに至るまで細かくチェックしていただいていたことに感謝です。

なるほど、なるほど、と納得しつつ修正。で、無事にクリア!

また、作成したアプリを GitHub Pages で公開する手順について記事を書きました。

hirologue.hateblo.jp

アウトプット課題が修了したところで、再びインプットに戻ります。これまでの内容を少し発展させた内容の学習です。
実際にハンズオンで進めようと思いましたが、教材で使用するReactやパッケージのバージョンが古くて思うように進めません。
本来であれば、現状のバージョンに合わせてハンズオン学習するべきなのですが、ここは視聴のみに留めました。

数年前の教材が使えなくなるような破壊的変更があるとは・・・フロントエンドの流れの早さを思い知りました。

こりゃあ、一生勉強ですね。
決まりきったルーチンが嫌いなわたしにとっては、変化があるということは嬉しいですね。 流れに振り落とされないように頑張ろうとも思いました!

Webセキュリティ

ここでは、安全なWebサイトの作り方について学びました。
理論をひたすら述べるのではなく、事例を基になぜ失敗したのか、何がダメだったのかを説明してくれる教材でした。
堅苦しくなりがちなテーマでも、こうやって事例があるだけで解像度が上がります。

このセクションの内容については、実務に入ってから何度も見返すことになるでしょう。
ということで、全体像を掴んだところで次に進むことにしました。

本来であれば、次はGoの学習になるのですが、ここを一旦スキップして、実務で使用するTypeScriptの学習を始めることにしました。

TypeScript

先のReactのセクションでTypeScriptのことをわからないながらも見様見真似で書いてきたので、雰囲気だけは掴んでいました。

Udemy講座で基本を押さえた後に「サバイバルTypeScript」を読むことにしました。

typescriptbook.jp

一言で言うなら、「要約とはいえ、すごいボリューム」です!
本当にこれで“要約版”なのか?と思うほどの情報量で、読むだけだと眠くなります(笑)
これは内容を完全に理解するというより、“辞書”として活用するのが正解だなと感じました。
ある程度内容を把握したところで、次へ進みました。

続いて、GitHub上で公開されているTypeScriptの練習問題に取り組みました。 挑戦したものの、見事撃沈。笑

さっぱりわかりません!難しすぎます!

問題文と解答の境目がわかりにくく、若干読むのも大変な構造でした。
おまけに解説もなく、サバイバルTypeScriptのどこを参照すれば解答の内容が理解できるのかもわかりません。
「うーん、これは困った!ということは、このパートを学習する他のHC生も大変な思いをするんじゃないか?」
「よし、AIの力を借りて解説付きの練習問題に仕上げよう!」

思い立ったら即行動。
数日に渡りAIと壁打ちを繰り返し、問題の内容を理解し、自分なりの解説を追加して「TypeScript練習問題(解説付き版)」を完成させて、HC内で共有することができました!

アレンジ内容は以下のとおりです。

⚙️アレンジ内容

🔧 構造面の改善

  • 問題文と解答を 10 問ごとのファイルに分割
  • 問番号の重複を修正
  • 問題文と解答の境界を明確化(折りたたみ構造を導入)

✍️ 内容面の改善

  • WIP の問題文を完成
  • 未記載の解答を追加
  • 誤解を招く表現を修正
  • 解答例に必要な解説を追加
  • 関連リンク(サバイバル TypeScript)を追加
  • 各問にテーマと重要度(3 段階)を設定

各問にテーマと重要度をAIにつけてもらったのは、逆引き的にも使えそうで、中々にグッドでした。

そして、TypeScript学習の最後はアウトプット課題です。
与えられたユーザーデータを基にテーブルを作成して表示させるアプリケーションを作成します。
現時点で、全ユーザー、ユーザーの種別で表示を切り替えるところまで完成しました。

残るタスクは、以下のとおりです。

  • 指定したカラムにソート機能を追加する。
  • 新規ユーザーを登録して表示させる。
  • (オプション)フィルター機能の実装。

ということで、今月中にTypeScriptは終わりませんでした。
続きは来月ですね。


11月のターゲット

  • TypeScript
  • Next.js

今月の感想

10月1日に51歳となりまして、ブログのタイトルも「51歳の挑戦」になりました。
歳を重ねるごとに時間の経過が加速しているような錯覚に陥りますね。

ま、年齢なんてただのnumber型の値ですよ。

「年齢が〜」とか言ってやらない理由を正当化するんじゃなくて
行動して、挑戦し続けることが大事なんじゃないかなと、個人的には思いますね。

閑話休題

10月18日と19日に熱海の温泉宿でHCの開発合宿が大々的に開催されました。
卒業生、受講生合わせて40名余りのHC生が参加しました。
しかも、今回の合宿の宿代と飲食代はHCのCEOである ゆうだいさん の奢りという大盤振る舞い企画で、本当に感謝です。

そこでは、多くの方から話しかけていただきました。
そして、わたしの書いた記事やSlackでの発言が役に立ったという言葉をいただけたこと。
わたしに刺激を受けて学習のモチベが上がった方など、多くの方に影響を与えていた事を知り、嬉しく思いました!

熱海開発合宿の夕食会場・・・晩餐会かっ!

これからも年齢を言い訳にしないで、いい意味での刺激物であり続けるためにも、挑戦し続けます!

急に肌寒くなってきました。どうぞご自愛くださいませ。

では、また✋️

EP 47: Reactで作ったアプリをサクッとデプロイ

はじめに

GitHub Pagesを使ってサイトを無料公開する方法について書いた記事から、気づけばもう1年以上経ちました。
当時はHTML/CSSの学習をしていましたが、今はReactに挑戦しています。

さて、本記事ではReactで作成したアプリをGitHub Pagesで無料公開するための手順を紹介します。

Djangoを学習していた際には、Herokuへのデプロイにはかなり苦労しました。
そんな過去もあって、「デプロイ」というワードを聞くとちょっと身構えてしまいます。
しかし、ここで紹介する方法は驚くほど簡単です!

その方法とは、公開用ブランチを作るためのツール「gh-pages」を使った方法です。
ぜひ試してみてください。

それでは、行きましょう!




前提条件

では、早速デプロイ手順に進みたいところですが、、そのためにはいくつかの前提条件をクリアする必要があります。

その前提条件は、次のものです。

  • GitHubアカウントを持っている。
  • GitHubリポジトリ(public)が作成してある。
  • 使用しているPCで Node.js が使える。
  • Vite を使って作成したReact(TypeScript)アプリがある。

どれか一つでも欠けていると先に進めないので、あらかじめ準備しておきます。

デプロイ手順

1. gh-pagesのインストール

  1. ターミナルを開いて、プロジェクトのあるディレクトリに移動します。
  2. 以下のコマンドを入力して、gh-pagesをインストールします。
$ npm install gh-pages --save-dev

インストールが終了すると、このように表示されます。

2. package.jsonに追記

  1. エディタを開き、プロジェクト直下にある package.json を開きます。
  2. `"scripts" 内に以下の2行を追記します。
{
  ...
  "scripts": {
    ...

    "predeploy": "npm run build",
    "deploy": "gh-pages -d dist"
  },
    ...
}

記述位置について特に指定はなかったので、下図のようにscriptsの末尾に追記しました。

3. vite.config.tsに追記

  1. プロジェクト直下にある vite.config.ts を開きます。
  2. defineConfig内に base: "/<リポジトリ名>/" と追記します。
// 例)リポジトリ名が react_todo_list の場合
export default defineConfig({
  plugins: [react(), tailwindcss()],
  base: "/react_todo_list/",  // 追記!
});

4. デプロイコマンドの実行

  1. ターミナルを開いて、プロジェクトのあるディレクトリにいることを確認します。
  2. 以下のコマンドを入力して、デプロイコマンドを実行します。
$ npm run deploy

デプロイが成功すると、下図のように Published と表示されます。

GitHubで公開設定

$ npm run deploy を実行すると、gh-pages という名前のブランチにプッシュされます。

ということは、EP 10: 作ったサイトを無料で公開してみよう - Hirologue の内容とほぼ同じ手順で公開できます。

ほぼ同じ手順と言っているのは、Branch で gh-pages を選択する点だけ違うためです。 この点だけ注意してください。

では、しっかり公開できているか確認してみましょう。

うん。良さそうだ!


いかがだったでしょうか。
gh-pagesを使えば、Reactアプリも驚くほど簡単に公開できます。
難しそうに感じていた「デプロイ」も、これなら怖くありませんね。

よかったら、この方法を参考に学習した証を公開してみませんか?

では!また✋

EP 46: 50歳の挑戦 - 第2部(エンジニア準備編)

2024年3月1日にHappiness Chain(以下、HC) Euforia 2期生として入会してから早いもので19ヶ月が経過しようとしています。
本記事では、この1ヶ月で学んだことをダイジェストで振り返っていきます。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp


9月の学習時間(期間:2025/8/31 - 2025/9/29)

9月の学習時間は 113 時間 でした。
学習日数が30日ですので、1日あたりの学習時間は 3時間46分(226分)となります。

今月も学習時間の目安として、休日は8時間、平日は3時間を基本としました。
目標学習時間(145時間)に対して、達成率は77.9%(32時間不足)でした。

先月の月報記事でお知らせした通り転職が決まって、「よしやるぞ!」という思いとは裏腹に何故かモチベーションが上がらない1ヶ月だった気がします。


9月の学習内容

9月はJavaScriptとReactを学習しました。

JavaScript

さて、先月の終わりに他のHC生からJavaScriptの練習問題集の存在を教えていただいたので、数日ほど取り組んでみました。
問題に取り組みながら、「なぜ?」と思うポイントもあり、そのポイントについて調べることで少しずつ理解を深めることができました。
やはり、アウトプットありきですね。

ということで、ある程度問題集をやったところで、APIを叩いてデータを取得、取得したデータを表示させる課題に着手しました。
課題を進める中で非同期処理については、ほとんど理解できていないと感じたので、HCのCTOがリリースした 「初心者のためのJavaScript 完全入門」 でしっかり学ぶことにしました。

すると、どうでしょうか
あれほど苦しんでいた非同期処理について、次から次へと理解できるじゃないですか!
久しぶりに「あーそうなのか、わかった!」の感覚が湧いてきました。
非同期処理の理解を深めることができたので、APIを叩いてデータを表示させる課題も無事にクリアです。

これにて、一旦JavaScriptのカリキュラムは完了です。

ただ、冒頭の「JavaScriptの練習問題集」は未完なので、いずれしっかり取り組みたいなと思います。
で、思ったのは、この問題集を表示させるアプリを作るのもありかも?

問題集そのものはマークダウン形式なので、問題と解答があるから、データを整形して・・・ああして、こうして・・・

おお、いいかも💡

このアイデアは、もう少し先に進んでからチャレンジしてみよう。
今はとにかく、前へ進むのみです。

React

ある程度JavaScriptの基礎が整備されたので、次はReactの学習です。
まずは、お決まりの公式チュートリアルからスタートです。

なんでしょうかね?やっても、やっても、わかったような、わからないような・・・
ただただコードを写して打ち込んでいるだけな気がします。

まずいなぁ・・・こんな状態じゃ実務に入って苦労するぞ・・・

気持ちは焦る一方です。
暦は待ってくれず、どんどん日にちだけが過ぎていきます。

さっさと先に進まなきゃいけないという思いが無意識のうちに私を支配し、いつの間にか「課題をクリアして先に進めればいい」と思っていたことに気づきました。

気づけてよかった。
焦りは禁物です。

今は準備期間、基礎をしっかり固めることにしよう。

一度視聴を終えたUdemyのReact講座を再度視聴して、アウトプット課題で不明な部分の理解を深めてと、いつもの自分の学習スタイルに戻ることができました。

何事も基礎は大事。

思い出せてよかった。

ということで、今月中にReactは終わりませんでした。
続きは来月ですね。


10月のターゲット

  • React
  • TypeScript
  • Next.js

今月の感想

先月、エンジニアとしてのスタートラインに立つ資格を得て、本ブログの第1部が完結。
今月からは“エンジニア準備編”として、Hirologue 第2部がスタートしました。

第2部の出だしは、正直良くないですね(笑)

でも、内容を理解しないまま先に進むのは、私的には「課題をクリアすること」が目的になってしまうので避けたいところ。
人それぞれ学び方も進み方も色々。
これからもじっくり考え、根本を理解して急がず、焦らず一歩一歩確実に前に進む、そんな私流のスタイルで学んでいこうと思いました。

大事なのは、歩みを止めないことだな!

これに気づけただけでも今月は大勝利✌️

では、また✋️



じゃなかった!

10月1日に51歳になるので、来月からタイトルが「51歳の挑戦」に変わります!

ハピバ オレ!🎉

EP 45: 50歳の挑戦 ―そして転職へ ―

2024年3月1日にHappiness Chain(以下、HC) Euforia 2期生として入会してから早いもので18ヶ月が経過しようとしています。
本記事では、この1ヶ月で学んだことをダイジェストで振り返っていきます。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp


8月の学習時間(期間:2025/7/31 - 2025/8/30)

8月の学習時間は 100.5 時間 でした。
学習日数が31日ですので、1日あたりの学習時間は 3時間14分(194分)となります。

今月も学習時間の目安として、休日は8時間、平日は3時間を基本としました。
目標学習時間(153時間)に対して、達成率は65.6%(52.5時間不足)でした。

今月は人生の一大転換点となる月でしたので、学習時間は通常月より控えめです。

この話はのちほど。


8月の学習内容

8月はJavaScriptを学習しました。

2025年8月の学習内容

JavaScript

さて、7月終盤にJavaScriptの学習をスタートしたわけですが、今月も引き続きインプットの日々です。
はじめのうちは、Pythonの文法と対比しながらスラスラ入ってきますが、学習が進むにつれて少しずつわからなくなってきます。

「ヤバい、わからない・・・この先学習する React、TypeScript、Next.js の土台になる部分なのに・・・これはマズイ」
「もしかして、はじめからやり直したほうがいいのか?」
焦りが焦りを生み、学習内容が入ってきません。

そして、出した答えは
「完全に理解しようとしない!」
「とりあえず前に進もう!」
昭和生まれの詰め込み教育でここまで来たわたしにとって、理解が不十分な状態で進むことに対して若干の違和感を覚えますが、ずっと留まっていても仕方ありません。

今は進むしかない!
ということで、理解度3割程度でインプットを一旦終え、記事を書きました。
hirologue.hateblo.jp

インプットを終えて、CLIアプリとDOM操作を伴うアプリ作成でアウトプットを行いました。 つまづきながらも、無事にクリア!

そしてまた、インプットに戻るも「うーん、わからん(笑)」
やはり手を動かさなければ、身につかないですね。

ということで、この記事を執筆中に他のHC生からJavaScriptの練習問題集の存在を教えていただいたので、今度はそれを使って特訓です。

こうやって、情報交換できるのもHCの魅力ですね。
うぉー燃えてきた🔥

今月の学習はここまで!




さて、ここからは今月の学習時間が少なめだった理由についてです。
実は私にとって大きな転機が訪れました。


ターニングポイント

DM

2025年8月初頭 HCのCEOよりDM
寝ぼけ眼で読む。

「そろそろ転職しますか」

て、て、転職?? その一言で一気に目が冷めた

朝の支度大戦争中の妻に話すも、多分聞いていない・・・
仕方ない、夜に相談するとしよう。

夢と現実の間で

そして、夜
「転職の話がきた。正直迷っている。」
妻は言う
「良かったじゃん。何を迷う必要があるの?」

「そりゃ迷うよ!俺一人じゃなくて、お前たち3人の人生を背負っているんだから」
「もし、この選択を間違えたら、一家揃って路頭に迷うかもしれないんだよ。2女がなりたいと思っているデータサイエンティストの道を閉ざすかもしれないんだよ」
「我が子の夢を自分の手で潰すかもしれないと思うと、とても耐えられない・・・それだけ大きな責任が伴うんだよ」

わたしが抱えるモヤモヤを包み隠さず矢継ぎ早に伝えましたが、それを聞いた妻は何も言わず背中を向けて眠りにつくのでした。

「何だよ・・・解決してないじゃないか」
一体どうすりゃいいんだ?

決断

悶々とした夜が明け、浅い眠りから目覚めるも結論は出ない。
まいったな・・・エンジニアになりたいからHCに入会したはずなのに、いざ転職となると守りに入ってしまう。
ああでもない、こうでもないと答えの出ない自問自答を繰り返し、夜の帳が下り始めた頃、遠くから花火大会の音が聞こえてきます。

あ、今日は花火大会だったな
年に一度の花火大会、近所の高台からそれを楽しむ心の余裕なんてありません。

自問自答は賑やかな花火の音をバックに、なおも続きます。
「もしかして、エンジニアになりたいんじゃなくて、趣味でプログラミングを勉強したかっただけなのか?」
「もしかして、50歳過ぎても勉強して凄いって言われたいだけなんじゃないか?」

すっかり沈みきったわたしの表情を見かねて妻はこう言いました。

「お金とか、生活のことを心配する必要はないよ。何とかなる。というか、何とかする」
「今の会社に嫌々ながら勤めるくらいなら、自分のやりたいことを思いっきりやりなよ」

「男だろ、しっかりしろよ」と言わんばかりの妻の言葉にわたしは、
「ありがとう」と一言返し、薄っすら涙を浮かべ転職を決断したのでした。

夢を叶える

こうして転職の意向を固めたわたしは、ご紹介いただいた企業との面談を希望する旨を表明し、面談の日を迎えたのでした。

高校へ進学する時に「エンジニアになる」という夢を一度は諦め、それから35年か・・・ 本当に長かったな。

面談時間まであと1時間半。実家の母よりメールの着信

「色々,長い期間思い悩み苦しみ抜いた結論と思います。
失った時間は取り戻すことは出来ないと思うけど自分のやりたい事が出来れば幸せかもね
よく頑張ったと思う。
社長にも感謝の気持ちで面談ができますように祈ってます😀」

面談前だと言うのに、一人暗い部屋で泣いていました。
「母ちゃん、今までありがとう。俺、がんばるよ」

そして、面談開始

面談には建前とか関係なく、ありのままの自分で望みました。
その結果、ありがたいことに 合格 とのお言葉をいただきました。

一度は諦めた少年期の夢を35年越しで叶えた瞬間でした。

これまで と これから

会社の夏季休業直前に内定をいただけたので、2女と共に帰省しました。
実家へ到着するや否や向かった先は、祖母の墓前です。

「ばあちゃん、俺、夢叶えたよ
高校入る時に一度諦めた道に進めることになったよ
これからも遠くから見守ってくれ、ありがとう」
こうして墓前で報告したわたしの目には、またもや薄っすらと涙が浮かぶのでした。

墓参りを終えたわたしと2女が向かった先は、実家近くの池の畔です。
祖母への報告を終えたわたしの気持ちは晴れ晴れとしていました。

実家近くの池の畔で娘と語り合いました。

山から吹き下ろす海風とベンチに座ってギターを弾く老人のBGMがマッチして、とても心地よい。
清々しい青空の下で娘と会話を交わす。

「なぁ、お前は全国大会に俺を連れて行くという夢を叶えた。
そして、俺はエンジニアになるという夢を叶えた。
次はお前がデータサイエンティストになる夢を実現させる番だな」

2女はこう言いました。
「大丈夫、なってみせるから待ってて」

わたしも負けていられないな、エンジニアになる夢を叶えたとは言ってもスタートラインに立つ資格を得たに過ぎない。
これまで以上に頑張らねばと我が子の言葉に励まされたのでした。


9月のターゲット

今月の感想

今月は、転職という人生が大きく変わる節目の月となりました。

お世話になった取引先のお客様に挨拶をするたびに、
「えーー!!Hiroさん辞めるの?そっかぁ、残念だけど今までありがとう!随分助けてもらったね。きっと次も活躍できるよ」 と感謝と激励の言葉をいただけて、嬉しかったです。
社会人となって1社目、26年近く勤めた会社で随分と成長させてもらったなぁとしみじみ思いました。

正式な退職日はもう少し先ですが、それまではしっかり業務の引き継ぎや、取引先への挨拶をして、笑顔でサヨナラを言えるようにしようと思います。

最後に、卒業にあたり対談動画を撮影していただきました。
対談の様子は こちら

Hirologue 第1部 完

とは言っても、まだまだ学習は続きます。
次回より第2部開始します。

では、また✋️

EP 44: JavaScriptはじめました

はじめに

これまでDjangoECサイト、XクローンとWebアプリを作ってきました。
制作過程で動作確認をしながら、度々こんなことを思っていました。

「このUI、もうちょっと使いやすくしたい」
「フラッシュメッセージをトーストで出せたらスタイリッシュなのになぁ」

調べてみると、行き着く答えはいつも同じ。
JavaScriptを使います」

Webアプリの表現力や操作性を上げるには、どうしてもJavaScriptの力が必要なのです。
しかしながら、当時のわたしはDjangoの学習真っ最中でしたので、JavaScriptへの好奇心をグッと抑えていました。

そして、Djangoと自動テストの学習を終え、ついにJavaScriptの学習が解禁されました。

Python経験もあるし、きっと似たようなもんだろう」
そう思って順調だったのは最初だけ。
セミコロン(;)つける or つけない」といったお作法的な部分であったり、「Arrow関数の書き方は何種類もあるのか?」といった疑問が湧き出て、日を増すごとに混乱は増していきます。

そんな混乱した頭の中を整理してくれたのが、『JavaScript Primer - 迷わないための入門書 改訂2版』(以下、JS-Primer とします)です。
ここでは、JavaScriptを学び始めたばかりのわたしが、この本を読んだ感想を述べていきます。

jsprimer.net




良かったところ

Web版は無料

まず特筆すべきは、Web版が無料で公開されていることです。
学習中、「あれ、この書き方どうだったっけ?」とちょっと確認したい時に、ブラウザでサッと開けるのは本当に助かります。
それに加えてサイト内でコードを実行できる点も優れていると思いました。
しかも、ただコードを実行できるだけでなく、コードを編集して動作の違いを検証できるのは、本当に素晴らしいです。

頻繁なアップデート

JavaScriptに限らず、プログラミング言語は進化が速く、数年前の情報がもう古くなってしまうこともありますが、JS-Primerはしっかり最新の仕様に対応してくれています。
紙ベースの書籍版ではこうは行きませんから、これはWeb版の大きなアドバンテージだと思います。
「今学んでいる内容が古くない」という安心感は大きいですね。


悪かったところ

悪かったところは、特になかったと思います。
敢えてあげるなら、 「ボリュームがすごい」という点です。

各セクションで細かく事例を交えて説明しているため、これは避けようがないと思います。 最初から最後まで一字一句きっちり読み込もうとすると、相当な時間がかかります。
とはいえ、それだけ情報量が豊富なので、逆に長期的な学習の相棒にもなれます。

JavaScript初学者が「全部覚えてやる!」と意気込むと、かなりの高確率で挫折するのではないでしょうか。
挫折しないためにも、全部理解しようとするのではなく、どこに何が書いてあるか把握するよう心がけて読み進めるのがいいと思います。


学んだこと

セミコロン付ける or 付けない

しばらくPython漬けの日々を過ごしたわたしにとって、はじめに直面した問題は、「最後にセミコロンを付けるべきか否か」でした。
Pythonはインデントによってブロックが構成されていたので、はじめのうちはその違いに少し戸惑いました。
結局のところは { } で囲まれた部分(ブロック文)には不要。

「ああ、なるほど!そういうことか」

ブロック文は、Pythonのインデントに相当するのか。
ずっと気になっていたことがたった一言で解決、わたしの中のモヤモヤが一つ解消されました。

Arrow関数の省略記法

以前 Progateで学んだものの理解が曖昧だったArrow関数について、理解を深めることができました。
ここでも、「( )があったり、なかったりするけど、ひょっとして省略記法がある??」といった疑問が湧き上がりました。

JS-Primer「関数と宣言」のセクションで、ハッキリこう書いてありました。

関数の仮引数が1つのときは()を省略できる

関数の処理が1つの式である場合に、ブロックとreturn文を省略できる

うん。なるほど。

実践的な使い方を知る

ほかにも、Pythonのようにモジュール化してエクスポートする方法や、第2部のユースケースAjax通信、CLIアプリ、Todoアプリ)で、実際の使い方を学ぶことができました。

学習を進めて湧き上がる疑問があれば大抵のことはJS-Primerに書いてあり、
「ああ、こうやって使うんだ!」
とまるでパズルのピースがピッタリはまるような感覚が得られました。


難しかったこと

やはり最大の壁は非同期処理です。
JavaScriptを使った開発では避けて通れませんが、概念もコード量も多く、初めて触れる要素ばかり。
当然ですが、1回読んだだけでは理解しきれません。
執筆時点で理解度は3割程度ですが、自分なりのインデックスを作ったので、スキマ時間や実践を通して理解を深めたいと思います。

同じ著者による「JavaScript Promiseの本」も併用して、さらに学習を進める予定です。

azu.github.io





JS-Primerは、単なる入門書という枠を超えて「辞書」としても使える存在でした。

読み始めた当初は疑問だらけで混乱もありましたが、コードを書きながら何度か読み返すうちに、少しずつ霧が晴れていく感覚がありました。

もちろん、一度読んで100%理解するのは難しいです。
ですが、「どこに何が書いてあるか」 を把握しておけば、必要なときに確実に手を伸ばせる強い味方になります。

これからはコードを書きながら、少しずつJavaScriptの理解を深めていきたいと思います。
きっとまた、壁にぶつかる日が来るでしょう。
そのたびに、このJS-Primerを開き、また一歩進んでいこうと思います。

この記事がJavaScript初学者の一助になれば幸いです。
では、また✋️

EP 43: 50歳の挑戦(17ヶ月目を振り返る)

2024年3月1日にHappiness Chain(以下、HC) Euforia 2期生として入会してから早いもので17ヶ月が経過しようとしています。
本記事では、この1ヶ月で学んだことをダイジェストで振り返っていきます。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp


7月の学習時間(期間:2025/6/30 - 2025/7/30)

7月の学習時間は 136.5 時間 でした。
学習日数が31日ですので、1日あたりの学習時間は 4時間24分(264分)となります。

今月も学習時間の目安として、休日は8時間、平日は3時間を基本としました。
目標学習時間(138時間)に対して、達成率は98.9%(1.5時間不足)でした。

とは言え、完全に学習を休んだ日が5日あったので、それを考慮すると1日あたり5時間15分(315分)!!
本業が閑散期に入ったとは言え、フルタイムで仕事しつつ、よくやったと思います!

それだけやりがいがあるんですよね。プログラミング学習って。


7月の学習内容

7月は自動テストとJavaScriptを学習しました。

2025年7月の学習範囲

7月の学習内容 1️⃣:自動テスト

さて、前回は自動テストに着手して、自分の作ったX(Twitter)クローンにテストを書き始めようかという所まで進めていました。
今回は、テストコードをバリバリ書くフェーズです。
「頑張れば1日か2日で終わるんじゃないか?」
はじめはそう思っていました。

現実はそんなに甘くはありませんでした(笑)
テストコードを書く→エラー→公式ドキュメント読む→わかったようなわからんような・・・→AIに聞く→ググる→AIに聞く→納得

これを繰り返し、ゆっくりですが確実に前へ前へと歩み続けました。
こうして、モデルのバリデーションに関するテスト、主要機能のViewについてテストを書き終えることができました。

残すは、システムテスト(E2E)です。
ここでやることは、Seleniumを導入して、ブラウザ表示させて、必要な値をフォームに入力して挙動を確認する。
何となくの道筋はわかりましたが、問題はここからです。
システムテスト(E2E)の設定には非常に苦労しました。
これまでのようにAIに聞くも、どうも違う・・・それならばとググる→やっぱり違う

やってもやっても答えが見つかりません。まるで出口のない迷路に放り込まれたような状態です。
完全に涙目です。

ダメだ、完敗だ・・・策も尽きた・・・お手上げだ

ということで、HC入会以来はじめてのペアプロをお願いしました。
モヤモヤしたものが一つずつ解消されていき、ああ、なるほど!となりペアプロ終了。
やっぱりCTO凄いというのを肌で感じることができました。

ペアプロ終了後、docker-compose.yml を見直してテスト用の環境を作って、これでOK!!

となりました。

・・・

が、OKじゃなかった。
テストを走らせると、fixturesが効かない&存在していないはずのユーザーオブジェクトが存在している。

なんじゃこりゃ・・・数日悩まされました。

原因は、SeleniumコンテナからDjangoテストサーバーに接続されていなかったことでした。
ということで一件落着!

ところが、またしても、落とし穴にハマりました。
テスト環境と開発環境を切り替える際に、Seleniumコンテナが残るのが気になって、面倒だからAIに聞いてみました。
docker compose down --volume --remove-orphans これが推奨されたコマンドでした。
1ミリも迷うことなくコマンドを入力して実行。

コンテナが残らなくなった!と喜んだのもつかの間、開発環境のデータベースをふっ飛ばしました(笑)

原因は、開発環境とテスト環境でボリューム名を使いまわしていたことでした。
そんな状態で、docker compose down --volume --remove-orphans を実行してボリュームを削除しているのだから、当然ふっ飛びますね。

まさにこれ

学習中の環境で本当に良かったと心の底から思いましたし、これが実務だったらと思うとゾッとします。
でも、こういった大きなやらかしは強烈な記憶として残るので、いい意味ですごく勉強になりました。
もう同じ轍は踏むまい。

こうして、数々の落とし穴と自爆(笑)を経て、ようやくE2Eテストが動くようになりました。
いやぁ、本当に泣きそうなくらい大変でした。

他の受講生も現在物凄い勢いで追い上げてきているので、もうじき同じ問題にぶち当たると思い、E2Eテストの手順を記録に残すことにしました。

本業でも手順書の類は、書きまくってきたので仕事のつもりで記事を書きました!
他の受講生の参考になれば嬉しいですね。

Docker x Django x Selenium でE2Eテスト環境を構築する方法(ARM版対応)

提出した自動テストの課題も無事にLGTMをいただき、これで心置きなく次に進めます。



7月の学習内容 2️⃣:JavaScript

これからいよいよフロントエンドの学習に突入します。
まずは初級段階からスタートです。
長らくPythonをやっていたためか、基礎文法の部分はPythonと対比しながら学び、スラスラ入ってきます。

ただ、JavaScriptのイベント駆動という点については、すぐに慣れることができませんでした。
「ん?どういうこと?」と手を止めて考え込む時間が必要です。

JavaScriptの学習開始から数日経ち、その辺りの感覚にも少しずつ慣れたところで、今月は終了です。

基本、インプットだけでしたが、新しいことを学ぶのは本当に楽しい!



今月の感想

今月取り組んだ自動テストでのE2Eテスト環境構築は、HC入会以来最高の難易度でした。
数多くのエラーや失敗を乗り越えることで、また成長できることを実感できた月でもありました。

「失敗が人を成長させる(本田宗一郎)」
まさしくこの内容を体験したような気がします。

www.toshin.com

今月の学びは、きっと今後さらに大きな挑戦を乗り越える糧になると思います!
わたしの学びはまだまだ続きます。




8月のターゲット




今月はHCのオフラインミーティングが開催され、参加してきました。
当日は娘のオープンキャンパスと日程が重なったため、娘も一緒に参加しました。
オフラインミーティングを終え、娘と話す。
「父ちゃん、みんな楽しそうに勉強してるんだね。」
「同じ方向を向いているから、お互いに助け合っているんだよ。」
「やっぱり、エンジニア楽しそうだなぁ・・・がんばろ。」
オープンキャンパスオフラインミーティングに参加したことで、将来の自分を色濃く思い描けたようで、本当に連れて行って良かったと思いました。

そんなわたしも娘のオープンキャンパスで一緒に体験授業を聞いて、学生時代に戻りたいと思いました。
楽しそうだなぁ・・・データサイエンス。
娘にはぜひともデータサイエンティストになる夢を叶えてもらいたいですね。

わたしも負けずに夢を叶えるぞ

では、また来月✋️

EP 42: 50歳の挑戦(16ヶ月目を振り返る)

2024年3月1日にHappiness Chain(以下、HC) Euforia 2期生として入会してから早いもので16ヶ月が経過しようとしています。
本記事では、この1ヶ月で学んだことをダイジェストで振り返っていきます。

50歳目前の私が入会を決意するまでの経緯を書いたポエムは👇こちら hirologue.hateblo.jp


6月の学習時間(期間:2025/5/31 - 2025/6/29)

6月の学習時間は 109.5 時間 でした。
学習日数が30日ですので、1日あたりの学習時間は 3時間39分(219分)となります。

今月も学習時間の目安として、休日は8時間、平日は3時間を基本としました。
目標学習時間(140時間)に対して、達成率は78.2%(30.5時間不足)でした。

学習時間の達成率はいつもより下がりましたが、取り組んだ内容にはとても満足しています。




6月の学習内容:X(Twitter)クローン

2月からDjangoを使ったX(Twitter)クローンのアウトプットを開始しました。
先月はブックマーク機能まで終わって、残りタスクは2つとなりました。
「もう少しだ、頑張ろう」と自分に言い聞かせ6月中の完成を目指しました。

メッセージ機能

いわゆるDM(ダイレクトメッセージ)機能の実装です。
メッセージの送受信のロジックについては、意外とあっさり実装することができました。
これもこれまで積み上げてきた学習の成果かもしれません。

「なんだ、あっさり終わるじゃないか!」と思いきや、私にとっての天敵 HTML/CSS が行く手を拒みます。
HTML/CSSが苦手という自覚がある故に、課題を通してスタイリングに関しては本家になるべく似せるよう練習ことにしていました。

思うようにCSSが効かず、時間だけが無駄に過ぎていく……。
「これじゃ駄目だ」と思い、HTML/CSSのインプット教材を見直したり、仕事のスキマ時間にCSSの解説記事を読み漁りました。

そもそもディスプレイとは何か?グリッドレイアウトとは何か?といった基本をしっかり復習できたと同時に、あることに気づきました。
どうやらわたしは、本家の見た目を模倣しようとするあまり、細部ばかりに目が行き、全体を見渡せていなかったようです。
そして、基本に立ち返り、紙にデザインを書き起こしてみました。
アナログな方法ではありますが、こうすることで方向性がしっかり定まり、その後のコーディングが楽になりました。

自分が納得する見た目になったので、動作確認をして提出。
無事にLGTMを頂きました!

HTML/CSSで多少つまづきましたが、そのおかげでしっかり復習することもできて、大事なことに気づくこともできたので、結果オーライです!


通知機能

ここでは、他のユーザーがいいね・リツイート・コメントをしたときに通知される機能を実装します。
いいねなどのアクションがあった場合、そのレコードが記録されるので、そのタイミングで通知のレコードを作成すれば良さそうだな。
コードを書く前に実装方法の当たりを付けることができました。
それというのも、以前、ユーザー登録時に自動でプロフィールを作成する仕組みを実装したからです。
内容については、以前Qiitaに投稿したこちらの記事を御覧ください。 qiita.com

この仕組みを使えばいいはず!
「なんだ、楽勝じゃないか」すぐに実装できそうだな・・・

はい、罠でした。

「すぐに実装できそう!」と思った瞬間、心のどこかから"きれいなコード書きたい欲"がふつふつと湧いてきました。

そうなると、どうなるか?
取り敢えず動くものではなく、きれいなコードにするにはどうするべきか?という考えが強くなり、結果的に手が動かなくなって画面の前でずっと腕組みして考える時間が多くなります。

またここでも時間ばかりが流れていく。
これじゃ駄目だと、先ずは動くものを作ると強く意識しましたが、「きれいなコード書きたい欲」は中々に強情で折れません(笑)

ときどき顔を出す「きれいなコード書きたい欲」を抑えつけ、ようやく実装完了です。

思い通りの動作になることを確認できたので、ようやく「きれいなコードを書く」作業に着手できます(笑)。
以前も書きましたが、ごちゃごちゃしたコードがスッキリしていく過程が大好きなんですよね。
ただ、この作業は自己満足のためではありません。
冗長な処理を関数化したり、Docstringやコメントを充実させることで、次のような効果があると考えています。

  1. 多忙なレビュアーさんの負担を軽減できる
  2. チームで開発を意識したコードになる
  3. 未来の自分が読んでも意図がわかる(未来の自分への手紙)

「動けばOKのコード」から「読み手への配慮が行き届いたコード」へ昇華させる大切な作業です。
この作業は、これからも手間を惜しまず続けていきたいと思っています。

きれいなコードにしたところで、レビュアーさんに提出しました。

そしてエンディングへ

通知機能について、レビューの結果が帰ってきました。

LGTMです!

よっしゃー!!!!🙌

X(Twitter)クローンに着手して約5ヶ月、ようやく修了です。

Herokuにデプロイしたアプリを削除する前に、画面収録をして記録を残していきます。
本家X(Twitter)に上げるべく動画を作成しました。
で、思いました。

動画編集メンドクセー(;´Д`)

気づけば、普段使わない動画編集ソフトと丸2日も格闘していました(笑)

完成したX(Twitter)クローンの実装機能紹介動画を本家のXに公開しました。

よし、次行ってみよう!




6月の学習内容:自動テスト

さて、HCで最大の敵と評されるX(Twitter)クローンをクリアしたからといって、休んでもいられません。
やるべきことはまだまだあります。
プログラミング学習に関して ドMなわたしにとってこれほどの悦びはありません。

次は自動テストです。
Django公式チュートリアルや書籍などで、テストの重要性は説かれていますが、後回しにしてしまいがちなアレです。

ただ、学習始めてすぐに思いました。
なんだこれ、めっちゃ重要じゃないか!

しっかり学習して使えるようになれば、これまで手動でテストしていたことが自動でできるのだから、これはしっかり学ばねば!
一気にモチベーションが上がりました。

ということで、黙々とインプットを行いまして、先日までお付き合いいただいたX(Twitter)クローンと再び対峙して自動テストを書いて練習しています。


今月の感想

前述の通り、長かったX(Twitter)クローンの作成が終わりました。
Djangoのカリキュラムに着手してから修了まで9ヶ月ほどかかったことになりますが、本当に長かったですね。
修了まで時間をかけた分だけ、多くのエラーから深く学ぶことができたのではないでしょうか。
この先、自動テストが終わるとJavaScript、Reactと進みますが、この先もエラーから多くを学び取って成長していきたいです。


7月のターゲット




プログラミング学習でAIを使うことに葛藤することがあります。
それは、先人たちはAIがない状態で、プログラミングを学んで仕事をしているのだから、AIに頼って学習するのはどこかズルしているのではないか?
ということです。

もちろん、100%AIに頼るのは論外ですが、どこまで学習段階で頼ってもいいのだろうか?

わたしなりに出した答えは、こうです。

  1. 自分の頭で 徹底的に考え抜く
  2. 自分の方針をAIに伝え、キーワードを得る
  3. キーワードを基に調べてみる
  4. 疑問点をAIに質問して、新たなキーワードを得る

学習を加速させるための補助装置として活用することにしました。

  • 基本は自分で考える。
  • AIは壁打ち相手。あくまで考えるのは自分。
  • AIが出した答えに常に疑問を持つ。

こうですね!

では、また来月✋️