プログラミング用語集【中級】
フレームワーク、設計パターン、データ構造、アルゴリズムなど、実務で必要な中級レベルの重要な用語を学習できます
用語数統計
プログラミング中級について
プログラミング中級レベルでは、フレームワーク、設計パターン、データ構造、アルゴリズムなど、実務で必要な中級レベルの重要な技術を学習します。基礎概念から一歩進んで、効率的で保守性の高いソフトウェア開発に必要な知識を身につけることができます。
プログラミング中級用語一覧
中級レベルの重要な用語を詳細解説付きで紹介
-
JavaScript
(ジャバスクリプト) JavaScriptWebブラウザ上で動作するプログラミング言語。フロントエンド開発において必須の技術で、動的なWebページの作成やユーザーインタラクションの実装に使用される。
JavaScriptは、Web開発に欠かせないプログラミング言語で、もともとWebブラウザ上で動的なページを作成するために開発されました。現在では、Node.jsの登場によりサーバーサイドでも利用され、フルスタック開発が可能になっています。動的型付け言語で、プロトタイプベースのオブジェクト指向プログラミングをサポートし、関数型プログラミングの特徴も持ちます。React、Vue.js、Angularなどのフレームワークにより、大規模なWebアプリケーション開発も効率化されています。ES6以降の仕様により、アロー関数、分割代入、Promiseなどの現代的な機能が追加され、開発者体験が大幅に向上しました。フロントエンドでのユーザーインターフェース制御から、バックエンドでのAPI開発、さらにはモバイルアプリ開発まで、その活用範囲は広がり続けています。
例:
- DOM操作
- イベント処理
- Ajax通信
- Node.js
-
React
(リアクト) ReactFacebookが開発したJavaScriptライブラリ。コンポーネントベースでユーザーインターフェースを構築し、効率的で保守性の高いWebアプリケーションを作成できる。
Reactは、Facebook(現Meta)が開発したJavaScriptライブラリで、ユーザーインターフェース構築のためのコンポーネントベースアーキテクチャを提供します。仮想DOM(Virtual DOM)という革新的な仕組みにより、効率的な画面更新を実現し、大規模なWebアプリケーションでも高いパフォーマンスを維持できます。JSX(JavaScript XML)記法により、HTMLライクな構文でコンポーネントを記述でき、可読性と開発効率が向上します。Hooks(useState、useEffect等)の導入により、関数コンポーネントでも状態管理やライフサイクル制御が可能になり、より関数型プログラミングに近いアプローチが可能です。Reactエコシステムには、Next.js(フルスタックフレームワーク)、React Native(モバイルアプリ開発)、Gatsby(静的サイト生成)などがあり、幅広い開発ニーズに対応しています。現在では、Netflix、Airbnb、Uberなど多くの企業で採用されている実績があります。
例:
- JSX
- コンポーネント
- useState
- useEffect
-
Node.js
(ノードジェイエス) Node.jsサーバーサイドでJavaScriptを実行するためのランタイム環境。V8エンジンを使用し、非同期I/Oによる高いパフォーマンスを実現する。
Node.jsは、Chrome V8 JavaScriptエンジンをベースに構築されたサーバーサイドJavaScriptランタイム環境です。Ryan Dahlによって2009年に開発され、JavaScriptをブラウザ外でも実行可能にした革新的な技術です。イベント駆動、非同期I/Oモデルにより、I/O集約的なアプリケーションで優れたパフォーマンスを発揮します。npm(Node Package Manager)という強力なパッケージ管理システムを持ち、世界最大のソフトウェアレジストリとして膨大な数のライブラリが利用可能です。Express.js、NestJS、Fastifyなどのフレームワークにより、REST API、GraphQL API、リアルタイムアプリケーション(Socket.io)の開発が効率化されています。マイクロサービスアーキテクチャ、サーバーレス(AWS Lambda、Vercel)、コンテナ化(Docker)との親和性も高く、現代的なバックエンド開発の中核を担っています。Netflix、LinkedIn、PayPalなどの大手企業での採用実績があります。
例:
- Express.js
- npm
- 非同期処理
- サーバーサイド
-
C++
(シープラスプラス) C Plus PlusC言語をベースに開発されたプログラミング言語。オブジェクト指向プログラミングと低レベルな制御を両立し、システムプログラミングやゲーム開発で重要な役割を果たす。
C++は、Bjarne Stroustrupによって開発されたプログラミング言語で、C言語の効率性と低レベル制御に加えて、オブジェクト指向、ジェネリック、関数型プログラミングの機能を統合したマルチパラダイム言語です。手動メモリ管理により最高レベルのパフォーマンスを実現できる一方、RAII、スマートポインタ、STLにより安全で効率的なプログラミングをサポートします。
例:
- STL
- スマートポインタ
- テンプレート
- RAII
-
TypeScript
(タイプスクリプト) TypeScriptMicrosoftが開発したJavaScriptの上位互換言語。静的型付けによりJavaScriptの弱点を補い、大規模開発での保守性と生産性を向上させる。
TypeScriptは、Microsoftが2012年に開発したプログラミング言語で、JavaScriptに静的型付けシステムを追加した上位互換言語です。既存のJavaScriptコードはそのままTypeScriptとして動作し、段階的な移行が可能という特徴があります。コンパイル時の型チェックにより、実行時エラーの多くを事前に検出でき、IDE での強力な補完機能、リファクタリング支援、大規模プロジェクトでの保守性向上を実現します。ES6/ES2015以降の最新JavaScript機能を先取りして実装し、古いブラウザでも動作するJavaScriptにトランスパイルできます。React、Angular、Vue.js などの主要フロントエンドフレームワークで公式サポートされており、Node.js でのサーバーサイド開発でも広く採用されています。インターフェース、ジェネリクス、デコレータ、名前空間など、大規模開発に必要な言語機能を豊富に提供し、クラスベースの オブジェクト指向プログラミングから関数型プログラミングまで幅広いパラダイムに対応しています。Microsoft、Google、Slack、Airbnb、Asana など多くの企業で採用され、npm パッケージの多くがTypeScript対応を進めており、JavaScriptエコシステムの標準となりつつあります。
例:
- Angular
- React
- Express
- Next.js
-
アルゴリズム
(アルゴリズム) Algorithm問題を解決するための手順や処理の流れを定義したもの。プログラミングにおいて効率的な処理を実現するための基本概念。
アルゴリズムは、特定の問題を解決するための明確で体系的な手順を定義した概念で、プログラミングやコンピュータサイエンスの基礎となる重要な要素です。効率的なアルゴリズムにより、同じ処理をより高速に、より少ないメモリで実行できるため、ソフトウェアの性能に直接的な影響を与えます。ソートアルゴリズム(クイックソート、マージソート、ヒープソート)、検索アルゴリズム(二分探索、線形探索)、グラフアルゴリズム(ダイクストラ法、幅優先探索、深さ優先探索)、動的プログラミング、貪欲法、分割統治法など、様々な種類があり、それぞれ異なる問題領域に適用されます。時間計算量(Big O記法)と空間計算量により効率性が評価され、入力サイズに対する処理時間とメモリ使用量の増加率を分析します。機械学習、データ分析、グラフィックス、ゲーム開発、金融取引、暗号化など、あらゆる分野でアルゴリズムが活用されており、Google の検索アルゴリズム、Amazon の推薦アルゴリズム、GPS ナビゲーションのルート探索など、日常生活に深く関わっています。データ構造(配列、リスト、ツリー、ハッシュテーブル)と密接に関連し、適切なデータ構造の選択がアルゴリズムの効率性を大きく左右します。
例:
- クイックソート
- 二分探索
- ダイクストラ法
- 動的プログラミング
-
リファクタリング
(リファクタリング) Refactoringプログラムの外部動作を変えることなく、内部構造を改善する作業。コードの可読性、保守性、拡張性を向上させる重要な技法。
リファクタリングは、Martin Fowlerによって体系化されたソフトウェア開発技法で、プログラムの外部から見える振る舞いを保持しながら、内部のコード構造を継続的に改善する作業です。「動作するコードを、より良いコードに変える」ことを目的とし、技術的負債の削減、コードの可読性向上、保守性の改善、新機能追加の容易化を実現します。Extract Method(メソッドの抽出)、Rename Variable(変数名の変更)、Move Method(メソッドの移動)、Replace Conditional with Polymorphism(条件分岐のポリモーフィズム化)など、具体的なリファクタリングパターンが定義されています。IDE(IntelliJ IDEA、Visual Studio、Eclipse)の自動リファクタリング機能により、安全で効率的な構造改善が可能になりました。単体テスト、統合テストによる回帰テストを併用することで、リファクタリング後の動作保証を確実にします。コードの臭い(Code Smell)を検出して改善対象を特定し、SOLID原則、DRY原則、YAGNI原則などの設計原則に基づいて構造改善を行います。アジャイル開発、TDD(テスト駆動開発)、継続的インテグレーションと組み合わせることで、持続可能で高品質なソフトウェア開発が実現されます。レガシーコードの modernization、技術スタックの更新、パフォーマンス改善においても重要な役割を果たします。
例:
- Extract Method
- Rename
- Move Class
- Extract Interface
-
最適化
(サイテキカ) Optimizationプログラムの性能を向上させるためにコードやアルゴリズムを改善する作業。実行速度の高速化やメモリ使用量の削減を目指す。
最適化は、ソフトウェアの性能を向上させるために、実行速度の高速化、メモリ使用量の削減、電力消費の低減、ネットワーク帯域幅の効率化などを図る体系的な改善活動です。プロファイリングツール(Intel VTune、Google Chrome DevTools、Xcode Instruments)を使用してボトルネックを特定し、測定に基づいた科学的なアプローチで改善を行います。アルゴリズム最適化では、時間計算量の改善(O(n²) → O(n log n))、キャッシュ効率の向上、並列処理の活用によって大幅な性能向上を実現します。コンパイラ最適化(-O2、-O3フラグ)では、ループ展開、関数インライン化、デッドコード除去、定数畳み込みなどが自動的に適用されます。データベース最適化では、インデックス設計、クエリ最適化、正規化・非正規化の適切な適用により、大規模データの高速処理を実現します。フロントエンド最適化では、画像圧縮、JavaScript/CSSの最小化、CDN活用、遅延読み込み、キャッシュ戦略により、ユーザーエクスペリエンスが向上します。メモリ最適化では、オブジェクトプールing、ガベージコレクション最適化、メモリリークの解消により、安定した動作を確保します。ただし、「早すぎる最適化は諸悪の根源」という格言通り、測定と検証に基づいた適切なタイミングでの最適化が重要です。
例:
- プロファイリング
- アルゴリズム改善
- キャッシュ
- 並列処理
-
バージョン管理
(バージョンカンリ) Version Controlソフトウェアの変更履歴を記録・管理し、過去の状態への復元や複数人での協働開発を可能にするシステム。現代的な開発に不可欠な仕組み。
バージョン管理は、ソフトウェア開発においてソースコードやドキュメントの変更履歴を体系的に記録・管理するシステムで、現代的な開発プロセスの基盤となる重要な技術です。Git、Subversion(SVN)、Mercurial、Bazaarなどのバージョン管理システムにより、ファイルの変更内容、変更者、変更日時、変更理由を詳細に追跡できます。分散型バージョン管理(Git)では、各開発者が完全な履歴を持つローカルリポジトリを所有し、ネットワーク接続なしでも作業を継続できます。ブランチとマージ機能により、機能開発、バグ修正、実験的変更を並行して進められ、Git Flow、GitHub Flow、GitLab Flowなどのワークフローにより効率的な協働開発が実現されます。コミット、プッシュ、プル、フェッチ、リベース、チェリーピックなどの操作により、変更の統合と競合の解決を適切に行えます。タグ機能によりリリースバージョンを明確に管理でき、セマンティックバージョニング(SemVer)により互換性を明確化できます。コードレビュー、プルリクエスト、イシュー管理との統合により、品質管理と プロジェクト管理が一元化されます。CI/CDパイプライン、自動テスト、デプロイメント自動化と組み合わせることで、DevOps の実践を支援します。オープンソース開発、企業での大規模開発、個人プロジェクトまで、あらゆる規模の開発でバージョン管理は必須の技術となっています。
例:
- コミット
- ブランチ
- マージ
- プルリクエスト
-
テスト
(テスト) Testingソフトウェアが期待通りに動作することを確認する活動。品質保証と不具合の早期発見のために重要なプロセス。
ソフトウェアテストは、開発されたプログラムが要件通りに動作し、期待される品質を満たしていることを体系的に検証する活動で、ソフトウェア開発ライフサイクルにおいて品質保証の中核を担います。単体テスト(Unit Test)では個々の関数やクラスの動作を検証し、統合テスト(Integration Test)では複数のコンポーネント間の連携を確認します。システムテスト、受け入れテスト、回帰テスト、性能テスト、セキュリティテスト、ユーザビリティテストなど、様々な観点からソフトウェアの品質を多面的に評価します。テスト駆動開発(TDD)では、実装前にテストケースを作成することで、要件の明確化と設計品質の向上を図ります。自動テストフレームワーク(JUnit、NUnit、pytest、Jest、Selenium)により、継続的なテスト実行と回帰テストの効率化が実現されます。テストカバレッジ測定により、テストの網羅性を定量的に評価し、未テスト部分を特定できます。ブラックボックステスト、ホワイトボックステスト、グレーボックステストという観点により、様々なアプローチでテストを設計します。モックオブジェクト、スタブ、フェイクにより、外部依存を排除した独立性の高いテストが可能になります。CI/CDパイプラインとの統合により、コード変更のたびに自動的にテストが実行され、品質の継続的な監視が実現されます。アジャイル開発、DevOps文化において、テスト自動化は開発速度と品質の両立を可能にする重要な要素です。
例:
- 単体テスト
- 統合テスト
- 自動化
- TDD
-
Vue.js
(ビュージェイエス) Vue.jsプログレッシブなJavaScriptフレームワーク。学習コストが低く、既存プロジェクトへの段階的導入が可能。
Vue.js(ビュージェイエス)は、Evan Youが開発したプログレッシブJavaScriptフレームワークです。「プログレッシブ」な設計により、既存のプロジェクトに段階的に導入でき、小さなコンポーネントから大規模なSPAまで柔軟に対応します。テンプレート構文が直感的で学習コストが低く、初心者にも親しみやすい一方、Vue Router、Vuex、Vue CLI、Nuxt.jsなどの豊富なエコシステムにより本格的な開発も可能です。リアクティブデータバインディング、コンポーネントシステム、仮想DOMを提供し、ReactやAngularと比較して軽量で高速です。Adobe、Nintendo、GitLabなどで採用されており、特にアジア圏で人気が高いフレームワークです。
例:
- Nuxt.js
- Vuetify
- Vue Router
- Pinia
-
フローチャート
(フローチャート) Flowchart処理の流れを図式化したもの。処理、判定、入出力などの記号を使ってプログラムの論理構造を視覚的に表現。
フローチャートは、プログラムやシステムの処理手順を視覚的に表現する図式です。基本情報技術者試験では必須の知識で、開始・終了記号(楕円)、処理記号(長方形)、判定記号(ひし形)、入出力記号(平行四辺形)などの標準記号を使用します。複雑な処理を整理し、プログラム設計前の論理構造検討に活用されます。また、他者との仕様共有や、デバッグ時の処理追跡にも重要な役割を果たします。
例:
- 開始記号
- 処理記号
- 判定記号
- ループ処理
-
ソート
(ソート) Sortデータを一定の順序(昇順・降順)に並び替える処理。各種ソートアルゴリズムにより効率性が異なる。
ソートは、データを特定の順序で並び替える基本的なアルゴリズムの一つです。基本情報技術者試験では、バブルソート(O(n²))、選択ソート(O(n²))、挿入ソート(O(n²))、クイックソート(平均O(n log n))、マージソート(O(n log n))、ヒープソート(O(n log n))などが出題されます。各アルゴリズムの時間計算量、空間計算量、安定性(同じ値の要素の順序保持)の特徴を理解することが重要です。
例:
- バブルソート
- クイックソート
- マージソート
- ヒープソート
-
スタック
(スタック) Stack後入れ先出し(LIFO: Last In First Out)の原理で動作するデータ構造。プッシュとポップの操作でデータを管理。
スタックは、データの追加と削除が片方の端(トップ)でのみ行われるデータ構造です。基本情報技術者試験では、LIFO(Last In First Out)の動作原理、Push(データ追加)とPop(データ取得・削除)操作、スタックポインタの概念が出題されます。関数呼び出し時の戻り番地保存、式の計算(後置記法・逆ポーランド記法)、括弧の対応チェック、プログラムの実行管理などで実際に使用されています。
例:
- Push操作
- Pop操作
- 関数呼び出し
- 逆ポーランド記法
-
キュー
(キュー) Queue先入れ先出し(FIFO: First In First Out)の原理で動作するデータ構造。エンキューとデキューの操作でデータを管理。
キューは、一方の端でデータを追加し、他方の端でデータを取り出すデータ構造です。基本情報技術者試験では、FIFO(First In First Out)の動作原理、Enqueue(データ追加)とDequeue(データ取得・削除)操作、環状キュー(リングバッファ)の概念が重要です。プリンタの印刷ジョブ管理、CPUスケジューリング、幅優先探索(BFS)、プロセス間通信などで実際に活用されています。
例:
- Enqueue操作
- Dequeue操作
- 環状キュー
- 印刷ジョブ
-
木構造
(きこうぞう) Tree Structure階層的なデータ構造の一種。ルートノードから始まり、親子関係でノードが連結される。二分木が代表的。
木構造は、ノード(節点)と辺(エッジ)から構成される階層的なデータ構造です。基本情報技術者試験では、ルートノード、葉ノード、親ノード、子ノードの概念、二分木(各ノードが最大2つの子を持つ)、二分探索木、平衡木、木の走査法(前順・中順・後順)などが出題されます。ファイルシステムの構造、データベースのインデックス、構文解析器、意思決定ツリーなど、様々な分野で活用されています。
例:
- 二分木
- 二分探索木
- 前順走査
- ファイルシステム
-
インタープリタ
(インタープリタ) Interpreter高級言語のプログラムを1行ずつ解釈・実行するソフトウェア。コンパイラと異なり実行時に逐次変換。
インタープリタは、ソースコードを1行ずつ読み取り、即座に解釈・実行するソフトウェアです。基本情報技術者試験では、コンパイラとの違い(実行速度は遅いが開発・デバッグが容易、プラットフォーム独立性が高い)が重要です。Python、JavaScript、Ruby、PHP等がインタープリタ言語の例です。仮想マシン(Java VM、.NET CLR)による中間コード方式、スクリプト言語、対話型実行環境(REPL)の概念も関連知識として出題されます。
例:
- 逐次実行
- 対話型実行
- スクリプト言語
- 仮想マシン
-
アルゴリズム解析
(アルゴリズムかいせき) Algorithm Analysisアルゴリズムの効率性を時間計算量と空間計算量で評価する手法。ビッグオー記法などで表現される。
アルゴリズム解析は、プログラムの効率性を定量的に評価する重要な手法です。基本情報技術者試験では、時間計算量(実行時間の増加率)と空間計算量(メモリ使用量の増加率)の概念が重要です。ビッグオー記法(O記法)を使用して、O(1):定数時間、O(log n):対数時間、O(n):線形時間、O(n²):二次時間などで表現します。ソートアルゴリズム(バブルソート:O(n²)、クイックソート:平均O(n log n))や探索アルゴリズム(線形探索:O(n)、二分探索:O(log n))の計算量比較が頻出です。
例:
- ビッグオー記法
- O(n)
- O(log n)
- 時間計算量
-
データ構造
(データこうぞう) Data Structuresデータを効率的に格納・操作するための組織化方法。配列、連結リスト、スタック、キュー、木構造、ハッシュテーブルなど。
データ構造は、プログラムの性能に直接影響する重要な概念です。基本情報技術者試験では、線形データ構造(配列、連結リスト、スタック、キュー)と非線形データ構造(木構造、グラフ)の特性と用途が重要です。スタック(LIFO:後入れ先出し)は関数呼び出しや式の評価に、キュー(FIFO:先入れ先出し)はタスク管理に使用されます。二分木、ヒープ木の特性や、ハッシュテーブルの衝突解決方法(チェイン法、オープンアドレス法)も頻出です。各構造の操作時間(挿入、削除、検索)の計算量理解が必要です。
例:
- 配列
- スタック
- キュー
- 二分木
-
再帰
(さいき) Recursion関数が自分自身を呼び出すプログラミング技法。階乗計算やフィボナッチ数列などで使用される。
再帰は、問題を小さな同様の問題に分割して解決する強力な手法です。基本情報技術者試験では、再帰の基本構造(基底条件と再帰呼び出し)、スタックオーバーフローの概念、末尾再帰最適化が重要です。典型例として階乗(n! = n × (n-1)!)、フィボナッチ数列、ハノイの塔、木構造の走査(前順、中順、後順)があります。再帰とループの変換、メモ化による効率化(動的プログラミング)、再帰の呼び出し回数や計算量の分析も出題されます。
例:
- 階乗計算
- フィボナッチ数列
- ハノイの塔
- 木構造走査
-
テスト手法
(テストしゅほう) Testing Methodologiesソフトウェアの品質を確保するための検証手法。単体テスト、結合テスト、システムテスト、受入テストなど。
ソフトウェアテストは、品質保証の中核技術です。基本情報技術者試験では、テストレベル(単体→結合→システム→受入)とテスト技法が重要です。ブラックボックステスト(同値分割、境界値分析、デシジョンテーブル)は仕様に基づく検証、ホワイトボックステスト(命令網羅、判定条件網羅、条件網羅)はコード構造に基づく検証です。テスト設計技法、バグ密度、テストカバレッジ、回帰テスト、テスト自動化の概念も頻出です。V字モデルにおけるテスト工程の位置づけと、品質メトリクスの理解が必要です。
例:
- 単体テスト
- 結合テスト
- 境界値分析
- カバレッジ
-
メモリ管理
(メモリかんり) Memory Managementプログラム実行時のメモリ使用を制御する仕組み。メモリ割り当て、解放、ガベージコレクションなど。
メモリ管理は、プログラムのメモリ使用を適切に制御する重要な概念です。基本情報技術者試験では、スタック領域(局所変数、関数呼び出し情報)とヒープ領域(動的割り当てメモリ)の違いが重要です。手動管理(C/C++のmalloc/free)では、メモリリークや二重解放の問題があります。自動管理としてガベージコレクション(Java、Python、JavaScript等)があり、参照カウント方式、マーク・アンド・スイープ方式、世代別GCなどの手法があります。メモリプール、弱参照、循環参照の問題と対策も出題されます。
例:
- スタック
- ヒープ
- ガベージコレクション
- メモリリーク
-
関数型プログラミング
(かんすうがたプログラミング) Functional Programming関数を第一級オブジェクトとして扱うプログラミングパラダイム。不変性、純粋関数、高階関数が特徴。
関数型プログラミングは、数学的関数の概念に基づくパラダイムです。応用情報技術者試験では、純粋関数(副作用なし、同じ入力に同じ出力)、不変性(データ変更不可)、高階関数(関数を引数・戻り値とする関数)の概念が重要です。map、filter、reduce等の高階関数、カリー化(部分適用)、クロージャ(関数と環境の組み合わせ)、再帰による繰り返し処理が特徴です。λ計算理論、遅延評価、型推論システム、モナド(Haskell)等の概念も出題されます。JavaScriptのarray.map()やPythonのlambda式等、多言語での関数型要素も重要です。
例:
- 純粋関数
- map関数
- カリー化
- クロージャ
-
正規表現
(せいきひょうげん) Regular Expressions文字列のパターンを表現する記法。文字列検索、置換、検証で使用される。メタ文字、量詞、グループ化が基本要素。
正規表現は、文字列パターンマッチングの強力なツールです。基本情報技術者試験では、基本的なメタ文字(. * + ? ^ $ [] ()等)と量詞(*:0回以上、+:1回以上、?:0回または1回、{n,m}:n回以上m回以下)の理解が重要です。文字クラス([a-z]、[0-9]、\d、\w、\s等)、グループ化(())と後方参照(\1、\2等)、先読み・後読みアサーション、貪欲マッチと非貪欲マッチの違いも出題されます。プログラミング言語での実装差異、性能considerations、入力検証での活用例が実用的な出題内容です。
例:
- [0-9]+
- .*
- ^\d{3}-\d{4}$
- (?=.*[A-Z])
-
API設計
(エーピーアイせっけい) API Designアプリケーション間の通信インターフェースを設計する手法。REST、GraphQL、gRPCなどのスタイルがある。
API設計は、システム間連携の基盤となる重要な技術です。基本情報技術者試験では、RESTful API(GET、POST、PUT、DELETE)の設計原則、HTTPステータスコード(200、404、500等)、JSONデータ形式が重要です。APIの特性として、統一インターフェース、ステートレス、キャッシュ可能性、階層化システムがあります。GraphQL(柔軟なクエリ)、gRPC(高性能RPC)、WebSocket(リアルタイム通信)等の新しいスタイルも出題されます。APIドキュメンテーション、バージョン管理、認証・認可、レート制限の考慮も必要です。
例:
- RESTful API
- GraphQL
- HTTP GET
- JSON
-
コード文書化
(コードぶんしょか) Code Documentationプログラムの理解を助けるための説明記述。コメント、API文書、README、設計書などの形式がある。
コード文書化は、ソフトウェア保守性向上の重要な要素です。基本情報技術者試験では、コメントの種類(単行・複数行・文書化コメント)、コメント記述ガイドライン(何をするかより なぜするか)、APIドキュメント自動生成(Javadoc、JSDoc等)が重要です。文書化の原則として、コードの意図・制約・前提条件の記述、複雑なアルゴリズムの説明、使用例の提供があります。README.md、CHANGELOG、設計文書、ユーザーマニュアルなど、異なる読者向けの文書種別と、文書メンテナンスの重要性も出題されます。
例:
- Javadoc
- README.md
- インラインコメント
- API文書
-
エラーハンドリング
(エラーハンドリング) Error Handlingプログラム実行中の異常状況を適切に処理する仕組み。例外処理、エラーコード、ログ出力などの手法がある。
エラーハンドリングは、堅牢なソフトウェア作成の必須技術です。基本情報技術者試験では、例外処理(try-catch-finally)、検査例外と非検査例外の違い、例外の伝播メカニズムが重要です。エラー処理方式として、戻り値による処理(Cスタイル)、例外による処理(Java/Python等)、関数型のOption/Maybe型があります。適切なエラーメッセージ、ログレベル(DEBUG、INFO、WARN、ERROR、FATAL)、障害の分類(システム障害、業務エラー、ユーザーエラー)、リトライ機能、フェイルセーフ・フェイルファストの概念も出題されます。
例:
- try-catch
- Exception
- ログ出力
- リトライ
-
コード最適化
(コードさいてきか) Code Optimizationプログラムの実行速度向上やメモリ使用量削減を目的とした改良技術。コンパイラ最適化とプログラマによる最適化がある。
コード最適化は、プログラム性能向上の重要な技術です。応用情報技術者試験では、コンパイラ最適化(デッドコード除去、定数畳み込み、ループ展開、インライン展開)とプログラマレベル最適化が重要です。アルゴリズム最適化(計算量改善)、データ構造選択(配列vs連結リスト)、メモリアクセスパターン改善(キャッシュ効率)、I/O処理最適化(バッファリング、非同期処理)があります。プロファイリングによるボトルネック特定、メモリリーク検出、時間計算量・空間計算量のトレードオフ分析も出題されます。早期最適化の弊害も理解が必要です。
例:
- ループ展開
- キャッシュ最適化
- プロファイリング
- メモ化
-
アジャイル開発
(アジャイルかいはつ) Agile Development短期間の反復開発により、変化に対応しながらソフトウェアを開発する手法。スクラム、XPなどの方法論がある。
アジャイル開発は、変化の激しい現代ビジネスに適応した開発手法です。基本情報技術者試験では、アジャイルマニフェスト(個人と対話、動くソフトウェア、顧客との協調、変化への対応)の理解が重要です。スクラムの役割(Product Owner、Scrum Master、Development Team)とイベント(Sprint、Daily Scrum、Sprint Review、Retrospective)、XP(Extreme Programming)の実践(ペアプログラミング、TDD、継続的インテグレーション)が頻出です。ウォーターフォールとの比較、見積り手法(ストーリーポイント、プランニングポーカー)、ベロシティ管理も出題されます。
例:
- スクラム
- スプリント
- ペアプログラミング
- TDD
-
継続的インテグレーション
(けいぞくてきインテグレーション) Continuous Integration開発者がコードを頻繁に統合し、自動的にビルドとテストを実行する開発プラクティス。
継続的インテグレーション(CI)は、チーム開発において、開発者が作成したコードを頻繁にメインブランチに統合し、その度に自動的にビルド、テスト、品質チェックを実行する開発手法です。Jenkins、GitHub Actions、GitLab CI、Azure DevOpsなどのツールを使用して実現されます。コードのコミット時に自動実行され、問題の早期発見、統合の容易性、品質の向上を図ります。テストカバレッジの測定、静的解析、セキュリティチェックも含まれ、継続的デリバリー(CD)の基盤となります。現代のソフトウェア開発において必須のプラクティスです。
例:
- Jenkins
- GitHub Actions
- GitLab CI
- Azure DevOps
-
クリーンコード
(クリーンコード) Clean Code読みやすく、理解しやすく、保守しやすいコードを書くための原則とプラクティス。命名、関数、クラス設計が重要。
クリーンコードは、持続可能なソフトウェア開発の基盤です。基本情報技術者試験では、明確な命名(意図を表現する名前)、短い関数(単一責任原則)、適切なコメント(コードで表現できない理由の説明)の原則が重要です。DRY原則(Don't Repeat Yourself)、YAGNI原則(You Aren't Gonna Need It)、SOLID原則(特に単一責任原則)の理解が必要です。インデント、空白、一貫した書式、適切な抽象化レベル、例外処理の書き方、テスタブルな設計も出題されます。レガシーコードの改善手法、技術的負債の管理も現代的な観点です。
例:
- DRY原則
- SOLID原則
- リファクタリング
- 可読性
-
プログラミング言語の比較
(プログラミングげんごのひかく) Programming Languages Comparison各プログラミング言語の特徴、用途、性能を比較評価する知識。静的・動的型付け、実行方式、適用分野の違い。
プログラミング言語比較は、適切な技術選択の基礎知識です。基本情報技術者試験では、型システム(静的型付け:Java/C++、動的型付け:Python/JavaScript)、実行方式(コンパイル型:C/C++、インタープリタ型:Python、仮想マシン型:Java)の違いが重要です。用途別分類(システム開発:C/C++、Web開発:JavaScript/PHP、データ分析:Python/R、モバイル:Swift/Kotlin)、パフォーマンス特性、学習コスト、エコシステム(ライブラリ・フレームワーク)の豊富さが比較観点です。言語の進化(新機能追加、後方互換性)と業界トレンドも出題されます。
例:
- Java vs Python
- 静的型付け
- コンパイル型
- Web開発言語
-
ソフトウェアメトリクス
(ソフトウェアメトリクス) Software Metricsソフトウェアの品質や生産性を定量的に測定する指標。コード複雑度、テストカバレッジ、バグ密度など。
ソフトウェアメトリクスは、プロジェクト管理と品質保証の重要な手段です。応用情報技術者試験では、サイズメトリクス(LOC:Lines of Code、FP:Function Points)、複雑度メトリクス(循環的複雑度、認知的複雑度)、品質メトリクス(バグ密度、テストカバレッジ、MTBF:Mean Time Between Failures)が重要です。プロセスメトリクス(開発生産性、レビュー効率)、保守性メトリクス(変更コスト、技術的負債指標)、ユーザビリティメトリクス(応答時間、エラー率)も出題されます。メトリクスの収集・分析・改善サイクル、目標設定と評価の方法論が実践的な内容です。
例:
- 循環的複雑度
- テストカバレッジ
- バグ密度
- FP法
-
セキュアコーディング
(セキュアコーディング) Secure Codingセキュリティ脆弱性を作り込まないプログラミング手法。入力検証、出力エスケープ、認証・認可の実装が重要。
セキュアコーディングは、サイバーセキュリティ対策の最前線です。応用情報技術者試験では、OWASP Top 10(SQLインジェクション、XSS、認証破綻等)の対策が重要です。入力検証(ホワイトリスト方式、長さ制限、型チェック)、サニタイゼーション(危険文字の無害化)、パラメータ化クエリ、CSRFトークン、セッション管理の実装が頻出です。暗号化実装(ハッシュ化、ソルト、安全な乱数生成)、認証・認可の設計、ログ出力時の機密情報マスキング、エラーメッセージの適切な設計も出題されます。脆弱性診断、コードレビューの観点も重要です。
例:
- SQLインジェクション対策
- XSS対策
- CSRF対策
- 入力検証
-
テスト駆動開発
(テストくどうかいはつ) Test-Driven Developmentテストコードを先に書いてから実装コードを書く開発手法。Red-Green-Refactorサイクルで進める。
テスト駆動開発(TDD)は、品質の高いコードを作成する実証済みの手法です。基本情報技術者試験では、Red(失敗するテスト作成)→Green(テストを通す最小実装)→Refactor(コード改善)のサイクルが重要です。単体テストフレームワーク(JUnit、pytest、Jest等)の使用、テスト対象の設計(テスタブルな設計)、モック・スタブによる依存関係の分離が頻出です。BDD(Behavior-Driven Development)との関係、アサーション(assertion)の書き方、テストカバレッジの考え方、回帰テストの自動化も出題されます。コード品質向上とドキュメンテーション効果が利点です。
例:
- Red-Green-Refactor
- JUnit
- モック
- アサーション
-
ソフトウェア見積り
(ソフトウェアみつもり) Software Estimationソフトウェア開発に必要な工数、期間、コストを予測する技術。ファンクションポイント法、COCOMO等の手法がある。
ソフトウェア見積りは、プロジェクト成功の重要な要素です。基本情報技術者試験では、ファンクションポイント法(外部入力・出力・照会・内部ファイル・外部ファイルの機能数計算)、COCOMO(Constructive Cost Model)、類推見積り、ボトムアップ見積りの手法が重要です。見積り精度(概算見積り:±25-75%、詳細見積り:±5-10%)、工数配分(設計:20%、実装:30%、テスト:40%等)、リスク要因(技術的複雑さ、要件変更、チーム経験)の考慮も出題されます。アジャイル開発でのストーリーポイント、ベロシティによる見積りも現代的な内容です。
例:
- ファンクションポイント法
- COCOMO
- ストーリーポイント
- 工数配分
-
ポリモーフィズム
(ポリモーフィズム) Polymorphism同じインターフェースで異なる実装を提供するオブジェクト指向プログラミングの概念。
ポリモーフィズムは、オブジェクト指向プログラミングの基本概念の一つで、同じメソッド名やインターフェースを使用して、異なる型のオブジェクトに対して異なる動作を実現する仕組みです。継承関係にあるクラス間で同じメソッド名を使い分けたり、インターフェースを実装するクラスごとに異なる処理を提供したりできます。これにより、コードの柔軟性と再利用性が向上し、保守性の高いプログラムを作成できます。
例:
- メソッドオーバーライド
- インターフェース実装
- 抽象クラス
- 仮想メソッド
-
カプセル化
(カプセルか) Encapsulationデータとそれを操作するメソッドを一つのクラスにまとめ、外部からの不正なアクセスを制限する概念。
カプセル化は、オブジェクト指向プログラミングの基本原則の一つで、関連するデータ(属性)とそれを操作する機能(メソッド)を一つのクラス内にまとめ、外部から直接アクセスできないようにする仕組みです。アクセス修飾子(private、protected、public)を使用してデータの可視性を制御し、不正な操作を防ぎます。これにより、データの整合性を保ち、システムの安全性と保守性を向上させることができます。
例:
- private変数
- getter/setterメソッド
- アクセス修飾子
- 情報隠蔽
-
抽象化
(ちゅうしょうか) Abstraction複雑な実装の詳細を隠し、必要な機能だけを外部に公開するプログラミングの概念。
抽象化は、複雑なシステムの詳細な実装を隠蔽し、利用者にとって必要な機能やインターフェースのみを提供するプログラミングの基本概念です。抽象クラスやインターフェースを使用して、共通の振る舞いを定義し、具体的な実装は継承先のクラスに委ねます。これにより、システムの複雑さを管理し、コードの理解と保守を容易にし、変更に対する柔軟性を提供します。ライブラリやAPIの設計においても重要な概念です。
例:
- 抽象クラス
- インターフェース
- 抽象メソッド
- API設計
-
継承
(けいしょう) Inheritance既存のクラスの機能を引き継いで新しいクラスを作成するオブジェクト指向プログラミングの仕組み。
継承は、オブジェクト指向プログラミングの基本概念の一つで、既存のクラス(基底クラス、親クラス)の属性やメソッドを新しいクラス(派生クラス、子クラス)が引き継ぐ仕組みです。コードの再利用性を高め、階層的なクラス構造を構築できます。子クラスは親クラスの機能を継承しつつ、独自の機能を追加したり、既存の機能をオーバーライドして変更したりできます。適切な継承設計により、保守性と拡張性の高いソフトウェアを開発できます。
例:
- 基底クラス
- 派生クラス
- メソッドオーバーライド
- IS-A関係
-
SOLID原則
(ソリッドげんそく) SOLID Principlesオブジェクト指向設計の5つの基本原則。保守性と拡張性の高いソフトウェアを設計するためのガイドライン。
SOLID原則は、Robert C. Martinによって提唱されたオブジェクト指向設計の5つの基本原則です。S(Single Responsibility:単一責任)、O(Open/Closed:開放閉鎖)、L(Liskov Substitution:リスコフ置換)、I(Interface Segregation:インターフェース分離)、D(Dependency Inversion:依存関係逆転)の頭文字を取ったものです。これらの原則に従うことで、変更に強く、テストしやすく、理解しやすいコードを書くことができます。現代のソフトウェア開発において、クリーンアーキテクチャの基盤となる重要な概念です。
例:
- 単一責任原則
- 開放閉鎖原則
- リスコフ置換原則
- 依存関係逆転原則
-
単体テスト
(たんたいテスト) Unit Testingプログラムの最小単位(関数、メソッド、クラス)を個別にテストする手法。
単体テストは、ソフトウェア開発における最も基本的なテスト手法で、プログラムの最小構成要素を分離してテストします。JUnit、NUnit、Jest、PyTestなどのフレームワークを使用し、自動化されたテストを作成します。テスト駆動開発(TDD)では、実装前にテストを書くことで設計品質を向上させます。Arrange(準備)、Act(実行)、Assert(検証)の3つのフェーズで構成され、モックオブジェクトやスタブを使用して外部依存を排除します。継続的インテグレーションの基盤となり、リファクタリングの安全性を保証し、ドキュメント代わりにもなる重要な開発プラクティスです。
例:
- JUnit
- Jest
- PyTest
- Mocha
-
結合テスト
(けつごうテスト) Integration Testing複数のモジュールやコンポーネントが正しく連携して動作することを確認するテスト。
結合テストは、個別に開発されたモジュールやコンポーネントを組み合わせた際の動作を検証するテスト手法です。単体テストでは検出できない、モジュール間のインターフェースの問題、データの受け渡し、通信プロトコルの不具合などを発見できます。Big Bang、Top-down、Bottom-up、Sandwichアプローチなどの戦略があります。API テスト、データベース連携テスト、外部システム連携テストなどが含まれ、実際の運用環境に近い条件でテストを実行します。継続的インテグレーションにおいて、アプリケーション全体の品質を保証する重要な工程です。
例:
- APIテスト
- データベース連携テスト
- 外部システム連携
- エンドツーエンドテスト
-
技術的負債
(ぎじゅつてきふさい) Technical Debt短期的な解決策や妥協により蓄積される、将来の開発効率を下げる要因。設計の劣化、古い技術の使用、テスト不足などが原因となる。
技術的負債(Technical Debt)は、短期的な解決策や妥協により蓄積される、将来の開発効率を下げる要因です。急いで実装したコード、設計の劣化、古い技術の使用、テスト不足、ドキュメント不備などが負債となります。金融の借金と同様に「利息」として開発速度の低下、バグの増加、保守コストの増大を招きます。継続的なリファクタリング、技術更新、コードレビューにより管理と返済を行う必要があります。