Pythonとは?なぜ今Pythonを学ぶべきか
Pythonは2026年現在も世界で最も人気のあるプログラミング言語の一つです。シンプルな文法、豊富なライブラリ、AIや機械学習での圧倒的な採用率により、初心者からプロまで幅広く使われています。
Stack Overflow Developer Survey 2025によると、Pythonは11年連続で最も人気のある言語にランクインしており、データサイエンス・機械学習・Web開発・自動化など多岐にわたる分野で活躍しています。
Pythonが使われる主要分野
- 機械学習・AI:TensorFlow、PyTorch、scikit-learnなどのフレームワーク
- Web開発:Django、FastAPI、Flaskでのバックエンド開発
- データ分析:pandas、NumPy、MatplotlibなどによるBIや可視化
- 自動化・スクリプト:業務効率化、スクレイピング、CI/CDパイプライン
- クラウド・DevOps:AWSのLambda、Terraform連携、インフラ自動化
Python環境構築(2026年最新)
まずはPython環境を構築しましょう。2026年現在はPython 3.13が最新安定版です。
pyenvを使ったバージョン管理
# macOS/Linuxでのpyenvインストール
curl https://pyenv.run | bash
# シェル設定ファイルに追加(~/.bashrc または ~/.zshrc)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# Python 3.13のインストール
pyenv install 3.13.0
pyenv global 3.13.0
# バージョン確認
python --version # Python 3.13.0
仮想環境の作成
# プロジェクトディレクトリで仮想環境を作成
python -m venv .venv
# 仮想環境を有効化(macOS/Linux)
source .venv/bin/activate
# 仮想環境を有効化(Windows)
.venvScriptsactivate
# パッケージのインストール
pip install requests pandas numpy
Python基礎文法
データ型と変数
# 基本的なデータ型
name = "田中エンジニア" # 文字列(str)
age = 28 # 整数(int)
salary = 650000.50 # 浮動小数点(float)
is_engineer = True # 真偽値(bool)
# コレクション型
skills = ["Python", "JavaScript", "Go"] # リスト(可変)
languages = ("Python", "Rust") # タプル(不変)
profile = {"name": "田中", "lang": "Python"} # 辞書
unique_techs = {"Docker", "Kubernetes"} # セット
# 型確認
print(type(name)) #
print(type(skills)) #
# f文字列(f-string)での文字列フォーマット
message = f"私は{name}、{age}歳のエンジニアです。スキル: {', '.join(skills)}"
print(message)
制御フロー
# 条件分岐
experience_years = 5
if experience_years >= 10:
level = "シニアエンジニア"
elif experience_years >= 5:
level = "ミドルエンジニア"
else:
level = "ジュニアエンジニア"
print(f"あなたのレベル: {level}")
# forループ
tech_stack = ["Python", "Docker", "AWS", "PostgreSQL"]
for i, tech in enumerate(tech_stack, 1):
print(f"{i}. {tech}")
# リスト内包表記(Python らしい書き方)
squares = [x**2 for x in range(1, 11)]
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(even_squares) # [4, 16, 36, 64, 100]
関数とデコレーター
from functools import wraps
import time
# 基本的な関数
def calculate_salary(base: float, bonus_rate: float = 0.1) -> float:
"""給与計算関数
Args:
base: 基本給
bonus_rate: ボーナス率(デフォルト10%)
Returns:
合計給与
"""
return base * (1 + bonus_rate)
# デコレーター(実行時間計測)
def timer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
print(f"{func.__name__}の実行時間: {elapsed:.4f}秒")
return result
return wrapper
@timer
def heavy_computation(n: int) -> int:
return sum(i**2 for i in range(n))
result = heavy_computation(1000000)
# heavy_computationの実行時間: 0.0823秒
オブジェクト指向プログラミング(OOP)
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class Engineer:
"""エンジニアを表すデータクラス"""
name: str
experience_years: int
skills: list[str] = field(default_factory=list)
salary: Optional[float] = None
def __post_init__(self):
if self.salary is None:
self.salary = self._calculate_base_salary()
def _calculate_base_salary(self) -> float:
"""経験年数に基づく基本給計算"""
base = 400_000
return base + (self.experience_years * 50_000)
def add_skill(self, skill: str) -> None:
if skill not in self.skills:
self.skills.append(skill)
@property
def level(self) -> str:
if self.experience_years >= 10:
return "シニア"
elif self.experience_years >= 5:
return "ミドル"
return "ジュニア"
def __repr__(self) -> str:
return f"Engineer(name={self.name}, level={self.level}, skills={self.skills})"
# 使用例
tanaka = Engineer("田中", 7, ["Python", "Go", "Docker"])
tanaka.add_skill("Kubernetes")
print(tanaka)
# Engineer(name=田中, level=ミドル, skills=['Python', 'Go', 'Docker', 'Kubernetes'])
print(f"月給: {tanaka.salary:,.0f}円")
FastAPIでWebAPI開発
FastAPIは2026年現在、PythonのWeb APIフレームワークとして最も人気の高い選択肢の一つです。高速性、型安全性、自動ドキュメント生成が特徴です。
# pip install fastapi uvicorn[standard] pydantic
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import Optional
import uvicorn
app = FastAPI(
title="Tech Athletes API",
description="エンジニア管理API",
version="1.0.0"
)
class EngineerCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=50, description="エンジニア名")
experience_years: int = Field(..., ge=0, le=50, description="経験年数")
skills: list[str] = Field(default=[], description="スキルリスト")
class EngineerResponse(EngineerCreate):
id: int
salary: float
# インメモリDB(実際はPostgreSQL等を使用)
db: dict[int, dict] = {}
counter = 0
@app.post("/engineers/", response_model=EngineerResponse, status_code=201)
async def create_engineer(engineer: EngineerCreate):
global counter
counter += 1
salary = 400000 + engineer.experience_years * 50000
db[counter] = {**engineer.dict(), "id": counter, "salary": salary}
return db[counter]
@app.get("/engineers/{engineer_id}", response_model=EngineerResponse)
async def get_engineer(engineer_id: int):
if engineer_id not in db:
raise HTTPException(status_code=404, detail="エンジニアが見つかりません")
return db[engineer_id]
@app.get("/engineers/", response_model=list[EngineerResponse])
async def list_engineers(skip: int = 0, limit: int = 10):
engineers = list(db.values())
return engineers[skip : skip + limit]
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
データサイエンス・機械学習入門
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# データ作成(エンジニア給与予測)
np.random.seed(42)
n_samples = 1000
data = pd.DataFrame({
'experience_years': np.random.randint(0, 20, n_samples),
'skills_count': np.random.randint(1, 15, n_samples),
'has_cloud_cert': np.random.binomial(1, 0.4, n_samples),
'education_level': np.random.randint(1, 5, n_samples),
})
# 給与(ターゲット変数)
data['salary'] = (
300_000 +
data['experience_years'] * 50_000 +
data['skills_count'] * 10_000 +
data['has_cloud_cert'] * 80_000 +
data['education_level'] * 20_000 +
np.random.normal(0, 50_000, n_samples) # ノイズ
)
# 特徴量とターゲットを分割
X = data.drop('salary', axis=1)
y = data['salary']
# 訓練・テストデータ分割
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 標準化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# モデル学習
model = LinearRegression()
model.fit(X_train_scaled, y_train)
# 予測と評価
y_pred = model.predict(X_test_scaled)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
print(f"RMSE: {rmse:,.0f}円")
print(f"R²スコア: {r2:.3f}")
print("\n特徴量の重要度:")
for feature, coef in zip(X.columns, model.coef_):
print(f" {feature}: {coef:,.0f}")
Python自動化活用例
import asyncio
import aiohttp
from pathlib import Path
# 非同期HTTPクライアントでAPIを並列取得
async def fetch_github_stats(session: aiohttp.ClientSession, username: str) -> dict:
url = f"https://api.github.com/users/{username}"
async with session.get(url) as response:
if response.status == 200:
return await response.json()
return {}
async def bulk_fetch_engineers(usernames: list[str]) -> list[dict]:
async with aiohttp.ClientSession() as session:
tasks = [fetch_github_stats(session, u) for u in usernames]
results = await asyncio.gather(*tasks, return_exceptions=True)
return [r for r in results if isinstance(r, dict)]
# 実行
usernames = ["torvalds", "gvanrossum", "antirez"]
results = asyncio.run(bulk_fetch_engineers(usernames))
for r in results:
if r:
print(f"{r.get('name', 'N/A')}: {r.get('public_repos', 0)} repos")
Python学習ロードマップ(2026年版)
| レベル | 期間目安 | 学習内容 | おすすめリソース |
|---|---|---|---|
| 入門 | 1〜2ヶ月 | 文法・データ型・関数・OOP基礎 | Python公式チュートリアル、Progate |
| 初級 | 2〜4ヶ月 | ファイル操作・例外処理・モジュール・テスト | 「Pythonチュートリアル」書籍、Real Python |
| 中級 | 4〜8ヶ月 | FastAPI/Django、pandas、非同期処理 | FastAPI公式ドキュメント、Kaggle |
| 上級 | 8ヶ月〜 | 機械学習・LLM連携・マイクロサービス設計 | arXiv論文、Hugging Face、GitHub |
Pythonエンジニアのキャリアと年収
2026年のPythonエンジニアの需要は引き続き高水準です。特にAI・機械学習エンジニア、データサイエンティスト、バックエンドエンジニアとして活躍できます。
- 未経験〜2年:月収30〜45万円(Webアプリ開発、スクリプト業務)
- 3〜5年:月収50〜75万円(FastAPI/Django、データパイプライン)
- 5〜10年:月収70〜100万円(機械学習エンジニア、テックリード)
- 10年以上:月収100万円以上(AIアーキテクト、CTO候補)
まとめ
Pythonは汎用性の高さ、読みやすい文法、豊富なライブラリの三拍子が揃った最強のプログラミング言語です。Web開発・データサイエンス・AI/ML・自動化と、キャリアの選択肢が非常に広いのが特徴です。
まずはPythonの基礎文法をマスターし、自分の興味ある分野(Web開発ならFastAPI、データサイエンスならpandasとscikit-learn)に特化して深掘りしていきましょう。継続的な学習と実践プロジェクトへの取り組みが、Pythonエンジニアとしてのキャリアアップへの最短ルートです。