エンジニアのブログ

最近クラウドを触りはじめたエンジニアのブログ

Pythonプロジェクトの環境構築

インストール

Python

$ brew install python
$ which python3
/opt/homebrew/bin/python3
$ python3 -V
Python 3.13.3

Poetry

$ curl -sSL https://install.python-poetry.org | python3 -

参考:python-poetry.org

プロジェクト作成

$ mkdir test
$ cd test
$ poetry new poetry-demo
$ tree   
.
└── poetry-demo
    ├── README.md
    ├── pyproject.toml
    ├── src
    │   └── poetry_demo
    │       └── __init__.py
    └── tests
        └── __init__.py

5 directories, 4 files

pyprojet.toml確認

[project]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = [
    {name = "ユーザ名",email = "メールアドレス"}
]
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
]

[tool.poetry]
packages = [{include = "poetry_demo", from = "src"}]

[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"

pyproject.toml の変更1

(追記)以下の手順は、poetry new 実行時にflatオプションを指定することで対応不要。

$ poetry new poetry-demo --flat 

次のような構造にしたい(flat layoutと呼ばれるらしい)

$ tree
.
├── README.md
├── pyproject.toml
├── src
│   └── __init__.py
└── tests
    └── __init__.py

packagesを以下の設定に変更

[tool.poetry]
packages = [{include = "src"}]

pyproject.toml の変更2

Python環境(.venvフォルダ)をプロジェクトのルートディレクトリに作成し、現在のプロジェクトのみに適用する。

$ poetry config virtualenvs.in-project true --local

poetry.toml が作成される

[virtualenvs]
in-project = true

参考

CDK環境構築

前提

  • OS: MacOS
  • npmがインストール済

AWS CLIインストール

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

config設定

$ aws configure --profile userprod
AWS Access Key ID [None]: ****
AWS Secret Access Key [None]: ****
Default region name [None]: ap-northeast-1
Default output format [None]: json

$ aws configure --profile default
AWS Access Key ID [None]: ****
AWS Secret Access Key [None]: ****
Default region name [None]: ap-northeast-1
Default output format [None]: json

確認

aws s3 ls

CDKインストール

npm install -g aws-cdk
cdk --version

プロジェクト作成

mkdir test && cd test
cdk init app --language typescript

中身の確認

  • tree -L 2

  • フォルダ全体

.
├── README.md
├── bin
│   └── test.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── test-stack.ts
├── node_modules
│   ├── @ampproject
│   ├── @aws-cdk
│   ├── @babel
.......(省略)
│   ├── yargs
│   ├── yargs-parser
│   ├── yn
│   └── yocto-queue
├── package-lock.json
├── package.json
├── test
│   └── test.test.ts
└── tsconfig.json

224 directories, 12 files
  • package.json typescript、jestまでセットアップしてくれる。とても便利。
{
  "name": "test",
  "version": "0.1.0",
  "bin": {
    "test": "bin/test.js"
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
  "devDependencies": {
    "@types/jest": "^29.5.14",
    "@types/node": "22.7.9",
    "jest": "^29.7.0",
    "ts-jest": "^29.2.5",
    "aws-cdk": "2.1007.0",
    "ts-node": "^10.9.2",
    "typescript": "~5.6.3"
  },
  "dependencies": {
    "aws-cdk-lib": "2.186.0",
    "constructs": "^10.0.0"
  }
}

デプロイ

cdk bootstrap cdk deploy TestStack

参考

Node.js 環境構築

インストール

1. Homebrew

- Mac: curl

Homebrew — The Missing Package Manager for macOS (or Linux)

※ Homebrewを利用してインストールした場合、デフォルトでユーザフォルダにインストールされないため、Nodeのライブラリ等はvoltaやnvmを利用することを推奨。

 

2. volta

- Mac: Homebrew or curl

- Windows: PowerShell

Getting Started | Volta

- 他の選択肢: nvm

- 注意点: pnpmサポートは実験段階にあるとのこと

pnpm Support | Volta

 

3. Node.js

- Mac / Windows: volta

Getting Started | Volta

 

4. npm

- Mac / Windows: volta 

- 他の選択肢: pnpm, yarn, burn

※ yarnはv2以降のCICDビルドが大変そうなので不採用

 

CICD (GitHub Actions)

- volta 

GitHub - volta-cli/action: GitHub Action to Setup Volta

- pnpm

Continuous Integration | pnpm

 

参考記事

【完全比較】npm vs pnpm vs Yarn vs Bun、最強のパッケージマネージャーはどれだ? #Node.js - Qiita

要件定義に入る前にやること

直近の仕事で色々と大変だった(現在進行中)ので記録しておく。

立場としては、1次受けのベンダー(2次受けのベンダーに要件定義や開発を発注)を想定している。

 

顧客向けにやること

  • 既存業務の整理
    • 現在、顧客がどのような業務を行なっていて、(既存システムがある場合は)誰がいつどのような目的でどの機能を利用しているか。
    • 上記のことが、業務フローとして整理されているとベストである。
  • 既存システムの仕様理解
    • 既存システムの仕様書やマニュアルがある場合は、それを元にシステムの仕様を理解する。
    • もし、存在しない場合は、QAを通して不明点を早めにクリアにしておく必要がある。

ベンダー向けにやること

  • 見積依頼内容の整理と見積書の確認
    • 契約形態
      • 順委任か請負か
    • 契約期間
      • 期間はいつからいつまでか。発注が遅れた場合はどうするか等。
    • 前提条件
      • どのような条件をもとに見積を行うか。開発を行うにあたり特定のパッケージを使うことが前提になっているか等。
    • 作業範囲
      • 顧客との打ち合わせに参加するか、要件定義のどの範囲を担当するのか、進捗管理をやるのか等の作業範囲について。
  •  次工程の準備
    • 実際の要件定義の進め方に関して、ベンダーと事前にすり合わせを行っておく必要がある。
      • 要件定義を進めるにあたり、どのようなインプットを必要としているか、そのイメージは合っているか。
      • どのタスクでどのようなアウトプットができるか。アウトプットはどのようなイメージか。
      • WBSの各タスクの進め方はどのように進めるか。こちら側に依頼する作業は何かあるか。
    • コミュニケーションのルール
      • QAや課題をどのように管理するか。

AtCoder用のツール利用方法

online-judge-tools、atcoder-cli のインストール

$ pip3 install online-judge-tools
$ yarn global add atcoder-cli

online-judge-toolsとの連携確認

$ acc check-oj
> online-judge-tools is available. found at:

online-judge-tools、atcoder-cli へのログイン

$ acc login
> Username: ***
> Login: ***

$ oj login https://atcoder.jp/
> Username: ***
> Login: ***

入出力サンプルのインストール

URLが「https://atcoder.jp/contests/practice/」の場合

acc new practice
or
acc add practive

入出力サンプルの実行(javascriptの場合)

$ pwd
/Users/xxxx/atcoder/practice/a
$ touch code.js
# ファイルを編集する

$ oj t -c "node ./code.js" -d ./tests/
[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.1)
[INFO] 2 cases found

[INFO] sample-1
[INFO] time: 0.404934 sec
[SUCCESS] AC

[INFO] sample-2
[INFO] time: 0.236824 sec
[SUCCESS] AC

[INFO] slowest: 0.404934 sec  (for sample-1)
[SUCCESS] test success: 2 cases

参考

qiita.com tatamo.81.la

最近買った本(2020年7月〜2020年9月)

ひとつひとつを腰を据えてもうすこししっかりと学びたい気もする。 理解した部分とそうでない部分、読み直すときにわかるようにもっと詳細にメモしておこう。

2020年9月

  1. 9/13 下記を購入
    状況: 未読

  2. 9/5 下記を購入
    状況: 全体をさらっと読んだ

2020年8月

  1. 8/14 下記を購入
    状況: 全体をさらっと読んだ

    システム開発 受託契約の教科書

    システム開発 受託契約の教科書

    • 作者:池田 聡
    • 発売日: 2018/01/17
    • メディア: 単行本(ソフトカバー)

  2. 8/14 下記を購入
    状況: 導入部分のみ読む(Chapter 1〜3あたり)

    ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

    ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

    • 作者:成瀬 允宣
    • 発売日: 2020/02/13
    • メディア: 単行本(ソフトカバー)

2020年7月

  1. 7/13 下記を購入

  2. 7/13 下記を購入
    状況: 導入部分を読んで難しそうだったので、入門書に切り替え

  3. 7/4 下記を購入
    状況: 1,3,4,5章を読んだり、写経したり。
    目次: O'Reilly Japan - 初めてのGraphQL

    初めてのGraphQL ―Webサービスを作って学ぶ新世代API

    初めてのGraphQL ―Webサービスを作って学ぶ新世代API

  4. 7/4 下記を購入
    状況: 1〜4章,5章(少し),11章(少し)を読んだ。まとめ中。
    目次: O'Reilly Japan - プログラミングTypeScript

    プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

    プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

    • 作者:Boris Cherny
    • 発売日: 2020/03/16
    • メディア: 単行本(ソフトカバー)
    JavaScriptでつまづいたところは、昔購入した下記で復習(ちょっと内容古い)

TypeScriptプロジェクトの作成

package.json生成

$ yarn init

package.jsonのdevDependenciesにtypescript追加

$ yarn add -D typescript

tsconfig.json生成

$ yarn tsc --init

ファイル生成

$ mkdir src
$ cd src
$ touch index.ts
$ echo 'console.log("Hello TypeScript");' > index.ts

コンパイル実行

$ yarn tsc
> index.jsが生成

ファイル実行

$ node index.js
> Hello TypeScript

// 下記も実行できるが、TypeScript構文がある場合はエラーになる
$ node index.ts
> Hello TypeScript

ディレクトリの中身の表示

$ brew install tree
$ tree
.
├── node_modules
│   └── typescript
│       ├── AUTHORS.md
│       ├── CODE_OF_CONDUCT.md
│       ├── CopyrightNotice.txt
│       ├── LICENSE.txt
│       ├── README.md
│       ├── ThirdPartyNoticeText.txt
│       ├── bin
│       │   ├── tsc
│       │   └── tsserver
│       ├── lib(省略)
│       └── package.json
├── package.json
├── src
│   └── index.ts
├── tsconfig.json
└── yarn.lock

コンパイル実行&ファイル実行は、下記のコマンドでも可能(コンパイル後のファイルは生成されない)

yarn add -D ts-node
yarn ts-node ./src/index.ts 

参考:2章 - TypeScript:全体像

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)