IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python ランダムな文字列生成

どうも、nippa です。

テストデータ作るときに、数字は簡単に乱数生成できますが、

文字列はどうするのか気になったので、まとめておきます。

環境

アルファベット 1 文字のランダム生成(chr)

1 文字のアルファベットの生成は chr と乱数を使って生成できます。

アルファベットの小文字は chr で ASCII コードポイント 97 から 123 を指定することで表示できます。

for n in range(97, 123):
     print(chr(i))

指定する i を乱数で指定すればアルファベットをランダムは 1 文字生成できます。

import random

# 小文字 a-z
print(chr(random.range(97, 123))

大文字の場合は chr の ASCII コードポイントは 65 から 91 になります。

import random

# 大文字 A-Z
print(chr(random.range(65, 91))

アルファベット 1 文字のランダム生成(string)

python 標準の string を利用する方法だと、少し手間ですが、文字列生成のときは便利です。

import string

# 小文字 a-z
for n in string.ascii_lowercase:
     print(n)

# 大文字 a-z
for n in string.ascii_uppercase:
     print(n)

# 小文字・大文字 a-Z
for n in string.ascii_letters:
     print(n)

# 数字(10進数)
for n in string.digits:
     print(n)

# 数字(16進数)
for n in string.hexdigits:
     print(n)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
for n in string.punctuation:
     print(n)

公式のページを見てもらうと String ライブラリの詳細が書かれています。

random ライブラリを使ってランダム生成します。

import random
import string

# 小文字 a-z
random.choice(string.ascii_lowercase)

# 大文字 a-z
random.choice(string.ascii_uppercase)

# 小文字・大文字 a-Z
random.choice(string.ascii_letters)

# 数字(10進数)
random.choice(string.digits)

# 数字(16進数)
random.choice(string.hexdigits)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
random.choice(string.punctuation)

ランダムな文字列の生成

上で述べた、String ライブラリと random ライブラリを利用した文字のランダム生成を任意の長さに拡張します。

小文字だけの場合、

import random
import string


n = 10
random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
random_chr = "".join(random_list)

print(random_chr)

で生成できます。 n の値を変えれば任意になるので関数化すると、

import random
import string


def ramdom_lowercase(n: int) -> str:
    random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
    return "".join(random_list)

となります。大文字・小文字・区切り文字からランダム生成する場合は、

import random
import string


def ramdom_chr(n: int) -> str:
    random_list = [random.choice(string.ascii_ascii_letters + string.punctuation) for n in range(n)]
    return "".join(random_list)

で関数化できます。

感想

テストデータでデータを突っ込むときに使えるかと思いまとめてみました。

手作業で作っていられない膨大なデータはこれで生成しましょう!

ではでは、また次回。

Next.js + Typescriptの環境構築

どうも、nippa です。

フロントを触り始めるために、Next.js を利用しようと思っています。

今回は Next.js + Typescript の環境構築方法を紹介します。

環境

1. create-next-app を利用した構築

今回は create-next-app を使って、環境を構築します。

# npmの場合
npx create-next-app@latest --typescript

# yarnの場合
yarn create next-app --typescript

実行方法は以下の通りです。

# npmの場合
npx dev

# yarnの場合
yarn dev

デフォルトであればlocalhost:3000で起動されます。

2. create-next-app コマンドをインストールして、環境構築

テンプレートを使う場合に便利なので、インストールしておいても良いかもしれません。

# npmの場合
npm install --global @create-next-app

# yarnの場合
yarn global add @create-next-app

create-next-app でのテンプレートを指定して、環境を構築できます。

create-next-app [プロジェクト名] --typescript --template [テンプレート名]

テンプレート一覧はここから確認できます。

テンプレートを利用しない場合は、テンプレートオプションを利用しないか、値をdefaultにしてください。

テンプレートによっては development のパッケージがインストールされないものがありますので、package.jsonを確認の上、以下をインストールしてください。

# npmの場合
npm install --save-dev typescript @types/react @types/react-dom @types/node

# yarnの場合
yarn add --save-dev typescript @types/react @types/react-dom @types/node

next の起動は、

# npmの場合
npx dev

# yarnの場合
yarn dev

で起動して、デフォルトであればlocalhost:3000で起動されます。

3. 手動で必要なパッケージをインストール

# npmの場合
npm install next react react-dom

# yarnの場合
yarn add next react react-dom

packege.jsonは自身で修正が必要です。

感想

next.js の環境構築方法をざっとまとめてみました。

create-next-app とテンプレートを利用するのが便利かと思います。

next.js はこれからなので、是非使ってみてください!

ではでは、また次回。

本紹介「図解 コンサル一年目が学ぶこと」

どうも、nippa です。

久しぶりに本の紹介です。

今回は「図解 コンサル一年目が学ぶこと 著者:大石哲之Amazon リンク)」を紹介します。

コンサル以外の職種の方こそ読むべき本かと思っています。

エンジニアで言えば、コーディングのお作法はというより上流工程の方は特に読むべきだと思います。

この本の読み方

この本の特徴としては、

  • 各項の明確な命題が定義されている
  • 具体例が図で表示されている
  • 重要な文は太文字・ラインが引かれている

なので、うまくこれを組み合わせると、短時間で効率よく読めると思います。

必要な情報だけを得るような読み方で読んでみました。

  1. 図解なので、各項の図を見る
  2. 図を見た後で、各項の要点を読み抽象的な内容を理解する。
  3. それでも理解できない場合は、項を読み始める

じっくり読まなくても良いと思います。

この本は「コンサル一年目が学ぶこと 著者:大石哲之」の図解が追加されてたものですが、細かい内容としては、2014 年の方が詳しく書かれています。

こちらの本の記事も書いていますので、参考にしてください。

timesaving.hatenablog.com

学べる内容

4つの章があり、章の内容は以下のような感じです。

  • ビジネスでの話し方
  • ビジネスの思考方法
  • 効率のよいデスクワークの方法
  • プロフェッショナルとはなにか?

必要なところを読むだけでもよいと思います。

話し方、思考方法の部分に目を通すのはおすすめです。

感想

エンジニアだからと言って、コミュニケーションは不要とはならないです。

仕事の仕方の勉強としてはおすすめですね。

ぜひ読んでみてはいかかがでしょうか。

ではでは、また次回。

商品ページはこちら: 図解 コンサル一年目が学ぶこと 著者:大石哲之

Python Poetry主なコマンド一覧

どうも、nippa です。

Python パッケージ管理に Poetry を使ってるので使いそうな poetry でコマンドについてまとめておきます。

Poetry のインストール方法については、前回の記事を確認してください。

https://timesaving.hatenablog.com/entry/2022/02/05/150000timesaving.hatenablog.com

Poetry1.2のアップデート情報はこちらの記事にまとめています。

timesaving.hatenablog.com

環境

  • macOS 11.6
  • Poetry 1.1.12 / 1.2

Poetry の主なコマンド一覧

コマンド(Poetry 1.1) コマンド(Poetry 1.2) 内容
poetry init poetry init pyproject.toml の初期設定
poetry new [path] poetry new [path] 指定した path で python のプロジェクトを作成
poetry add [パッケージ名] poetry add [パッケージ名] 本番用のパッケージの追加
poetry add -D [パッケージ名] poetry add [パッケージ名] -G dev 開発用のパッケージの追加
poetry config --list poetry config --list config の確認
poetry check poetry check pyproject.toml の内容をチェック
poetry env info poetry env info Poetry の環境情報を表示
poetry install poetry install poetry.lock のパッケージをインストール(開発用パッケージも含む)
poetry install --no-dev poetry install --without=dev poetry.lock のパッケージをインストール(開発用パッケージは含まない)
poetry update poetry update すべてのアップデート |
poetry update [パッケージ名] poetry update [パッケージ名] 指定したパッケージのアップデート |
poetry update --no-dev poetry update --only=main 本番用パッケージのみをアップデート
poetry update --dry-run poetry update --dry-run パッケージのインストールはせずにアップデートを確認
poetry run [パッケージコマンド] poetry run [パッケージコマンド] パッケージコマンドの実行 ex) poetry run pytest / poetry run black
poetry remove [パッケージ名] poetry remove [パッケージ名] パッケージの削除
poetry search [キーワード] poetry search [キーワード] キーワードを含むパッケージの検索
poetry version poetry version プロジェクトのバージョン表示
poetry self update poetry self update poetry のアップデート

感想

poetry -h または poetry [サブコマンド] -hで各コマンドの詳細が見れますので、そちらで確認してみてください。

どんなコマンドがあるか調べてみました。

ではでは、また次回。

Python Poetryでのパッケージ管理

どうも、nippa です。

Python 記事は久しぶりになります。

今回は Python のパッケージの管理方法についてです。javascript や node.js、typescript だと npm、yarn などのパッケージ管理ツールがあります。

Python では requirements.txt を使って管理することが多い印象ですが、同じパッケージを2重でもったりするため非常に効率が悪くなりがちです。

そこで今回は、npm、yarn などの Python バージョンである Poetry についてまとめたいと思います。

Python Poetry 公式

環境

Poetry システム要件

プラットフォームは Windows/ macOS / Linux に対応しています。 現在は Python 2.7 もしくは Python3.5 以上であれば利用可能となっています。

ただし、公式としては今後システム要件を Python 3.6 以上でマルチプラットフォームで同等になるような対応を目指しているということなので、今後も使える形で記事をまとめたと思います。

Poetry のインストール

macOS / Linux の場合は以下の curl を使ってインストール可能です。

Python 3.6 以上のみ対応

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

pip 等でもインストール可能ですが、公式は推奨していません。なので、推奨方法でのインストールのみ記載しています。

Path の設定

Poetry のインストール先は$HOME/.local/binなので、.zshrc / .bashrc に Path を通します。

# zshrc
echo 'export PATH="$HOME/.local/bin:$PATH"' > ~/.zshrc

# bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' > ~/.bashrc

以前のバージョンだと$HOME/.poetry/bin:$PATHにインストールされているので注意してください

サブコマンドの補完の設定

Poetry のサブコマンドのタブ補完をログインシェルで有効にしておくと、コマンドを検索する頻度が大幅に減るのでおすすめします。

タブ補完の設定は人により違いますので、環境に合わせて設定してください。

# Zsh (Homebrew)
poetry completions zsh > $(brew --prefix)/share/zsh/site-functions

# Zsh
poetry completions zsh > ~/.zfunc/_poetry

# Bash
poetry completions bash > /etc/bash_completion.d/poetry.bash-completion

# Bash (Homebrew)
poetry completions bash > $(brew --prefix)/etc/bash_completion.d/poetry.bash-completion

これで Poetry の設定は完了です。

プロジェクトでの Poetry の設定

poetry-testを作業ディレクトリとします。

mkdir poetry-test
cd poetry-test

Poetry の初期設定

以下のコマンドで Poetry の初期設定を行います。

poetry init

プロジェクトの設定を聞かれます。必要に合わせて設定します。

This command will guide you through creating your pyproject.toml config.

Package name [poetry-test]:
Version [0.1.0]:
Description []:
Author [(Gitユーザー設定), n to skip]:
License []:
Compatible Python versions [^3.9]:

Would you like to define your main dependencies interactively? (yes/no) [yes]
You can specify a package in the following forms:
  - A single name (requests)
  - A name and a constraint (requests@^2.23.0)
  - A git url (git+https://github.com/python-poetry/poetry.git)
  - A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop)
  - A file path (../my-package/my-package.whl)
  - A directory (../my-package/)
  - A url (https://example.com/packages/my-package-0.1.0.tar.gz)

Search for package to add (or leave blank to continue):

Would you like to define your development dependencies interactively? (yes/no) [yes]
Search for package to add (or leave blank to continue):

Generated file

[tool.poetry]
name = "poetry-test"
version = "0.1.0"
description = ""
authors = ["(Gitユーザー設定)"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"


Do you confirm generation? (yes/no) [yes]

pyproject.tomlが生成され、このファイルに設定が記載されていますので、後ほど変更も可能です。

pyproject.tomlは以下のような内容になっています。

[tool.poetry]
name = "poetry-test"
version = "0.1.0"
description = ""
authors = ["author name"]

[tool.poetry.dependencies]
python = "^3.9"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

Porter のパッケージ管理のコマンド

Poetry で使う必要最低限のコマンドをまとめておきます。

  • 本番環境へのパッケージの追加
poetry add [パッケージ名]
  • 開発環境へのパッケージの追加
poetry add -D [パッケージ名]
  • パッケージコマンドの実行
poetry run [コマンド]
  • パッケージの削除
poetry remove [パッケージ名]
  • poetry.lock に記載のパッケージのインストール
poetry install
  • package のアップデート
poetry update [パッケージ名]

インストールしたパッケージは.venv/lib/python[version]/site-packagesにインストールされます。

パッケージを追加するとpoetry.lockが生成され、依存関係が記載されます。

感想

Python でパッケージ管理をするために、Poetry についてまとめました。

他にもパッケージ管理ツールはありますが、しばらく Poetry を使おうと思ってます。

現状の python の環境が複雑化してきており、以下のような状況になっています。

anyenv -> pyenv -> miniconda3(localhost) / poetry(project)

素で anaconda をインストールのは brew との衝突もあるので、したくないところです。

しばらくこの構成で様子をみたいと思います。

ではでは、また次回。