STEP 0
準備
パソコンにPythonを入れて、1行動かす
目安 1〜3日
このステップの到達点 ── 自分のパソコンで python が動き、書いたファイルを実行して結果が画面に出る。ここでつまずく人はとても多いので、あせらず1つずつ確認してください。
Pythonとは何か
Pythonは、人が読みやすいことを重視して作られたプログラミング言語です。同じ処理を書くのに他の言語より行数が少なくて済み、英語の文章に近い見た目になります。世界的にもっとも利用者が多い言語のひとつで、データ分析・業務自動化・Webサービス・AI のすべてで使われています。事務作業の自動化から機械学習まで、1つの言語で幅広くカバーできるのが最大の利点です。
1. Pythonを入れる
Windows ── 公式サイト python.org の「Downloads」から最新版のインストーラーをダウンロードします。実行したら、最初の画面にある 「Add python.exe to PATH」に必ずチェックを入れて から「Install Now」を押してください。ここを忘れると、後で python と打っても「見つかりません」と言われます。
Mac ── 最初からPythonが入っていますが、それは古い版でシステム用のものです。学習には別途、公式サイトから最新版を入れるか、brew install python で入れます。Macでは python3 と pip3 のように、末尾に「3」を付けて呼ぶのが基本です。
2. きちんと入ったか確かめる
Windowsは「PowerShell」、Macは「ターミナル」を開いて、次を打ちます。これらは、パソコンに文字で命令を出すための道具です。
ターミナル / PowerShell コピー
python --version
# Macでうまくいかないときは
python3 --version
このようにバージョンが表示されれば成功です。数字は違っていてかまいません。
3. エディタ(VS Code)を入れる
プログラムを書くための専用ソフトをエディタ といいます。定番は無料の Visual Studio Code(VS Code) です。入れたら、左側の四角が並んだアイコン(拡張機能)から「Japanese Language Pack」(日本語化)と「Python」の2つを追加してください。これでコードに色が付き、まちがいをその場で指摘してくれるようになります。
4. はじめてのプログラム
デスクトップに python-study という名前のフォルダを作り、VS Codeでそのフォルダを開きます(メニューの「ファイル → フォルダーを開く」)。そこに hello.py というファイルを新しく作り、次の1行を書いて保存します。
hello.py コピー
print("Hello, Python!")
保存したら、VS Codeの右上にある「▷(実行)」ボタンを押します。画面の下に結果が出ます。
print() は「かっこの中身を画面に表示せよ」という命令です。この1行が出れば、準備はすべて完了です。
拡張子を表示させておく Windowsの初期設定では .py などの拡張子が隠れており、hello.py.txt という名前になってしまう事故が起こります。エクスプローラーの「表示」から「ファイル名拡張子」にチェックを入れておいてください。
フォルダ名に注意 日本語や空白を含むフォルダ(「新しいフォルダー」など)や、OneDrive・iCloudの同期フォルダの中は、後々トラブルの原因になります。学習用のフォルダは半角英数字だけの名前 で、同期のかからない場所に作るのが安全です。
練習問題
自分の名前と、今の意気込みを2行に分けて表示するプログラムを書いてください。
解答を見る
answer.py コピー
print("うえき たかゆき")
print("3か月でPythonを仕事に使う")
※ print() は1回で1行です。行を増やしたいときは print() を並べます。
このステップは理解できた
STEP 1
基礎
変数と型 ── データを箱に入れて扱う
目安 1週間
このステップの到達点 ── 数値と文字列の違いを理解し、計算結果を変数に入れて表示できる。TypeError の意味がわかる。
変数は「名前の付いた箱」
プログラムでは、あとで使う値に名前を付けて取っておきます。これを変数 といいます。= は「等しい」ではなく「右の値を左の名前に入れる」という意味です。
variables.py コピー
price = 120 # 整数(int)
tax_rate = 0.1 # 小数(float)
name = "りんご" # 文字列(str)
is_sale = True # 真偽値(bool)
total = price * (1 + tax_rate)
print(name, "の税込価格は", total, "円です")
4つの基本の型
f文字列 ── 実務で最もよく使う書き方
文字列の前に f を付けると、{ } の中に変数や計算式をそのまま埋め込めます。読みやすく、実務ではこの書き方が標準です。
fstring.py コピー
name = "みかん"
price = 980
count = 3
print(f"{name}を{count}個買うと{price * count}円です")
# 桁区切りや小数点の桁数も指定できる
total = price * count
print(f"合計: {total:,} 円") # 3桁ごとにカンマ
print(f"平均: {total / 7:.2f} 円") # 小数第2位まで
実行結果 みかんを3個買うと2940円です
合計: 2,940 円
平均: 420.00 円
型が違うとエラーになる
初心者が最初にぶつかる壁がこれです。数字に見えても文字列 ということがよくあります。
type_error.py コピー
age = input("年齢を入力してください: ") # input はいつも「文字列」を返す
print(type(age))
# print(age + 1) # これは TypeError になる
print(int(age) + 1) # int() で数値に変換してから計算する
実行結果(20と入力した場合) <class 'str'>
21
TypeError の読み方 TypeError: can only concatenate str (not "int") to str は「文字列に数値はつなげられない」という意味です。int() や str() で型をそろえれば直ります。type(変数) で型を確かめる癖をつけてください。
変数の名前の付け方
すべて小文字、単語の区切りは _(アンダースコア)── total_price、user_name
中身がわかる名前を付ける。a や data1 は3日後の自分が読めません
日本語も使えますが、実務では使いません。英単語で付けます
list、str、sum などPythonがすでに使っている名前は避ける
練習問題
身長(cm)と体重(kg)を変数に入れ、BMI(体重 ÷ 身長(m)の2乗)を小数第1位まで表示してください。
解答を見る
bmi.py コピー
height_cm = 170
weight_kg = 62.5
height_m = height_cm / 100
bmi = weight_kg / (height_m ** 2) # ** は「累乗」
print(f"BMIは {bmi:.1f} です")
このステップは理解できた
STEP 2
基礎
条件分岐とくり返し ── プログラムに判断させる
目安 1週間
このステップの到達点 ── if で場合分けし、for で同じ処理をくり返せる。字下げ(インデント)の意味がわかる。
if文 ── もし〜なら
条件が成り立つときだけ実行する、という書き方です。行の終わりの コロン(:) と、次の行の半角スペース4つの字下げ が必須です。Pythonでは字下げが「ここからここまでが一つのまとまり」を表します。
if_basic.py コピー
score = 78
if score >= 80:
print("よくできました")
elif score >= 60:
print("合格です")
else:
print("もう一度がんばりましょう")
print("判定おわり") # 字下げしていないので、必ず実行される
条件の書き方
for文 ── くり返す
同じ処理を何度も書かずに済ませるのがくり返しです。これが書けるようになると、プログラムを書く価値が一気に上がります。
for_basic.py コピー
fruits = ["りんご", "みかん", "ぶどう"]
for fruit in fruits:
print(f"{fruit}を数えました")
# 回数を指定してくり返す
for i in range(3): # 0, 1, 2 の3回
print(f"{i + 1}回目")
# 番号と中身を同時に取り出す(実務で頻出)
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
実行結果 りんごを数えました
みかんを数えました
ぶどうを数えました
1回目
2回目
3回目
1: りんご
2: みかん
3: ぶどう
while文と、途中で抜ける
while_basic.py コピー
total = 0
for price in [500, 1200, 800, 3000, 400]:
if price >= 3000:
print("高額なので集計から外します")
continue # この回だけ飛ばして次へ
total += price # total = total + price と同じ
if total > 2000:
print("2000円を超えたので終了します")
break # くり返しそのものを抜ける
print(f"合計: {total}円")
実行結果 2000円を超えたので終了します
合計: 2500円
無限ループに注意 while は条件が False になるまで永久に回り続けます。止まらなくなったら、ターミナルで Ctrl + C を押して強制終了してください。慣れないうちは for を使うほうが安全です。
字下げは半角スペース4つ Tabキーと半角スペースを混ぜると IndentationError や TabError になります。VS Codeは初期設定でTabキーがスペース4つに変換されるので、そのまま使えば問題ありません。
練習問題
1から100までの整数のうち、3の倍数だけを合計して表示してください。
解答を見る
multiple3.py コピー
total = 0
for i in range(1, 101): # 1から100まで(101は含まれない)
if i % 3 == 0: # % は「割った余り」
total += i
print(f"3の倍数の合計は {total} です")
このステップは理解できた
STEP 3
基礎
リストと辞書 ── たくさんのデータをまとめて扱う
目安 1〜2週間
このステップの到達点 ── リストと辞書を使い分けられる。表形式のデータを「辞書のリスト」で表現し、集計できる。
リスト ── 順番のある入れ物
list_basic.py コピー
sales = [1200, 980, 3400, 760, 2100]
print(sales[0]) # 最初の要素(番号は0から始まる)
print(sales[-1]) # 最後の要素
print(sales[1:3]) # 1番目から3番目の手前まで(スライス)
print(len(sales)) # 要素の数
print(sum(sales)) # 合計
print(max(sales)) # 最大値
print(sorted(sales, reverse=True)) # 大きい順に並べる
sales.append(1500) # 末尾に追加
sales.remove(760) # 値を指定して削除
print(sales)
実行結果 1200
2100
[980, 3400]
5
8440
3400
[3400, 2100, 1200, 980, 760]
[1200, 980, 3400, 2100, 1500]
辞書 ── 名前で取り出す入れ物
「キー(名前)」と「値」の組で管理します。実務では、CSVの1行やAPIの返答が、そのまま辞書の形で届きます。
dict_basic.py コピー
user = {"name": "田中", "age": 28, "dept": "営業部"}
print(user["name"])
print(user.get("email", "未登録")) # キーが無くてもエラーにならない書き方
user["age"] = 29 # 上書き
user["email"] = "tanaka@example.com" # 追加
for key, value in user.items():
print(f"{key}: {value}")
実行結果 田中
未登録
name: 田中
age: 29
dept: 営業部
email: tanaka@example.com
[ ] と .get() の使い分け user["email"] はキーが無いと KeyError で止まります。無いかもしれないキーは .get() を使い、初期値を渡しておくと安全です。実務のデータは「あるはずの項目が空」ということが日常的に起こります。
実務で最も多い形 ── 辞書のリスト
表のデータは、次のように「1行=1つの辞書」で表します。この形に慣れると、CSVでもデータベースでもAPIでも同じ考え方で扱えます。
records.py コピー
orders = [
{"item": "ノートPC", "price": 128000, "count": 2, "dept": "営業部"},
{"item": "マウス", "price": 2800, "count": 10, "dept": "営業部"},
{"item": "モニター", "price": 32000, "count": 4, "dept": "開発部"},
]
# 全体の売上
total = 0
for order in orders:
total += order["price"] * order["count"]
print(f"総額: {total:,}円")
# 部署ごとに集計する
by_dept = {}
for order in orders:
dept = order["dept"]
amount = order["price"] * order["count"]
by_dept[dept] = by_dept.get(dept, 0) + amount
for dept, amount in by_dept.items():
print(f"{dept}: {amount:,}円")
実行結果 総額: 412,000円
営業部: 284,000円
開発部: 128,000円
内包表記 ── 1行で作る
リストから新しいリストを作るとき、Pythonでは1行で書けます。実務のコードには当たり前に出てくるので、読めるようにしておいてください。
comprehension.py コピー
prices = [1200, 980, 3400, 760, 2100]
# 普通に書くと3行
taxed = []
for p in prices:
taxed.append(int(p * 1.1))
# 内包表記なら1行
taxed = [int(p * 1.1) for p in prices]
print(taxed)
# 条件をつけて絞り込む
expensive = [p for p in prices if p >= 2000]
print(expensive)
実行結果 [1320, 1078, 3740, 836, 2310]
[3400, 2100]
そのほかの入れ物(タプル・集合)も見る
タプル(tuple)── あとから変えられないリスト
point = (35.68, 139.76) のように丸かっこで書きます。中身を書きかえられないので、緯度経度や設定値など「変わっては困るもの」に使います。関数が複数の値を返すときも、実体はタプルです。
集合(set)── 重複のない入れ物
set(["A", "B", "A"]) は {'A', 'B'} になります。重複を消したいとき、2つのリストの共通部分を求めたいときに便利です。list(set(items)) は実務で頻繁に使う重複除去の書き方です。
練習問題
上の orders から、金額(price × count)が10万円以上の商品名だけをリストにして表示してください。
解答を見る
answer.py コピー
big = [o["item"] for o in orders if o["price"] * o["count"] >= 100000]
print(big)
このステップは理解できた
STEP 4
基礎
関数 ── 処理に名前を付けて、使い回す
目安 1〜2週間
このステップの到達点 ── 自分で関数を作り、引数と戻り値を正しく設計できる。型ヒントとdocstringを書ける。
関数の作り方
同じ処理を何度も書くのをやめ、名前を付けてまとめたものが関数 です。プログラムが長くなるほど価値が出ます。
function_basic.py コピー
def calc_tax_included(price, rate=0.1):
"""税込価格を計算して返す。
price: 税抜価格
rate: 税率(省略すると0.1)
"""
return int(price * (1 + rate))
print(calc_tax_included(1000)) # 1100
print(calc_tax_included(1000, 0.08)) # 1080
print(calc_tax_included(price=1000, rate=0.2)) # 名前で渡すこともできる
引数 ── 関数に渡す材料。rate=0.1 のように既定値を決めておける
戻り値 ── return で呼び出し元に返す結果。return を書かない関数は None を返す
docstring ── """〜""" で書く説明文。何をする関数かを必ず書く
型ヒント ── 実務では書くのが当たり前
引数と戻り値がどんな型かを注記できます。動作は変わりませんが、VS Codeが間違いを指摘してくれるようになり、他人(と未来の自分)が読みやすくなります。チーム開発では必須と考えてください。
type_hint.py コピー
def calc_tax_included(price: int, rate: float = 0.1) -> int:
"""税込価格を計算して返す。"""
return int(price * (1 + rate))
def summarize(orders: list[dict]) -> dict[str, int]:
"""部署ごとの売上を集計して返す。"""
result: dict[str, int] = {}
for order in orders:
amount = order["price"] * order["count"]
result[order["dept"]] = result.get(order["dept"], 0) + amount
return result
良い関数の3つの条件
1つのことだけをする ── 「読み込んで、集計して、保存する」は3つの関数に分ける
名前で中身がわかる ── calc_tax_included() は良い名前、shori() は悪い名前。動詞で始めるのが基本
外の変数に頼らない ── 必要なものは引数で受け取り、結果は return で返す。そうすればどこでも再利用でき、テストも書ける
スコープ(有効範囲) 関数の中で作った変数は、その関数の中でしか見えません。逆に、関数の外の変数を関数の中から書きかえるのは(可能ですが)事故のもとです。関数は「入口=引数、出口=戻り値」だけでやり取りする と考えてください。
実際に使う形にまとめる
main_pattern.py コピー
def load_orders() -> list[dict]:
"""注文データを用意する(後でCSV読み込みに差し替える)。"""
return [
{"item": "ノートPC", "price": 128000, "count": 2, "dept": "営業部"},
{"item": "モニター", "price": 32000, "count": 4, "dept": "開発部"},
]
def summarize(orders: list[dict]) -> dict[str, int]:
result: dict[str, int] = {}
for o in orders:
result[o["dept"]] = result.get(o["dept"], 0) + o["price"] * o["count"]
return result
def main() -> None:
orders = load_orders()
for dept, amount in summarize(orders).items():
print(f"{dept}: {amount:,}円")
if __name__ == "__main__":
main()
if __name__ == "__main__": とは 「このファイルが直接実行されたときだけ、下の処理を動かす」という意味です。他のファイルから import して部品として使われたときには動きません。実務のPythonファイルにはほぼ必ず出てくる決まり文句なので、そのまま覚えてしまってください。
練習問題
点数のリストを受け取り、平均点を小数第1位まで四捨五入して返す関数 average() を作ってください。リストが空のときは0を返すようにします。
解答を見る
average.py コピー
def average(scores: list[int]) -> float:
"""点数の平均を返す。空のときは0.0を返す。"""
if not scores: # 空のリストは False として扱われる
return 0.0
return round(sum(scores) / len(scores), 1)
print(average([80, 95, 72, 68]))
print(average([]))
※ 空のリストを渡すと len() が0になり、割り算で ZeroDivisionError が起きます。こうした「例外的な入力」を先に処理しておくのが実務の作法です。
このステップは理解できた
STEP 5
応用
エラーとデバッグ ── 自力で直せる人になる
目安 1週間
このステップの到達点 ── エラーメッセージを読んで原因の行を特定できる。try / except で想定内の失敗に備えられる。ここが初心者と実務者を分ける最大の分岐点です。
エラーは「敵」ではなく「行き先の案内」
赤い文字が出ると怖く感じますが、Pythonのエラーはどこで何が起きたかを正確に教えてくれる案内文 です。読まずに閉じてしまう人はいつまでも上達しません。読み方には決まった順番があります。
ターミナルに出るエラー(トレースバック) コピー
Traceback (most recent call last):
File "/Users/you/python-study/main.py", line 12, in <module>
total = calc(price, count)
File "/Users/you/python-study/main.py", line 6, in calc
return price * count + tax
NameError: name 'tax' is not defined
いちばん下の行を最初に読む ── エラーの種類(NameError)と理由(tax が定義されていない)が書いてあります
次に、下から2番目のFile行 ── main.py の 6行目 が実際に落ちた場所です
上の行ほど「そこに至るまでの経路」です。自分の書いたファイル名が出ている、いちばん下の行を見ます
よく出るエラーと原因
try / except ── 失敗を想定して受け止める
「起きるかもしれない失敗」は、あらかじめ受け止め方を書いておきます。ファイルの読み込みや外部との通信など、自分の力ではどうにもならない部分 に使うのが原則です。
try_except.py コピー
def to_int(text: str) -> int | None:
"""文字列を数値に変換する。できなければNoneを返す。"""
try:
return int(text)
except ValueError:
print(f"『{text}』は数値に変換できません")
return None
print(to_int("120"))
print(to_int("百二十"))
# ファイル読み込みでの典型的な書き方
try:
with open("data.csv", encoding="utf-8") as f:
text = f.read()
except FileNotFoundError:
print("data.csv が見つかりません。パスを確認してください")
else:
print(f"{len(text)}文字を読み込みました") # 成功したときだけ動く
finally:
print("処理を終了します") # 成否によらず必ず動く
実行結果(data.csvが無い場合) 120
『百二十』は数値に変換できません
None
data.csv が見つかりません。パスを確認してください
処理を終了します
やってはいけない書き方 except: や except Exception: pass のように、すべての失敗を握りつぶす 書き方は絶対に避けてください。バグが表に出なくなり、原因究明が不可能になります。受け止めるのは予期している種類のエラーだけ です。
デバッグの手順
エラーの最下行を読む ── 種類と理由を確認する
落ちた行の直前で print() する ── print(type(x), x) で「思っていた中身か」を確かめる。原因の8割はここで判明します
入力を最小にする ── 1000行のCSVで悩まず、3行に減らして試す
エラー文をそのまま検索する ── ファイル名など自分の環境固有の部分は削り、英語のメッセージだけを検索します
それでもだめなら人(かAI)に聞く ── そのとき、やりたいこと・書いたコード・エラー全文 の3点セットを必ず添えます
VS Codeのデバッガ 行番号の左をクリックすると赤い丸(ブレークポイント)が置けます。その状態でF5キーを押すと、その行で実行が止まり、そのときの全変数の中身を一覧できます。print() を大量に足すより速いので、慣れてきたらぜひ使ってください。
このステップは理解できた
STEP 6
応用
ファイル操作 ── CSVとJSONを読み書きする
目安 1週間
このステップの到達点 ── CSVを読み込んで集計し、結果を別ファイルに書き出せる。文字コードとパスの扱いがわかる。
ファイルを開く基本形
with を使うと、処理が終わったときに自動で閉じてくれます。実務ではこの書き方以外はしません。日本語を扱うので encoding="utf-8" の指定も必須です。
file_basic.py コピー
# 書き込む("w"は新規作成・上書き、"a"は追記)
with open("memo.txt", "w", encoding="utf-8") as f:
f.write("1行目\n")
f.write("2行目\n")
# 読み込む
with open("memo.txt", encoding="utf-8") as f:
for line in f:
print(line.rstrip()) # 行末の改行を取り除く
CSVを読む ── 実務で最も出番が多い
csv.DictReader を使うと、1行が「見出しをキーにした辞書」として取れます。STEP 3で練習した「辞書のリスト」がそのまま使えます。
sales.csv コピー
date,item,price,count,dept
2026-08-01,ノートPC,128000,2,営業部
2026-08-01,マウス,2800,10,営業部
2026-08-02,モニター,32000,4,開発部
2026-08-03,キーボード,8600,6,開発部
read_csv.py コピー
import csv
from collections import defaultdict
by_dept = defaultdict(int) # 初期値0の辞書。get()を書かなくてよい
with open("sales.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
# CSVから読んだ値はすべて文字列なので、数値に変換する
amount = int(row["price"]) * int(row["count"])
by_dept[row["dept"]] += amount
for dept, amount in sorted(by_dept.items(), key=lambda x: x[1], reverse=True):
print(f"{dept}: {amount:,}円")
実行結果 営業部: 284,000円
開発部: 179,600円
CSVに書き出す
write_csv.py コピー
import csv
rows = [
{"dept": "営業部", "amount": 284000},
{"dept": "開発部", "amount": 179600},
]
# newline="" を付けないとWindowsで空行が入る
with open("summary.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["dept", "amount"])
writer.writeheader()
writer.writerows(rows)
print("summary.csv を書き出しました")
Excelで開くなら utf-8-sig 書き出しに utf-8 を使うと、Excelで開いたとき日本語が文字化けします。utf-8-sig にすると目印が付き、正しく表示されます。読み込むときは utf-8-sig でも utf-8 でも読めます。古い社内システムのCSVは cp932(Shift_JIS)のこともあります。
JSON ── 設定やAPIの標準形式
json_basic.py コピー
import json
config = {"name": "集計ツール", "version": 2, "targets": ["営業部", "開発部"]}
# 辞書 → ファイル(ensure_ascii=False で日本語をそのまま保存)
with open("config.json", "w", encoding="utf-8") as f:
json.dump(config, f, ensure_ascii=False, indent=2)
# ファイル → 辞書
with open("config.json", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded["targets"][0])
パスの扱い ── pathlib
ファイルの場所(パス)を文字列でつなぐと、WindowsとMacで区切り文字が違って壊れます。pathlib を使えばどちらでも動きます。
path_basic.py コピー
from pathlib import Path
base = Path(__file__).parent # このファイルが置かれているフォルダ
data_dir = base / "data" # / でつなげる(OSを問わない)
data_dir.mkdir(exist_ok=True) # 無ければ作る
target = data_dir / "sales.csv"
print(target.exists()) # あるかどうか
print(target.name, target.suffix) # ファイル名、拡張子
# フォルダ内のCSVをすべて処理する
for csv_file in data_dir.glob("*.csv"):
print(csv_file.name)
FileNotFoundError の9割はこれ ファイル名を "sales.csv" と書いた場合、探しに行くのは「今いるフォルダ」 であって、プログラムが置いてあるフォルダとは限りません。Path(__file__).parent を基準にすれば、どこから実行しても同じ場所を見に行きます。
練習問題
上の sales.csv から、金額が10万円以上の行だけを big_sales.csv に書き出してください。
解答を見る
answer.py コピー
import csv
from pathlib import Path
base = Path(__file__).parent
rows = []
with open(base / "sales.csv", encoding="utf-8") as f:
for row in csv.DictReader(f):
amount = int(row["price"]) * int(row["count"])
if amount >= 100000:
row["amount"] = amount
rows.append(row)
with open(base / "big_sales.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["date", "item", "price", "count", "dept", "amount"])
writer.writeheader()
writer.writerows(rows)
print(f"{len(rows)}件を書き出しました")
このステップは理解できた
STEP 7
応用
ライブラリと仮想環境 ── 他人の成果を借りる
目安 1週間
このステップの到達点 ── 仮想環境を作り、pip でライブラリを入れ、requirements.txt で環境を再現できる。
標準ライブラリ ── 最初から入っている道具
Pythonには、追加なしで使える便利な部品が大量に付属しています。import するだけで使えます。
stdlib.py コピー
import datetime
import random
import re
today = datetime.date.today()
print(today.strftime("%Y年%m月%d日"))
print(today + datetime.timedelta(days=30)) # 30日後
print(random.choice(["A", "B", "C"]))
text = "問い合わせは info@example.com までお願いします"
found = re.findall(r"[\w.-]+@[\w.-]+", text) # 正規表現でメールアドレスを抽出
print(found)
実行結果(例) 2026年08月14日
2026-09-13
B
['info@example.com']
仮想環境 ── 案件ごとに道具箱を分ける
プロジェクトAでは古い版、プロジェクトBでは新しい版が必要、ということが日常的に起こります。仮想環境 は、フォルダごとに専用の道具箱を作るしくみです。実務では例外なく使います。
ターミナル(プロジェクトのフォルダ内で) コピー
# 1. 仮想環境を作る(.venv というフォルダができる)
python -m venv .venv
# 2. 有効にする
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
# Mac / Linux
source .venv/bin/activate
# 有効になると、行の先頭に (.venv) と表示される
# 3. 終わるとき
deactivate
VS Codeでの選び方 仮想環境を作ったら、VS Codeの右下(または Ctrl+Shift+P → 「Python: インタープリターを選択」)で .venv を選んでください。これを忘れると、ターミナルでは入っているのにエディタ上では ModuleNotFoundError が出る、という混乱が起きます。
pip ── ライブラリを入れる
ターミナル(仮想環境を有効にした状態で) コピー
pip install pandas requests # まとめて入れられる
pip list # 入っているものを確認
pip install pandas==2.2.0 # 版を指定して入れる
# いま入っているものを一覧ファイルに書き出す
pip freeze > requirements.txt
# 別のパソコンで、同じ環境を再現する
pip install -r requirements.txt
requirements.txt は「この仕事に必要な道具の一覧」です。これをプロジェクトに含めておけば、他の人も同じ環境をすぐ作れます。チームで開発するなら必ず用意します。
新しい道具 uv 近年は uv という高速なツールが急速に普及しています。uv venv と uv pip install でほぼ同じことができ、10倍以上速いのが特徴です。まずは標準の venv と pip で仕組みを理解し、慣れたら乗り換えるとよいでしょう。
自作モジュールに分ける
ファイルが200行を超えたら、役割ごとに分けます。同じフォルダの .py ファイルは、そのまま import できます。
utils.py コピー
def calc_tax_included(price: int, rate: float = 0.1) -> int:
return int(price * (1 + rate))
main.py コピー
from utils import calc_tax_included
print(calc_tax_included(1000))
このステップは理解できた
STEP 8
応用
クラス ── 人のコードを読めるようになる
目安 1〜2週間
このステップの到達点 ── クラスの読み方がわかり、必要な場面で自分でも書ける。まず「読めること」が目標で、無理に使う必要はありません。
クラスとは「データと処理をひとまとめにした設計図」
ここまでは、データ(辞書)と処理(関数)を別々に扱ってきました。この2つが強く結びついているとき、まとめて1つにしたほうが扱いやすくなります。それがクラスです。
class_basic.py コピー
class Order:
"""1件の注文を表す。"""
def __init__(self, item: str, price: int, count: int):
# 設計図から実体を作るときに呼ばれる。selfは「自分自身」
self.item = item
self.price = price
self.count = count
def amount(self) -> int:
"""この注文の金額を返す。"""
return self.price * self.count
def __str__(self) -> str:
"""print()したときの表示を決める。"""
return f"{self.item} x{self.count} = {self.amount():,}円"
order = Order("ノートPC", 128000, 2) # 実体(インスタンス)を作る
print(order.item)
print(order.amount())
print(order)
実行結果 ノートPC
256000
ノートPC x2 = 256,000円
クラス ── 設計図。Order のように大文字始まりで名前を付ける
インスタンス ── 設計図から作った実体。order
self ── メソッドの第1引数。「自分自身」を指す。呼ぶときは書かない
メソッド ── クラスの中に定義した関数
dataclass ── データを入れるだけならこれで十分
実務では、単にデータをまとめたいだけの場面が多くあります。その場合 dataclass を使うと __init__ を書かずに済みます。
dataclass_basic.py コピー
from dataclasses import dataclass
@dataclass
class Order:
item: str
price: int
count: int
dept: str = "未設定"
def amount(self) -> int:
return self.price * self.count
orders = [
Order("ノートPC", 128000, 2, "営業部"),
Order("マウス", 2800, 10, "営業部"),
]
print(orders[0]) # 中身が自動で見やすく表示される
print(sum(o.amount() for o in orders))
実行結果 Order(item='ノートPC', price=128000, count=2, dept='営業部')
284000
いつクラスを使うか 「データと、それに対する操作が3つ以上セットで出てくる」ときが目安です。単純な集計スクリプトなら、関数と辞書のままで十分です。使わなくてよい場面で無理にクラスにすると、かえって読みにくくなります。 ただし、pandasもrequestsもFastAPIも内部はクラスでできているため、読めないと外部ライブラリのドキュメントが理解できません 。読む力は必須です。
継承についても知っておく(読むときに必要)
既存のクラスの性質を引き継いで、新しいクラスを作ることを継承 といいます。ライブラリを使うと class MyModel(BaseModel): のような書き方によく出会います。これは「BaseModelの機能をすべて受け継いだうえで、独自の項目を足す」という意味です。
inherit.py コピー
class Employee:
def __init__(self, name: str):
self.name = name
def greet(self) -> str:
return f"{self.name}です"
class Manager(Employee): # Employee を継承する
def __init__(self, name: str, members: int):
super().__init__(name) # 親の__init__を呼ぶ
self.members = members
def greet(self) -> str: # 同じ名前で上書きできる
return f"{self.name}です。{self.members}名を担当しています"
print(Employee("田中").greet())
print(Manager("佐藤", 5).greet())
このステップは理解できた
STEP 9
実務
業務自動化 ── Excelとファイル整理を自動でやらせる
目安 2〜3週間
このステップの到達点 ── 毎月手作業でやっているExcel集計やファイル整理を、1回の実行で終わるプログラムに置きかえられる。ここが「実務で使える」の入口です。
まず、自動化する仕事の選び方
いきなり大きな仕組みを作ろうとすると失敗します。最初の題材は次の条件で選んでください。
毎回まったく同じ手順 である(判断が入らない)
月1回以上 発生する(作る手間が元を取れる)
失敗しても取り返しがつく (元データを消さない、コピーを対象にする)
典型例は「複数のExcelを1つにまとめる」「決まった形の請求書を大量に作る」「ダウンロードした大量のファイルを日付ごとに振り分ける」です。
Excelを読み書きする(openpyxl)
ターミナル コピー
pip install openpyxl
excel_basic.py コピー
import openpyxl
from openpyxl.styles import Font
# 読み込む
wb = openpyxl.load_workbook("売上.xlsx")
ws = wb["8月"] # シート名で指定
print(ws["B2"].value) # セルを1つ読む
print(ws.max_row, ws.max_column) # 使われている範囲
# 2行目から最後まで、1行ずつ読む
total = 0
for row in ws.iter_rows(min_row=2, values_only=True):
item, price, count = row[0], row[1], row[2]
if price is None: # 空行は飛ばす
continue
total += price * count
# 書き込んで、別名で保存する(元ファイルは壊さない)
ws["E1"] = "合計"
ws["E1"].font = Font(bold=True)
ws["E2"] = total
wb.save("売上_集計済み.xlsx")
print(f"合計 {total:,}円 を書き込みました")
元のファイルは必ず残す 自動化の事故でいちばん多いのが、元データの上書きです。wb.save() は指定した名前で保存するので、読み込んだファイル名とは別の名前 にしてください。最初のうちは、対象フォルダのコピーを作ってから試すのが安全です。
フォルダ内の全Excelを1つにまとめる
実務でいちばん喜ばれる処理です。支店ごと・月ごとに分かれたファイルを、1つの表に統合します。
merge_excel.py コピー
from pathlib import Path
import openpyxl
src_dir = Path(__file__).parent / "支店データ"
rows: list[list] = []
for xlsx in sorted(src_dir.glob("*.xlsx")):
if xlsx.name.startswith("~$"): # Excelが開いている時の一時ファイルを除外
continue
wb = openpyxl.load_workbook(xlsx, data_only=True) # 数式でなく計算結果を読む
ws = wb.active
for row in ws.iter_rows(min_row=2, values_only=True):
if row[0] is None:
continue
rows.append([xlsx.stem, *row]) # どのファイル由来かを1列目に残す
out = openpyxl.Workbook()
out_ws = out.active
out_ws.append(["支店", "商品", "単価", "数量"])
for row in rows:
out_ws.append(row)
out.save(Path(__file__).parent / "統合結果.xlsx")
print(f"{len(rows)}行を統合しました")
ファイルを日付ごとに振り分ける
organize_files.py コピー
import datetime
import shutil
from pathlib import Path
target = Path.home() / "Downloads"
for file in target.iterdir():
if file.is_dir():
continue
# 更新日時を取り出して「2026-08」のようなフォルダ名にする
mtime = datetime.datetime.fromtimestamp(file.stat().st_mtime)
folder = target / mtime.strftime("%Y-%m")
folder.mkdir(exist_ok=True)
shutil.move(str(file), str(folder / file.name))
print(f"{file.name} → {folder.name}/")
いきなり動かさない ファイルを移動・削除するプログラムは、まず shutil.move(...) の行をコメントにして print() だけを動かし、「何が起きる予定か」を目で確認 してから実行してください。これを空実行(ドライラン)といい、実務では必須の手順です。
Webからデータを取る(スクレイピング)と、そのルール
Webページから情報を取り出すことをスクレイピングといいます。強力ですが、やってよい範囲を守ることが技術以上に重要 です。
守るべきこと
① 相手サイトの利用規約と robots.txt を必ず確認する。② APIが公開されているならそちらを使う。③ アクセスの間隔を1秒以上あける。④ 取得したデータの著作権に配慮し、無断で再配布しない。⑤ 会員制ページや、ログインが必要な部分には手を出さない。短時間に大量のアクセスを送ると、業務妨害とみなされる可能性があります。
scrape_basic.py コピー
import time
import requests
from bs4 import BeautifulSoup
urls = ["https://example.com/page1", "https://example.com/page2"]
for url in urls:
res = requests.get(url, timeout=10, headers={"User-Agent": "study-bot"})
res.raise_for_status() # 失敗していれば例外を出す
soup = BeautifulSoup(res.text, "html.parser")
title = soup.select_one("h1")
print(title.get_text(strip=True) if title else "見出しなし")
time.sleep(1) # 相手に負荷をかけないための間隔
実践課題
あなたが今、手作業でやっている定型作業を1つ書き出し、「入力(何を受け取るか)」「処理(どう変えるか)」「出力(何を作るか)」の3つに分解してください。この分解ができれば、あとはここまでの知識で書けます。
このステップは理解できた
STEP 10
実務
pandas ── 数万行のデータを一瞬で集計する
目安 3〜4週間
このステップの到達点 ── CSVを読み込み、絞り込み・集計・結合・グラフ化までひととおりできる。Excelでは重くて開けない量のデータを扱える。
pandasは「Pythonで動くExcel」
STEP 6ではCSVを1行ずつ読みましたが、行数が増えると書くのも動かすのも大変です。pandasを使うと、表全体をまとめて操作できます。データ分析の仕事では、事実上の標準です。
ターミナル コピー
pip install pandas openpyxl matplotlib
読み込みと、最初に見るべきこと
pandas_basic.py コピー
import pandas as pd
df = pd.read_csv("sales.csv", encoding="utf-8")
print(df.head()) # 先頭5行
print(df.shape) # (行数, 列数)
print(df.dtypes) # 各列の型
print(df.info()) # 欠損の有無をまとめて確認
print(df.describe()) # 数値列の平均・最大・最小など
実行結果(head の部分) date item price count dept
0 2026-08-01 ノートPC 128000 2 営業部
1 2026-08-01 マウス 2800 10 営業部
2 2026-08-02 モニター 32000 4 開発部
3 2026-08-03 キーボード 8600 6 開発部
最初の10分は必ず「データを見る」 実務のデータは必ず汚れています。空欄、全角半角の混在、日付が文字列、同じ部署名の表記ゆれ。df.info() と df["dept"].unique() で状態を確認してから作業を始めると、後戻りが激減します。
列の追加、絞り込み、並べかえ
pandas_select.py コピー
import pandas as pd
df = pd.read_csv("sales.csv")
# 新しい列を作る(すべての行に一括で計算される)
df["amount"] = df["price"] * df["count"]
# 条件で絞り込む
big = df[df["amount"] >= 100000]
sales_dept = df[(df["dept"] == "営業部") & (df["amount"] >= 10000)]
# 並べかえ、上位だけ取り出す
top3 = df.sort_values("amount", ascending=False).head(3)
# 必要な列だけ取り出す
print(top3[["item", "dept", "amount"]])
実行結果 item dept amount
0 ノートPC 営業部 256000
2 モニター 開発部 128000
3 キーボード 開発部 51600
条件を組み合わせるときの注意 pandasでは and / or ではなく & / | を使い、それぞれの条件をかっこで囲む 必要があります。かっこを忘れると分かりにくいエラーになります。
集計する(groupby)── pandasの主役
pandas_group.py コピー
import pandas as pd
df = pd.read_csv("sales.csv")
df["amount"] = df["price"] * df["count"]
# 部署ごとの合計
print(df.groupby("dept")["amount"].sum())
# 複数の集計を同時に
summary = df.groupby("dept").agg(
合計=("amount", "sum"),
平均=("amount", "mean"),
件数=("amount", "count"),
)
print(summary)
# 日付ごと × 部署ごとのクロス集計(Excelのピボットテーブル)
pivot = df.pivot_table(index="date", columns="dept", values="amount",
aggfunc="sum", fill_value=0)
print(pivot)
実行結果 dept
営業部 284000
開発部 179600
Name: amount, dtype: int64
合計 平均 件数
dept
営業部 284000 142000.0 2
開発部 179600 89800.0 2
汚れたデータを整える
pandas_clean.py コピー
import pandas as pd
df = pd.read_csv("sales.csv")
df["price"] = df["price"].fillna(0) # 空欄を0で埋める
df = df.dropna(subset=["item"]) # 商品名が空の行は捨てる
df = df.drop_duplicates() # 完全に同じ行を除く
df["dept"] = df["dept"].str.strip() # 前後の空白を取る
df["date"] = pd.to_datetime(df["date"]) # 文字列を日付型に変換
df["month"] = df["date"].dt.strftime("%Y-%m") # 月の列を作る
# 表記ゆれをまとめる
df["dept"] = df["dept"].replace({"営業": "営業部", "開発G": "開発部"})
2つの表をつなぐ(merge)とExcel出力
pandas_merge.py コピー
import pandas as pd
sales = pd.read_csv("sales.csv")
master = pd.read_csv("item_master.csv") # item, category の対応表
# Excelのvlookupに相当。how="left" は「左の表の行はすべて残す」
merged = pd.merge(sales, master, on="item", how="left")
print(merged["category"].isna().sum()) # 対応表に無かった件数を確認
# 複数シートに分けてExcelに書き出す
with pd.ExcelWriter("報告書.xlsx", engine="openpyxl") as writer:
merged.to_excel(writer, sheet_name="明細", index=False)
merged.groupby("dept")["price"].sum().to_excel(writer, sheet_name="部署別")
グラフにする
plot_basic.py コピー
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams["font.family"] = "Meiryo" # Macは "Hiragino Sans"
df = pd.read_csv("sales.csv")
df["amount"] = df["price"] * df["count"]
summary = df.groupby("dept")["amount"].sum()
summary.plot(kind="bar", color="#0e7c74")
plt.title("部署別の売上")
plt.ylabel("金額(円)")
plt.tight_layout()
plt.savefig("sales.png", dpi=150)
print("sales.png を保存しました")
グラフの日本語が □□□ になるとき matplotlibは初期状態で日本語のフォントを持っていません。上のように font.family を指定するか、pip install japanize-matplotlib を入れて import japanize_matplotlib と書けば解決します。
実践課題
手元にある実際のCSV(家計簿、売上、アクセスログなど何でも)を読み込み、①行数と列の型を確認 ②不要な行を除く ③何かの単位で集計 ④結果をExcelに書き出す、までを1本のスクリプトにしてください。この一連の流れが、データ分析の実務そのものです。
このステップは理解できた
STEP 11
実務
Web APIを使う・作る
目安 2〜3週間
このステップの到達点 ── 外部サービスのAPIからデータを取得できる。自分でも簡単なAPIを作って動かせる。
APIとは「機械のための窓口」
人間向けのWebページとは別に、プログラムからデータを受け取るための入口が用意されていることがあります。これがAPIです。天気、為替、地図、社内システムなど、実務のデータ連携はほぼAPI経由です。
api_get.py コピー
import requests
url = "https://api.github.com/repos/python/cpython"
res = requests.get(url, timeout=10)
res.raise_for_status() # 200番台以外なら例外にする
data = res.json() # JSONを辞書に変換
print(data["full_name"])
print(f"スター数: {data['stargazers_count']:,}")
実行結果(例) python/cpython
スター数: 64,000
ステータスコードの読み方
APIキーは絶対にコードに書かない
多くのAPIは、利用者を識別する秘密の文字列(APIキー)を必要とします。これをソースコードに直接書き、そのままGitHubに公開してしまう事故が後を絶ちません。不正利用され高額請求につながります。
.env(このファイルは絶対に共有しない) コピー
API_KEY=abcd1234efgh5678
api_secure.py コピー
import os
import requests
from dotenv import load_dotenv # pip install python-dotenv
load_dotenv() # .env を読み込んで環境変数にする
api_key = os.environ["API_KEY"] # 無ければここでエラーになるので気づける
res = requests.get(
"https://api.example.com/v1/data",
headers={"Authorization": f"Bearer {api_key}"},
timeout=10,
)
print(res.status_code)
.gitignore に .env を必ず書く STEP 12で扱うGitでは、これを書いておかないと秘密のファイルまで公開されます。一度公開したキーは、削除しても漏れたものとして扱い、必ず作り直してください。
自分でAPIを作る(FastAPI)
作った集計処理を、他の人やシステムから呼べるようにするのがAPI化です。FastAPIなら20行ほどで動きます。
ターミナル コピー
pip install fastapi uvicorn
uvicorn app:app --reload
app.py コピー
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class TaxRequest(BaseModel):
price: int
rate: float = 0.1
@app.get("/health")
def health() -> dict:
return {"status": "ok"}
@app.post("/tax")
def calc_tax(req: TaxRequest) -> dict:
"""税込価格を計算して返す。"""
return {"price": req.price, "total": int(req.price * (1 + req.rate))}
起動したら、ブラウザで http://127.0.0.1:8000/docs を開いてください。操作画面つきのドキュメントが自動で生成され、その場で試せます。 これがFastAPIが実務で選ばれる理由です。
Flask / Django との違い Flaskは最小限の機能に絞った古株で、学習用の情報が多いのが利点です。Djangoは管理画面やデータベース機能まで最初から揃った大型フレームワークで、本格的なWebサービス向けです。FastAPIは型ヒントを活かした自動検証と自動ドキュメントが強みで、データを返すAPIを作るなら現在の第一候補 です。
このステップは理解できた
STEP 12
実務
現場の作法 ── Git・テスト・整形・ログ
目安 3〜4週間
このステップの到達点 ── Gitで変更を記録し、pytestでテストを書き、整形ツールを通せる。ここまで来て初めて「チームで働ける人」になります。
1. Git ── 変更の履歴を残す
Gitは、いつ・誰が・どこを変えたかを記録する仕組みです。実務で使わない現場はまずありません。 「壊しても前の状態に戻せる」という安心が、思い切った改修を可能にします。
ターミナル(最初の1回) コピー
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
cd python-study
git init # このフォルダの記録を開始する
ターミナル(毎日の流れ) コピー
git status # 今どこが変わっているか
git add . # 記録する対象に入れる
git commit -m "売上集計にCSV出力を追加" # 変更を1つの区切りとして記録
git log --oneline # これまでの記録を見る
# GitHubなど、別の場所へ送る
git push origin main
.gitignore コピー
.venv/
__pycache__/
*.pyc
.env
data/*.csv
.DS_Store
コミットの単位 「1つの意味のある変更」で1コミットです。-m のメッセージには「何をしたか」を日本語で書いて構いません。update や 修正 だけでは、半年後の自分が困ります。
2. テスト ── 直したつもりが壊れていないか確かめる
プログラムを直すと、別の場所が壊れることがあります。それを自動で検知するのがテストです。手で確かめるのは、規模が大きくなると不可能になります。
ターミナル コピー
pip install pytest
pytest -v
test_utils.py(ファイル名は test_ で始める) コピー
import pytest
from utils import calc_tax_included
def test_normal():
assert calc_tax_included(1000) == 1100
def test_rate_given():
assert calc_tax_included(1000, 0.08) == 1080
def test_zero():
assert calc_tax_included(0) == 0
def test_negative_raises():
"""負の金額はエラーにする、という仕様にした場合"""
with pytest.raises(ValueError):
calc_tax_included(-100)
実行結果 test_utils.py::test_normal PASSED
test_utils.py::test_rate_given PASSED
test_utils.py::test_zero PASSED
test_utils.py::test_negative_raises FAILED
テストを書くときは、ふつうの場合・境界の場合(0や空)・異常な場合 の3つを考えます。これは学習にも効果があり、テストが書きにくい関数は、たいてい設計が悪い関数です。
3. コードの整形と点検
書き方の細かい差(スペースの位置、引用符の種類)で悩む時間は無駄です。ツールに任せて自動でそろえます。近年は ruff 一つで整形と点検の両方ができます。
ターミナル コピー
pip install ruff
ruff format . # 書式を自動でそろえる
ruff check . # 未使用の変数、危ない書き方などを指摘
ruff check . --fix # 直せるものは自動で直す
4. print ではなく logging を使う
自分だけが動かす間は print() で十分ですが、定期実行させるものや人に渡すものでは、いつ何が起きたかを記録に残す必要があります。
logging_basic.py コピー
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("app.log", encoding="utf-8"),
logging.StreamHandler(), # 画面にも出す
],
)
logger = logging.getLogger(__name__)
def main() -> None:
logger.info("処理を開始します")
try:
result = 100 / 0
except ZeroDivisionError:
logger.exception("計算に失敗しました") # エラーの詳細も記録される
logger.info("処理を終了します")
if __name__ == "__main__":
main()
実行結果(app.log にも同じ内容が残る) 2026-08-14 10:12:03,481 [INFO] 処理を開始します
2026-08-14 10:12:03,482 [ERROR] 計算に失敗しました
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
2026-08-14 10:12:03,483 [INFO] 処理を終了します
5. プロジェクトの標準的な構成
フォルダ構成の例 コピー
sales-report/
├── .venv/ # 仮想環境(Gitには含めない)
├── .env # 秘密情報(Gitには含めない)
├── .gitignore
├── README.md # 何をするものか、どう動かすかを書く
├── requirements.txt # 必要なライブラリ
├── src/
│ ├── __init__.py
│ ├── main.py # 入口
│ ├── loader.py # データの読み込み
│ └── summarize.py # 集計処理
├── tests/
│ └── test_summarize.py
└── data/ # 入力データ(Gitには含めない)
README.md が実務の分かれ目 自分以外の人(と3か月後の自分)が動かせるように、何をするものか・必要な準備・実行コマンド・注意点 の4つを書きます。これがあるかないかで、そのコードが使い続けられるかが決まります。
このステップは理解できた
STEP 13
実務
実力を証明する ── 作品を作り、続ける
目安 継続
このステップの到達点 ── 人に見せられる作品が1つある。学び続ける手段を持っている。
「勉強しました」より「作りました」
採用や社内での評価で見られるのは、学習時間ではなく動くもの です。規模は小さくてかまいません。次の条件を満たすものを1つ作ってください。
実際に困っていたことを解決している ── 課題が本物だと、説明に説得力が出ます
GitHubに置いてある ── READMEがあり、他人が動かせる状態になっている
テストが少しでもある ── 品質を意識できることの証明になります
なぜそう作ったかを説明できる ── 技術選定の理由を聞かれます
題材の例 ── 家計簿CSVを月別に集計してグラフを出すツール、複数のExcelを統合する社内向けスクリプト、気になるサイトの更新を毎朝知らせる仕組み、読書記録を管理する小さなWebアプリ。
これから伸ばす方向を選ぶ
※ 4つすべてをやろうとすると、どれも中途半端になります。まず1つ選び、そこで小さな成果を出してから広げてください。
AIとの付き合い方
今はAIにコードを書かせられる時代です。使わないのは損ですが、使い方を誤るといつまでも実力がつきません 。次の線引きを守ってください。
やってよい ── エラーの原因を相談する、書いたコードを説明させる、より良い書き方を尋ねる、テスト項目を洗い出させる
気をつける ── 出てきたコードを読まずに 貼り付ける。動いても、なぜ動くか説明できないなら自分の力にはなっていません
絶対にしない ── 会社の実データ、顧客情報、APIキーを、社の許可なく外部サービスへ貼り付ける
おすすめは、まず自分で書いてから AIにレビューさせる順番です。自分の答えと比べることで、どこが弱いかがはっきりします。
学び続けるための情報源
公式ドキュメント ── 最も正確です。日本語版もあります。ライブラリを使う前に、まず公式を見る癖をつけてください
コードを読む ── GitHubで人気のあるPythonプロジェクトを読むと、書き方の水準が上がります
手を止めない ── 週に1回でも、何か書き足す。3か月空けると、驚くほど忘れます
詰まったときの合言葉 ①エラー全文を読む ②公式ドキュメントを見る ③最小のコードで再現する ④それでもだめなら、やりたいこと・コード・エラー全文を添えて聞く。この4手順で、実務の問題のほとんどは解決します。
このステップは理解できた