バイブコーディングでプログラミングのコードを書く感覚を鍛えよう

最初にバイブコーディングについて触れておきます。

バイブコーディング(Vibe Coding)とはプログラミングのアプローチの一種で、 生成AIを活用してコードを生成する手法を指します。


バイブコーディングの最大の利点は、ある程度のコードの書き方を学んだ初心者が、実際にアプリを開発してみようと思い立った時に最初の一歩目をどのようなコードにすれば良いかわからず詰んでしまう状況に対して、バイブコーディングをすることで、コードのお作法を学ぶ事ができるようになります。


バイブコーディングの細かい説明はせずに、バイブコーディングでゲームを作りながら、バイブコーディングについて体感していきましょう。


今回のコードはパイソン(Python)で書きますので、MicroでPythonのコードフォーマッターを使えるようにするでパイソンの開発環境を準備しておくと、コードの実行等が楽になります。




生成AIはGemini 2.5 Flash(以後、ジェミニと表記)を使います。

ジェミニを起動(もしくはジェミニのサイトにアクセス)し、ジェミニに「パイソンでゲームを作りたい」と相談します。

※相談する時の文章(今回であれば「パイソンでゲームを作りたい」)の事をプロンプト(Prompt)と呼びます。


ジェミニからの返答はゲーム作成で便利なライブラリの一覧(Pygame、Pyglet等)が返ってきました。

返答の内容を参考にして、ジェミニに「Pygameでゲームを作りたい」と相談します。


ゲーム制作の基本的な説明と一緒にサンプルコードの返答もありましたので、エディタを開いて、サンプルコードをコピーして実行してみます。


$ cd
$ microm game.py

~/game.py

import pygame

# Pygameの初期化
pygame.init()

# 画面のサイズ
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# ウィンドウのタイトル
pygame.display.set_caption("My First Pygame Game")

# 色の定義 (RGB)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)

# プレイヤーの初期位置とサイズ
player_x = 350
player_y = 450
player_width = 50
player_height = 50
player_speed = 5

# ゲームループ
running = True
clock = pygame.time.Clock()  # フレームレート制御用

while running:
    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # キーボード入力
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= player_speed
            if event.key == pygame.K_RIGHT:
                player_x += player_speed
            if event.key == pygame.K_UP:
                player_y -= player_speed
            if event.key == pygame.K_DOWN:
                player_y += player_speed

    # プレイヤーが画面外に出ないように制限
    if player_x < 0:
        player_x = 0
    if player_x > SCREEN_WIDTH - player_width:
        player_x = SCREEN_WIDTH - player_width
    if player_y < 0:
        player_y = 0
    if player_y > SCREEN_HEIGHT - player_height:
        player_y = SCREEN_HEIGHT - player_height

    # 描画
    screen.fill(BLACK)  # 背景を黒で塗りつぶす

    # プレイヤーを描画 (赤い四角形)
    pygame.draw.rect(screen, RED,
                     (player_x, player_y, player_width, player_height))

    # 画面を更新
    pygame.display.flip()

    # フレームレートの制御 (1秒間に60フレーム)
    clock.tick(60)

# Pygameの終了
pygame.quit()

エディタを開き、下記のコマンドでコードを実行してみます。

$ python3 game.py
pygame 2.6.1 (SDL 2.28.4, Python 3.11.2)
Hello from the pygame community. https://www.pygame.org/contribute.html

ターミナルに上記の文字列が出力した後に、



のような画面が表示されました。

赤い四角は矢印キーで操作可能です。




ジェミニの返答の最後にどのような種類のゲームを作ってみたいですか?とありましたので、「アクションゲーム」と相談してみます。


アクションゲームというジャンルでは細かいジャンルがたくさんあり、追加で「プラットフォームゲーム」と相談してみます。


ジェミニからコードのサンプルが返ってきまして、全文は長いのでコードは省略しますが、エディタにコードをペーストした後に実行してみると、



矢印キーで赤い箱が移動して、スペースキーでジャンプをするゲームが起動しました。

このゲームはスペースキーの動きがよろしくなくて、ジェミニに「スペースキーを押した時のジャンプの動きをスムーズにしたい」と相談したら、変更箇所の説明を返してくれました。


ゲームの動きはパラメータの調整で行うのが一般的で、生成AIのジェミニとやりとりを重ねていく事で、コードの書き方が少しずつ身に付いていきます。


ある程度コツを掴み始めたら、ジェミニに相談せずに自身でパラメータの箇所を探して変更してはゲームをプレイしてみると良いでしょう。


追記

下の動画はジェミニにPygameでシューティングゲームを作りたい相談した際に出来た縦スクロールシューティングゲームになります。


京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
大阪府高槻市でプログラミング教室を開設しています。
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。