【Python】アプリ開発の練習方法|初心者向け

【Python】アプリ開発の練習方法|初心者向け

公開: 更新:



Pythonのアプリ開発の練習方法①外部APIの連携

外部APIとの連携は、Pythonアプリケーション開発のスキルを向上させるために役立つ練習方法です。requestsライブラリを使用すると、天気予報APIやニュースAPI、画像認識APIなどさまざまな外部サービスのデータを取得して処理できます。

APIからのデータ取得は通常JSON形式のため、Pythonの辞書形式に変換して操作する技術が身につきます。レスポンスのステータスコードやエラーハンドリングを適切に処理することで、運用環境で起こりうる問題への対応スキルも養われるでしょう。

定期的にAPIにアクセスしてデータを収集し、分析や可視化を行うアプリケーションを開発すると、応用力が高まります。cronジョブやPythonのスケジューリングライブラリと組み合わせることで、自動化されたデータ収集システムを構築する経験も積むことが可能です。

【サンプルコード】
import requests
import json
from datetime import datetime

def get_weather_data(city):
    # OpenWeatherMap APIの例
    api_key = "あなたのAPIキー"
    base_url = "https://api.openweathermap.org/data/2.5/weather"
    
    params = {
        "q": city,
        "appid": api_key,
        "units": "metric",
        "lang": "ja"
    }
    response = requests.get(base_url, params=params)
    
    if response.status_code == 200:
        data = response.json()
        return {
            "都市": city,
            "気温": data["main"]["temp"],
            "湿度": data["main"]["humidity"],
            "天気": data["weather"][0]["description"],
            "取得時刻": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
    else:
        return {"エラー": f"APIリクエスト失敗: {response.status_code}"}

weather_info = get_weather_data("Tokyo")
print(json.dumps(weather_info, indent=4, ensure_ascii=False))
【実行結果】
{
    "都市": "Tokyo",
    "気温": 22.5,
    "湿度": 65,
    "天気": "晴れ",
    "取得時刻": "2025-03-18 14:30:45"
}
行番号 詳細説明
1行目 requestsとjson、datetimeをインポート
2行目 get_weather_data関数を定義
3行目 OpenWeatherMapのAPIキーと基本URLを設定
4行目 パラメータとして都市名やAPIキーなどを用意
5行目 requests.getでAPIを呼び出しレスポンスを取得
6行目 status_codeが200の場合はJSONデータをパースして返却
7行目 それ以外の場合はエラーメッセージを返却
8行目 get_weather_dataを呼び出して返却結果をprint関数で表示

「Python」を学べるコードキャンプのサービス

Pythonのアプリ開発の練習方法②フレームワークの使用

Webアプリケーション開発のスキルを高めるには、FlaskDjangoなどのフレームワークを活用した練習が役立ちます。これらのフレームワークを使用することによって、ルーティングやテンプレートエンジン、データベース操作などを統合的に学べます。

Flaskは軽量で学習曲線が緩やかなため、初心者がWebアプリケーション開発の基本概念を理解するのに適しています。小規模なプロジェクトから始めて徐々に機能を追加することで、MVCアーキテクチャやRESTful APIの設計原則を学べます。

また、ユーザー認証やデータの永続化、フォーム処理などを実装することでアプリケーション開発の経験を積めます。異なるエンドポイントやHTTPメソッドGETPOST、PUT、DELETEなど)の使い分けを練習すると、WebアプリケーションのRESTful設計への理解が深まるでしょう。

【サンプルコード】
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tasks.db'
db = SQLAlchemy(app)

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(200), nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    completed = db.Column(db.Boolean, default=False)

    def __repr__(self):
        return f''

with app.app_context():
    db.create_all()

@app.route('/')
def index():
    tasks = Task.query.order_by(Task.created_at.desc()).all()
    return render_template('index.html', tasks=tasks)

@app.route('/add_task', methods=['POST'])
def add_task():
    task_content = request.form['content']
    new_task = Task(content=task_content)
    db.session.add(new_task)
    db.session.commit()
    return redirect(url_for('index'))

@app.route('/toggle/')
def toggle_task(task_id):
    task = Task.query.get_or_404(task_id)
    task.completed = not task.completed
    db.session.commit()
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)
【実行結果】
 * Serving Flask app
 * Debug mode: on
 * Running on http://127.0.0.1:5000
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 123-456-789
127.0.0.1 - - [18/Mar/2025 14:45:12] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Mar/2025 14:45:20] "POST /add_task HTTP/1.1" 302 -
127.0.0.1 - - [18/Mar/2025 14:45:20] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Mar/2025 14:45:25] "GET /toggle/1 HTTP/1.1" 302 -
127.0.0.1 - - [18/Mar/2025 14:45:25] "GET / HTTP/1.1" 200 -
行番号 詳細説明
1行目 FlaskとSQLAlchemy、datetimeをインポート
2行目 Flaskアプリを作成しデータベースを設定
3行目 Taskクラスを定義しSQLAlchemyのモデルとして使用
4行目 アプリ起動時にdb.create_allでテーブルを作成
5行目 '/'ルートでタスク一覧を表示するindex関数を定義
6行目 /add_taskで新規タスクを追加してリダイレクト
7行目 /toggle/でタスクの完了状態を切り替える
8行目 メインモジュールとしてdebug=Trueでアプリを起動

Pythonのアプリ開発の練習方法③GUIアプリの作成

PythonでGUIアプリケーションを作成することは、デスクトップアプリケーション開発のスキルを高めるために良い練習方法の内の一つです。TkinterPyQt、wxPythonなどのライブラリを使い、ボタンやテキストフィールドなどのウィジェットを組み合わせたインターフェースを構築する技術を身につけられます。

イベント駆動型プログラミングの概念を理解することは、GUIアプリケーション開発において重要です。ユーザーの操作(ボタンクリックやキー入力など)に応じて関数を実行するイベントハンドラを設計することで、インタラクティブなアプリケーションの仕組みも学べます。

レイアウト管理やスタイリング、データバインディングなどを学ぶと、アプリケーション開発のスキルがより身につきます。単純な電卓アプリから始めて、徐々にファイル管理ツールやデータ可視化アプリのように複雑な機能へ発展させることで、GUIプログラミングの理解を深められるでしょう。

【サンプルコード】
import tkinter as tk
from tkinter import messagebox

class SimpleCalculator:
    def __init__(self, master):
        self.master = master
        master.title("シンプル電卓")
        master.geometry("300x400")
        master.configure(bg="#f0f0f0")
        
        self.result_var = tk.StringVar()
        self.result = tk.Entry(master, textvariable=self.result_var, font=('Arial', 20), 
                              bd=10, insertwidth=4, width=14, justify='right')
        self.result.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
        
        button_texts = [
            ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
            ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
            ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
            ('0', 4, 0), ('C', 4, 1), ('=', 4, 2), ('+', 4, 3)
        ]
        
        for (text, row, col) in button_texts:
            button = tk.Button(master, text=text, font=('Arial', 15), 
                              width=4, height=2, command=lambda t=text: self.button_click(t))
            button.grid(row=row, column=col, padx=5, pady=5)
    
    def button_click(self, value):
        current = self.result_var.get()
        
        if value == 'C':
            self.result_var.set("")
        elif value == '=':
            try:
                result = eval(current)
                self.result_var.set(result)
            except Exception as e:
                messagebox.showerror("エラー", "計算式が無効です")
                self.result_var.set("")
        else:
            self.result_var.set(current + value)

if __name__ == "__main__":
    root = tk.Tk()
    calculator = SimpleCalculator(root)
    root.mainloop()
【実行結果】
# Tkinterウィンドウが開き、シンプルな電卓インターフェースが表示されます
# ボタンをクリックして数式を入力し、「=」を押すと計算結果が表示されます
# 「C」ボタンで入力をクリアできます
# 例えば「2+3*4=」と入力すると「14」が表示されます
行番号 詳細説明
1行目 tkinterとmessageboxをインポート
2行目 SimpleCalculatorクラスを定義して初期設定を実施
3行目 電卓画面のタイトルやサイズ、背景色を設定
4行目 計算結果表示用のEntryウィジェットを配置
5行目 電卓のボタンを二次元配置で作成
6行目 button_click関数で入力値を処理し結果を表示
7行目 mainloopを呼び出してGUIアプリを起動
おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

Pythonのアプリ開発の練習方法③既存アプリに機能追加

既存のアプリケーションに新機能を追加する練習を行うことによって、開発現場で必要とされるスキルを身につけることが出来ます。オープンソースのプロジェクトやチュートリアルで作成したアプリケーションを拡張すると、他人のコードを理解し、新しい機能を実装する能力を養えます。

機能追加では、既存のコードベースに合わせたコーディングスタイルやアーキテクチャを意識することが大切です。リファクタリングをしながら新機能を追加することで、コードの保守性や拡張性への理解が深まり、プログラミングの知識を広げられます。

ユニットテストやドキュメント作成なども含めて練習すると、本格的な開発プロセスを経験できます。バージョン管理システム(Gitなど)で変更履歴を管理しながら機能追加を行うことで、チーム開発における協働作業の流れも体験できるでしょう。

既存のToDo管理アプリに優先度と期限日を追加する方法

具体例の一つとして、既存のToDo管理アプリに「優先度と期限日を追加する前のコード(実装前) 」と「優先度と期限日を追加した後のコード(実装後)」を比較できるようにまとめます。初心者が既存アプリに機能を追加してアプリを作る練習として、どの部分を拡張したかを学びながらアプリ開発やアプリ作成を進める方法の参考にしてください。

# 実装前コード
import json
import os
from datetime import datetime

class TodoApp:
    def __init__(self, filename="todos.json"):
        self.filename = filename
        self.todos = self._load_todos()
    
    def _load_todos(self):
        if os.path.exists(self.filename):
            with open(self.filename, 'r', encoding='utf-8') as f:
                return json.load(f)
        return []
    
    def _save_todos(self):
        with open(self.filename, 'w', encoding='utf-8') as f:
            json.dump(self.todos, f, ensure_ascii=False, indent=2)
    
    def add_task(self, title, description=""):
        task = {
            "id": len(self.todos) + 1,
            "title": title,
            "description": description,
            "completed": False,
            "created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        self.todos.append(task)
        self._save_todos()
        return task["id"]
    
    def complete_task(self, task_id):
        for task in self.todos:
            if task["id"] == task_id:
                task["completed"] = True
                self._save_todos()
                return True
        return False

# 実装前アプリの使用例
if __name__ == "__main__":
    app = TodoApp()
    task_id = app.add_task("レポート作成", "期末レポートを仕上げる")
    app.complete_task(task_id)
    print("タスク一覧:", app.todos)
行番号 詳細説明
1行目 jsonやos、datetimeをインポート
2行目 TodoAppクラスを定義し、既存のタスクを読み込み
3行目 _load_todosメソッドでJSONファイルからタスクを読み込み
4行目 _save_todosメソッドでタスクをファイルに保存
5行目 add_taskで新しいタスクを追加
6行目 complete_taskでタスクを完了状態に変更
7行目 使用例としてタスクを追加しcomplete_taskで完了に設定
# 実装後コード
import json
import os
from datetime import datetime, timedelta

class TodoApp:
    def __init__(self, filename="todos.json"):
        self.filename = filename
        self.todos = self._load_todos()
    
    def _load_todos(self):
        if os.path.exists(self.filename):
            with open(self.filename, 'r', encoding='utf-8') as f:
                return json.load(f)
        return []
    
    def _save_todos(self):
        with open(self.filename, 'w', encoding='utf-8') as f:
            json.dump(self.todos, f, ensure_ascii=False, indent=2)
    
    def add_task(self, title, description=""):
        task = {
            "id": len(self.todos) + 1,
            "title": title,
            "description": description,
            "completed": False,
            "created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        self.todos.append(task)
        self._save_todos()
        return task["id"]
    
    def complete_task(self, task_id):
        for task in self.todos:
            if task["id"] == task_id:
                task["completed"] = True
                self._save_todos()
                return True
        return False
    
    # ここから新機能の追加
    def set_priority(self, task_id, priority):
        if priority not in ["high", "medium", "low"]:
            raise ValueError("優先度は'high', 'medium', 'low'のいずれかである必要があります")
        for task in self.todos:
            if task["id"] == task_id:
                task["priority"] = priority
                self._save_todos()
                return True
        return False

    def set_due_date(self, task_id, days_from_now):
        due_date = (datetime.now() + timedelta(days=days_from_now)).strftime("%Y-%m-%d")
        for task in self.todos:
            if task["id"] == task_id:
                task["due_date"] = due_date
                self._save_todos()
                return True
        return False
    
    def get_tasks_by_priority(self, priority):
        return [task for task in self.todos if task.get("priority") == priority]
    
    def get_overdue_tasks(self):
        today = datetime.now().strftime("%Y-%m-%d")
        return [
            task for task in self.todos
            if "due_date" in task and task["due_date"] < today and not task["completed"]
        ]

# 実装後アプリの使用例
if __name__ == "__main__":
    app = TodoApp()
    task_id = app.add_task("レポート作成", "期末レポートを仕上げる")
    app.set_priority(task_id, "high")
    app.set_due_date(task_id, 7)

    task_id2 = app.add_task("買い物", "牛乳と卵を買う")
    app.set_priority(task_id2, "medium")
    app.set_due_date(task_id2, 1)

    high_priority_tasks = app.get_tasks_by_priority("high")
    print("高優先度タスク:", json.dumps(high_priority_tasks, indent=2, ensure_ascii=False))
行番号 詳細説明
1行目 jsonやos、datetime、timedeltaをインポート
2行目 従来のTodoAppクラスを定義し既存の機能を維持
3行目 新機能としてset_priorityで優先度を設定
4行目 set_due_dateで期限日を指定
5行目 get_tasks_by_priorityで優先度別のタスク取得
6行目 get_overdue_tasksで期限切れタスクを取得
7行目 使用例として2つのタスクに優先度と期限日を設定後、結果を表示

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する