もう迷わない!コマンドでGit & Python仮想環境構築
コマンドラインでGitの環境構築
Git のセットアップ
Git Bashを開く
-
Gitのユーザー名を設定する
git config --global user.name [名前を入れる] # 入力例 git config --global user.name yamadahanako
-
Gitのメールを設定する
git config --global user.email [メールアドレスを入れる] # 入力例 git config --global user.email yamadahanako@yamadahanako.com
-
Gitのユーザー名・メールアドレスが正しく設定されたことを確認
git config --global user.name # 出力: yamadahanako git config --global user.email # 出力: yamadahanako@yamadahanako.com
新しい SSH キーを生成して ssh-agent に追加する
SSHでGitHubリポジトリをクローンできるようにするために、SSH設定を済ませる。
-
SSHキーを生成
ssh-keygen
-
SSHディレクトリに移動
└ユーザーのホームディレクトリ内にある.ssh
ディレクトリに移動するcd ~/.ssh
-
SSHディレクトリ内容を確認
└sshディレクトリに移動した後、ls
コマンドで一覧表示を確認する
(ls = List Segmentsの略。大文字のiじゃない)ls # 出力: # id_12345 id_12345.pub known_hosts known_hosts.old
- 公開鍵 (.pub):安全に他の人やシステムと共有できる
- 秘密鍵 (.pubが付かないファイル):むやみに共有せず、厳重に管理する
lsコマンドについて
ls
コマンド
ls
は、コマンドラインで使用されるコマンドで、以下のことを意味します:
-
ls
: 現在のディレクトリ内のファイルとディレクトリの一覧を表示するコマンドです。デフォルトでは隠しファイル(ドットで始まるファイル)は表示されません。
ls
コマンドは、ディレクトリ内にどのようなファイルやディレクトリが存在するかを簡単に確認する際に使用されます。
ls -la
コマンド
ls -la
は、コマンドラインで使用される、より詳細な表示を行うコマンドです。
-
ls
: 現在のディレクトリ内のファイルとディレクトリの一覧を表示するコマンドです。 -
-l
: "long format" の略で、詳細な情報を表示するオプションです。これにはファイルのパーミッション、リンク数、所有者、グループ、サイズ、最終変更日時が含まれます。 -
-a
: "all files" の略で、隠しファイルも含めてすべてのファイルとディレクトリを表示するオプションです。
ls -la
コマンドは、ディレクトリ内の全ファイルを詳細な情報と共に確認したいときに使用されます。
使用例
以下に、ls
および ls -la
コマンドの使用例を示します。
$ ls
directory-1/ directory-2/
$ ls -la
total 40
drwxr-xr-x 1 user 1234567 0 Jan 01 12:00 ./
drwxr-xr-x 1 user 1234567 0 Jan 01 11:50 ../
drwxr-xr-x 1 user 1234567 0 Jan 01 11:51 .git/
drwxr-xr-x 1 user 1234567 0 Jan 01 11:52 .github/
-rw-r--r-- 1 user 1234567 16 Jan 01 11:53 .gitignore
drwxr-xr-x 1 user 1234567 0 Jan 01 11:54 directory-1/
drwxr-xr-x 1 user 1234567 0 Jan 01 11:55 directory-2/
cd ~/.sshコマンドについて
cd ~/.ssh
コマンド
cd ~/.ssh
は、コマンドライン環境で使用されるコマンドで、以下のことを意味します:
-
cd
: "change directory" の略で、現在の作業ディレクトリを変更するためのコマンドです。 -
~
: ユーザーのホームディレクトリを表します。- 例えば、LinuxやmacOSでは通常
/home/username
や/Users/username
に対応します。
- 例えば、LinuxやmacOSでは通常
-
.ssh
: ホームディレクトリ内の隠しディレクトリで、SSH(Secure Shell)関連のファイル(鍵ファイルや設定ファイルなど)を格納するのに使われます。ディレクトリの名前が.
で始まることから、通常は隠しディレクトリとなっています。
したがって、cd ~/.ssh
コマンドは、「現在の作業ディレクトリをユーザーのホームディレクトリにある .ssh
ディレクトリに変更する」という意味です。
このディレクトリには通常、SSH の公開鍵や秘密鍵、設定ファイル(config
)などが保存されています。SSH を利用する際には、このディレクトリ内のファイルを操作することがよくあります。
- 公開鍵を表示する
└先ほどls
コマンドで把握した公開鍵をcat
の後に入力cat [公開鍵] # 入力例 cat id_12345.pub
catコマンドについて
cat ファイル名
cat ファイル名
は、コマンドラインで使用されるコマンドで、以下のことを意味しています:
-
cat
: "concatenate" の略で、ファイルの内容を標準出力に表示するためのコマンドです。主にファイルの中身を確認するときに使われます。 -
id_12345.pub
: 表示したいファイル名です。- このファイルは通常、SSHの公開鍵が保存されているファイルです。
したがって、cat id_12345.pub
コマンドは、「id_12345.pub
ファイルの内容をターミナルに表示する」という意味です。
よくある用途としては、このコマンドを使ってSSH公開鍵の内容を確認し、その内容をコピーしてGitHubや他のリモートサーバーの設定に使用することがあります。公開鍵は安全に共有できる情報ですが、このコマンドを秘密鍵(例えば、id_12345
だけ)に対して実行しないように注意が必要です。秘密鍵は他者と共有せず、厳重に管理する必要があります。
- SSHエージェントを起動し、秘密鍵を追加
-
SSHエージェント*を起動する *SSHキーの認証情報を管理するためのツール
eval `ssh-agent`
-
ssh-add
コマンドで、SSHエージェントに秘密鍵を追加するssh-add [秘密鍵] # 入力例 ssh-add id_12345 Enter passphrase for id_12345: [パスワード入れる] Identity added: id_12345 (user@example.com)
-
ssh-addコマンドについて
ssh-add
コマンド
ssh-add
コマンドは、SSHエージェントに秘密鍵を追加して、SSH接続時にパスフレーズを入力せずに認証できるようにするためのツールです。コマンド $ ssh-add id_12345
の意味は以下の通りです:
-
ssh-add
: SSHエージェントに鍵を追加するためのコマンド。 -
id_12345
: 追加したい秘密鍵ファイルの名前。このファイルはSSHキーの秘密鍵ファイルです。
このコマンドを実行すると、id_12345
の秘密鍵が現在実行中のSSHエージェントに追加され、今後のSSH接続時にこの鍵を自動的に使って認証を行えるようになります。これにより、パスフレーズを毎回手入力せずに済むようになります。
-
ホームディレクトリに戻る
cd - # 出力: # /c/Users/your_username
cdコマンドについて(cd - / cd .. 等)
cd
コマンド
cd
コマンドはディレクトリ間を移動するために使われるコマンドで、特定のパスを指定することで、そのディレクトリに移動します。以下に、cd
コマンドのいくつかの一般的な用法を示します:
-
cd directory_path
: 指定されたディレクトリパスに移動します。- 例:
cd /home/user/documents
は/home/user/documents
に移動します。
- 例:
-
cd ..
: 現在のディレクトリの親ディレクトリに移動します。- 例:
/home/user/documents
にいるときにcd ..
とすると、/home/user
に移動します。
- 例:
-
cd -
: 直前にいたディレクトリに戻ります。- 例:
/home/user
から/etc
に移動後、cd -
とすると、元の/home/user
に戻ります。
- 例:
-
cd ~
またはcd
(引数なし): ユーザーのホームディレクトリに移動します。- 例: どこにいても
cd
またはcd ~
を実行すれば、/home/username
のようなホームディレクトリに移動します(username
は実際のユーザー名)。
- 例: どこにいても
cd
コマンドのこれらの使用方法を覚えておくと、ファイルシステム内の移動がよりスムーズに行えます。
リポジトリをクローンする
-
リポジトリをクローンする
git clone [Githubの該当ページからSSHのURLをコピー] # 入力例 git clone git@github.com:user/repository-name.git # yesを入力すると、リポジトリの内容がローカルにダウンロードされる
-
新しいブランチを作成する
# 先ほどダウンロードしたディレクトリに移動する cd project-directory # 現在のリポジトリ内で使用可能なブランチを一覧表示する git branch # 出力例: * mainは、現在の作業ブランチがmainであることを示している # 現在のブランチを確認する git checkout # 新しいブランチを作成する git checkout -b new-feature # 出力例: Switched to a new branch 'new-feature' # 新しいブランチ `new-feature` が作成され、それに切り替えている
コマンドラインでPythonの仮想環境の構築
以下は、Pythonの仮想環境をコマンドラインで構築する方法です。
Pythonのインストール
Pythonのバージョン確認は以下のリンクから可能です。必要なバージョンをダウンロードするよう事前に確認されることをお勧めします。
注: 自分は3.12をダウンロードしていたが、必要だった3.11を新たに追加しました。
仮想環境の構築
Windowsの場合:
py -3.11 -m venv .venv
一般的な場合:
python -m venv .venv
作成後、以下でバージョンを確認してください。
python --version
Python 3.11.9
-m venvコマンドについて
py -3.11 -m venv .venv
コマンド
このコマンドは、Pythonの仮想環境を作成するために使用されます。このコマンドが行うことを分解して説明します:
-
py
: WindowsのPythonランチャーを呼び出すコマンドです。特定のバージョンのPythonを簡単に呼び出すことができます。 -
-3.11
: 使用するPythonのバージョンを指定します。このオプションにより、Python 3.11を使用して仮想環境を作成することを指示しています。 -
-m venv
: Pythonの標準モジュールであるvenv
を実行します。このモジュールは、仮想環境を作成するために使われます。 -
.venv
: 仮想環境を作成するディレクトリの名前です。この場合、現在のディレクトリに.venv
という名前のディレクトリを作成し、その中に仮想環境をセットアップします。
したがって、このコマンドは「Python 3.11を使って、現在のディレクトリに .venv
という名前の仮想環境を作成する」ことを意味しています。作成された仮想環境は、プロジェクトの依存関係を隔離して管理するのに役立ちます。※ venv
は Virtual ENVironment の略です。
仮想環境のアクティブ化
Git Bashを使用する場合:
source .venv/Scripts/activate
それ以外の場合:
source .venv/bin/activate
仮想環境がアクティブになると、プロンプトに
(.venv)
という表示が追加されます。
必要なパッケージのインストール
pip install poetry
私の場合、以下のエラーが発生したのですが、NetskopeによるSSL認証のエラーでした。
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]...
ERROR: Operation cancelled by user
NetskopeのSSH認証エラーの対策
- Netskopeがインストールされたフォルダ内に保管されているNetskope証明書を利用すると解消
-
nscacert.pem
をダウンロードしてユーザー配下に保存
対象のフォルダに移動し、poetry
を使用して依存関係をインストールします。
poetry install
注: Pythonのバージョンが高すぎる場合、エラーが発生する可能性があります。
コードの品質テスト
単体テスト
以下のコマンドを使用し、設定が正しく行われているか確認します。
poetry run pytest -s -v tests
-
pytest
: Python用のテストフレームワークで、単体テストを実行するもの -
-s
: テスト中の標準出力や標準エラーの出力を抑制せずに表示する -
-v
: 冗長モードで実行し、テストごとの詳細情報を表示する -
tests
: テストファイルやディレクトリを指定しており、ここに含まれるテストを実行する -
poetry run
: 仮想環境上で直接ツールを実行する
これにより、その仮想環境にインストールされたバージョンを使ってコマンドが実行されます。
単体テスト(ユニットテスト)について
単体テスト(ユニットテスト)
単体テストは、ソフトウェア開発の一環として、個々の部品、すなわち最小のテスト可能な部分(通常は関数やメソッド)に対して行われるテストです。
目的とメリット:
-
動作の確認: 各部品が設計どおりに機能しているかを確認します。
-
バグの早期発見: 小さな単位のテストを徹底することで、エラーやバグを早期に発見し、修正することができます。
-
リファクタリングの安全性: コードのリファクタリング(内部の改善)を行う際に、機能に影響を与えないことを確認できます。既存のテストを実行してすべてが合格することを確認することで、信頼性を保持したままコードを改善できます。
-
コードの理解: 単体テストを作成することは、コードの設計を見直し、関数やメソッドの目的とその利用方法を理解するのにも役立ちます。
単体テストの内容:
-
前提条件の設定: テストすべき対象がどのような入力を受け取るかを設定します。
-
実行: 対象のコンポーネントや関数を呼び出し、その動作を確認します。
-
結果の確認: 予期される出力や状態が実際と一致しているかを検証します。
例:
単体テストの簡単な例を考えてみましょう。例えば、次のようなPython関数をテストする場合です。
def add(a, b):
return a + b
この関数に対する単体テストは、次のようになります。
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(0, 0) == 0
これは、add
関数が期待した通り動作するかを検証するテストケースです。このようにして、個々の機能が正しく動作することを確認するのが単体テストの目的です。
コードフォーマット
black
を使ってコードをフォーマットします。
poetry run black .
isort
を使ってインポートを整列します。
poetry run isort .
-
black
はPythonコードを自動整形するツールです(一貫性のあるスタイルに成形)。 -
isort
はPythonのインポート文を整形します(アルファベット順に並べ替えたり)。 -
.
は、カレントディレクトリ以下のすべてのPythonファイルを対象にフォーマットを実行することを意味します
コマンドラインでGitを実行
git branch
現在のブランチ状況を表示しています。
- 使用中のブランチは
feature-x
- もう一つのブランチが
development
git status
(1回目)
ワークツリーの状況を表示しています。
- 現在のブランチは
feature-x
-
./dummy-folder/
が未追跡ファイルとして表示されています。
git add .
カレントディレクトリ以下のすべての変更をステージングエリアに追加しています。
- 警告メッセージは、ファイル内の行末コードが LF から CRLF に変わる可能性があることを示しています。
git status
(2回目)
変更がステージングエリアに追加されたことを確認できます。
-
project-folder/src/example.py
が変更として追加 -
./dummy-folder/
はまだ未追跡です。
git commit -m "fix: リファクタリングしました"
- ステージングされた変更をコミットし、メッセージを
"fix: リファクタリングしました"
としています。 -
-m
は、messageの略称。
git push origin feature-x
リモートリポジトリの feature-x
ブランチにローカルのコミットを反映させています。
- プッシュが成功し、リモートリポジトリに変更が適用されました。
gitのブランチ名を修正したいとき
GitHub上でブランチの名前を修正するには、ローカルとリモートの両方で名前を変更します。
ローカルでブランチ名を変更する
まず、変更したいブランチにチェックアウトします。
(誤って作ったブランチの名前が old-branch-name
と仮定します)
git checkout old-branch-name
次に、新しいブランチ名に変更します。
(新しい名前を new-branch-name
と仮定します)
git branch -m new-branch-name
リモートリポジトリ上でブランチ名を変更する
リモートでの古いブランチ名を削除し、新しいブランチ名をプッシュします。
git push origin :old-branch-name new-branch-name
ローカルブランチとリモートブランチの概念を理解する
Gitのブランチ管理
ローカルとリモート(例えばGitHub)の間でどのようにブランチ管理が行われるか。ローカルブランチとリモートブランチは、それぞれ独立して存在し、どちらも手動で同期を行う必要があります。
▼ローカルブランチの作成と同期
-
ローカルで新しいブランチを作成
- 例:
git checkout -b ブランチ名
- このコマンドで作成されたブランチは、ローカルのみに存在します。
- この段階ではリモート(GitHub)には反映されていません。
- 例:
-
リモートにブランチをプッシュ
- 例:
git push origin ブランチ名
- ローカルのブランチをリモートリポジトリにも作成できます。
- この操作を行わないと、リモートにそのブランチは存在しません。
- 例:
▼リモートブランチの取得と同期
-
リモートで新しいブランチが作成されている
- 例:
branch-2
,branch-3
がリモートに存在しているが、ローカルでまだチェックアウトしていない場合。
- 例:
-
リモートブランチをローカルに取得
- 例:
git fetch origin
- リモートリポジトリから新しい変更やブランチ情報をローカルのリポジトリに取得しますが、ローカルにブランチを作成することは自動的に行われません。
- 例:
-
リモートブランチのチェックアウト
- 例:
git checkout branch-2
- 上記の
fetch
をした後にこのコマンドを行うことで、リモートのbranch-2
をローカルで作成し、そのブランチに移動します。
- 例:
まとめると、
- ローカルブランチは手動でリモートにプッシュする必要がある
- リモートブランチは
fetch
コマンドを使用してローカルに情報を取得し、必要に応じてcheckout
で作業できるようにする必要がある
Discussion