プログラミングとは
この講座では、プログラミング言語の基本的な概念と、その中でPythonがどのような位置づけにあるのかを学びます。
- プログラミング言語とは何か
- プログラミング言語の種類と分類
- 代表的なプログラミング言語とフレームワーク
- インフラエンジニアがプログラミングを学ぶ理由
1. プログラミングの概要
1.1 プログラミング言語とは
プログラミング言語とは、コンピュータに対して命令を伝えるための言語です。
コンピュータは本来、0と1の組み合わせ(機械語)しか理解できません。しかし、人間が機械語で直接命令を書くのは非常に困難です。そこで、人間が理解しやすい形式で命令を記述し、それをコンピュータが理解できる形式に変換する仕組みとして、プログラミング言語が生まれました。
つまり、まず人間がプログラミング言語でコードを書き、それが機械語(コンピュータが理解できる命令)に変換されます。変換された命令をコンピュータが実行することで、処理結果が得られるという流れです。
1.2 プログラミング言語の種類
プログラミング言語にはさまざまな分類方法がありますが、ここでは代表的な2つの分類を紹介します。
コンパイル型とインタプリタ型
プログラミング言語は、コードを機械語に変換する方法によって大きく2つに分類されます。
コンパイル型とインタプリタ型の実行の流れを図に示します。
flowchart LR
subgraph コンパイル型言語
direction TB
A1[ソースコード] --> A2[コンパイラ] --> A3[機械語] --> A4[実行]
end
subgraph インタプリタ型言語
direction TB
B1[ソースコード] --> B2[インタプリタ] --> B3[1行ずつ実行]
end
コンパイル型言語は、コード全体を事前に機械語へ変換(コンパイル)してから実行する方式です。実行前に変換を済ませるため動作が高速ですが、コードを修正するたびにコンパイルし直す必要があります。C、Java、Goなどがこのタイプに該当します。
インタプリタ型言語は、コードを1行ずつ変換しながら実行する方式です。コンパイルの手順が不要なため、コードを書いてすぐに動作を確認でき、手軽に開発を進められます。一方で、実行のたびに変換処理が入るため、コンパイル型に比べると動作速度は遅くなる傾向があります。Python、JavaScript、Rubyなどがこのタイプに該当します。
本講座で学ぶPythonはインタプリタ型言語であり、書いたコードをすぐに試せる手軽さが特徴です。
静的型付け言語と動的型付け言語
プログラミング言語は、変数の「型」(データの種類)をどのタイミングで決めるかによっても分類できます。
静的型付け言語は、コードを書く時点で変数の型を明示的に指定する必要がある言語です。例えば「この変数には整数しか入れられない」とあらかじめ宣言します。型の不一致はコンパイル時に検出されるため、実行前にエラーを発見しやすいというメリットがあります。Java、Go、TypeScript、Rustなどが該当します。
動的型付け言語は、変数の型を事前に指定する必要がなく、実行時に自動的に決まる言語です。型の宣言が不要なぶんコードが簡潔になり、素早く開発を進められます。一方で、型に関するエラーは実行するまで気づきにくいという面もあります。Python、JavaScript、Rubyなどが該当します。
本講座で学ぶPythonは動的型付け言語であるため、型を意識せずに手軽にコードを書き始めることができます。
1.3 プログラミングが使われる領域
プログラミングは、さまざまな領域で活用されています。ここでは、代表的な活用領域を紹介します。
Webアプリケーション開発
ECサイトやSNS、業務管理ツールなど、Webブラウザ上で動作するアプリケーションの開発です。ユーザが操作する画面(フロントエンド)と、データの処理や保存を行うサーバ側の仕組み(バックエンド)の両方をプログラミングで構築します。
スマートフォンアプリ開発
iPhoneやAndroidで動作するアプリケーションの開発です。それぞれのOS向けに専用の言語やフレームワークが用意されているほか、1つのコードで両方のOSに対応できるクロスプラットフォーム開発の手法もあります。
自動化ツール
手作業で行っていた繰り返し作業をプログラムで自動化する領域です。ファイルの一括処理、データの定期収集、インフラの構築・運用など、DevOpsの現場では特に重要な活用分野です。
データ分析・AI
大量のデータを収集・加工・分析し、ビジネスの意思決定に役立てる領域です。近年はAI・機械学習の発展により、画像認識や自然言語処理、予測モデルの構築など、活用の幅が大きく広がっています。
組み込みシステム・IoT
家電製品、自動車、産業機器など、ハードウェアの中で動作するソフトウェアの開発です。限られたメモリやCPUの中で効率よく動作させる必要があるため、C言語やC++など、ハードウェアに近い言語が多く使われます。
1.4 代表的なプログラミング言語
プログラミング言語は数多く存在しますが、ここでは特に広く使われている代表的な言語を紹介します。
| 言語 | 特徴 | 主な用途 |
|---|---|---|
| Python | シンプルで読みやすい文法が特徴で、初心者にも学びやすい言語です。AWSをはじめとするクラウドサービスの操作にも広く使われています。本講座ではこのPythonを学びます。 | Webアプリのバックエンド開発、AI・機械学習、自動化スクリプト |
| Go | Googleが開発した言語で、シンプルな文法と高いパフォーマンスが特徴です。DockerやKubernetes、TerraformなどのDevOpsツールの多くがGoで開発されています。 | Webアプリのバックエンド開発、高性能なサーバ処理 |
| JavaScript | Webブラウザ上で動作する唯一のプログラミング言語です。Node.jsを使うことで、サーバサイドの開発にも利用できます。 | Webアプリのフロントエンド開発、Webアプリのバックエンド開発 |
| Java | 「一度書けばどこでも動く」という設計思想を持ち、異なるOS上でも同じコードで動作します。大規模な開発に適しています。 | 業務システム、Androidアプリ |
| Ruby | 日本人のまつもとゆきひろ氏が開発した言語で、直感的で読みやすい文法が特徴です。Ruby on Railsフレームワークと組み合わせて使われることが多いです。 | Webアプリのバックエンド開発 |
| C / C++ | ハードウェアに近い低レベルの処理を直接記述でき、非常に高速に動作します。メモリ管理を細かく制御できます。 | 組み込みシステム、ゲーム開発 |
| TypeScript | JavaScriptに「型」の仕組みを追加した言語で、コードの誤りを事前に検出しやすくなっています。 | Webアプリのフロントエンド開発 |
| Rust | メモリ安全性と高いパフォーマンスを両立した比較的新しい言語です。安全性が求められる場面で注目されています。 | 高性能なサーバ処理 |
| PHP | Webアプリケーションの開発に特化した言語で、サーバへの導入が容易です。世界中のWebサイトで広く使われています。 | Webアプリのバックエンド開発 |
| Swift | Apple社が開発した公式言語で、iOSやmacOS向けのアプリ開発に使用されます。 | iOSアプリ |
| Kotlin | Javaと互換性を持ちながら、より簡潔にコードを記述できます。GoogleがAndroid開発の推奨言語に指定しています。 | Androidアプリ |
| 💡 ポイント |
|---|
| プログラミング言語に「最も優れた言語」というものはありません。それぞれの言語には得意分野があり、目的に応じて適切な言語を選択することが重要です。本講座では、DevOpsとの親和性が高く、学習しやすいPythonを通じて、プログラミングの基礎を身につけていきます。 |
2. フレームワーク
2.1 フレームワークとは
フレームワークとは、アプリケーションを開発するための「土台」となるソフトウェアのことです。Webアプリケーションやスマートフォンアプリなどを一から作るには、画面の表示、データベースとの接続、ユーザ認証など、多くの共通的な処理を実装する必要があります。フレームワークはこれらの機能をあらかじめ用意してくれるため、開発者はアプリケーション固有のロジックに集中でき、効率的に開発を進めることができます。
例えば、家を建てる場合に例えると、基礎工事や柱の組み立てといった共通の作業をフレームワークが担当し、開発者は間取りや内装といった独自の部分だけを作ればよいというイメージです。
2.2 代表的なフレームワーク
多くのフレームワークはプログラミング言語ごとに用意されています。以下に、代表的なフレームワークを紹介します。
| フレームワーク | 言語 | 特徴 | 主な用途 |
|---|---|---|---|
| FastAPI | Python | 高速な処理性能と、APIの仕様書を自動生成する機能を備えています。近年人気が高まっています。 | WebアプリのAPI開発 |
| Django | Python | ユーザ認証やデータベース管理など、Web開発に必要な機能が豊富に揃っています。大規模なWebアプリケーションに適しています。 | Webアプリのバックエンド開発 |
| Ruby on Rails | Ruby | 「設定より規約」という思想で、少ないコードで素早くWebアプリケーションを構築できます。 | Webアプリのバックエンド開発 |
| React | JavaScript / TypeScript | Meta社(旧Facebook)が開発したライブラリで、画面の部品(コンポーネント)を組み合わせてUIを構築します。 | Webアプリのフロントエンド開発 |
| Next.js | JavaScript / TypeScript | Reactをベースに、サーバサイドの機能も統合したフレームワークです。フロントエンドとバックエンドの両方を扱えます。 | Webアプリのフルスタック開発 |
| Spring Boot | Java | Java向けの代表的なフレームワークで、設定を最小限に抑えて素早く開発を始められます。企業の業務システムで広く採用されています。 | 業務システム、Webアプリのバックエンド開発 |
| Flutter | Dart | Google が開発したフレームワークで、1つのコードからiOS・Android両方のアプリを作成できます。 | スマートフォンアプリ |
| 💡 ポイント |
|---|
| フレームワークの選択は、開発するアプリケーションの種類や規模、チームの経験などによって異なります。本講座では、Pythonのフレームワークを使った開発についても後の講座で学んでいきます。 |
3. インフラエンジニアがプログラミングを学ぶ理由
ここまで、プログラミング言語やフレームワークの概要を学んできました。ここでは、インフラエンジニアにとってプログラミングを学ぶことがなぜ重要なのかを整理します。
従来、インフラエンジニアとアプリケーション開発エンジニアは、それぞれ明確に異なる役割を担っていました。しかし、クラウドサービスの普及により、インフラの構築や運用をコードで行う場面が増え、両者の境界は薄くなってきています。現在のインフラエンジニアには、サーバやネットワークの知識に加えて、プログラミングのスキルも求められるようになっています。
3.1 サーバで動くアプリケーションの理解
インフラエンジニアは、アプリケーションが動作するサーバ環境を構築・管理する役割を担います。その際、アプリケーションがどのプログラミング言語やフレームワークで開発されているかによって、必要なミドルウェアや設定が異なります。
例えば、Pythonのアプリケーションであればpipによるパッケージ管理やWSGIサーバの設定が必要ですし、JavaであればJVMの設定やビルドツールの導入が求められます。
こうしたサーバ環境の構築に加えて、CI/CDパイプラインを構築する際には、アプリケーションのビルド手順やテストの実行方法を理解したうえで、自動化の仕組みを設計する必要があります。また、Dockerなどのコンテナ環境を構築する際にも、アプリケーションの依存関係や起動方法を把握していなければ、適切なコンテナイメージを作成できません。このように、アプリケーションがどのように動作するかを理解することは、インフラエンジニアにとって重要な基礎力となります。
3.2 運用の自動化とサーバレスの活用
インフラの運用では、サーバの監視、ログの収集、バックアップの実行など、定期的に繰り返す作業が数多くあります。これらを手作業で行うとミスが発生しやすく、時間もかかります。プログラミングを使えば、こうした作業を自動化するスクリプトやツールを自分で作成できるようになります。
さらに、AWS Lambdaなどのサーバレスサービスを活用すれば、サーバを管理することなくプログラムを実行できます。例えば、エラーログを検知してメールで通知する仕組みや、定期的にリソースの状態をチェックする仕組みなど、インフラ運用に役立つアプリケーションをプログラミングで構築できます。サーバレスはサーバの構築や管理が不要なぶん、インフラエンジニア自身がコードを書いて運用の仕組みを作る機会が増えています。
3.3 SRE(サイト信頼性エンジニアリング)の実践
SRE(Site Reliability Engineering)とは、サイト(サービス)の信頼性を維持・向上させるためのエンジニアリング手法です。Googleが提唱した考え方で、従来のインフラ運用にソフトウェアエンジニアリングのアプローチを取り入れることで、システムの安定性と開発スピードの両立を目指します。
SREの現場では、サービスの信頼性を高めるために、アプリケーションの内部構造や動作の仕組みを深く理解することが求められます。障害が発生した際にアプリケーションのコードやログを読み解いて原因を特定したり、パフォーマンスのボトルネックを分析して改善策を提案したりするには、プログラミングの知識が不可欠です。
また、監視や可観測性(オブザーバビリティ)の仕組みを構築・運用することもSREの重要な役割です。カスタムメトリクスを収集するスクリプトの作成、アラート発生時に自動で復旧処理を実行する仕組みの構築、障害対応の自動化など、信頼性を支える仕組みの多くはプログラミングによって実現されます。
| 💡 ポイント |
|---|
| SREは、インフラエンジニアのキャリアにおける有力な到達点の一つです。SREを目指すうえでは、インフラの知識に加えてアプリケーション開発の知識が求められます。本講座でプログラミングの基礎を身につけることは、将来SREとして活躍するための第一歩にもなります。 |
4. まとめ
この講座では、プログラミングの基礎知識について学びました。
- プログラミング言語は、コンピュータに命令を伝えるための言語である
- プログラミング言語はコンパイル型とインタプリタ型、静的型付けと動的型付けに分類できる
- プログラミングは、Webアプリケーション開発、自動化ツール、データ分析・AIなどさまざまな領域で活用されている
- 代表的な言語として、Python、Go、JavaScript、Java、Rubyなどがある
- フレームワークは、アプリケーション開発の「土台」となるソフトウェアである
- インフラエンジニアにとって、アプリケーションの理解や運用の自動化、SREの実践のためにプログラミングスキルが重要である
- 本講座では、DevOpsとの親和性が高く、学習しやすいPythonを通じてプログラミングの基礎を身につけていく