【プログラミング】最短で「本格自作」へ!初心者向けプログラム開発ガイド

勉強
この記事でわかる事

初心者でも作れる本格的プログラムの作り方をご紹介しています。

みなさんこんにちは、syuyaです。

この記事では、初心者でも作れる本格的なプログラムをご紹介しています。

プログラミングを学び始めたとき、多くの人が最初につまずくのは「何を作ればいいのか分からない」という点です。

文法や構文を覚えても、実際に動くプログラムを作れなければ面白さは実感しにくいもの。

そこで本記事では、初心者でも確実に完成させられ、しかも“本格的に使える”プログラムを題材に、作り方の流れや考え方を丁寧に解説します。

最初の一歩で「動くものを作れた」という成功体験を得られれば、プログラミングは一気に楽しくなります。

あなたの最初の作品づくりを、ここから始めてみましょう。


関連記事


■ 最初に作るのに最適な「本格的プログラム」

プログラミングを学び始めると、まずは「Hello World」や簡単な計算プログラム、じゃんけんゲームなどから作り始めることが多いです。

これらはプログラミングの基本を学ぶうえで非常に重要ですが、ある程度文法を理解した後は、より実用的で複数の機能を持つプログラムに挑戦することで、学習の質が大きく変わります。

本格的なプログラムを作るといっても、最初から大規模なWebサービスやスマートフォンアプリを完成させる必要はありません。

重要なのは複数の処理を組み合わせ、データを扱い、ユーザーの操作に応じて動作するプログラムを自分の手で完成させることです。

そこでここでは初心者でも挑戦しやすく、なおかつ実際のソフトウェア開発につながる考え方を学べるプログラムを紹介します。

タスク管理アプリ、Webスクレイピング、自動レポート生成、APIを使ったチャットボット、高度なミニゲームなど、ジャンルの異なるプログラムを通して、プログラミングで「実際に何かを作る」ための具体的な流れを見ていきましょう。

① タスク管理アプリ(CLI版)

最初に作る本格的なプログラムとしておすすめなのが、コマンドライン上で動作するタスク管理アプリです。

タスクの追加・一覧表示・完了・削除など、実際のアプリケーションに必要な基本機能を自分で実装できます。

データの保存や読み込みも行うため、単純な練習問題よりも一歩進んだ、実用的なプログラム作りを体験できます。

小規模なのに本格的で、ポートフォリオにもできます。

作る流れ

「タスク管理アプリ(CLI版)」を作る流れは単にコードを書く手順ではなく、実際のソフトウェア開発と同じ思考プロセスを体験するための工程です。

最初に「何ができるアプリなのか」を言語化し、次に機能を分解し、最後にそれらをコードとして組み上げていきます。

この順序を踏むことで、行き当たりばったりの実装ではなく、設計に基づいたプログラミングが身につきます。

小規模ながら、仕様策定・データ設計・処理の分離といった本格的な開発の基礎を学べるのが、このアプリの大きな価値です。

1. 仕様を決める

最初に行うのは、「このプログラムで何を実現したいのか」を明確にすることです。

ここを曖昧にしたまま書き始めると、機能が増えすぎたり、構造が破綻したりしやすくなります。

小規模なCLIアプリであっても仕様を文章として整理することが、実務的な開発では非常に重要です。

今回のタスク管理アプリでは、「日常的に使える最低限の機能」に絞ります。

具体的には、タスクを登録し、現在の状態を確認し、不要になったタスクを整理できることを目的とします。

GUIやネットワーク機能は持たせず、コマンドライン上で完結する設計にすることで、処理の流れやデータの扱いに集中できます。

この段階では、どう実装するかは考えません

「利用者は何ができるのか」「どのような操作が想定されるのか」を中心に整理することで、後続の設計と実装がスムーズになります。

今回のプログラムの仕様
  • タスクを追加
  • 一覧表示
  • 完了フラグを付ける
  • 削除
  • データはJSONで保存
2.プログラム構成

仕様が決まったら、次に「プログラム全体をどのような部品で構成するか」を考えます。

これは、いきなりコードを書く前に行う設計作業にあたります。

規模が小さいCLIアプリであっても、ファイル構成や役割を整理しておくことで、可読性と保守性が大きく向上します。

今回のタスク管理アプリでは、構造をできるだけシンプルに保ちます。

処理の中心となる実行ファイルと、データを保存するファイルを分けるだけでも、「処理」と「データ」の責務を分離できます。

この考え方は、後にWebアプリや大規模システムを作る際にもそのまま通用します。

まずは、アプリケーション本体を担うファイルと、タスク情報を永続化するファイルを用意します。

どのファイルが何を担当するのかを意識して構成を決めておくことで、機能追加や修正を行う際にも迷いにくくなります。

今回のプログラムの構成
task_manager/
  ├── main.py
  └── tasks.json
3. 実際のサンプルコード(Python)

ここではこれまでに決めてきた仕様とプログラム構成をもとに、実際に動作するタスク管理アプリの完成形を示します。

このプログラムでは、タスクの追加や一覧表示、完了・削除といった基本機能を実装し、データをJSONファイルに保存することで、アプリを終了しても情報を保持できるようにしています。

コードを実際に動かしながら、各関数がどのように連携しているのかを確認してみましょう。

import json
import os

FILE = "tasks.json"

# データ読み込み
def load_tasks():
    if not os.path.exists(FILE):
        return []
    with open(FILE, "r", encoding="utf-8") as f:
        return json.load(f)

# データ保存
def save_tasks(tasks):
    with open(FILE, "w", encoding="utf-8") as f:
        json.dump(tasks, f, ensure_ascii=False, indent=2)

def add_task(title):
    tasks = load_tasks()
    tasks.append({"title": title, "done": False})
    save_tasks(tasks)
    print("タスクを追加しました。")

def list_tasks():
    tasks = load_tasks()
    for i, t in enumerate(tasks):
        status = "✔" if t["done"] else "✘"
        print(f"{i}: [{status}] {t['title']}")

def complete_task(index):
    tasks = load_tasks()
    tasks[index]["done"] = True
    save_tasks(tasks)
    print("完了にしました。")

def delete_task(index):
    tasks = load_tasks()
    tasks.pop(index)
    save_tasks(tasks)
    print("削除しました。")

def main():
    while True:
        print("\n=== タスク管理 ===")
        print("1. 一覧表示")
        print("2. 追加")
        print("3. 完了にする")
        print("4. 削除")
        print("5. 終了")

        choice = input("> ")

        if choice == "1":
            list_tasks()
        elif choice == "2":
            title = input("タイトル: ")
            add_task(title)
        elif choice == "3":
            index = int(input("番号: "))
            complete_task(index)
        elif choice == "4":
            index = int(input("番号: "))
            delete_task(index)
        else:
            break

if __name__ == "__main__":
    main()

このコードは学習用の簡易サンプルでありながら、実務でも通用する考え方を多く含んでいます。

特徴的なのは、「データの読み書きを関数として分離している点」「1つの処理に1つの役割を持たせている点」「ユーザー入力を起点に処理が分岐する構造になっている点」です。

これらは、小規模なCLIアプリであっても非常に重要な設計思想です。

このプログラムでは、「タスクの追加」「一覧表示」「完了状態の更新」「削除」「データの永続化(JSONファイル)」といった、現実的なアプリケーションに必要な要素を一通り実装しています。

単に「動くコード」ではなく、「あとから読んでも理解しやすく、拡張しやすいコード」を意識した構成になっています。

また、main() 関数を入口にすることで、プログラム全体の流れが一目で分かるようになっている点も重要です。

これは、後にファイル分割やクラス設計を行う際の土台になります。

このサンプルコードをそのまま写すだけで終わらせず、

  • 処理の流れを追う
  • 各関数の役割を言葉で説明してみる
  • 自分なりに機能を1つ追加してみる

といった使い方をすることで、「プログラムを読む力」と「設計する感覚」の両方を養うことができます。

ここからが、本当の意味での「プログラミングのスタート」です。

② Webスクレイピング + 自動レポート生成プログラム

Webスクレイピングとは、Webサイト上に公開されている情報をプログラムで取得し、必要な形に加工する技術です。

そこに「自動レポート生成」を組み合わせることで、

  • 情報収集
  • データ抽出
  • 整形・分析
  • 出力(文章・表・ファイル)

という、実務で使われる処理の流れを一通り経験できるプログラムになります。

単に画面に表示して終わりではなく、「取得した情報を、人が読めるレポートとしてまとめる」という点が、本格的である理由です。

なぜ「最初に作る本格プログラム」として優秀なのか

このプログラムでは、以下の要素を自然に扱うことになります。

  • 外部データ(Web)とのやり取り
  • HTTP通信
  • HTML構造の理解
  • 例外処理(通信失敗・構造変更)
  • データの整形
  • ファイル出力

これは、業務ツール・自動化スクリプト・データ分析の基礎そのものです。

じゃんけんや数当てゲームでは絶対に触れない領域であり、「プログラミングで現実の問題を解決している感覚」を初めて得やすい題材です。

まず決めるべき仕様(ここが重要)

いきなりコードを書く前に、次のような仕様を決めます。

この段階で作る機能や取得する情報、最終的な出力形式をあらかじめ決めておくことで、目的の明確なプログラムを設計できます。

Webスクレイピングでは、最初に仕様を整理しておくことが効率的な開発につながります。

例:ニュース自動レポートの場合
  • どのサイトから取得するか
  • 何の情報を抜き出すか
  • 何件取得するか
  • どんな形式で出力するか

この「仕様決め」が、プログラムを本格的にする最大のポイントです。

プログラム全体の流れ(設計)

処理の流れは、ほぼ次の5段階に分かれます。

  1. Webページを取得する
  2. HTMLを解析する
  3. 必要な情報だけを抽出する
  4. データを整形する
  5. レポートとして出力する

この流れを意識して作ることで、コードが破綻しにくくなります。

使用ライブラリ(外部ライブラリ)

このプログラムでは、Pythonの標準ライブラリだけでは不足する機能を補うために、外部ライブラリを利用します。

そのため、実際にコードを書く前に、必要なライブラリをインストールする作業が必要になります。

以下のコマンドは、そのための準備作業を行うものです。

pip install requests beautifulsoup4

このコマンドは、Pythonのパッケージ管理ツールである pip を使って、『requests』 と 『beautifulsoup4』 の2つのライブラリを同時にインストールします。

requests はWebページを取得するためのライブラリで、URLを指定するだけでHTTP通信を行い、Web上の情報をプログラムから扱えるようにします。

beautifulsoup4 はHTMLを解析するためのライブラリで、取得したWebページの構造を読み取り、必要な要素だけを抽出する役割を担います。

このコマンドを一度実行すれば、以降はどのプログラムからでもこれらのライブラリを利用できます。

実務でも同様に、「環境構築 → ライブラリ導入 → 実装」という流れで開発が進むため、
この工程自体が本格的なプログラミング体験の一部となります。

作る流れ

Webスクレイピングと自動レポート生成のプログラムは、いきなりコードを書き始めるのではなく、「どの情報を取得し、どのように加工し、最終的に何を出力するのか」を順番に設計していきます。

Webページの取得からHTMLの解析、必要な情報の抽出、レポートの生成までを段階的に分けることで、複雑に見える処理も一つずつ理解しながら実装できます。

1.Webページ取得

この工程では、インターネット上のWebページをプログラムから取得する処理を行います。

人間がブラウザでページを開くのと同じことを、コードで自動的に行うイメージです。

Webスクレイピングにおいて最も基本であり、外部世界とプログラムをつなぐ重要なステップです。

使用するのは、先ほど紹介した『requests』 ライブラリです。

これにより、複雑な設定を意識することなく、シンプルな記述でHTTP通信を行えます。

import requests

url = "https://news.yahoo.co.jp/"
response = requests.get(url)
html = response.text

まず import requests によって、Web通信機能をプログラム内で使えるようにします。

次に url 変数に、取得したいWebページのURLを文字列として指定します。

requests.get(url) は、そのURLに対してHTTPのGETリクエストを送信します。これは「このページの内容をください」という要求をサーバーに送る処理です。

その結果として返ってきたレスポンスが、response 変数に格納されます。

response.text には、取得したWebページのHTML内容が文字列として入っています。

この時点では、まだ人間がブラウザで見る前の生のHTMLデータであり、次の工程である「HTML解析」の入力データになります。

この段階で重要なのは、

  • Webページ取得は必ず成功するとは限らない
  • ネットワークやサーバーに依存している

という点です。

そのため実務では、通信エラーやステータスコードの確認を行うことも多く、後のステップで例外処理を追加していく余地があります。

この「Webページ取得」が正しく行えて初めて、スクレイピングやレポート生成といった後続の処理が意味を持つようになります。

2.HTML解析

この工程では取得したWebページのHTMLを解析し、構造として扱える状態に変換します。

Webページは一見すると文章の集合に見えますが、実際にはタグによって構造化されたデータです。

HTML解析とは、この構造をプログラムから理解し、操作できるようにする作業を指します。

Webスクレイピングでは、「ページを取得する」だけでは不十分です。必要な情報を正確に取り出すためには、HTMLを構造として捉える視点が欠かせません。

使用するのは、先ほどインストールした BeautifulSoup ライブラリです。これを使うことで、HTMLをツリー構造として扱えるようになります。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

まず from bs4 import BeautifulSoup によって、HTML解析用のクラスを読み込みます。

次に BeautifulSoup(html, "html.parser") を使って、先ほど取得した html を解析します。

ここで指定している "html.parser" は、「この文字列はHTMLとして解析してください」という指定です。

Pythonに標準で含まれている解析エンジンを使うため、追加設定は不要です。

この処理によって生成される soup は単なる文字列ではなく、HTMLの構造を保持したオブジェクトになります。

以降は、この soup を使って、「特定のタグを探す」「条件に合う要素だけを取得する」「入れ子構造を辿る」といった操作が可能になります。

重要なのは、この時点では「何を取り出すか」はまだ決めていないという点です。

HTML解析の役割は、情報を取り出しやすい形に変換することであり、実際のデータ抽出は次の工程で行います。

また、WebページのHTML構造は「サイトごとに異なる」「デザイン変更で変わる」という特徴があります。

そのため、HTML解析では「見た目」ではなくタグ構造を確認しながら処理を書く意識が非常に重要になります。

この「HTML解析」が正しく行われていることで、次の工程である「情報抽出」を、安定して実装できるようになります。

3.情報抽出

この工程では、HTML解析によって構造化されたデータの中から、必要な情報だけを取り出します。

Webスクレイピングにおいて、最も「判断力」が求められる工程です。

HTML解析によって soup オブジェクトが生成された時点では、ページ全体の情報がそのまま含まれています。

情報抽出では、その中から「どの要素が目的の情報なのか」「どの情報は不要なのか」を明確に区別し、必要なものだけを選び出します。

使用するのは、BeautifulSoup が提供する 検索機能です。

代表的なのが、CSSセレクタを使った要素取得です。

titles = soup.select("a")[:10]

news_list = []
for t in titles:
    text = t.get_text(strip=True)
    if text:
        news_list.append(text)

まず soup.select("a") によって、HTML内のすべての <a> タグ(リンク要素)を取得しています。

この時点では、ニュース見出し以外のリンクも多数含まれています。

[:10] は、取得した要素のうち先頭10件だけを対象にする指定です。これは、「取得件数を制限する」という実務でもよく行われる処理です。

次に for 文で各要素を一つずつ処理します。

get_text(strip=True) は、タグの中身のテキストだけを取り出し、前後の不要な空白を除去するメソッドです。

if text: で空文字を除外しているのは、見出しとして意味のあるデータだけを残すためです。

この工程で重要なのは、「正確さ」と「柔軟さ」のバランスです。

厳密すぎると、サイト構造変更で壊れやすくなり、雑すぎると不要な情報が混ざってしまいます。

そのため情報抽出は「一度作って終わり」ではなく、実際の取得結果を見ながら調整する工程でもあります。

この段階で、「Webページから意味のあるデータを取り出せた」という実感を得られるようになります。

4.レポート生成

この工程では、抽出した情報を、人が読める形にまとめて出力します。

ここで初めて、プログラムの成果物が明確な形になります。

Webスクレイピングの目的は、情報を集めること自体ではなく、活用できる形に変換することです。

レポート生成は、その最終段階にあたります。

今回は、もっともシンプルで汎用性の高いテキストファイル(.txt)として出力します。

with open("report.txt", "w", encoding="utf-8") as f:
    f.write("■ 本日のニュースレポート\n\n")
    for i, title in enumerate(news_list, 1):
        f.write(f"{i}. {title}\n")

まず open() を使って、report.txt というファイルを「書き込みモード」で開きます。
encoding="utf-8" を指定することで、日本語の文字化けを防ぎます。

その際にwith 構文を使うことで、処理終了時に自動でファイルが閉じられるため、安全性が高くなります。

最初にレポートのタイトルを書き込み、その後 for 文でニュース見出しを1件ずつ書き出します。

またenumerate(news_list, 1) を使うことで、番号付きの一覧形式にしています。

これは、人間が読みやすいレポートを意識した設計です。

この工程で意識すべきポイントは、「プログラム目線」ではなく「利用者目線」です。

  • 見出しは分かりやすいか
  • 並び順は自然か
  • 形式は再利用しやすいか

こうした視点を持つことで、単なるスクリプトから「実用ツール」へと格上げされます。

この「レポート生成」があることでWebスクレイピングは

自動取得 → 自動整理 → 自動成果物作成

という、本格的な処理フローを完成させることができます。

5.実際のサンプルコード(Python)
import requests
from bs4 import BeautifulSoup
from datetime import datetime

# 取得するWebページ
URL = "https://news.yahoo.co.jp/"

# Webページを取得する関数
def fetch_page(url):
    response = requests.get(url, timeout=10)
    response.raise_for_status()
    return response.text


# HTMLを解析してニュースを抽出する関数
def extract_news(html):
    soup = BeautifulSoup(html, "html.parser")

    news_list = []

    for link in soup.select("a"):
        title = link.get_text(strip=True)
        url = link.get("href")

        if title and url:
            news_list.append({
                "title": title,
                "url": url
            })

    return news_list[:10]


# レポートを生成する関数
def create_report(news_list):
    today = datetime.now().strftime("%Y年%m月%d日")

    with open("report.txt", "w", encoding="utf-8") as f:
        f.write("■ ニュース自動レポート\n")
        f.write(f"取得日:{today}\n\n")

        for i, news in enumerate(news_list, 1):
            f.write(f"{i}. {news['title']}\n")
            f.write(f"URL:{news['url']}\n\n")


# メイン処理
def main():
    try:
        print("Webページを取得しています...")

        html = fetch_page(URL)

        print("情報を抽出しています...")

        news_list = extract_news(html)

        print("レポートを作成しています...")

        create_report(news_list)

        print("レポートの作成が完了しました。")

    except requests.RequestException as e:
        print("Webページの取得に失敗しました。")
        print(f"エラー内容:{e}")


if __name__ == "__main__":
    main()

このプログラムは充分に本格的なプログラムであると言えます。

このプログラムを作成している時点ですでに、「外部環境に依存する」「データ構造を扱う」「失敗する可能性を考慮する」「再利用可能な処理を書く」という、実務そのものの思考をしています。

規模は小さくても、考えていることは業務用ツールと同じです。

ここからの発展

このプログラムは、簡単に次の段階へ進化できます。

  • 定期実行(cron / タスクスケジューラ)
  • CSV・Excel出力
  • グラフ生成
  • メール自動送信
  • 株価・為替・天気への応用
  • API取得への移行

つまり、「学習用プログラム」から「実用ツール」へ自然に成長するのです。

このレベルのプログラムを自力で理解・改造できるなら、もう「じゃんけんしか作れない初心者」ではありません。

このプログラムを作れる時点で、「処理の流れを設計できる」「外部データを扱える」「成果物を残せる」といったプログラミングの技術を習得している事になります。

これは、確実に次の段階に進める状態です。

③ API を使ったチャットボット

この項目では、外部APIと連携するチャットボットプログラムを扱います。

これは、これまでのCLIツールやスクレイピングより一段階レベルが上がった、「現代的で本格的なプログラム」です。

APIを使うということは、自分のプログラム単体では完結せず、外部サービスと通信しながら動作するということを意味します。

これは、Webサービス、スマホアプリ、業務システムなど、ほぼすべての実用ソフトウェアに共通する考え方です。

チャットボットとは何か

チャットボットとは、ユーザーからの入力を受け取り、それに応じた返答を返すプログラムです。

単純なオウム返しから、「辞書データベースを使った応答」「ルールベースの会話」「AI API を使った自然な対話」まで、幅広い実装が可能です。

最初に作る本格的なプログラムとしては、「APIを呼び出して返ってきた結果を、そのまま利用者に返す」という形が非常に分かりやすく、学習効果も高くなります。

なぜ API チャットボットが本格的なのか

このプログラムでは、次のような要素を自然に扱うことになります。

  • HTTP通信
  • APIキーの管理
  • JSON形式のデータ処理
  • 外部サービスへの依存
  • エラーや制限を考慮した設計

これは、実務で「サービスを作る側」になるための必須スキルです。

単なるローカルプログラムと違い、「通信が失敗する可能性がある」「相手側の仕様に従う必要がある」という前提でコードを書く必要があります。

この点が、APIを使ったプログラムを一気に“本格的”にしています。

プログラム全体の流れ(設計)

APIチャットボットは、基本的に次の流れで動作します。

  1. ユーザーから入力を受け取る
  2. 入力内容をAPIに送信する
  3. APIから返ってきたデータを解析する
  4. 返答として整形し、表示する

この流れは、Webアプリやスマホアプリの内部処理とほぼ同じです。

使用する主な技術要素

このチャットボットでは、ユーザーの入力を外部APIへ送信し、その結果を受け取って表示するという一連の流れを実装します。

そのため、プログラムの基礎だけでなく、実際のWebサービス開発でも使われる技術を自然に学ぶことができます。

主に、次のような技術要素が登場します。

HTTP通信(requests ライブラリ)

外部APIと通信するために、requests ライブラリを使用します。

APIへデータを送信し、その結果を受け取ることで、自分のプログラムと外部サービスを連携させることができます。

JSONデータの送受信

APIとの通信では、多くの場合 JSON 形式でデータをやり取りします。

ユーザーが入力したメッセージをJSON形式で送信し、返ってきた回答もJSONとして受け取り、必要な情報だけを取り出して利用します。

ユーザー入力(input)

チャットボットでは、input() を使ってユーザーからメッセージを受け取ります。

入力された内容はAPIへ送信され、チャットボットが返答を生成するための元データになります。

関数による処理の分離

APIへの通信処理やチャットボット全体の処理を関数ごとに分けることで、コードが読みやすくなり、機能の追加や修正もしやすくなります。

小規模なプログラムでも、役割ごとに処理を分離することは重要な設計手法です。

ループ処理(while)

while 文を使用することで、ユーザーが終了を指示するまで会話を繰り返します。

これにより、一度で終了するプログラムではなく、実際のチャットアプリのように継続して対話できる仕組みを実現します。

APIレスポンスの解析

APIから返ってきたデータを解析し、チャットボットの回答部分だけを取り出します。

取得したデータを適切に処理して必要な情報だけを利用する技術は、APIを扱うあらゆるプログラムで重要になります。

ここまで来ると、「ただのプログラミング練習」ではなく、「サービスの最小実装」になります。

作る流れ

APIを使ったチャットボットは、ユーザーからの入力を受け取り、その内容を外部APIへ送信し、返ってきた結果を画面に表示するという流れで動作します。

各処理を段階ごとに分けて実装していくことで、APIとの通信の仕組みやデータの受け渡しを理解しながら、本格的なチャットボットを完成させることができます。

1. 仕様を決める

まず、どのようなチャットボットを作るのかを決めます。

例えば、

  • ユーザーが質問を入力できる
  • APIに質問を送信する
  • APIから返ってきた回答を表示する
  • exit と入力すると終了する
  • 会話履歴を保持する

といった機能をあらかじめ整理します。

APIを使うプログラムでは、どのようなデータを送信し、どのようなデータを受け取るのかを明確にしておくことが重要です。

2. 使用するAPIと環境を準備する

次に利用するAPIを決め、必要なライブラリをインストールします。

例えば、PythonでHTTP通信を行う場合は、以下のようなライブラリを使用できます。

pip install requests

また、APIによっては専用のSDK(開発用ライブラリ)を使用する場合もあります。

この段階では、「APIの利用登録」「APIキーの取得」「必要なライブラリのインストール」「APIの仕様確認」などを行います。

3. APIキーを安全に設定する

次に、APIキーを安全に設定します。

APIを利用する際には、本人確認や利用量の管理のために「APIキー」を使用することがあります。

ただし、APIキーをプログラムに直接書き込むのは危険です。

API_KEY = "ここにAPIキーを書く"

このような書き方をすると、ソースコードを公開した際にAPIキーまで流出する可能性があります。

そのため、実際の開発では環境変数などを利用して管理します。

import os

API_KEY = os.getenv("API_KEY")

これは、APIを使ったプログラムを作るうえで非常に重要なセキュリティ対策です。

4. ユーザーの入力を受け取る

次に、ユーザーが入力したメッセージを受け取る処理を作ります。

入力されたメッセージは変数に格納され、APIへ送信するデータとして利用されます。

この入力が、チャットボットの返答を生成する起点となります。

user_input = input("あなた: ")

これにより、ユーザーが入力した文章をプログラム内で利用できるようになります。

チャットボットでは、この入力がAPIへ送信するデータの元になります。

5. APIにデータを送信する

次に、ユーザーの入力をAPIが指定する形式に変換して送信します。

例えば、簡単なAPIであれば次のような形式になります。

payload = {
    "message": user_input
}

その後、requests.post() などを使ってAPIにデータを送信します。

response = requests.post(
    API_URL,
    json=payload,
    headers=headers
)

ここでは、「送信先のURL」「送信するデータ」「APIキーなどの認証情報」を指定しています。

この部分が、自分のプログラムと外部サービスを接続する重要な処理です。

6. APIから返ってきたデータを解析する

APIから返ってくるデータは、JSON形式であることが多いです。

data = response.json()

例えば、APIが次のようなデータを返したとします。

{
    "reply": "こんにちは!"
}

この場合、次のように回答部分だけを取り出せます。

reply = data["reply"]

そして、

print("Bot:", reply)

とすることで、チャットボットの回答として画面に表示できます。

7. 会話を繰り返す

最後に、ユーザーが終了するまで入力とAPI通信を繰り返します。

while True:
    user_input = input("あなた: ")

    if user_input == "exit":
        break

    reply = send_message(user_input)

    print("Bot:", reply)

このように while 文を使うことで、1回の処理で終了せず、何度も会話を続けられるようになります。

8. エラー処理を追加する

APIを使うプログラムでは、通信に失敗する可能性があります。

例えば、「インターネットに接続できない」「APIキーが間違っている」「APIの利用上限に達した」「APIサーバーに障害が発生している」といったケースです。

そのため、実用的なプログラムではエラー処理も追加します。

try:
    response = requests.post(
        API_URL,
        json=payload,
        headers=headers,
        timeout=10
    )

    response.raise_for_status()

except requests.RequestException:
    print("APIとの通信に失敗しました。")

このようにしておけば、通信に失敗してもプログラムが突然終了するのを防げます。

全体の流れ

APIを使ったチャットボットの開発手順をまとめると、次のようになります。

① 仕様を決める
② APIと開発環境を準備する
③ APIキーを安全に設定する
④ ユーザーの入力を受け取る
⑤ APIにデータを送信する
⑥ 返ってきたデータを解析する
⑦ 回答を画面に表示する
⑧ エラー処理や会話履歴を追加する

この流れを理解すると、APIを使ったチャットボットだけでなく、天気情報アプリ、翻訳ツール、株価情報ツール、SNS連携アプリなど、さまざまなAPI連携プログラムを作れるようになります。

実際のサンプルコード(シンプルなAPIチャットボット)

以下は、APIを使う構造を理解するための、非常に簡略化した例です。

import requests

API_URL = "https://example.com/api/chat"

def send_message(message):
    payload = {"message": message}
    response = requests.post(API_URL, json=payload)
    data = response.json()
    return data["reply"]

def chatbot():
    print("チャットボットを開始します(終了は exit)")
    while True:
        user_input = input("あなた: ")
        if user_input == "exit":
            break
        reply = send_message(user_input)
        print("Bot:", reply)

chatbot()

このコードでは、「ユーザー入力をAPIに送信」「APIの返答(JSON)を解析」「返答部分だけを取り出して表示」という、API連携プログラムの基本形を体験できます。

発展するとどうなるか

このチャットボットは、以下のように発展させられます。

  • 実在するAI APIへの接続
  • 会話履歴の保存
  • 感情分析
  • Web版チャットUI
  • Discord / LINE Bot への応用

つまり、小さく作って、大きく育てられるプログラムです。

④ ミニゲーム「数当てゲーム(高度版)」

この項目では、一見すると単純に見える「数当てゲーム」を、本格的なプログラムとして再設計することを扱います。

いわゆる「じゃんけん」や「数を当てるだけ」の例題とは異なり、設計・状態管理・ロジック分離を意識した、実務的なミニゲームを目指します。

ミニゲームは「簡単な題材」だからこそプログラミングの本質である「ルールをコードで正確に表現する力」が如実に表れます。

数当てゲームとは何か(再定義)

数当てゲームとは、プログラムが用意した答えを、ユーザーが試行錯誤しながら当てるゲームです。

初歩的な例では、「ランダムな数字を生成」「入力と比較」「当たったら終了」で終わります。

しかし「高度版」では、ここに以下の要素を追加します。

  • 試行回数の管理
  • 難易度設定
  • 入力値のバリデーション
  • ヒントロジック
  • ゲーム状態の明確な分離

これにより、「動くおもちゃ」から「設計されたプログラム」へ進化します。

なぜ「高度版」が本格的なのか

このゲームでは、次のような要素を自然に扱います。

  • 乱数生成
  • 条件分岐の設計
  • 状態(ゲーム進行)の管理
  • 例外的入力への対応
  • ループ制御

これらはすべて、業務アプリケーションやサービス開発の基礎でもあります。

特に重要なのは、「ゲームが今どの状態にあるのか」をプログラムが正しく把握しているかという点です。

これは、ログイン状態、処理フェーズ、ワークフロー管理といった実務の考え方と直結しています。

プログラム全体の流れ(設計)

高度版・数当てゲームは、次の流れで構成されます。

  1. ゲーム設定を決定する
  2. 正解となる数値を生成する
  3. ユーザー入力を受け取る
  4. 入力値を検証する
  5. 正解かどうか判定する
  6. ヒントや結果を表示する
  7. ゲーム終了条件を判定する

この流れを意識することで、処理の順序が明確になり、コードが破綻しにくくなります。

使用する主な技術要素

この数当てゲーム(高度版)では、シンプルなゲームでありながら、プログラミングの基礎から一段踏み込んだ要素を自然に扱います。

主に、次のような技術要素が登場します。

乱数生成(random モジュール)

正解となる数値を毎回ランダムに生成することで、ゲーム性と再挑戦性を生み出します。

これにより、「プログラムが毎回同じ結果を返すものではない」という重要な考え方を学べます。

条件分岐(if / elif / else)

入力された数が、「正解か」「大きいか」「小さいか」を判定し、適切なヒントを返します。

条件分岐は、ゲームロジックそのものを形作る中核要素です。

ループ処理(while)

プレイヤーが正解するまでゲームを継続させるために、ループ処理を使用します。

これにより、「何度も入力を受け付ける」「途中で終了する」といった、対話型プログラムの基本構造を理解できます。

状態管理(試行回数・制限回数)

高度版では、試行回数のカウント、制限回数の設定、スコアや評価の表示などを扱います。

これは、プログラムが内部で状態を持ち、それを更新し続けるという実用的な考え方を学ぶための重要な要素です。

入力チェックとエラー対策

数値以外が入力された場合の対処など現実的なユーザー入力への対応も行います。

この段階で「理想的な入力だけが来るとは限らない」という、実務に直結する視点が身につきます。

関数による処理の整理

「ゲーム開始処理」「入力受付」「判定ロジック」「結果表示」

といった処理を関数に分けることでコードの可読性と再利用性を高めます。

これは、小さなプログラムでも設計を意識するという訓練になります。

このように、数当てゲーム(高度版)は一見シンプル、しかし中身は非常に学習密度が高いプログラムです。

ここまで理解して作れるようになれば「文法を覚えている段階」を超え、考えて組み立てるプログラミングに確実に入っています。

作る流れ

数当てゲーム(高度版)は、いきなりコードを書き始めるのではなく、まずゲームのルールや難易度、プレイヤーの入力に対する処理を決めていきます。

その後、乱数による答えの生成、入力処理、正誤判定、試行回数の管理などを順番に実装することで、シンプルなゲームを本格的なプログラムへと発展させていきます。

1. ゲームの仕様を決める

まず、どのような数当てゲームにするのかを決めます。

例えば、

  • 1〜100の数字から正解を決める
  • プレイヤーが数字を入力する
  • 正解より大きいか小さいかを表示する
  • 7回まで挑戦できる
  • 正解すればゲームクリア
  • 回数制限を超えたらゲームオーバー

といったルールを設定します。

最初に仕様を決めておくことで、必要な処理が明確になります。

2. 正解となる数値をランダムに生成する

次に、ゲーム開始時に正解となる数字をランダムに決定します。

import random

answer = random.randint(1, 100)

random.randint(1, 100) は、1〜100の中からランダムに整数を1つ選びます。

これにより、ゲームを開始するたびに正解が変わるため、毎回異なるゲーム展開になります。

3. 試行回数を管理する

次に、プレイヤーが何回挑戦したのかを管理します。

tries = 0
max_try = 7

tries は現在の挑戦回数、max_try は最大挑戦回数を表します。

数字を入力するたびに、

tries += 1

として試行回数を1増やします。

このように、プログラムの中で変化する情報を状態として管理します。

4. ユーザーから数字を入力してもらう

次に、プレイヤーから予想した数字を受け取ります。

guess = int(input("数を入力: "))

input() で入力された値は文字列として扱われるため、int() を使って整数に変換します。

例えば、ユーザーが 50 と入力すると、

"50"

という文字列を、

50

という整数に変換します。

5. 入力エラーに対応する

ユーザーが数字ではなく文字を入力した場合、int() はエラーになります。

そこで、tryexcept を使ってエラーに対応します。

try:
    guess = int(input("数を入力: "))
except ValueError:
    print("数値を入力してください。")
    continue

これにより、数字以外が入力されてもプログラムが突然終了せず、もう一度入力を受け付けられます。

これは、実際のアプリケーションでも非常に重要な考え方です。

6. 正解と入力値を比較する

次に、入力された数字と正解を比較します。

if guess < answer:
    print("もっと大きいです。")
elif guess > answer:
    print("もっと小さいです。")
else:
    print("正解です!")

ここでは、ifelifelseを使って、「入力値が正解より小さい」「入力値が正解より大きい」「入力値と正解が一致する」という3つの状態を判定しています。

7. ゲームを繰り返す

プレイヤーが正解するまで何度も挑戦できるように、while文を使います。

while tries < max_try:

この条件が成立している間、ゲームを繰り返します。

正解した場合は、

return

を使って関数を終了します。

8. ゲームオーバーを処理する

最大挑戦回数までに正解できなかった場合は、ゲームオーバーにします。

print(f"残念。不正解です。答えは {answer} でした。")

このように、ループが終了した後にゲームオーバーの処理を行います。

全体の流れ

数当てゲーム(高度版)の作成手順をまとめると、次のようになります。

① ゲームの仕様を決める
        ↓
② 正解となる数値をランダムに生成する
        ↓
③ 試行回数を初期化する
        ↓
④ ユーザーから数字を入力してもらう
        ↓
⑤ 入力値をチェックする
        ↓
⑥ 正解と入力値を比較する
        ↓
⑦ ヒントを表示する
        ↓
⑧ 正解または回数制限でゲームを終了する

この流れを理解したうえでコードを書くことで、単にサンプルコードを写すのではなく、**「ゲームのルールをどのようにプログラムへ変換するのか」**を学ぶことができます。

実際のサンプルコード(高度版 数当てゲーム)

import random

def play_game(max_number, max_try):
    answer = random.randint(1, max_number)
    tries = 0

    print(f"1〜{max_number} の数を当ててください。")
    print(f"挑戦回数は {max_try} 回までです。")

    while tries < max_try:
        try:
            guess = int(input("数を入力: "))
        except ValueError:
            print("数値を入力してください。")
            continue

        tries += 1

        if guess < answer:
            print("もっと大きいです。")
        elif guess > answer:
            print("もっと小さいです。")
        else:
            print(f"正解です! {tries} 回で当たりました。")
            return

    print(f"残念。不正解です。答えは {answer} でした。")

play_game(100, 7)

このコードでは、

  • ゲームロジックを関数に分離
  • 入力エラーを例外処理で対応
  • 試行回数という「状態」を管理

といった、本格的な構造を取り入れています。

重要なのは、「ゲームとして面白いか」よりも「構造が整理されているか」です。

具体的には「1つの関数が1つの役割を持っているか」「状態が変数で明確に管理されているか」「条件分岐が読みやすいか」といった部分が、このコードの重要な個所となっています。

これらを意識することで、どんなジャンルのプログラムにも応用できる力が身につきます。

発展するとどうなるか

この数当てゲームは、以下のように発展させられます。

  • 難易度選択メニューの追加
  • スコア記録(ファイル保存)の追加
  • ランキング表示の追加
  • GUI化
  • Webゲーム化

つまり、最小構成から、完成度の高い作品へ育てられる題材です。

📖関連書籍

本格的なプログラミングを学べる書籍は数多く発売されています。

この項目では、そんな書籍の中からピックアップしてご紹介しています。

スッキリわかるPython入門 第2版

この書籍は、筆者がプログラミング学習の最初の方で使用していた書籍です。

プログラミングの学習を始めて、別の入門書で一度挫折しかけていたのですが、この本でようやく光が見えました。

ここが良かった:

一番助かったのは、やっぱり「登場人物の会話形式」で進むところです。

自分がコードを書いていて「え、これってどういうこと?」と疑問に思うタイミングで、ちょうどキャラクターが同じ質問をしてくれるので、置いてけぼり感がありませんでした。

特に、リストとか辞書とかのデータ構造が苦手だったんですが、イラストや図解が豊富で、頭の中のイメージとコードが一致した感覚があります。

後半のオブジェクト指向のあたりは、さすがに一度読んだだけでは難しかったですが、何度も読み返して手を動かしているうちに「あ、こういうことか!」と繋がる瞬間があって、すごく嬉しかったです。

以前はコードを見ても「呪文」にしか見えませんでしたが、今はこの本を片手に、簡単なタスク管理ツールを自力で作れるまでになりました。

エラーが出ても、どこを見ればいいかのアタリをつけられるようになったのが、自分の中では大きな進歩です。

感想まとめ:

分厚い本なので最初は圧倒されますが、全部を一気に覚えようとしなくていいんだと思います。

初心者の私でも快適に学習できた、素晴らしい書籍だと思います。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

一方、こちたの書籍は筆者が一番最初に使用したプログラミングの参考書籍となっています。

プログラミングって、黒い画面に難しい英語を打ち込むイメージがあってずっと避けていたんですが、この本のおかげでなんとか形になりました。

読んでみた率直な感想:

まず、中身がすごくカラフルで、ヤギ博士とフクロウくんの会話で進んでいくのが自分には合っていました。

他の本だと1ページ目から文字がびっしりで閉じたくなってしまうんですけど、これは絵本を読んでいるみたいな感覚で、スイスイ読み進められました。

一番嬉しかったのは、AI(人工知能)の簡単なプログラムを実際に作れたことです。

「自分でもAIなんて作れるの?」と半信半疑でしたが、本の手順通りに進めるだけで、カメの絵を動かしたり、写真を見て何が写っているか判定したり…。

「プログラミングってこういう仕組みなんだ!」という感覚が、理屈じゃなくて体験として分かったのが大きかったです。

こんな人におすすめしたい:
  • プログラミングの「プ」の字も分からない人
  • 難しい理論よりも、まずは動くものを作ってみたい人
  • 分厚い参考書を買って三日坊主になったことがある人(私です笑)

1冊ですべて身につくHTML & CSSとWebデザイン入門講座

上にご紹介した二冊は今人気のプログラミング言語であるPythonの参考書でしたが、こちらはHTMLとCSSというプログラミング言語の参考書となっています。

HTMLとCSSは主にwebサイトの構造として使用される言語です。

筆者はHTMLとCSSを学ぶ際に何から手をつければいいか分からず、Amazonで評判の良かったこの本を手に取りました。

結果的に、一冊目でこれを選んで本当に正解だったと思います。

ここが特によかった:

学習前、筆者はHTMLとかCSSに対して「地味で難しそう」というイメージを持っていました。

しかし、この本はとにかく解説が丁寧で、ただ指示通りに進めていくだけで、みるみるうちに「いかにも今風」なおしゃれなカフェのサイトが出来上がっていきます。

ただ指示に従っているだけで、一つのWebページが出来上がっていくのを見て、感動したのを覚えています。

特に「レスポンシブデザイン(スマホ対応)」の仕組みが、あんなにシンプルに説明されているのは驚きでした。

自分の書いたコードをスマホで確認して、ちゃんと崩れずに表示されたときは、思わず「おぉ…!」と声が出てしまいました。

もちろん全部が簡単だったわけじゃなくて、Flexboxとかの配置の部分は少し混乱して、何度もページを戻りました。

しかし、図解がとても綺麗なので、文字を読むというより「図を見て構造を理解する」感じで進められたのが、視覚的に分かりやすくて助かりました。

読了後の感想:

「勉強した!」というよりは「作品を一つ作り上げた!」という達成感の方が強いです。

ただコードを書くだけじゃなく、フォントの選び方や余白の取り方といった「デザインの基本」も学べるので、これから自分のポートフォリオを作ってみたいという人には自信を持っておすすめできます。

📖その他のプログラミング関連書籍

数多くのプログラミング関連書籍が発売されています。

下記のボタンをタップすれば、Amazonでプログラミングの参考書籍を検索する事が出来ます。

是非、みなさんに合った参考書を探してみてください!

まとめ

いかがでしょうか。

この記事では、初心者が書ける簡単な本格的プログラミングコードをご紹介しました。

ここまでお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました