はじめに
エンジニアになって数年経ちますが、それでも知らない用語や忘れてしまっていた用語ばかりです。
ここ数ヶ月、自分で自信をもって説明できないなと思ったものをメモしておいてAIに解説してもらいました。
定期的にこの記事を見直して知識を定着させていきたいと思っています。
🏗️ソフトウェア開発基礎
テスト・品質保証
- デグレード(デグレ):同義語にリグレッション(リグレ)がある。新機能追加や修正により、既存の正常な機能が壊れる現象。バージョンアップ時に特に発生しやすい。リグレッションテストで検出。事象をデグレ、デグレが起きていないかを確認するのをリグレッションテストというふうに使うことが多い
- 単体テスト:個々の関数・メソッドなど、最小単位のコードを検証。Jest、JUnitなどで自動化。
- 結合テスト(複合テスト):複数のモジュールを組み合わせて、データの受け渡しや処理が正しく動くか確認。
- E2Eテスト:ユーザーの操作をシミュレーションして、アプリ全体が期待通り動作するか確認。Cypress、Playwrightなど。
- TDD(テスト駆動開発):テストケースを先に書き、失敗を確認 → 実装 → 成功 → リファクタリング、のサイクルで開発。
開発手法・概念
- PoC(Proof of Concept):新しい技術やアイデアが「実際に実現できるかどうか」を短期間・小規模に試作して検証する手法。主に技術的な課題やリスクを早期に洗い出す目的で用いられる。本格的な開発や投資を始める前段階で、実装可能性や効果をシンプルなプロトタイプ等で確認する。主に開発チーム内部で行われる
- MVP(Minimum Viable Product):必要最小限の機能だけを持つ製品やサービスを短期間で開発し、市場やユーザーの反応を素早く検証するための手法。PoCが主に「技術的実現性の検証」に焦点を当てるのに対し、MVPは「ユーザー価値や市場ニーズの検証」に重きを置く。最小限のコストと時間でフィードバックを得て、今後の開発方針を決定するために活用される。ユーザーからのフィードバックが必要なので公開をする。
- ウォーターフォール開発:要件定義→設計→実装→テスト→運用の順に、各工程を一つずつ進めていく開発手法。工程ごとに成果物を明確にし、後戻りが難しいため、仕様変更が少ないプロジェクトや大規模システムに適している。進捗管理がしやすい一方で、柔軟な対応が困難な場合がある。
- アジャイル開発:小さな単位で反復しながら開発を進める手法。変化に柔軟に対応し、顧客やユーザーとの対話・フィードバックを重視する。
- スクラム:アジャイル開発の代表的なフレームワーク。チーム全体で短い期間(スプリント)ごとに計画・開発・振り返りを繰り返し、継続的に成果物を改善する。
- ベロシティ:スクラムチームが1スプリントで完了できる作業量の指標。ストーリーポイントによって計測され、今後の見積もりや計画に活用される。
-
スクラムの主なイベント:
- スプリント:1~4週間で繰り返す開発サイクル。継続的な改善を行う単位。
- スプリントプランニング:スプリント開始時、今回取り組む作業内容(プロダクトバックログの選定)を決める。
- デイリースクラム:毎日15分程度の短いミーティング。進捗共有や障害の早期発見を目的とする。
- スプリントレビュー:スプリント終了時に成果物を関係者に披露し、フィードバックを得る。
- スプリントレトロスペクティブ:スプリントの振り返り。良かった点・改善点を話し合い、次回以降に活かす。
- As-Is / To-Be:業務プロセスやシステムの「現状(As-Is)」と「理想の将来像(To-Be)」を整理する分析手法。
🛡️ ️ セキュリティ
攻撃手法・脆弱性
- SQLインジェクション:入力に不正なSQLを仕込み、DBを操作する攻撃。プリペアドステートメントやORMで防止。
- XSS(クロスサイトスクリプティング):悪意のあるスクリプトをWebページに埋め込む攻撃。反射型(URLパラメータから即時実行)、格納型(DBに保存され後で実行)、DOM型(JavaScriptのDOM操作で発生)の3種類がある。エスケープ処理、CSPヘッダー、入力バリデーションで対策。
- CSRF/XSRF(クロスサイトリクエストフォージェリ):ユーザーが意図しないリクエストを別サイトから送信させる攻撃。トークン検証、SameSite Cookie、Refererチェックで防止。
アクセス制御
- 認証(Authentication):「誰か」を確認。パスワードや生体認証。
-
認証方式:
- JWT認証:署名付きのJSONトークンでステートレスに認証。
- セッション認証:サーバー側でセッション情報を保持。Cookie経由でセッションIDを管理。
- OAuth/OIDC:外部サービスの認証を利用する委譲認証。
- 認可(Authorization):「何ができるか」を制御。RBACやABACで実現。
- VPN(Virtual Private Network):インターネット上に暗号化されたトンネルを作り、安全に通信。
🌐 ネットワーク・インフラ
ネットワーク基礎
- OSI参照モデル:通信を7層で分割し、役割を整理。
- ブラウザがWebページを表示するまで:DNS解決 → TCP接続 → TLS/SSLハンドシェイク → HTTPリクエスト → DOM/CSSOM構築 → レンダリング。
インフラ構成要素
- ロードバランサー:トラフィック分散。可用性向上。
- プロキシサーバー:中継役。キャッシュ、匿名化、制御。
- VPS:物理サーバーを仮想的に区切った専用環境。
- VPC:クラウド上の仮想ネットワーク空間。
ミドルウェア階層
- Webサーバー:Nginx, Apache。静的ファイル(HTML、CSS、画像など)の配信を主に担当。クライアントからのリクエストを受け付け、必要に応じてアプリケーションサーバーへ転送するリバースプロキシとしても機能。
- アプリケーションサーバー:Tomcat, Unicorn, Puma。動的なコンテンツ生成処理を実行。プログラムコード(PHP, Ruby, Java等)を実行し、リクエストに応じた処理をしてWebサーバーに結果を返す。Webサーバーとの主な違いは「プログラムコードの実行環境」を提供する点。また、ビジネスロジックの処理、DB接続管理、セッション管理なども担当。
- データベースサーバー:PostgreSQL, MySQL。データの永続化と管理を担当。トランザクション処理、クエリ実行、データの保存や取得などを行う。
- ミドルウェア(Middleware):OSとアプリケーションの中間層として機能するソフトウェア。上記のWebサーバー、アプリケーションサーバー、DBサーバーも含む広い概念。他にもメッセージキュー(RabbitMQ, Kafkaなど)やキャッシュサーバー(Redis, Memcachedなど)もミドルウェアに含まれる。
💻 Web開発技術
ストレージ
- Cookie:4KB程度。自動送信される。セッション管理に便利だがセキュリティ注意。
- LocalStorage:5〜10MB。永続保存。機密情報の保存はNG。
- SessionStorage:タブを閉じるまで有効。
CSS設計
-
BEM:
block__element--modifier
の命名規則。スコープを明確化。 - FLOCSS:Foundation/Layout/Objectの構造化。
レンダリング
- CSR:クライアントで描画。初回遅い。
- SSR:サーバーでHTML生成。SEOに強い。
- SSG:ビルド時に静的生成。CDNと相性良。
- ISR:一定期間ごとに再生成。
フレームワーク・アーキテクチャ
- SPA(Single-Page Application):一度ロードした後はページ遷移せず、JavaScriptでDOM操作によって画面を切り替えるWebアプリ。Ajax通信でデータのみをやり取りするため高速な操作感が特徴。Reactや Vue.jsなどのフロントエンドフレームワークで実現。初期ロードが遅い、SEO対策が難しいなどの欠点もある。
- MPA(Multi-Page Application):複数ページで構成される従来型のWebアプリ。各ページ遷移でサーバーから新しいHTMLを取得。SPAと比べてSEO対策が容易で初期表示が早い。
- BFF(Backend For Frontend):フロントエンド専用のAPI層。特定のフロントエンド(モバイルアプリ、Webアプリなど)に最適化されたAPIを提供し、クライアント固有のデータ整形やビジネスロジックを処理する。マイクロサービスとフロントエンドの間の橋渡し役として、複数のバックエンドサービスを統合する。
🛠️ 開発ツール・環境
コード品質管理
- ESLint:構文チェック。
- Prettier:整形ツール。
- Biome:ESLint + Prettier の後継的統合ツール。Rust製で高速。
ビルド・トランスパイル
- バンドル:複数のモジュールファイルを1つまたは少数のファイルにまとめる処理。依存関係の解決と最適化を行う。
- トランスパイル:ある言語やバージョンのコードを別の言語やバージョンに変換すること。ES6→ES5変換やTypeScript→JavaScript、SCSS→CSSなど。
- ビルド:コードの変換・バンドル・最適化を含む一連の処理全体を指す。本番環境用のファイル生成プロセス全体。
- Babel:トランスパイラーの代表。JSを古いブラウザ向けに変換。TypeScriptやJSXなども変換可能。
- PostCSS:CSS変換ツール。Autoprefixerなどのプラグインでベンダープレフィックス自動追加や最適化を行う。
- Webpack:モジュールバンドラー。依存関係解決、コード分割、アセット管理などを行う総合的なビルドツール。
- Turbopack:ビルドツール。Webpack後継。Rust製で高速。インクリメンタルビルドに特化。
- Vite:軽量ビルドツール。開発時はESMを活用し、本番用にはRollupでバンドル。HMR(Hot Module Replacement)が速い。
コンテナ・仮想化
- Docker:コンテナ仮想化技術。アプリケーションとその依存関係を含む実行環境を「コンテナ」として隔離・パッケージ化できる。軽量で起動が速く、「Infrastructure as Code」の実現に貢献。Dockerfileでコンテナ設定を定義し、Docker Composeで複数コンテナの連携も可能。
-
Dev Container:VSCodeの拡張機能で、Dockerコンテナ内で直接開発できる環境。ローカルマシンを汚さず、チーム全員が同一環境で開発可能。
.devcontainer
フォルダに設定ファイルを置くことで、プロジェクト固有の開発環境を共有できる。
📊 データベース
SQL分類
-
DDL(Data Definition Language):
CREATE TABLE
、ALTER TABLE
、DROP TABLE
- スキーマ定義 -
DML(Data Manipulation Language):
SELECT
、INSERT
、UPDATE
、DELETE
- データ操作 -
DCL(Data Control Language):
GRANT
、REVOKE
- 権限管理 -
TCL(Transaction Control Language):
COMMIT
、ROLLBACK
、SAVEPOINT
- トランザクション制御
NoSQL・キャッシュ
-
Redis:インメモリ型。セッション・ランキング・キャッシュに利用。
DynamoDB:AWSのNoSQLデータベース。スケーラビリティに優れ、高速な読み書きが可能。
📈 パフォーマンス
- LCP:最大コンテンツ描画速度。2.5秒以内が理想。
- CLS:累積レイアウトシフト。0.1以下。
- FID:初回入力遅延。100ms以内。
- スループット(Throughput):単位時間あたりの処理量。WebサーバーやDBの性能指標として重要。
🏢 ビジネス・運用
サービス品質
- SLA:契約上の品質保証。
- SLO:内部目標。
- SLI:実測値。
- SRE:信頼性エンジニアリング。
クラウドサービス形態
- SaaS (Software as a Service):ソフトウェアをインターネット経由で提供。ユーザーはブラウザなどから利用。Gmail、Salesforce、Notionなど。
- PaaS (Platform as a Service):アプリケーション実行環境をサービスとして提供。開発者はインフラ管理不要でアプリ開発に集中可能。Heroku、Google App Engine、AWS Elasticなど。
- IaaS (Infrastructure as a Service):仮想サーバー、ストレージなどのインフラをサービスとして提供。AWS EC2、Azure VMなど。
組織用語
-
ベンダー:
- 一般的な意味:製品やサービスの提供者/販売者。IT業界では、システムやソフトウェアを提供する会社のこと。
- SES現場での用法:クライアント企業に対してシステムやサービスを提供する側の企業。発注を受ける側の会社。
-
プロパー:
- 一般的な意味:その組織の本来の正社員。外部から来た人材と区別する場合に使用。
- SES現場での用法:派遣先企業(クライアント企業)の正社員。SESエンジニアや派遣社員と区別するために使われる。
-
PM(Project Manager)
- 責任範囲:プロジェクト単位
-
主な役割
- 予算・スケジュール・品質の管理
- 契約条件や顧客との折衝
- プロジェクトリスクの洗い出し・対応
- PLやPOと連携して、**「成果物を期限までに納品」**する責任
- 特徴:ビジネス寄り。進捗や予算管理に強い。
-
PL(Project Leader)
- 責任範囲:チーム単位(現場)
-
主な役割
- メンバーのタスク割り振り
- 設計・レビュー・技術的課題の解決
- 新人教育、技術的リスク対応
- PMの方針を現場レベルに落とし込み
- 特徴:技術寄り。手を動かすことも多い。
-
PO(Product Owner)
- 責任範囲:部署・事業単位(部長クラス以上)
-
主な役割
- 部署全体の 売上・利益責任 を負う
- 中長期的な 事業戦略の策定
- 複数のPM/POを監督し、全体の方向性を調整
- 人材育成・評価・組織運営
- 経営層との橋渡し役(経営戦略を現場に落とす)
- 特徴:経営寄り。プロジェクト単位でなく 事業全体の成否 に責任を持つ。
-
GM(General Manager)
-
主な役割
- 部署全体の 売上・利益責任 を負う
- 中長期的な 事業戦略の策定
- 複数のPM/POを監督し、全体の方向性を調整
- 人材育成・評価・組織運営
- 経営層との橋渡し役(経営戦略を現場に落とす)
- 特徴:経営寄り。プロジェクト単位でなく 事業全体の成否 に責任を持つ。
-
主な役割
🎯 まとめ(役割の違い)
役割 | 責任範囲 | 視点 | 主な関心ごと | 現場との距離 |
---|---|---|---|---|
GM | 部署・事業全体 | 経営・戦略 | 売上・利益、組織運営 | 遠い |
PO | プロダクト全体 | 顧客・市場 | どんな機能を作るか、価値最大化 | 中間 |
PM | プロジェクト全体 | 契約・納期 | 予算・進捗・品質 | 中間 |
PL | チーム・技術 | 技術・実装 | 設計、レビュー、教育 | 近い |
🔐 暗号化関連
- TLS(Transport Layer Security):通信暗号化の規格。SSLの後継。
- SSL(Secure Sockets Layer):古い暗号化規格。現在はTLSが主流。
💬 コミュニケーション略語
- FYI:参考までに
- LGTM:承認OK
- WIP:作業中
- IMO/IMHO:私見では
- ASAP:できるだけ早く
- TBD:未決定