Pythonでコンソールアプリケーションを作るときのテンプレート

  • Python の実行環境、開発環境をチームメンバー間で揃える。(非 Docker)
  • Mac のグローバルで Python のバージョンを切り替えずに実行できる。
  • VSCode でデバッグ実行できる。

前提条件

  • macOS
  • 使いたい Python のバージョンが Mac にインストールされている。(dmg、Homebrew) ※この記事で使う pipenv は pyenv と一緒に使うことができるようだが未検証。
  • VSCode に拡張機能 Python(ms-python.python)がインストールされている。

使うツール

pip

  • Python パッケージのインストールなどを行うユーティリティで、Python 3.4 以降には、標準で付属している。

pipenv

  • 手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理する。また Pipenv は、いかなるときも重要な Pipfile.lock を生成し、これを利用しビルドが常に同じ結果になるようにする。

環境構築

  • pipenv をインストールする。
1
$ brew install pipenv
  • Python のソースコードを格納するディレクトリを作る。
1
2
mkdir myproject
cd myproject
  • ソースコードのディレクトリに仮想環境を作るために環境変数を設定する。
1
export PIPENV_VENV_IN_PROJECT=1
  • Python のバージョンを指定して pipenv で初期化する。
  • このコマンドで作成される.venvディレクトリはバージョン管理に含めない。(チームメンバーがpipenv syncすれば作成されるため)
1
pipenv --python 3.8
  • Python のバージョンを 3.X.Y のようにパッチバージョンまで指定する場合は Pipfile を書き換える必要がある。
# Pipfile
[requires]
python_version = "3.8.3"
  • Pipfile.lock を作成する
1
pipenv install
  • ここまでの動作確認
1
2
3
4
5
# 作成した仮想環境のshellに切り替える
pipenv shell

# Pythonのバージョンを確認する
python --version
  • VSCode が pipenv で作った仮想環境を Python 拡張機能とデバッグ実行で使うために.vscode/settings.jsonを作る。※バージョン管理に含めてチームで共有する。
1
2
3
4
# .vscode/settings.json
{
    "python.pythonPath": ".venv/bin/python"
}
  • エントリーポイントになるmain.pyを作成する。(ファイル名は任意)
1
2
msg = "Hello World!"
print(msg)
  • VSCode でデバッグ実行したときに実行されるファイルを定義するために.vscode/launch.jsonを作る。※バージョン管理に含めてチームで共有する。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
//.vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: main.py",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/main.py",
      "console": "internalConsole"
    }
  ]
}

チームメンバーが上記のソースコードを取得した後に行うこと

  • Pipfile.lockで指定されたバージョンのパッケージをインストールするためにinstallではなくsyncを使う。
1
pipenv sync --dev

GitHub リポジトリ

参考

AWS CLI を AssumeRole と MFA で使う

  • AWS CLI で AWS にアクセスする際に AssumeRole で別の AWS アカウントの IAM ロールを引き受け、更に MFA でログインする。

前提条件

  • AWS CLI をインストールしていること。
  • IAM に AssumeRole の権限が付与されている。
  • MFA の設定が済んでいる。

事前に確認しておく情報

  • アクセスキー
  • シークレットアクセスキー
  • AssumeRole で引き受けるロール ARN
  • MFA の ARN

初期設定

  • AWS のアクセスキーとシークレットアクセスキーを設定する。
1
2
3
4
5
$ aws configure
AWS Access Key ID [None]:<アクセスキー>
AWS Secret Access Key [None]:<シークレットアクセスキー>
Default region name [None]:ap-northeast-1
Default output format [None]:text
  • 上記のコマンドを実行すると入力した情報が保存されたファイルが作成される。
1
2
3
~/.aws
 ├ config
 └ credentials
  • ~/.aws/configを下記のように変更する。
  • profile_name:任意の名前。CLI を開くたびに入力するため入力しやすいものがおすすめ。
  • role_arn:AssumeRole するロール ARN。
  • mfa_serial:MFA デバイスの ARN。
  • source_profile:スイッチロール元のプロファイル名。
[default]
region = ap-northeast-1
output = text

[profile profile_name]
role_arn = arn:aws:iam::yyyyyyyyyyyy:role/zzz
mfa_serial = arn:aws:iam::xxxxxxxxxxxx:mfa/name
region = ap-northeast-1
source_profile = default

CLI で AssumeRole できるか確認

1
2
3
$ export AWS_DEFAULT_PROFILE=上記で設定したprofile_name
$ aws sts get-caller-identity
Enter MFA code for arn:aws:iam::XXXXXXXXXXXX:mfa/AAAA:<MFAコードを入力する>
  • MFA コード入力後に表示される AccoutID がスイッチロール先の AWS アカウントになっていれば成功。

参考

【小ネタ】AWS CLI でスイッチロールして作業を行うための設定をやってみた

リモートデスクトップ接続先のVSCodeでカーソル挿入を使う

  • Windowsのリモートデスクトップ接続を使うと接続先にctrl+alt+<anykey>が送られないため、標準設定のVSCodeだとカーソルを上下に挿入できない。
  • VSCodeのショートカットを変更して対処する。

環境

接続元

  • OS:Windows10

接続先

  • OS:Windows10
  • VSCode:1.46.1

設定

  • 接続先のVSCodeでショートカットの設定を以下のように変更する。
既定のショートカット変更後のショートカット
カーソルを下に挿入Ctrl + Alt + 下方向キーShift + Alt + 下方向キー
カーソルを上に挿入Ctrl + Alt + 上方向キーShift + Alt + 上方向キー
  • 変更後の設定画面はこのようになる。

image