Pythonでの開発を効率よく進めるには、コード管理ツールの活用が欠かせません。特に、VSCodeやGit、GitHubを使うことで、チーム開発やバージョン管理が簡単に行えます。この記事では、初心者向けに、VSCodeとGitを使ってPythonプロジェクトを管理し、GitHubにプッシュするまでの手順を丁寧に解説します。これからPythonで開発を始めたい方や、プロジェクト管理の基礎を学びたい方にぴったりの内容です!
このガイドを参考にすれば、コード管理の仕組みを理解し、自信を持って開発を進められるようになります。GitやGitHubに初めて触れる方でも安心して取り組めるよう、図解や具体的なコマンドを交えて進めていきます。ぜひ一緒に学びながら、実際にプロジェクトを進めてみましょう!
このブログで、VSCodeとGitHubを使ったPythonプロジェクト管理とDiscode botが作れるようになります
GitとGitHubって何?
Gitは、ソフトウェア開発で使われるバージョン管理システムです。コードの変更履歴を追跡し、異なるバージョンを管理することで、開発の過程で過去の状態に戻ったり、複数の開発者が同時に作業することができます。
一方、GitHubはそのGitを利用して、コードをオンラインでホストできるプラットフォームです。GitHubを使うと、リモートで他の人と一緒に開発を進めたり、プロジェクトを公開して他の開発者と共有することができます。Gitはローカルで作業を
関連記事
VSCodeの設定とGitのインテグレーション
- VSCodeはGitとの連携が強力で、コードを書きながら直接リポジトリ管理ができます。
- まず、VSCodeにGitの拡張機能がインストールされていることを確認してください(通常はデフォルトでインストールされています)。
VScodeのインストール方法
Pythonプロジェクトの作成
Gitを使ったバージョン管理は、Pythonプロジェクトをスムーズに進めるための基本です。さらにGitHub Actionsを活用することで、自動化も可能に!プロジェクトの効率を最大限に引き上げる方法を解説しています。
詳しい手順やヒントが知りたい方は、ぜひこちらの記事をチェックしてください👇
関連記事
新しい機能を追加しながら管理
これでGitとVSCodeを使った基本的なワークフローができあがりました。次に新しい機能を追加する際の流れは以下のように進めます。
基本の流れ
- VSCodeでコードを書く(
main.py
に新しい機能を追加) - Gitで変更を管理(
git add
、git commit
) - GitHubにプッシュ(
git push
) - VSCodeのGitツールを活用して、管理を視覚的に行う
新しい機能の追加
VScodeでこの操作をやりましょう
例えば、ping
コマンドを main.py
に追加します。
1 2 3 |
@bot.command() async def ping(ctx): await ctx.send("ポン!") |
変更をGitにステージング、コミット、GitHubへプッシュ
Gitでこの操作をやりましょう
変更を反映させるには、先ほどと同じようにgit add
、git commit
、git push
を使ってGitHubにプッシュします。
1 2 3 |
git add . git commit -m "pingコマンドを追加" git push origin main |
VSCodeのGitツールを活用して、管理を視覚的に行う
VSCodeでは、左側の「ソース管理」ビューを使用することで、GUIでファイルの変更をイカの画像のように確認することができます。
Pythonプロジェクトの作成
Discordのbotの開発を進める際、main.py
の構成を将来の機能追加やバージョンアップに柔軟に対応させるためのポイントを整理しておきましょう。Discordのbotを作成する際に、どのようにコードを整理し、機能を追加していくかの具体的なイメージを持てるように、シンプルなプロジェクト構造を使って説明します。
プロジェクトの基本構造
まず、ディレクトリとファイル構造の例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 |
my-python-project/ ├── main.py ├── commands/ │ ├── __init__.py │ └── hello.py ├── events/ │ ├── __init__.py │ └── on_ready.py ├── utils/ │ ├── __init__.py │ └── logging_setup.py ├── .env |
ファイルを作成しよう
コマンドプロンプトを開く
Windowsキー + R
を押し、「ファイル名を指定して実行」ダイアログでcmd
と入力し、Enter
を押します。
1 |
cd my-python-project |
commands
と events
ディレクトリを作成
1 |
mkdir commands events |
__init__.py
ファイルを作成
1 2 |
type NUL > commands\__init__.py type NUL > events\__init__.py |
main.py
の作成
main.py
には、Botの初期設定や、コマンドやイベントを読み込むためのコードを記述します。Botのメインロジックはここに集中させず、各機能は他のファイルに分けて読み込むようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
import os import asyncio import discord from discord.ext import commands from dotenv import load_dotenv from utils.logging_setup import setup_logging # 環境変数の読み込み load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') # Intentsを設定 intents = discord.Intents.default() intents.message_content = True # メッセージコンテンツのIntentを有効化 # ログの設定を実行 logger = setup_logging() logger.info('Bot is starting...') # Botの初期化 bot = commands.Bot(command_prefix="!", intents=intents) async def load_extensions(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) COMMANDS_DIR = os.path.join(BASE_DIR, 'commands') EVENTS_DIR = os.path.join(BASE_DIR, 'events') print(f"BASE_DIR: {BASE_DIR}") print(f"COMMANDS_DIR: {COMMANDS_DIR}") print(f"EVENTS_DIR: {EVENTS_DIR}") # コマンドをロード for filename in os.listdir(COMMANDS_DIR): if filename.endswith('.py') and filename != '__init__.py': await bot.load_extension(f'commands.{filename[:-3]}') # イベントをロード for filename in os.listdir(EVENTS_DIR): if filename.endswith('.py') and filename != '__init__.py': await bot.load_extension(f'events.{filename[:-3]}') async def main(): async with bot: await load_extensions() await bot.start(TOKEN) if __name__ == "__main__": asyncio.run(main()) # Botの初期化 bot = commands.Bot(command_prefix="!", intents=intents) async def load_extensions(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) COMMANDS_DIR = os.path.join(BASE_DIR, 'commands') EVENTS_DIR = os.path.join(BASE_DIR, 'events') print(f"BASE_DIR: {BASE_DIR}") print(f"COMMANDS_DIR: {COMMANDS_DIR}") print(f"EVENTS_DIR: {EVENTS_DIR}") # コマンドをロード for filename in os.listdir(COMMANDS_DIR): if filename.endswith('.py') and filename != '__init__.py': await bot.load_extension(f'commands.{filename[:-3]}') # イベントをロード for filename in os.listdir(EVENTS_DIR): if filename.endswith('.py') and filename != '__init__.py': await bot.load_extension(f'events.{filename[:-3]}') async def main(): async with bot: await load_extensions() await bot.start(TOKEN) if __name__ == "__main__": asyncio.run(main()) |
コマンドを作成する (commands/hello.py
)
ここで、簡単な "hello" コマンドを作成します。このファイルは commands/hello.py
に保存されます。
ファイルの作成
次に、commands/
フォルダ内に hello.py
ファイルを作成します。コマンドラインやターミナルで以下のコマンドを使って新しいディレクトリとファイルを作成します。
1 |
type NUL > hello.py |
ファイルにコードを追加
commands/hello.py
ファイルに "hello" コマンドを実装します。以下のコードを hello.py
ファイルに書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from discord.ext import commands class HelloCommand(commands.Cog): """Helloコマンドを提供するCog""" def __init__(self, bot): self.bot = bot @commands.command(name='hello') async def hello(self, ctx): """ユーザーに挨拶します。""" await ctx.send('Hello!') async def setup(bot): """Cogをセットアップします。""" await bot.add_cog(HelloCommand(bot)) |
ファイルのステージング
Gitで新しく作成したファイルをリポジトリに追加するためには、まずステージングエリアに追加します。以下のコマンドを実行します。
1 |
git add commands/hello.py |
これで、commands/hello.py
ファイルがステージングエリアに追加されました。
コミットの作成
次に、ステージングエリアに追加されたファイルをコミットします。コミットメッセージを付けて、変更を記録します。
1 |
git commit -m "Add hello command" |
リモートリポジトリへのプッシュ (オプション)
もしリモートリポジトリ(GitHubなど)を使っている場合は、変更をリモートにプッシュすることができます。最初にリモートリポジトリを設定していない場合は、以下のコマンドでリモートリポジトリを追加します
1 2 |
git remote add origin https://github.com/yourusername/your-repo.git git push -u origin main # 初回のみ |
すでにリモートが設定されている場合は、単に以下のコマンドでプッシュします。
1 |
git push |
イベントを作成する (events/on_ready.py
)
次に、Botが起動したときにメッセージを表示するイベントを作成します。これは events/on_ready.py
に保存します。
ファイルの作成方法は先程と同様になります。
ファイルの作成
まず、コマンドラインやターミナルで events
ディレクトリを作成し、その中に on_ready.py
ファイルを作成します。
1 |
type NUL > on_ready.py |
on_ready.py
ファイルにコードを追加
on_ready.py
ファイルに、Botが起動したときにメッセージを表示するイベントリスナーを実装します。以下のコードをファイルに追加してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from discord.ext import commands class ReadyEvent(commands.Cog): """Botが起動したときのイベントを処理するCog""" def __init__(self, bot): self.bot = bot @commands.Cog.listener() async def on_ready(self): """Botが起動したときに呼び出されます。""" print(f'{self.bot.user} has connected!') async def setup(bot): """Cogをセットアップします。""" await bot.add_cog(ReadyEvent(bot)) |
ファイルのステージング
Gitで新しく作成したファイルをリポジトリに追加するためには、まずステージングエリアに追加します。以下のコマンドを実行します。
1 |
git add commands/hello.py |
コミットの作成
次に、ステージングエリアに追加されたファイルをコミットします。コミットメッセージを付けて、変更を記録します。
1 |
git commit -m "Add hello command" |
リモートリポジトリへのプッシュ (オプション)
すでにリモートが設定されている場合は、単に以下のコマンドでプッシュします。
1 |
git push |
ユーティリティ関数 (utils/logging_setup.py
)
ログ設定など、共通で使うユーティリティ関数をまとめておくことも可能です。これにより、どのファイルからも簡単に共通の機能を呼び出せます。
utils
ディレクトリの作成
まず、utils
ディレクトリを作成し、その中に logging_setup.py
ファイルを作成します。コマンドラインやターミナルで以下の操作を行います。
1 2 |
mkdir utils # utilsディレクトリを作成 type NUL > logging_setup.py |
logging_setup.py
ファイルにコードを追加
logging_setup.py
ファイルに、ログ設定を行うためのコードを追加します。このコードは、ログの設定を行い、どのファイルからも呼び出すことができるようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import logging def setup_logging(): """ロギングの設定を行います。""" logging.basicConfig(level=logging.INFO) logger = logging.getLogger('discord') logger.setLevel(logging.INFO) return logger async def load_extensions(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) COMMANDS_DIR = os.path.join(BASE_DIR, 'commands') EVENTS_DIR = os.path.join(BASE_DIR, 'events') print(f"BASE_DIR: {BASE_DIR}") print(f"COMMANDS_DIR: {COMMANDS_DIR}") print(f"EVENTS_DIR: {EVENTS_DIR}") # 以下省略 |
logging_setup.py
の使用例
作成したログ設定を他のファイルから呼び出す場合の例です。例えば main.py
でこのログ設定を使用する場合、以下のように呼び出します。
1 2 3 4 5 6 |
from utils.logging_setup import setup_logging # ログの設定を実行 logger = setup_logging() logger.info('Bot is starting...') |
ファイルをGitにステージング
作成した utils/logging_setup.py
ファイルをGitに追加します。
1 |
git add utils/logging_setup.py |
コミットの作成
ステージングエリアに追加したファイルをコミットします。
1 |
git commit -m "Add logging setup utility" |
リモートリポジトリへのプッシュ (オプション)
リモートリポジトリを使っている場合、変更をプッシュします。
1 |
git push |
.env
ファイル
トークンなどの機密情報は .env
ファイルに格納して、環境変数として読み込みます。このファイルはGitにはコミットしません。
.env
ファイルの作成
まず、プロジェクトのルートディレクトリに .env
ファイルを作成します。コマンドラインやターミナルで以下のコマンドを実行して .env
ファイルを作成します。
1 |
touch .env |
.env
ファイルに機密情報を記述
.env
ファイルには、BotトークンやAPIキーなどの機密情報を記述します。以下はDiscordのBotトークンの例です。
1 |
DISCORD_TOKEN=your_discord_token_here |
ここで DISCORD_TOKEN
は変数名であり、your_discord_token_here
の部分には実際のトークンを記入します。
.env
ファイルから環境変数を読み込む
Pythonコードで .env
ファイルから環境変数を読み込むには、python-dotenv
ライブラリを使用します。このライブラリがインストールされていない場合、以下のコマンドでインストールします。
1 |
pip install python-dotenv |
次に、main.py
などのコード内で以下のようにして .env
ファイルから環境変数を読み込みます。
1 2 3 4 5 6 7 8 9 10 11 |
import os from dotenv import load_dotenv # .envファイルの内容を読み込む load_dotenv() # 環境変数からDiscordトークンを取得 TOKEN = os.getenv('DISCORD_TOKEN') # 取得したトークンを使ってBotを実行 bot.run(TOKEN) |
.env
ファイルをGitにコミットしないようにする
機密情報を含む .env
ファイルをGitにコミットしないように、.gitignore
ファイルに .env
を追加します。以下のコマンドで .gitignore
ファイルを作成し(または既にある場合は編集し)、.env
を追加します。
1 |
touch .gitignore |
.gitignore
ファイルに以下の行を追加します。
1 |
.env |
これで、.env
ファイルはGitで管理されなくなります。
すでにコミットしてしまった場合の対処
もし .env
ファイルを誤ってGitにコミットしてしまった場合、次の手順で履歴から削除します。
.gitignore
ファイルに .env
を追加した後、以下のコマンドでキャッシュを削除します。
1 |
git rm --cached .env |
その後、再度コミットします。
1 |
git commit -m "Remove .env file from repository" |
最後に、リモートリポジトリへプッシュします。
1 |
git push |
よくでてくるエラーについて
git add .をした際に以下のようなエラーが良くでてきます。
1 |
warning: in the working copy of 'commands/hello.py', CRLF will be replaced by LF the next time Git touches it |
このエラーは、Gitがファイルの改行コードに関する警告を表示しているものです。
原因:
- CRLFとLFの違い: Windows環境では改行コードとしてCRLF(キャリッジリターン+ラインフィード)が使用されますが、UnixやLinux環境ではLF(ラインフィード)のみが使用されます。
- Gitの設定: Gitはデフォルトで改行コードをLFに統一する設定になっている場合があります。そのため、CRLFの改行コードを持つファイルを検出すると、次回Gitがそのファイルを処理する際にCRLFがLFに置き換えられると警告します。
Windowsを使用している場合は、次のコマンドを実行してGitの改行コードの自動変換を有効にすることが推奨されます。
1 |
git config --global core.autocrlf true |
この設定の効果:
- チェックアウト時: Gitはリポジトリ内のテキストファイルのLF(ラインフィード)の改行コードを、Windowsの標準であるCRLF(キャリッジリターン+ラインフィード)に変換します。
- コミット時: 作業ディレクトリ内のテキストファイルのCRLFを、リポジトリに保存する際にLFに変換します。
メリット:
- 環境間の互換性: WindowsとUnix/Linux環境で共同作業を行う場合、改行コードの違いによる差分やコンフリクトを防ぐことができます。
- コードの一貫性: リポジトリ内ではLFに統一されるため、コードベースが一貫した状態になります。
注意点:
- バイナリファイルへの影響: この設定はテキストファイルにのみ適用されますが、ファイルの種類が正しく認識されない場合、バイナリファイルが壊れる可能性があります。必要に応じて、
.gitattributes
ファイルでファイルの種類を指定してください。 - 既存のファイルへの影響: 設定を変更した後、既存のファイルに対して改行コードの変換が行われるため、一時的に大量の変更が発生することがあります。
まとめ
この記事では、VSCode、Git、GitHubを使ってPythonプロジェクトを効率よく管理する方法を解説しました。初心者の方でも理解しやすいように、Gitの基本的な操作からGitHubへのプッシュ、さらにVSCodeでの操作を丁寧に説明しています。プロジェクトをスムーズに進めるためには、バージョン管理の重要性を理解し、正しく活用することが大切です。また、Discordのbot開発の例を通じて、プロジェクト構成やコード管理の方法についても学びました。
これで、Pythonプロジェクトの管理に自信を持って取り組めるはずです。ぜひ実際に手を動かしながら、学んだ知識を活かしてみてください。GitやGitHubを使いこなすことで、開発のスピードと効率が飛躍的に向上するでしょう!
次のステップとして、さらに高度な機能追加や、自動化ツールの活用などにも挑戦してみてくださいね。
もしわからないことがあれば、このブログやXに質問等を投げていただければと思います。
Xのアカウントはこちら
プログラミング学習を進めているけれど、まだ副収入につなげられていない…そんなあなたへ!今こそ、学んだスキルを活かして副業に挑戦する絶好のチャンスです。プログラミングだけでなく、自分のスキルや商品をネットで販売する『ネットショップ』を開設してみませんか?
ネットショップを持つことで、自分の知識やスキルをより多くの人に届け、副収入を得ることが可能です。学んできたプログラミングを活かして、ショップのカスタマイズや運営も自由自在に行えますし、もし商品作成が難しい場合でも、デジタル商品やサービス提供など、いろんな選択肢があります。
このステップで一歩踏み出せば、今学んでいることが副収入に直結し、自分の時間をより有効に使うことができるはずです!一緒にネットショップを開設し、副業の第一歩を踏み出しましょう!
タイトルテキスト
プログラミングを視覚的に理解したい方やプログラミングで絵を書いてみたい方はUdemyで講座も作っているのでこちらも参考にしてみてください
Udemy講座
ChatGPTでPythonの学習を始めてみたい方は以下の記事を参考にしてみてください
関連記事
プログラミングを学びたいけど、どこから始めたらいいのか分からない、自分に合っているか不安…そんな悩みを持っている方におすすめしたいのが、 無料相談 サービスです!
この無料相談では、あなたの現状や目標に合わせて、最適な学習プランを一緒に考えてくれます。どんなスキルが必要なのか、どうやって学習を進めると効果的かを具体的にアドバイスしてもらえるので、無駄なく効率的にスタートを切ることができます。
さらに、プログラミング学習には同じ目標を持つ 仲間 がいること、そして頼りになる メンター の存在がとても大きな支えになります。独学ではどうしてもつまずきやすい部分も、メンターがあなたの成長に合わせて親身にサポートしてくれるので、安心して学びを進められます。
まずは 無料相談 で、あなたに合ったプランを見つけて、スキルアップへの第一歩を踏み出してみませんか?今なら、迷っている方でも気軽に相談できるチャンスです!