プログラマのための IT 教科書

用語集

会議やレビューで、意味の分からない言葉が出てきた時に引いてください。 その場で聞けるのが一番良いですが、聞きそびれた時のための場所です。

「握る」「温度感」のような日本の開発現場特有の言い回しも入れています。

82

開発プロセス

スプリントsprint / イテレーション
1〜2週間の固定期間。この単位で計画し、作り、振り返る。期間は伸ばさないのが原則で、入りきらない場合は中身を減らす。 詳しく読む
デイリー朝会 / スタンドアップ / daily scrum
毎朝15分の短い会。進捗報告の場ではなく、困っていることを早く表に出すための場。 詳しく読む
レトロretrospective / 振り返り / KPT
スプリント末に、やり方を改善するために行う振り返り。責めるのは人ではなくプロセス。KPT(Keep / Problem / Try)で整理することが多い。 詳しく読む
DoDDefinition of Done / 完了の定義
チームが「終わった」と認める条件。実装・テスト・レビュー・ドキュメント・動作確認まで含むことが多い。「動いた」とは違う。 詳しく読む
POプロダクトオーナー / Product Owner
何を作るかの優先順位を決める人。「どう作るか」は開発チームが決める。 詳しく読む
ストーリーポイントSP / ポイント / 見積もり
作業量を時間ではなく相対的な難しさで表す数値。人によって作業時間が違うことと、時間で言うと約束に聞こえることを避けるため。 詳しく読む
ベロシティvelocity
1スプリントでチームが消化できるストーリーポイントの実績値。計画の目安に使う。個人の評価には使わない。
バックログbacklog
やることリスト。全体を並べたプロダクトバックログと、今スプリントでやるスプリントバックログがある。 詳しく読む
受け入れ条件AC / Acceptance Criteria
そのチケットが「できた」と言える具体的な条件。書かれていなければ自分で書いて確認するとよい。 詳しく読む

Git / レビュー

PRプルリク / Pull Request / MR / Merge Request
変更をレビューしてもらい、取り込んでもらうための単位。小さく出すほど早くレビューされる。 詳しく読む
LGTMLooks Good To Me
「自分は良いと思う」= 承認。レビューを通した合図。 詳しく読む
nitnitpick
「細かいけど」という前置き。直さなくてもマージできることが多い、軽い指摘。 詳しく読む
WIPWork In Progress
まだ作業中。レビュー前に方向性だけ見てほしい時に付ける。
rebaseリベース
コミットの土台を差し替えて履歴を書き換える操作。push 済みで他人が取り込んでいるブランチではやってはいけない。 詳しく読む
squashスカッシュ
複数のコミットを1つにまとめること。マージ時に squash してから取り込むチームも多い。
コンフリクトconflict / 衝突
同じ場所を両方が別内容に変えたため、Git が自動で決められない状態。壊れているわけではなく、人間の判断待ち。 詳しく読む
reflog
HEAD が動いた履歴。reset --hard で消したように見えるコミットもここから戻せる。やらかした時の命綱。 詳しく読む
cherry-pick
特定のコミットだけを別のブランチに取り込む操作。緊急修正の反映などに使う。

Web / ネットワーク

CORSオリジン間リソース共有
ブラウザが別オリジンへのリクエストを制限する仕組み。サーバー側が許可ヘッダを返す必要がある。実務で最も時間が溶けるエラーの1つ。
DNS
ドメイン名を IP アドレスに変換する仕組み。キャッシュ(TTL)があるため、切り替えてもすぐには反映されない。
TLSSSL / HTTPS
通信を暗号化する仕組み。証明書の有効期限切れは典型的な障害原因。
gRPC
protobuf でスキーマを定義し、HTTP/2 の上で通信する RPC の仕組み。JSON より小さく速く、型が保証される。
protobufProtocol Buffers / proto
スキーマを先に定義するシリアライズ形式。フィールド番号を変えると後方互換性が壊れるので注意。
REST
リソースを URL で表し、HTTP メソッドで操作を表す設計スタイル。GET は取得、POST は作成など。
レイテンシlatency / 応答時間
リクエストしてから応答が返るまでの時間。平均値ではなく p95 / p99(遅い方から数えた値)で見るのが実務の作法。
p99パーセンタイル / p95
遅い順に並べた時の上位1%の値。平均は速く見えても p99 が悪いと、一部のユーザーが強い不満を持つ。
CDN
世界中に配置したサーバーから静的ファイルを配る仕組み。距離が縮まるので速くなる。
ペイロードpayload
リクエストやレスポンスの本体データ。

インフラ / デプロイ

コンテナDocker / container
アプリと必要な依存をまとめて、どこでも同じように動かす仕組み。中身は Linux なので macOS との差に注意。 詳しく読む
Pod
Kubernetes でコンテナを動かす最小単位。通常は1 Pod に1コンテナ(+補助コンテナ)。
Deployment
Pod を何個動かすかを宣言するリソース。更新すると順次入れ替えてくれる。
Service
Pod へのアクセス口。ラベルで対象の Pod を選ぶので、セレクタが合っていないと繋がらない(Endpoints が空になる)。
GKEGoogle Kubernetes Engine
GCP のマネージド Kubernetes。クラスタの管理を任せられる。
ステージングstaging / stg
本番とほぼ同じ構成の確認環境。ここで確認せずに本番へ出さないのが基本。 詳しく読む
カナリアリリースcanary
まず一部のユーザーにだけ新バージョンを出し、問題がなければ広げる方式。炭鉱のカナリアが語源。 詳しく読む
ロールバックrollback / 切り戻し
問題が出た時に前のバージョンへ戻すこと。「出せること」より「戻せること」の方が重要。 詳しく読む
フィーチャーフラグfeature flag / フラグ
コードは出すが機能は設定でオフにしておき、後から有効化する仕組み。デプロイと公開を分離できる。
CI/CD
コードを push したら自動でテストし(CI)、自動でデプロイする(CD)仕組み。「CI が落ちた」はテストや lint の失敗を指すことが多い。
IaCInfrastructure as Code / Terraform
サーバーやネットワークの構成をコードで管理すること。手作業の変更は次の apply で消えるので注意。

運用 / 監視

SLOSLI / SLA / サービスレベル
SLI が測る指標(成功率など)、SLO が目標値(99.9%)、SLA が顧客との契約。SLO を下回ると新機能を止めて改善に回す、という運用をすることがある。
オンコールon-call / 当番
障害が起きた時に呼び出される当番。新人はしばらく免除されるか、必ず先輩とペアで入る。
ポストモーテムpostmortem / 振り返り / 障害報告
障害の原因と再発防止をまとめる文書。個人を責めない(blameless)のが原則。仕組みの問題として書く。
可観測性Observability / オブザーバビリティ
ログ・メトリクス・トレースで、システムの中で何が起きているかを外から分かるようにすること。
分散トレーストレース / trace / スパン
1つのリクエストが複数サービスをどう通ったかを追跡する仕組み。どこで時間がかかっているかが分かる。
構造化ログ
JSON などの機械が読める形式で出すログ。後から絞り込み・集計できる。文字列を繋げただけのログは検索しづらい。
相関IDtrace id / request id
1つのリクエストに付ける一意の ID。サービスをまたいでログを繋げるために使う。
アラートalert / ページング
異常時に人を呼び出す通知。鳴りすぎると無視されるようになる(アラート疲れ)ので、本当に対応が必要なものだけにする。

データベース

N+1問題N+1
一覧を取得した後、各要素ごとに追加クエリを投げてしまい、100件なら101回クエリが飛ぶ状態。レビューで指摘される定番。
INDEXインデックス
検索を速くする仕組み。付ければ何でも速くなるわけではなく、書き込みは遅くなる。
トランザクションtransaction
複数の操作をまとめて「全部成功」か「全部なかったこと」にする仕組み。
SpannerCloud Spanner
GCP の分散データベース。連番の主キーを使うと書き込みが1ノードに集中する(ホットスポット)ため、主キー設計が普通の RDBMS と異なる。
ホットスポット
分散データベースで、特定のノードに負荷が集中する状態。連番 ID やタイムスタンプ順の主キーで起きやすい。
マイグレーションmigration / スキーマ変更
DB のスキーマを変更する作業。カラム削除などの破壊的変更は、追加→両対応→削除の2段階に分けるのが安全。
レプリカreplica / リードレプリカ
読み取り専用の複製。書き込みの反映が少し遅れる(レプリケーション遅延)ので、直後に読むと古い値が返ることがある。

設計

冪等性べきとうせい / idempotency
同じ操作を何回実行しても結果が変わらない性質。リトライする仕組みでは必須。決済で二重課金を防ぐのがこれ。
リトライretry
失敗した通信をやり直すこと。全員が一斉にリトライすると障害を悪化させる(リトライストーム)ので、間隔を空ける(バックオフ)。
サーキットブレーカーcircuit breaker
失敗が続く相手への呼び出しを一時的に止める仕組み。壊れた相手を叩き続けて共倒れになるのを防ぐ。
マイクロサービス
システムを小さなサービスに分けて、それぞれ独立してデプロイできるようにする構成。分割の代償としてネットワーク越しの失敗を常に考える必要がある。
モノリスmonolith / モノリシック
1つの大きなアプリとして作る構成。単純で速いが、大きくなると変更が怖くなる。
BFFBackend for Frontend
フロントエンド専用のバックエンド層。複数サービスの結果をまとめて画面に必要な形で返す。
キャッシュ
一度取得した結果を保存して再利用する仕組み。速くなるが、古いデータが返る問題(キャッシュの無効化)が常について回る。

品質 / テスト

技術的負債負債 / technical debt
後で直す前提で残した実装。放置すると利息のように開発速度を下げる。悪ではなく、意識的に借りて返すもの。
リファクタリング
振る舞いを変えずに内部構造を整理すること。機能追加と同じ PR に混ぜるとレビューが困難になる。
カバレッジcoverage / テストカバレッジ
テストがコードのどれだけを通ったかの割合。高ければ品質が高いとは限らないが、極端に低いと危険。
AAAパターンArrange Act Assert
テストの書き方。準備(Arrange)・実行(Act)・検証(Assert)の3段に分けると読みやすい。
モックmock / スタブ
テストで外部依存を偽物に差し替えること。使いすぎると「テストは通るが本番で動かない」状態になる。
lintリンター / linter
コードの書き方の問題を機械的に指摘するツール。CI で落ちる原因の定番。

セキュリティ

XSSクロスサイトスクリプティング
ユーザー入力をそのまま HTML に出したせいで、任意のスクリプトを実行されてしまう脆弱性。innerHTML ではなく textContent を使う。
SQLインジェクションSQLi
SQL を文字列結合で組み立てたせいで、任意のクエリを実行されてしまう脆弱性。必ずパラメータ化クエリを使う。
CSRF
ログイン中のユーザーに、意図しないリクエストを別サイトから送らせる攻撃。トークンで防ぐ。
認証と認可authn / authz / authentication / authorization
認証は「誰であるか」を確かめること、認可は「何をしてよいか」を決めること。別のもの。
JWTジョット / JSON Web Token
署名付きのトークン。中身は誰でも読めるので秘密情報を入れてはいけない。一度発行すると失効させにくい。
シークレット秘密情報 / credential
API キーやパスワード。コードに書かず環境変数などで渡す。コミットしてしまったら、まず鍵を無効化して報告する。 詳しく読む

社内でよく出る言い回し

握る
関係者間で合意を取ること。「PdM と握っておいて」= 事前に合意を取っておいて、の意味。
巻き取る
他の人の作業を引き受けること。「こっちで巻き取ります」= 自分がやります。
温度感
緊急度や重要度の肌感覚。「温度感を教えてください」= どれくらい急ぐか知りたい、の意味。
よしなに
「いい感じにやっておいて」。判断を任されているが、基準が不明なら必ず確認すること。
一次情報
公式ドキュメントやソースコードなど、元の情報。ブログ記事は二次情報。迷ったら一次情報を見る。
積む
タスクをバックログに追加すること。「来週に積んでおきます」。
ペアプロペアプログラミング / モブプロ
2人(複数人)で1つの画面を見ながら実装すること。新人が最短で慣れる方法なので、遠慮せずお願いしてよい。
ラバーダックrubber duck
人に説明しようと状況を言葉にしている途中で、自分で答えに気づく現象。質問を書く効果の1つ。
30分ルール
30分考えて進まなければ人に聞く、という目安。新人が最も評価を落とすのは技術力不足ではなく報告の遅れ。 詳しく読む