入門

スポンサーリンク
Java

Java | Java 詳細・モダン文法:並行・非同期 – ExecutorService 詳細

ExecutorService を一言でいうとExecutorService は、「スレッドを自分で new せずに、“仕事(タスク)だけ渡して実行してもらう”ための仕組み」です。new Thread...
Java

Java | Java 詳細・モダン文法:並行・非同期 – happens-before

happens-before を一言でいうとhappens-before は、「この処理が終わってから、あの処理が“必ずその結果を見える形で”起きる」という“時間とメモリの順序”を表す言葉です。もっと...
Java

Java | Java 詳細・モダン文法:並行・非同期 – volatile の役割

volatile を一言でいうとvolatile は、「この変数の“最新の値”を、すべてのスレッドから必ず見えるようにする」ためのキーワードです。もっと砕くと、「CPU やスレッドごとのキャッシュにこ...
Java

Java | Java 詳細・モダン文法:並行・非同期 – synchronized の仕組み

synchronized は何を「約束」してくれるのかsynchronized は一言でいうと、「同じ場所を同時に触ろうとする複数スレッドを、順番待ちにさせる仕組み」です。もっと具体的に言うと、あるオ...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – 非同期が必要な理由

まず「なぜ非同期なんて面倒なものがあるのか」いきなり本音から言うと、多くの人はこう感じます。「同期処理だけで書けたらどれだけ楽か」「非同期って急に難しくなるし、できれば避けたい」実は JavaScri...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – 実行順序の全体像

まず「実行順序の全体像」を一言でまとめるJavaScript の実行順序は、ざっくり言うとこうなります。同期処理(ふつうのコード)を上から順番に実行する同期が一段落してコールスタックが空いたら、Pro...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – イベントループ

まずイベントループを一言でイメージするイベントループは、「JavaScript に“次にやるべき仕事”をひたすら渡し続ける司会進行役」です。JavaScript はシングルスレッドで、同時に動ける処理...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – マイクロタスクキュー

マイクロタスクキューとは何か(まずざっくりイメージ)マイクロタスクキューは、「とても優先度の高い“あとで実行する処理”が並ぶ、特別レーンの待ち行列」 です。前回の「タスクキュー」は、setTimeou...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – タスクキュー

まずタスクキューを一言でイメージするタスクキューは、「あとで実行する処理(コールバック)を順番に並べておく待ち行列」 です。JavaScript はシングルスレッドなので、「今」実行できるのは 1 つ...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – Web API の役割

全体像:Web API は「JavaScript の外にいる助っ人」まず前提から整理します。ブラウザの中で JavaScript が動くとき、JavaScript エンジン(言語そのものを実行する脳み...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – コールスタック

コールスタックとは何か(まずイメージから)コールスタックは、「今、どの関数を実行中で、その関数からどの関数を呼び出しているか」を記録している“関数呼び出しの積み重ねメモ” です。JavaScript ...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – JavaScript がシングルスレッドである理由

まず「シングルスレッド」のイメージからJavaScript が「シングルスレッド」というのは、「同時に実行できるのは、基本的に1つのことだけ」 という意味です。console.log() を実行してい...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – ブロッキングとは何か

「ブロッキング」とは何か(まずイメージから)「ブロッキング」は、ある処理が終わるまで、そこから先の処理が一切進めなくなる状態のことです。JavaScript だと「一番の働き手(メインスレッド)が、そ...
JavaScript

JavaScript | 非同期処理:非同期の基礎概念 – 同期処理と非同期処理の違い

同期処理と非同期処理の一番大事なイメージまず、抽象的な言葉を捨てて、イメージから掴みにいきます。同期処理は、「一列に並んで順番待ちする世界」 です。前の人の処理が終わるまで、次の人は絶対に動けません。...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – クラスの初期化順序

ゴール:「クラスが new されたとき“何がどの順番で動くか”をイメージできるようになる」クラス設計がうまくいくかどうかは、「初期化の順番」をちゃんと理解しているかにかなり左右されます。フィールド初期...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – staticメソッド

ゴール:「これは“インスタンスのメソッド”か“クラスのメソッド”か」を自分で選べるようになるstatic メソッドは一言でいうと、「new した“個体”ではなく、“クラスそのもの”にぶら下がる関数」で...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – staticプロパティ

ゴール:「static は“インスタンスじゃなくてクラスに属するもの”だと腹で理解する」static を一言でいうと、「new した“個体”ではなく、“クラスそのもの”にぶら下がるもの」です。ここがふ...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – getter / setter の型

ゴール:「getter / setter の“型”を見て、どう使うかイメージできるようになる」getter / setter は、クラスのプロパティに「振る舞い」をくっつける仕組みです。でも、ただ「便...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – readonlyプロパティの活用

ゴール:「この値は“変わらない”」を型で約束できるようになるreadonly プロパティは、クラス設計でめちゃくちゃコスパのいい武器です。一言でいうと、「この値は、作ったあとに書き換えちゃダメ」をコン...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – public / private / protected

ゴール:「どこまで外に見せるか」を自分でコントロールできるようになるpublic / private / protected は、「クラスの中身をどこまで外に見せるか」を決めるスイッチです。ここをなん...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – メソッドの型指定

ゴール:「メソッドの型だけ見て“何をするか”がだいたい分かるように書ける」クラスのメソッドって、書こうと思えば何でも書けます。だからこそ「型をどう付けるか」で、読みやすさと安全性が大きく変わります。こ...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – コンストラクタ引数と型

ゴール:「コンストラクタの引数に“どんな型をつけるか”を意識して設計できるようになることクラスを書くとき、コンストラクタは「インスタンスをどう初期化するか」を決める、とても重要な場所です。ここでの型設...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – プロパティの型設計

ゴール:「クラスのプロパティに“どんな型をつけるか”を意識して設計できるようになること」クラスを書くとき、「プロパティ名」だけでなく「プロパティの型」をどう設計するかで、そのクラスの使いやすさ・安全さ...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:クラス設計 – クラスの基本構文復習

クラスってそもそも何者?「設計図」と「new」の関係から整理するまずイメージからいきます。クラスはざっくり言うと、「オブジェクトを量産するための設計図」です。設計図(class)を書いておいて、new...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 実務での関数分割ルール

ゴール:「どこまでを1つの関数にして、どこから分けるか」を自分の基準で判断できるようになる実務で一番モヤっとしやすいのがここです。「この関数、長い気はするけど、どこで分ければいいの?」「分けたら分けた...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 可読性の高い関数型設計

ゴール:「関数の“型”を見ただけで、何をするかだいたい分かる」状態を目指す可読性の高い関数型設計って、難しい言い方をしているけれど、やりたいことはシンプルです。その関数の「型」だけを見たときに、何を受...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 関数設計での型肥大対策

ゴール:「型がデカくなってきた…」と感じたときに、落ち着いて“細く・分けて・名前をつける”発想を持てるようにするTypeScript を真面目に書けば書くほど、そのうち必ずこうなります。「型、でかすぎ...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 非同期関数への移行準備

ゴール:「あとで async にしたくなっても困らない関数設計」を身につけるいきなり全部 async/await にする必要はありません。むしろ大事なのは、「今は同期処理だけど、いつでも非同期(asy...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – assert関数の型定義

ゴール:「assert 関数の型」を“道具として設計できる”ようになるまずイメージからいきます。assert 関数は一言でいうと、「この条件が成り立たないなら、ここで止まってくれ」「この時点で、値はも...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – ユーザー定義型ガード

ゴール:「ユーザー定義型ガード」を“自分で設計して使いこなせる”ようになるここで目指したいのは、「ユーザー定義型ガードって何?」から一歩進んで、「いつ・どう設計するとコードが楽になるか」までイメージで...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 型ガード関数の設計

まず「型ガードって何を守ってくれるのか」をイメージする型ガード関数は一言でいうと、「この値は〇〇型だよ、と TypeScript に“証拠付きで教える”ための関数」です。普通の if だと、TypeS...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 条件分岐による戻り値型変化

ゴール:「if や switch で分岐した結果、戻り値の型がどう変わるか」を意識して設計できるようになる関数の戻り値って、「常に同じ型」だけじゃなくて、条件によって“中身の型”が変わることがあります...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – エラーを投げる関数の型

まず「エラーを投げる関数」を2種類に分けて考えるいきなり型の話に行く前に、役割で分けます。エラーを投げる関数には、大きく言って次の2パターンがあります。1つ目は、「必ずエラーを投げて、絶対に呼び出し元...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – neverを返す関数設計

ゴール:「never を返す関数」が“設計上どういう意味を持つか”を理解するnever は、初心者から見ると一番「意味不明な型」に見えます。でも、関数設計の文脈では、「ここには絶対に到達しない」「この...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – void戻り値の設計判断

ゴール:「とりあえず void」から卒業するまず一番大事なことを先に言います。多くの初心者は、「戻り値を使わないから、とりあえず void」と書きがちです。でも、本当にそうしていい場面と、「void ...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – bind / call / apply と型

ゴール:bind / call / apply を「型の目」で理解するここで目指したいのは、「bind / call / apply が“何をするメソッドか”」だけでなく、「TypeScript 的に...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – thisパラメータの明示

「thisパラメータを明示する」とは何をしているのかまず言葉の整理からいきます。TypeScript でいう「thisパラメータ」とは、関数の一番最初の引数の位置にだけ書ける、特別な仮引数のことです。...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – this を使う関数の型指定

まず「this を型として扱う」という発想からJavaScript ではおなじみの this ですが、TypeScript では 「this そのものにも型を付けられる」 というのがポイントです。fu...
TypeScript

TypeScript | 関数・クラス・ジェネリクス:関数設計の深化 – 関数を返す関数の型

「関数を返す関数」って、まず何者?いきなり型の話に行く前に、イメージを固めましょう。function createAdder(a: number) { return (b: number) => a ...
Python

Python | DB・SQL:DB 設計

DB 設計って何?まずはゴールのイメージからDB 設計は、「アプリで扱う情報を、テーブル・カラム・関係に分解して、矛盾なく・拡張しやすく・速く扱える形にする作業」です。言い換えると、「現実の世界(ユー...
Python

Python | DB・SQL:接続プール

接続プールって何?まずはイメージから接続プール(コネクションプール)は、「データベースへの接続を、使い回すための“待機列(プール)”」です。DB への接続は、実はかなり重い処理です。毎回「接続を開く ...
Python

Python | DB・SQL:N+1 問題

N+1 問題って何?まずはざっくりイメージN+1 問題は、「本当は少ない回数のクエリで済むのに、気づかないうちに大量のクエリを投げてしまっている状態」のことです。特に多いのが、1 回目のクエリで「親デ...
Python

Python | DB・SQL:パフォーマンス

「パフォーマンス」って何?まずは感覚からDB・SQL の「パフォーマンス」は、ざっくり言うと「どれくらい速く・無駄なく・安定して動くか」です。同じ結果を出すクエリでも、1 秒で終わる書き方1 分かかる...
Python

Python | DB・SQL:バルク処理

バルク処理って何?まずはイメージからバルク処理(バルク INSERT / バルク UPDATE など)は、「大量のデータをまとめて一気に処理する」やり方のことです。1 行ずつチマチマ INSERT す...
Python

Python | DB・SQL:migration

migration って何?まずはイメージからmigration(マイグレーション)は、「データベースの“形”(テーブルやカラムの構造)を、コードでバージョン管理して、少しずつ進化させていく仕組み」で...
Python

Python | DB・SQL:relationship

relationship って何?まずはイメージからSQLAlchemy の relationship は、「テーブル同士のつながり(リレーション)を、Python のオブジェクト同士のつながりとして...
Python

Python | DB・SQL:join

join って何?まずはイメージからJOIN は、「別々のテーブルに分かれている情報を、くっつけて一つの表として見る」ための仕組みです。現実のアプリでは、ユーザー情報と注文情報、商品情報とカテゴリ情報...
Python

Python | DB・SQL:CRUD

CRUD って何?まずは全体像からCRUD(クラッド)は、データベース操作の基本 4 セットの頭文字です。Create(作る)、Read(読む)、Update(更新する)、Delete(削除する)。ア...
Python

Python | DB・SQL:セッション

セッションって何?まずはざっくりイメージ「セッション」は、データベースとやり取りするときの「ひとまとまりの会話」のようなものです。Python から見ると、あるタイミングで DB との“窓口”を開くそ...
Python

Python | DB・SQL:ORM モデル

ORM モデルって何?まずはイメージから「ORM モデル」は、データベースのテーブルを「Python のクラスとして表現したもの」です。ORM は Object Relational Mapping(...
Python

Python | DB・SQL:SQLAlchemy 基本

SQLAlchemy って何者?ざっくりイメージSQLAlchemy は、「Python からデータベースを触るための超定番ライブラリ」です。一言でいうと、SQL を直接書く代わりに、Python の...
Python

Python | DB・SQL:SQLite

SQLite ってそもそも何者?SQLite(エスキューライト)は、「組み込み型」のリレーショナルデータベースです。PostgreSQL や MySQL みたいに「サーバーを立てて接続するタイプ」では...
Python

Python | DB・SQL:PostgreSQL

PostgreSQL ってそもそも何者?PostgreSQL(ポストグレスキューエル)は、オープンソースのリレーショナルデータベース管理システム(RDBMS)です。「無料で使えるのに、企業の本番システ...
Python

Python | DB・SQL:ACID

概要(ACID は「ちゃんとしたトランザクション」の 4 つの約束)ACID は、データベースのトランザクションが「ちゃんとしている」ことを表す 4 つの性質の頭文字です。Atomicity(原子性)...
Python

Python | DB・SQL:トランザクション

概要(トランザクションは「一連の処理を、成功か失敗かで丸ごと扱う仕組み」)トランザクションは、データベースに対して行う「一連の処理」を、「全部まとめて成功」か「全部なかったことにする(失敗)」かのどち...
Python

Python | DB・SQL:インデックス

概要(インデックスは「データベースの辞書の“索引”」)インデックス(index)は、データベースにとっての「本の索引」です。本の後ろにある五十音順の索引があると、目的の用語のページを一瞬で開けますよね...
Python

Python | DB・SQL:サブクエリ

概要(サブクエリ=「SQL の中にもう一個 SQL を入れる」)サブクエリは、「SQL 文の中に、さらに別の SQL 文(小さな SELECT)を入れるテクニック」です。イメージとしては、一回クエリを...
Python

Python | DB・SQL:JOIN

概要(JOIN は「バラバラの表をつないで、1 枚の結果にする」)JOIN は、SQL の中でも「一段レベルが上がった感じ」がするところですが、本質はとてもシンプルで、「関連する 2 つ以上のテーブル...
Python

Python | DB・SQL:HAVING

概要(HAVING は「集計結果に対する WHERE」だと思うと分かりやすい)HAVING は、SQL の中でも「ちょっとだけ上級者向け」に見える句ですが、本質はシンプルで、「GROUP BY でグル...
Python

Python | DB・SQL:GROUP BY

概要(GROUP BY は「グループごとにまとめて計算する」ためのスイッチ)GROUP BY は、SQL で「グループごとに集計する」ための仕組みです。「ユーザーごとの合計金額」「日付ごとの件数」「科...
スポンサーリンク