関数が日本一わかりやすく学べる!初心者向け完全ガイド

関数は、プログラミングを効率的に行うための最も重要な基礎概念の一つです。「関数って何?」「どうやって使うの?」という疑問から、実際にコードを書けるようになるまで、この記事では日本一わかりやすく解説します。難しい専門用語は使わず、身近な例えとシンプルなコードで、誰でも関数をマスターできるよう丁寧に説明していきます。

関数って何?身近な例で理解しよう

関数は「魔法の箱」のようなもの

関数を理解するために、まず身近な例で考えてみましょう。関数は「魔法の箱」のようなものです。

# 関数は魔法の箱のようなもの
def greet(name):
    """名前を入れると挨拶が出てくる魔法の箱"""
    return f"こんにちは、{name}さん!"

# 魔法の箱を使ってみよう
message = greet("田中")
print(message)  # こんにちは、田中さん!

この「魔法の箱」に名前を入れると、挨拶の言葉が出てきます。これが関数の基本的な仕組みです。

関数の3つの要素

関数には3つの基本要素があります:

def 関数名(材料):
    """何をする関数かの説明"""
    処理内容
    return 結果

# 具体例:計算機の関数
def calculator(a, b):
    """2つの数を足し算する関数"""
    result = a + b
    return result

# 使ってみよう
answer = calculator(5, 3)
print(answer)  # 8
  1. 材料(引数):関数に渡すデータ
  2. 処理内容:関数が行う作業
  3. 結果(戻り値):関数が返してくれるもの

超簡単!関数の作り方

ステップ1:一番シンプルな関数

まずは、何も材料を必要としない一番シンプルな関数から始めましょう。

# 一番シンプルな関数
def say_hello():
    """挨拶をする関数"""
    print("こんにちは!")

# 関数を呼び出す(使う)
say_hello()  # こんにちは!

この関数は材料(引数)がなく、ただ「こんにちは!」と表示するだけです。

ステップ2:材料(引数)を使う関数

次は、材料を入れるとそれを使って何かをしてくれる関数を作りましょう。

# 材料(引数)を使う関数
def introduce(name, age):
    """自己紹介をする関数"""
    print(f"私の名前は{name}です。{age}歳です。")

# 関数を使ってみよう
introduce("佐藤", 25)  # 私の名前は佐藤です。25歳です。
introduce("山田", 30)  # 私の名前は山田です。30歳です。

ステップ3:結果を返す関数

今度は、計算した結果を返してくれる関数を作りましょう。

# 結果を返す関数
def add_numbers(x, y):
    """2つの数を足し算して結果を返す関数"""
    total = x + y
    return total

# 関数の結果を変数に保存
result1 = add_numbers(10, 20)
result2 = add_numbers(100, 200)

print(f"10 + 20 = {result1}")    # 10 + 20 = 30
print(f"100 + 200 = {result2}")  # 100 + 200 = 300

関数を使う理由がよくわかる実例

同じコードを何度も書くのは大変

関数を使わない場合と使う場合を比べてみましょう。

# 関数を使わない場合(同じコードを繰り返し)
print("=== 田中さんの成績表 ===")
math_score = 85
english_score = 92
average = (math_score + english_score) / 2
print(f"平均点: {average}")

print("=== 佐藤さんの成績表 ===")
math_score = 78
english_score = 88
average = (math_score + english_score) / 2
print(f"平均点: {average}")

# 関数を使う場合(スッキリ!)
def create_report(name, math, english):
    """成績表を作る関数"""
    average = (math + english) / 2
    print(f"=== {name}さんの成績表 ===")
    print(f"平均点: {average}")

# 使ってみよう
create_report("田中", 85, 92)
create_report("佐藤", 78, 88)

関数を使うと、同じ処理を簡単に何度でも使えるようになります!

関数の便利さがわかる日常例

# 買い物の計算を関数にしてみよう
def calculate_total(price, quantity, tax_rate=0.1):
    """商品の合計金額を計算する関数"""
    subtotal = price * quantity
    tax = subtotal * tax_rate
    total = subtotal + tax
    return total

# いろんな商品で使ってみよう
apple_total = calculate_total(100, 5)        # りんご100円×5個
bread_total = calculate_total(200, 2)        # パン200円×2個
book_total = calculate_total(1500, 1, 0.08)  # 本1500円×1冊(税率8%)

print(f"りんごの合計: {apple_total}円")  # りんごの合計: 550.0円
print(f"パンの合計: {bread_total}円")    # パンの合計: 440.0円
print(f"本の合計: {book_total}円")      # 本の合計: 1620.0円

よく使う関数のパターン

パターン1:計算系の関数

# 面積を計算する関数
def rectangle_area(width, height):
    """長方形の面積を計算"""
    return width * height

def circle_area(radius):
    """円の面積を計算"""
    return 3.14 * radius * radius

# 使用例
rect_area = rectangle_area(5, 3)      # 15
circle_area_result = circle_area(2)   # 12.56

print(f"長方形の面積: {rect_area}")
print(f"円の面積: {circle_area_result}")

パターン2:判定系の関数

# 合格判定をする関数
def check_pass(score):
    """点数から合格判定をする関数"""
    if score >= 60:
        return "合格"
    else:
        return "不合格"

# 年齢から区分を判定する関数
def age_group(age):
    """年齢から区分を判定"""
    if age < 18:
        return "未成年"
    elif age < 65:
        return "成人"
    else:
        return "高齢者"

# 使用例
result1 = check_pass(75)   # 合格
result2 = check_pass(45)   # 不合格
group1 = age_group(16)     # 未成年
group2 = age_group(30)     # 成人

print(f"75点は{result1}")
print(f"30歳は{group2}")

パターン3:変換系の関数

# 温度変換の関数
def celsius_to_fahrenheit(celsius):
    """摂氏を華氏に変換"""
    fahrenheit = celsius * 9/5 + 32
    return fahrenheit

def fahrenheit_to_celsius(fahrenheit):
    """華氏を摂氏に変換"""
    celsius = (fahrenheit - 32) * 5/9
    return celsius

# 使用例
temp_f = celsius_to_fahrenheit(25)    # 77.0
temp_c = fahrenheit_to_celsius(86)    # 30.0

print(f"25度は華氏{temp_f}度")
print(f"華氏86度は摂氏{temp_c}度")

引数(材料)の使い方をマスターしよう

基本的な引数の使い方

# 位置で引数を渡す方法
def introduce_person(name, age, city):
    """人を紹介する関数"""
    print(f"{name}さんは{age}歳、{city}在住です")

# 順番通りに渡す
introduce_person("田中", 25, "東京")

# 名前を指定して渡す方法
introduce_person(city="大阪", name="佐藤", age=30)

デフォルト値(初期値)を設定する

# デフォルト値付きの関数
def create_profile(name, age, hobby="読書"):
    """プロフィールを作る関数(趣味のデフォルトは読書)"""
    print(f"名前: {name}")
    print(f"年齢: {age}")
    print(f"趣味: {hobby}")
    print("---")

# 使ってみよう
create_profile("田中", 25)              # 趣味は「読書」になる
create_profile("佐藤", 30, "映画鑑賞")   # 趣味は「映画鑑賞」になる

複数の値を返す関数

# 複数の結果を返す関数
def analyze_score(score):
    """点数を分析して複数の情報を返す"""
    if score >= 80:
        grade = "優"
        message = "素晴らしいです!"
    elif score >= 60:
        grade = "良"
        message = "合格です"
    else:
        grade = "不可"
        message = "もう少し頑張りましょう"
    
    return grade, message

# 複数の値を受け取る
my_grade, my_message = analyze_score(85)
print(f"成績: {my_grade}")      # 成績: 優
print(f"コメント: {my_message}")  # コメント: 素晴らしいです!

関数でよくある間違いと解決法

間違い1:return文を忘れる

# ❌ 間違った例
def bad_add(a, b):
    total = a + b
    # return文がない!

result = bad_add(5, 3)
print(result)  # None(何も返ってこない)

# ✅ 正しい例
def good_add(a, b):
    total = a + b
    return total  # これが重要!

result = good_add(5, 3)
print(result)  # 8

間違い2:関数を呼び出すときの括弧を忘れる

def say_hello():
    return "こんにちは!"

# ❌ 間違った例
message = say_hello  # 括弧がない
print(message)       # <function say_hello at 0x...>

# ✅ 正しい例
message = say_hello()  # 括弧をつける
print(message)         # こんにちは!

間違い3:引数の数や順番を間違える

def calculate_bmi(weight, height):
    """BMIを計算する関数"""
    bmi = weight / (height ** 2)
    return bmi

# ❌ 間違った例
# bmi = calculate_bmi(170)  # 引数が足りない(エラー)
# bmi = calculate_bmi(170, 65, 25)  # 引数が多すぎる(エラー)

# ✅ 正しい例
bmi = calculate_bmi(65, 1.70)  # 体重65kg、身長1.70m
print(f"BMI: {bmi:.1f}")

実践的な関数を作ってみよう

例1:パスワードチェック関数

def check_password_strength(password):
    """パスワードの強度をチェックする関数"""
    if len(password) < 6:
        return "弱い(6文字以上にしてください)"
    elif len(password) < 10:
        return "普通(もう少し長くするとより安全です)"
    else:
        return "強い(安全なパスワードです)"

# テストしてみよう
test_passwords = ["123", "password", "myverylongpassword"]
for pwd in test_passwords:
    strength = check_password_strength(pwd)
    print(f"'{pwd}' → {strength}")

例2:家計簿計算関数

def calculate_household_budget(income, rent, food, other):
    """家計簿の計算をする関数"""
    total_expense = rent + food + other
    remaining = income - total_expense
    savings_rate = (remaining / income) * 100 if income > 0 else 0
    
    print(f"収入: {income:,}円")
    print(f"支出: {total_expense:,}円")
    print(f"残高: {remaining:,}円")
    print(f"貯蓄率: {savings_rate:.1f}%")
    
    return remaining

# 使用例
monthly_savings = calculate_household_budget(300000, 80000, 50000, 30000)

例3:おみくじ関数

import random

def omikuji():
    """おみくじを引く関数"""
    results = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]
    result = random.choice(results)
    
    messages = {
        "大吉": "素晴らしい一日になるでしょう!",
        "中吉": "良いことがありそうです",
        "小吉": "小さな幸せが見つかるかも",
        "吉": "平穏な一日を過ごせるでしょう",
        "末吉": "後半に良いことがあるかも",
        "凶": "注意深く過ごしましょう"
    }
    
    print(f"今日の運勢: {result}")
    print(f"メッセージ: {messages[result]}")
    
    return result

# おみくじを引いてみよう
todays_luck = omikuji()

関数を組み合わせて使う

関数の中で他の関数を使う

# 基本的な計算関数
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

# 複雑な計算をする関数
def calculate_total_price(unit_price, quantity, discount_rate):
    """商品の総額を計算する関数"""
    # 他の関数を使って計算
    subtotal = multiply(unit_price, quantity)
    discount = multiply(subtotal, discount_rate)
    total = subtotal - discount
    
    print(f"単価: {unit_price}円")
    print(f"数量: {quantity}個")
    print(f"小計: {subtotal}円")
    print(f"割引: {discount}円")
    print(f"合計: {total}円")
    
    return total

# 使用例
final_price = calculate_total_price(1000, 3, 0.1)  # 1000円×3個、10%割引

段階的に処理する関数

def process_student_data(name, math_score, english_score):
    """学生データを段階的に処理する関数"""
    
    # ステップ1: 平均点を計算
    def calculate_average(score1, score2):
        return (score1 + score2) / 2
    
    # ステップ2: 成績を判定
    def judge_grade(average):
        if average >= 80:
            return "優秀"
        elif average >= 60:
            return "合格"
        else:
            return "要努力"
    
    # ステップ3: 結果をまとめる
    avg = calculate_average(math_score, english_score)
    grade = judge_grade(avg)
    
    print(f"生徒名: {name}")
    print(f"数学: {math_score}点、英語: {english_score}点")
    print(f"平均: {avg}点")
    print(f"判定: {grade}")
    
    return avg, grade

# 使用例
average, grade = process_student_data("田中", 85, 75)

関数を使うときのコツとポイント

コツ1:関数名をわかりやすくする

# ❌ わかりにくい関数名
def calc(x, y):
    return x * y

def func1(s):
    return len(s)

# ✅ わかりやすい関数名
def calculate_area(width, height):
    return width * height

def count_characters(text):
    return len(text)

コツ2:1つの関数は1つの仕事だけ

# ❌ いろんなことをする関数(わかりにくい)
def do_everything(name, score1, score2):
    avg = (score1 + score2) / 2
    if avg >= 60:
        result = "合格"
    else:
        result = "不合格"
    print(f"{name}: {avg}点 ({result})")
    return avg * 2  # なぜか2倍する?

# ✅ それぞれ別々の関数にする(わかりやすい)
def calculate_average(score1, score2):
    """平均点を計算"""
    return (score1 + score2) / 2

def judge_result(average):
    """合格判定"""
    return "合格" if average >= 60 else "不合格"

def display_result(name, average, result):
    """結果を表示"""
    print(f"{name}: {average}点 ({result})")

コツ3:コメントを書いて何をする関数かを説明

def calculate_monthly_payment(loan_amount, annual_rate, years):
    """
    住宅ローンの月々の支払額を計算する関数
    
    loan_amount: 借入金額(円)
    annual_rate: 年利率(例:0.035 = 3.5%)
    years: 返済年数
    """
    monthly_rate = annual_rate / 12
    total_months = years * 12
    
    if monthly_rate == 0:
        return loan_amount / total_months
    
    payment = loan_amount * (monthly_rate * (1 + monthly_rate) ** total_months) / ((1 + monthly_rate) ** total_months - 1)
    return payment

# 使用例:3000万円、年利1.5%、35年ローン
monthly_payment = calculate_monthly_payment(30000000, 0.015, 35)
print(f"月々の支払い: {monthly_payment:,.0f}円")

まとめ:関数マスターへの道

関数を覚えるとできるようになること

  1. 同じ処理を何度でも使える → コードが短くなる
  2. 複雑な処理を分けて考えられる → プログラムがわかりやすくなる
  3. エラーが見つけやすくなる → 修正が簡単になる
  4. 他の人とコードを共有しやすくなる → チーム開発ができる

関数を使うときの基本ルール

# 基本の型を覚えよう
def 関数名(引数1, 引数2, デフォルト引数=初期値):
    """何をする関数かの説明を書く"""
    
    # 処理を書く
    結果 = 何かの計算や処理
    
    # 結果を返す
    return 結果

# 関数を使う
戻り値 = 関数名(値1, 値2)

練習問題で力試し

# 練習1: 自己紹介関数を作ってみよう
def self_introduction(name, age, hobby):
    """自己紹介をする関数"""
    message = f"はじめまして!{name}です。{age}歳で、趣味は{hobby}です。"
    return message

# 練習2: 簡単な計算機能を作ってみよう
def simple_calculator(num1, num2, operation):
    """簡単な計算をする関数"""
    if operation == "足し算":
        return num1 + num2
    elif operation == "引き算":
        return num1 - num2
    elif operation == "掛け算":
        return num1 * num2
    elif operation == "割り算":
        return num1 / num2 if num2 != 0 else "0で割ることはできません"
    else:
        return "対応していない計算です"

# 練習3: 占い関数を作ってみよう
def fortune_telling(birth_month):
    """誕生月で占いをする関数"""
    fortunes = {
        1: "新しいことを始めるのに良い月です",
        2: "人との出会いに恵まれそうです",
        3: "創造性が高まる時期です",
        # ... 他の月も追加
    }
    return fortunes.get(birth_month, "1〜12の数字を入力してください")

# 関数を使ってみよう
intro = self_introduction("田中", 25, "読書")
print(intro)

calc_result = simple_calculator(10, 3, "足し算")
print(f"計算結果: {calc_result}")

関数は最初は難しく感じるかもしれませんが、たくさん練習すれば必ずできるようになります。まずは簡単な関数から始めて、少しずつ複雑な関数にチャレンジしていきましょう。関数をマスターすれば、プログラミングがグッと楽しくなりますよ!

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座