【Python講座 第5回】関数とモジュール完全攻略。初心者がVPSで学ぶ「コードの部品化」と再利用の技術

「コピペ」はエンジニアの敗北宣言だと思え。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回(第4回)は、繰り返し処理(ループ)を使って、大量のデータを一瞬で処理する方法を学びました。
これで、あなたのプログラムは強力なパワーを手に入れました。

しかし、学習が進むにつれてコードが長くなり、こんな悩みが出てきていませんか?

  • 「同じような処理を何度も書いている気がする…」
  • 「コードが100行を超えて、どこで何をしているか読みづらい…」
  • 「別のファイルで作ったプログラムを、こっちでも使いたい…」

これらを解決する魔法が「関数(Function)」「モジュール(Module)」です。
プロのエンジニアは、決して同じコードを何度も書きません。
処理を「部品」として作り、それをパズルのように組み合わせることで、巨大なシステムを構築しているのです。

コウ君

先生、VPSにログインしました!
関数って数学の $y = f(x)$ みたいなやつですよね?
難しそうですけど、これを使わないとやっぱりダメですか?
コピペの方が楽な気がするんですけど…。

リナックス先生

コピペは最初は楽だけど、後で地獄を見るのよ。
もしコピペした10箇所全部にバグが見つかったら、10箇所全部修正するの?
関数にしておけば、1箇所直すだけで全部直るの。
これを「DRY原則(Don’t Repeat Yourself)」と言って、エンジニアの鉄則なのよ!

本記事では、Python初心者にとって最適な勉強方法である「実機(VPS)でのコーディング」を通して、関数とモジュールの仕組みを完全にマスターします。

🚀 【全8回】Python VPSマスターコース カリキュラム


1. 関数の基本:入力・処理・出力

関数とは、一言で言えば「特定の処理をひとまとめにした魔法の箱」です。
この箱には以下の3つの要素があります。

要素 Python用語 説明
入力 引数(Arguments) 関数に渡す材料。データを受け取る変数。
処理 関数本体 受け取ったデータを使って計算や表示を行う。
出力 戻り値(Return Value) 処理結果として呼び出し元に返すデータ。

Pythonでは def というキーワードを使って関数を定義(作成)します。


2. 実践:VPSで関数を作ってみよう

それでは、VPS(AlmaLinux 9)に接続して、実際にコードを書いてみましょう。
前回の続きから作業します。

2-1. 仮想環境の有効化

作業用ユーザー(python_user)でログインし、仮想環境に入ります。

cd ~/python_study
source .venv/bin/activate

2-2. 基本的な関数の作成

挨拶をするだけのシンプルな関数を作ります。
vi basic_func.py を作成し、以下のコードを入力してください。

# 関数の定義 (definition)
def greet(name):
    # name は引数(ひきすう)
    print(f"こんにちは、{name}さん!")
    print("今日もPython学習頑張りましょう!")

# メイン処理
print("--- プログラム開始 ---")

# 関数の呼び出し (call)
greet("コウ君")
greet("リナックス先生")

print("--- プログラム終了 ---")

実行結果:

--- プログラム開始 ---
こんにちは、コウ君さん!
今日もPython学習頑張りましょう!
こんにちは、リナックス先生さん!
今日もPython学習頑張りましょう!
--- プログラム終了 ---

たった1行 greet("名前") と書くだけで、定義した2行の処理が実行されました。
これが「再利用」の基本です。

2-3. 戻り値(return)のある関数

次は、計算結果を「返す」関数です。
vi calc_func.py を作成します。

def tax_calc(price, tax_rate):
    """
    価格と税率を受け取り、税込価格を返す関数
    """
    result = price * (1 + tax_rate / 100)
    return int(result)  # 計算結果を呼び出し元に返す

# 関数の結果を変数で受け取る
price1 = tax_calc(1000, 10)
price2 = tax_calc(500, 8)

print(f"1000円の税込(10%): {price1}円")
print(f"500円の税込(8%): {price2}円")

実行結果:

1000円の税込(10%): 1100円
500円の税込(8%): 540円

return を使うことで、関数の中で計算した結果を、関数の外で別の処理(ここでは print)に使うことができます。


3. スコープの概念:変数の有効範囲を知る

関数を使う上で、初心者が必ずハマるのが「スコープ(有効範囲)」です。
関数の中で作った変数は、関数の外では使えません。

実験:エラーになるコード

vi scope_test.py を作成します。

def my_func():
    secret_msg = "これは秘密です"  # ローカル変数
    print("関数の中:", secret_msg)

my_func()

# 関数の外からアクセスしようとする
print("関数の外:", secret_msg)

実行結果(エラー):

関数の中: これは秘密です
NameError: name 'secret_msg' is not defined

secret_msg なんて名前の変数は定義されていないよ」と怒られます。
関数内の変数は「ローカル変数」と呼ばれ、関数の処理が終わるとメモリから消滅します。
逆に、関数の外で定義した変数は「グローバル変数」と呼ばれ、どこからでも参照できます。

プロの助言:
グローバル変数は便利ですが、どこで書き換えられたか追跡できなくなるため、実務では極力使わず、引数と戻り値でデータの受け渡しを行うのが鉄則です。


4. モジュール:ファイルを分割して管理する

プログラムが数百行になってくると、1つのファイルに書くのは管理が大変です。
機能ごとにファイルを分け、必要な時に読み込んで使う仕組みを「モジュール」と言います。

4-1. モジュールファイルの作成

便利な計算機能をまとめた tools.py を作ります。

# tools.py
def add(a, b):
    return a + b

def sub(a, b):
    return a - b

# テスト実行用のブロック(後述)
if __name__ == "__main__":
    print("これは tools.py のテストです")
    print(add(10, 5))

4-2. モジュールを読み込んで使う

メインのプログラム main.py を作ります。
同じディレクトリにある tools.pyimport して使います。

# main.py
import tools  # tools.py を読み込む

print("メイン処理を開始")

# tools.関数名 で呼び出せる
result = tools.add(100, 200)
print(f"計算結果: {result}")

4-3. 実行と確認

python main.py

実行結果:

メイン処理を開始
計算結果: 300

tools.py の中に書いた "これは tools.py のテストです" が表示されていないことに注目してください。
if __name__ == "__main__": という書き方は、「このファイルが直接実行された時だけ実行する」という意味です。
importされた時は実行されないため、モジュールの動作確認コードを書くのに使われます。


5. プロのノウハウ:型ヒントとdocstring

Pythonは型を書かなくても動きますが、大規模開発では「この引数は数字?文字?」と迷うことが多々あります。
現代のPython開発では、「型ヒント(Type Hints)」を書くのが標準的です。

型ヒント付きの関数

def power(base: int, exponent: int) -> int:
    """
    累乗を計算する関数
    
    Args:
        base (int): 底
        exponent (int): 指数
    
    Returns:
        int: 計算結果
    """
    return base ** exponent
  • base: int : 引数 base は整数であることを期待する。
  • -> int : 戻り値は整数であることを期待する。
  • """...""" : docstring(ドックストリング)。関数の説明書。

これを書いておくと、VS Codeなどのエディタが補完を効かせてくれたり、チームメンバーがコードを読みやすくなったりします。
自分自身のためにも、ぜひ書く癖をつけてください。


6. 演習問題:BMI計算ツールの部品化

第2回で作った「BMI計算機」を、関数とモジュールを使ってリファクタリング(作り直し)してみましょう。

【課題】

  1. health_utils.py というモジュールを作成する。
  2. そこに calculate_bmi(height_cm, weight_kg) という関数を定義する。
  3. app.py からその関数を呼び出し、結果を表示する。

解答例

health_utils.py

def calculate_bmi(height_cm: float, weight_kg: float) -> float:
    """
    身長(cm)と体重(kg)からBMIを計算する
    """
    # cmをmに変換
    height_m = height_cm / 100
    # BMI計算
    bmi = weight_kg / (height_m ** 2)
    return bmi

app.py

import health_utils

# ユーザー入力(今回は固定値)
h = 170.5
w = 65.0

# モジュールの関数を利用
my_bmi = health_utils.calculate_bmi(h, w)

# 結果表示 (小数点1桁)
print(f"身長: {h}cm, 体重: {w}kg")
print(f"BMI: {my_bmi:.1f}")

実行結果:

身長: 170.5cm, 体重: 65.0kg
BMI: 22.4

処理ロジック(計算式)と、メイン処理(入出力)をきれいに分けることができました!


まとめ:スパゲッティコードからの卒業

お疲れ様でした! 第5回では、プログラムを整理整頓する「関数」と「モジュール」について学びました。

今回の達成項目:

  • def を使って関数を定義し、処理を再利用できるようになった。
  • 引数と戻り値を使って、データの受け渡しができた。
  • ローカル変数とグローバル変数の違い(スコープ)を理解した。
  • import を使って、別ファイルのコードを利用できるようになった。
  • if __name__ == "__main__": の意味を理解した。
  • 型ヒントとdocstringを使って、読みやすいコードを書く作法を知った。

これで、Pythonの基本的な文法(変数、if、for、関数)は一通り網羅しました。
次回からは、いよいよPythonの真骨頂である「外部ライブラリ」の世界に飛び込みます。
世界中の天才たちが作った便利なツールを、コマンド一発で取り込んで使う方法を学びましょう。

次回、【第6回】外部ライブラリの活用(pip):便利な道具をインターネットから入手する でお会いしましょう!

▼ Pythonを学ぶならVPSで ▼

AlmaLinuxが使える
「おすすめVPS」

VPSランキングを見る

Pythonスキルを活かす
「ITエンジニア転職」

転職エージェントを見る

コメント