Open6
学習記録 2025.09
ピン留めされたアイテム

9.5(金)
5:00 目覚め
5:05 起床
学習したこと
- 『スッキリわかるSQL入門 第2版』
- 『プロになるためのWeb技術入門』
- アルゴリズム「minDepth」使用言語:JavaScript
- Zenn記事「【SMTP】メール送信の仕組みを初心者なりにまとめてみた」投稿
- 『バックエンドプロジェクト②』名前付きパイプ実装
知ったこと
OS
- I/O処理とは、ユーザープロセスでは単独で処理できないことをカーネルにお願いし、その結果を得る一連の処理を指す
学び

今月の目標
① 朝5:10 起床を連続15日を必ず達成する (9.1~9.15)
② RecursionCSで取り組んだアルゴリズム問題を毎日取り組む
③ RecursionCS『バックエンドプロジェクト②』のプロジェクトを1つクリアし、取り組みと学びをREADME・Qiitaにまとめる
④ 『スッキリわかるSQL入門 第2版』を毎日継続して進め、1周する
⑤ 『プロになるためのWeb技術入門』を1周し、Webシステムの全体像を説明できるようになる
詳しくは以下の記事でまとめています。
よろしければご参照ください。

9.1(月)
4:40 目覚め
4:55 起床
学習したこと
- 『スッキリわかるSQL入門 第2版』
- 『プロになるためのWeb技術入門』
- アルゴリズム「minDepth」使用言語:JavaScript
- Zenn記事「2025.09 行動目標」投稿
- 『バックエンドプロジェクト②』JSON形式
知ったこと
一般
- 設定(Configuration)とコード(Code)の分離
OS
- ファイルディスクリプタ(FD)テーブルは、各プロセスが所有するデータ構造であり、カーネルはそのプロセスごとのFDテーブルを管理している
- データ構造の選択は、メモリをどのように割り当て、どのようにアクセスするかという仮想メモリの基本的な動作に深く関わっている
JSON
JSONで利用される6つの基本データ型
- 文字列 (string): 二重引用符で囲まれたUnicode文字列
- 数値 (number): 整数または浮動小数点数
- 真偽値 (boolean): true または false
- null: 値が存在しないことを示す特別な値
- オブジェクト (object): キーと値のペアの集合。キーは必ず文字列
- 配列 (array): 値の順序付きリスト
学び
- OSカーネルもすべてのプロセスのFDをカーネル独自のFDテーブルで管理していると勘違いしていた。OSカーネルにはFDテーブルは存在しないとわかった
- 保守されるコード=テストが自然に書けるコード
- JSON形式の設定ファイルがプログラムのリポジトリになぜあるのかをようやく理解できた。設定とコードの分離という原則に基づき、設定を別ファイルにまとめておくことで、コードではそれを再利用できるということだった。

9.2(火)
4:40 目覚め
4:55 起床
学習したこと
- 『スッキリわかるSQL入門 第2版』
- 『プロになるためのWeb技術入門』
- アルゴリズム「minDepth」使用言語:JavaScript
- Zenn記事「【SQL入門】トランザクションの概要」投稿
- 『バックエンドプロジェクト②』パイプ実装
知ったこと
一般
- 設定(Configuration)とコード(Code)の分離
OS
- ファイルの所有者について、それは特定の、一時的なプロセスではなく、そのプロセスを実行したユーザーアカウント(UIDによって識別される)を指す
- 起動中のプロセスは、それが属するユーザーの情報(ユーザーIDとグループID)を必ず格納している
- ソケットはプロトコルの基盤
- システムコールはカーネル内にあるわけではなく、ユーザ空間とカーネル空間の境目にある。したがって、どちらかの空間に属しているわけではなく、境目になっている
Node.js
- 通常、ウェブブラウザでJavaScriptを実行する際には、ブラウザに内蔵されているJavaScriptエンジンがその役割を担うが、ウェブブラウザから独立して、サーバーサイドやローカル環境でJavaScriptを実行したい場合には、ブラウザのJavaScriptエンジンを抜き出して単独で動作させる実行環境が必要となる。
その実行環境がNode.jsで、Google ChromeのV8エンジンをベースにして作られており、ファイルシステムへのアクセスやネットワーク通信など、ウェブブラウザではできなかった操作を可能にしている。これにより、JavaScriptをコマンドラインツールやサーバーアプリケーション開発に利用できるようになる。
学び
- 全体像を把握した上で今何をしているかを常に意識する
- 仕組みを理解した上で自分でコントロールできることが重要
- なぜ、ターミナルで node というワードをつけることでJavaScriptの挙動を確認することができるのかがわかった
- 「チームの生産性をどれだけ向上させたか」「他のメンバーと協力して、どれだけ大きな成果を出したか」

9.3(水)
4:50 目覚め
5:00 起床
学習したこと
- 『スッキリわかるSQL入門 第2版』
- 『プロになるためのWeb技術入門』
- アルゴリズム「minDepth」使用言語:JavaScript
- Zenn記事「【SQL入門】トランザクションの分離」投稿
- 『バックエンドプロジェクト②』パイプ実装
知ったこと
一般
- クラウド環境では、CPUやメモリの使用量に応じて料金が発生するため、効率的なコードは、より少ないリソースで動作するため、インフラコストの削減に直結する
- 遅い処理でCPUがアイドル状態にならないよう、非同期処理やノンブロッキングI/Oを積極的に利用することが求められる
- 不要になったオブジェクトを適切に解放し、メモリリークを防ぐ
学び
- 過度なコンテキストスイッチを避けるために、スレッドプールや非同期処理を適切に設計する必要がある
- CPUの物理的な構造よりも、CPUとOS、そしてI/Oがどのように連携してプロセスを実行するかを理解することが重要
- 外部キー制約違反とならないように、処理の順番を設計すること

9.4(木)
4:55 目覚め
5:05 起床
学習したこと
- 『スッキリわかるSQL入門 第2版』
- アルゴリズム「minDepth」使用言語:JavaScript
- Zenn記事「【SMTP】メール送信の仕組みを初心者なりにまとめてみた」投稿
- 『バックエンドプロジェクト②』名前付きパイプ実装
知ったこと
OS
- I/O処理とは、ユーザープロセスでは単独で処理できないことをカーネルにお願いし、その結果を得る一連の処理を指す
学び
- 直線的にしか進めないのが連結リスト、枝分かれできるのが木
- 「キー:値のペア」で、値に直接データを入れるのではなく、そこへのインデックス(アクセスするためのポインタ)を入れておくことで、巨大データをコピーせずに扱えたり、メモリ管理が柔軟になる。つまり、値への参照を入れる(オブジェクトの参照→実際のオブジェクトを別の場所で管理する)
- スレッドプールとタスクキューのつながり、HTTPリクエストをオブジェクトにしてスレッドでビジネスロジックを実行するまでの一連の流れを押さえることができた