「パッケージマネージャーの導入 ─ uv」「静的コード解析ツール ─ Ruff」「構造的パターンマッチ」「一歩進んだ型ヒントの活用」「テンプレート文字列リテラル ─ t-string」「コマンドラインツール – click」「TOMLファイルを扱う – tomllib」「非同期に対応したHTTPクライアント ─ HTTPX」
節タイトルそのままだ冗長かなと思いました。
パッケージマネージャーuv、とか、HTTPクライアントHTTPXとかでいいかなと
「パッケージマネージャーの導入 ─ uv」「静的コード解析ツール ─ Ruff」「構造的パターンマッチ」「一歩進んだ型ヒントの活用」「テンプレート文字列リテラル ─ t-string」「コマンドラインツール – click」「TOMLファイルを扱う – tomllib」「非同期に対応したHTTPクライアント ─ HTTPX」
節タイトルそのままだ冗長かなと思いました。
パッケージマネージャーuv、とか、HTTPクライアントHTTPXとかでいいかなと
版
トル
、
「」が区切りになるので「、」はなくてもいい派
節
節、トルでもいいのでは
前述のように
トルでも意味は通じそう
もの
機能
かなぁ
このなか
ドキュメント
ほとんどの
今見たら3.14の翻訳率は50%くらいだったので「多くの」くらいがよいと思います
はじめに
生成AIが台頭している今のタイミングで本書を手に取る意味、みたいなことは書かなくてもいいかなぁ。 普遍的な知識をつけるとか?
rules = TextFileKnowledgeSource(file_path="writing_rules.txt")
ここにコメントが欲しい
マネージャー LLM が各 Agent の成果物を確認し、妥当性をチェックしたうえで最終結果としてまとめる
これは具体的になにをやっているのかちょっとわからなかったです。
最後のブログ記事の内容を確認して、もともとのタスクの依頼内容を満たしているかをチェックしている? 満たしてなかったらどうなる?
マネージャー LLM がタスク全体を把握し、実行計画をたてる
ここもうちょい具体的に書いてくれた方が、コードをもとにCrewAIがなにをやってるか明確になると思いました。
タスク全体をTaskの内容から把握し、実行計画を立てる。実行計画では◯◯調査、◯◯調査を実施し、その結果をもとにトレンド分析し~~
書くAgentの役割や能力を踏まえ、各タスクを以下のように額Agentに割り当てる
◯◯調査、◯◯調査: データ収集専門家
みたいな
(
閉じ括弧がない。このカッコ不要そう?
LLM やそのバージョンによって異なるため
この説明だとLLMのバージョンが同じだったら同じ結果が返ってくると読める。
実際には実行するたびに微妙に違う結果が返ってくるのでは?
kickoff()
kickoff()メソッド
kickoff()は等幅フォントにしたい
。
デフォルトでは~~の説明が欲しい
一般向け
一般の読者向け
とか
トレンド
トレンド情報
かな
pip install "crewai[google-genai]" python-dotenv
そういえばコードに全体的にキャプションを入れたい
調査→分析→検証
これ、後の方に出てくるストーリーと同じですか?違ったら合わせて欲しい
。
実行したあとに幾つかログが抜粋で表示されていると、処理内容がイメージができていいかなと思いました。
次の行に「ログには主に以下の情報が」と書いてあるので、ログの例がほしいと思います
。
最初の例をYAMLも使った構成で書き直すとこうなります。 みたいなのが見れるとうれしいなー
各専門 Agent が Task 完了後に結果を マネージャー LLM に報告し、マネージャー LLM が最終成果物をユーザーに提出する
シーケンシャルな場合との違いがあまりピントこなかったです
# .env ファイルに環境変数を設定 OPENAI_API_KEY="your-openai-api-key" SERPER_API_KEY="your-serper-api-key"
MUST: これだとコマンドラインで環境変数を設定しているように見える。コードブロックを分けた方が良い
ツール
ツールの説明がここまであんまなかったので唐突に感じる。
します。
箇条書きは「だ、である」派
。
これも、先にどういう構成なのかを説明して欲しい。 図で示せるとわかりやすいかも。
task-attributes
tableが壊れとる...
List[BaseTool]
list[BaseTool] 派。BaseToolってなに?
Union[str, LLM, Any]
str | LLM | Any 派
Anyありなんかい!!
以下に
話が急に飛んでいる。
一度見出し「◯◯の主な引数」みたいなのを挟み
Agent、Task...には◯◯をするためにさまざまな引数があります。 以下に~~
見たいな文章がほしい。
。
SHOULD: コードの前に、どういうことをさせようとしているかの説明分がほしいです。 以下のコードのコメントを読めばわかるとは思うんですが、先に説明してからコードを読む方が、スムーズに理解できるかなと思いました
たとえばこういう感じかなと
最新のAI技術に対してわかりやすい記事を書くという目的で、調査員とライターの2人のメンバーがいて、調査員の調査した内容を元に~~~
dotenv
dotenvが必須かなと思ったけどそうじゃなくて環境変数を.envファイルに書きたいから使っているだけですよね。
ここでは環境変数を.envファイルに書いて~~~のためにdotenvを使用します。
みたいな説明がほしいかなと思いました
しています。
ここも箇条書きにするなら文体を揃えたい
本記事では触れませんが、より高度な制御をすることが可能です。興味のある方は以下を参照してください。
nits 箇条書きだと「体言止め」で文体が違うので、ここは普通の文章にした方がよいかと
選択肢オプションとして特定の拡張子を指定
ここも書き換えてください
以下の
1つの文で「以下」が連続しているので、こっちはトルでも意味が通じるかな。
ファイルパス引数として存在することを確認
上の文章と似た内容だけど微妙に情報が増えて箇条書きになっている。この箇条書きでなにを伝えたいかを直前に文章で書いて欲しい。
以下は〜〜です。 以下に〜〜を示します。
みたいな
click.Choice(["txt", "md"]
例なのでしょうがないけど、自分でファイル名を指定しつつ、拡張子も指定するというコマンドは、オプションの用途としてピンとこないなと思いました。
何か数え方のルールとかを変えられるといいんだけど。文字数でカウントするかバイト数でカウントするか、とか
required=
これも = をトルでいいと思う
default
キーハード引数を示すときに = って付けるのあんまり見たことないので、トルでいいと思います
。
nits: 表の文章は最後の。はトルでいいかなぁ
@click.command()
キャプションがない。
以降も同様
pass
ここに中身を入れて、実際に動作させた例がほしい
指定
オプションに値が
とか?
は
トル
オプションの後に値を指定しない。
これはコマンドで呼び出すときの話ですよね?ちょっとこの文章だけだと意味が取りにくい
長い形
「短縮形」と「長い形」という表現がいまいちだなと
短いオプション名と長いオプション名とか?
短縮形
表でまとめた方が見やすそう
例えば、--nameオプションは名前を指定するために使用されます.
これはなんか--nameは名前を指定するためだけにしか使われないように読めるので、ちょっと違うかなと。
例えば、名前を指定するための--nameオプション、などです。
とか?
テストを安全に出力することができる
ちょっと意味が分からなかったです。
:caption: clickの基本的な使用例 hello.py
なんか変。以降もcaptionになってない
あ
が
--help
これもバッククォートで囲む
などを
などのデコレーターを
サードパーティ製パッケージ
外部ライブラリ
にしたんじゃないっけか
作成
を作成
。
argparseについては「<project:#argparse>」を参照してください。
とか入れて欲しい
モジュール
標準ライブラリの、と書いてあるのでモジュールはトルでよいかと
@click.command()
バッククォートで囲んで欲しい
os.process_cpu_count()
バッククォートで囲んでほしい
free threading
毎回太字にしなくてよいかと。初出の時だけでよいのでは
Python 3.14
Python 3.13からサポートされていますが、ここでは3.14のことしか書かない?
https://docs.python.org/ja/3.14/howto/free-threading-python.html
コア開発者のモチベーションとしては
これはどこ情報なのか、が気になりました
完全に分離
完全に分離、とはどういう意味かがわかりにくい。
なにから完全に分離しているのか
サブインタプリタ
表記揺れ: インタープリター
実行環境のCPU数(os.process_cpu_count()が返す値)+4と32
CPU数(長い文章)+4、と書いてあるのでそれがまとまりだとわかりにくいと思います。
(os.process_cpu_count()が返す)実行環境のCPU数+4と32のどちらか
だと読みやすいかな
未取得結果の最大件数を指定し、指定しない場合はすべての要素が即座にスケジューリングされる
この表現ちょっとわかりにくいかなと思いました。
buffersizeが指定されると、その数のプロセスやスレッドなどがスケジュールされ、それ以外は待ちとなる、ということですよね。
「未取得結果の最大件数」という表現がわかりにくいなと思いました
...
インデントがずれている
un(coroutine, *, debug=False)
引数が増えているので確認してください
補足
捕捉
引数で受け取ったsecの秒数
コードを書き換えたのでこのコメントは正しくない
asyncio.run(coroutine, *, debug=False)
https://docs.python.org/ja/3/library/asyncio-runner.html#asyncio.run
3.12からloop_factory引数が増えてる
... # 時間のかかる処理
インデントが3文字になっている
複数組み込んでも
なにを複数組み込むのか?
実施
ruff checkとruff formatを実施
とか。なにを実施するか書いて欲しい
各種CI
pre-commitはCIじゃないかなー
各種ツールでruffを使用する方法、とか?
に行っておくと便利です。
日本語がなんか変です。
で行(おこな)っておくと?
それだけで
引数無しで
それだけで
引数無しで
quote-style = "double" # 文字列をダブルクォートで統一する indent-style = "space" # インデントはスペ
これデフォルト設定だからなー。 クォートをシングルにできるけど、設定なしの運用でいいんじゃない?みたいな記述がいいかなーって思ってます。
"
カンマを付けたい派
。
これはストーリーとしては、この前に ruff check --fix を実行していないといけないので、そのように手前で実行している必要がある
import sys import os
使われていないモジュールだとF401が出ちゃうのでisortの意味がない(fixできない)
無理やり使うモジュールを入れましょう
datetimeとかなにかをいれてメッセージに追加する感じで
)
文章(文章)。
が正しい書き方(のはず)
。
トル
なお
この手前でfixされたあとのexample.pyを表示して、import osが削除されていることを確認したい
す
す。
F系
系なくてもいい派です
またはruff.toml
下の設定例だとpyproject.tomlなので
前述の設定ファイルを用いて、にしてコードのキャプションに「説明 - pyproject.toml」とか書くのはどうでしょうか
check
checkコマンド
とか
ルールコードの
長いので、トルでも通じるかなと
表のタイトルを入れてください。
https://myst-parser.readthedocs.io/en/latest/syntax/tables.html#table-with-captions
と
と、
ここで、を打たないと「一部のルール」がFにもかかっているように読める。
もしくはE系の一部とF系のルールが
とか
flake8
Flake8 (以下同様
flake8
Flake8と最初は大文字かなと
indent-width = 4 # インデント文字数
同様にデフォルト設定っぽいものは除外して必要最低限にしてほしい
indent-width = 4 # インデント文字数
デフォルト設定を設定例に書いているのが気になります。
デフォルト設定はここにあることを示して、設定ファイルとしては必要最低限の記述例でいいかなと思います https://docs.astral.sh/ruff/configuration/
フォーマッター
整形
他の箇所と表現を合わせる
が記述されます。
を記述します。
前の文は主体が自分だったので
Ruffは、Astral社https://astral.shから提供さ
他のライブラリとかでuvを使ったインストールには触れていないので、ここはなくてもいいかなぁ
Resolved 29 packages in 11ms Installed 27 packages in 58ms (省略) + pytest-cov==7.0.0 (省略) + sphinx==9.0.4 (省略)
ここも両方指定した場合と同じとか、まるっと省略してもいいかも
olved 29 packages in 13ms Uninstalled 20 packages in 200ms Installe
このへんも2回目以降は省略しちゃってもいいんじゃないかな
uv venvコマンド以外に仮想環境を作成できるコマンド
いいと思います
、
や
する
箇条書きで体言止めと、だであるが混ざっているので、どちらかに統一したい派
uv pip list # パッケージ一覧を表示
ここまでの手順を再実行すると多分この結果は得られないはず。手前で環境作り直すとかした方がいいかも?
ampleprojectが削除されている
依存ライブラリも一緒に削除されているのがポイントかなと
uv.lock
uv lockコマンド
依存関係
こっちはまだ依存関係という言葉が残っている。タイトルと表現を合わせたい
uvで
ここはuv の節なので、「uvで」はなくてもいいかなと思った。他も同様
現在インストールされているPython環境の一覧を出力する
インストール可能な一覧とインストールされていたらその場所を出力している
現在インストールされているPython環境の一覧を出力する
インストール可能なPythonの一覧を出力する。が正しいです
List the available Python installations
コマンド名
uv pythonがない
ファイル名
README.mdも説明した方が良いのでは
ディレクトリもあるので「名前」としたい
ファイル、ディレクトリ
2回目は冗長なので「ファイル群」とかでよいかと
uvの主なコマンド
本書で紹介するuvのコマンド
でいいかな。主なというよりはこの書籍で紹介するものを列挙していると思うので
0.9.17
最新版の0.9.17
アンインストール
addは追加するだけどremoveはアンインストールするなので表現が揃っていない。 追加/削除 or インストール/アンインストールに揃えて欲しい
は
が
の方がいいかなー
uvx
uvx とバッククォートで囲みたい。以下同様
サードパーティ
外部パッケージによって提供されるツール
とか?
sample-script
.pyはつけない派?
PEP 723[4]
PEP 723で提案されたけどPyPA関連はのちのち変わっていくので、仕様としてはこちらを参照するのが適切です。
(PEPドキュメントの先頭にもそう書いてある)
https://packaging.python.org/en/latest/specifications/inline-script-metadata/#inline-script-metadata
サードパーティ
外部
。
この手順よりは、新規にディレクトリ作成、uv init実行した後に、pyproject.toml, uv.lockだけコピーしてuv sync実行するみたいな手順がいいのではと思った。
実際のユースケースに合わせる
。
uv pip installした場合はuv addと違ってpyproject.tomlとかuv.lockが更新されないということを書いた方がいいかなぁ
名
名を
uv.lockの更新があるかを事前に調べる
pyproject.tomlの設定を見て、今のuv.lockファイルに存在するパッケージのままか新しいバージョンが存在するかを調べる。
みたいな意味合いだと思います。
あと、これってどっちかというと hoge>4.0.0 とかかいていて、hogeの最新バージョンがでているか(pip list -O)みたいな使い方がメインかなと思ったんですが、そうではない?
pyproject.tomlを書き換えたのはここで例として示しているために必要なだけど、本来はpyproject.toml書き換えたらuv syncの方を使うかなと思ったので(uv 素人なのではずしてたらすいません)
uv.lock
uv.lockファイル
計測にはUnix系OSの標準コマンドであるtimeコマンドを使いました。
トルでもいいかな(あってもいいけど)
uv.lock
uv lock
uv.lockコマンド
uv.lockファイル
uv.lock
uv.lockファイル
(省略)
ハッシュの例はハッシュ値を省略しつつ1行くらいは載せて欲しいかな
ます。
てインストールします。 pyproject.tomlにはdevというセクション(?)が追加され~~
みたいな文章がほしい。
。
このときもpyproject.tomlの中は書き換えられるよ(ですよね?)とか説明があっていいと思う
依存関係にある
依存関係というよりも、「さきほど追加したパッケージが」とかいう説明でよいのではないか
Pythonパッケージがイ
pipコマンドと同様に、とかあってもいいかも
PyPIからダウンロードしてインストールされていることとか触れて欲しい。
依存関係を管理する
依存関係を管理するってちょっとイメージしにくいかなと思いました。
プロジェクトで使用するライブラリを管理する、とか?
実行後
コマンド実行後
利用できますが、
一文が長いので「利用できます。」で一度切ってもいいかも
もう一つの方法として
なにももう一つの方法なのか
仮想環境下のPythonを実行するもう一つの~
とか?
は
に
の方がいいかな
uv-example
さっきとは異なるディレクトリに作ったと言うことですかね。手順で mkdir uv-example がないのでちょっと混乱するかも
は
では
。
◯◯な場合に仮想環境を再作成します。
みたいな用途にも触れてくれるとうれしいなと思った。
「A virtual environment already exists at `.venv`. Do you want to replace it? [y/n]」という
長いし、トルでも意味は通じるかなと
確認するメッセージが表示されます。
を
コマンドを
では、
で
でよさそう
。
仮想環境を有効化した場合は、プロンプトにプロジェクト(ディレクトリ名)が表示されることにも言及して欲しい。
venvは作成したvenv名がプロンプトで表示されていたので
システム
ここで段落を変えてもいいかな
いないません。
typo: いません
.venvディレクトリが作成される
手順にlsを入れるといいかなと。 venvの方にはあった
。
uvで作成する仮想環境は、基本的にvenvで作るやつと同じだよ、みたいな説明がほしいかな
uv-example-script
.py は付けない?
てプロジェクト
Pythonプロジェクト
とか最初は書いておいた方がいいかなと
uv init
この手前に全体を俯瞰したいので、uvで提供しているコマンド一覧がほしい。
全部紹介しないなら、そのうち本書ではこれを紹介するよ、とか言ってほしい
。
これを紹介しているので、あえてバージョン指定してのインストールは教えなくてもいいかなと
特定のバージョンのuvをインストールする場合は
これ必要な場合ってありますか?説明しなくてもいいかなと思った
Pythonの標準パッケージマネージャーはpipですが、
pipはパッケージインストーラーであってマネージャーじゃないかなという意見
https://pip.pypa.io/en/stable/
あー、でもpipの方に「パッケージを管理する」って書いてるのか、じゃあこのままでいいかなぁ
True
nits: コメントでどういうチェックを有効にしたかかいてあるといいかも
起こし
起こり
したりとすると
したりすると
の
トル
Key/value pairs within tables are not guaranteed to be in any specific order.
日本語訳も併記して欲しい
また、parse_float引数にはカスタ
これ、紹介しなくてもいいんじゃないかな。使いどころがなさそう
誤差が出てもエラーにはならないため
これはよくあるエラーなのか?
よくあるエラーだと上にあるTOMLDecodeErrorが出るから、それを見てちゃんと対処してね、っていう話が適切かなと思いました。
どっちかというと周辺知識よりかなと思いました
浮動小数点
浮動小数点数
タイポ
綴り間違い
とかちゃんと書いておきたい
PEP 680においても、パッケージングツールなどでTOMLを読み込むことを目的としていることから、書き込みの必要はないとされています。 その理由としては、以下のようなことがあります。 TOMLのスタイル(インデントや引用符など)にゆらぎがあり、標準化しづらい コメントや書式などのスタイル関連のメタデータを含んだ出力を行うAPIの設計が複雑 現時点では除外する方向として、将来的に再検討する方が安全
ちょっと読みにくいかなと思いました。
PEP 680においても、以下の理由によりTOMLの読み込みのみで書き込みには対応しないことと記述してあります。
パッケージ
ライブラリ
サードパーティパッケージ
外部ライブラリ
サードパーティライブラリ
外部のライブラリ
nameが
バッククォートでかこんで欲しい
writer
最初にコメントで「# さまざまなデータ型を定義」みたいな文があるといいかなと思いました
だけ
のみ
挙げれています。
挙げられています。
最後までよんでPEPの話だと思ったので、この文の最初に
PEP 680中ではtomllibを標準ライブラリとする理由として~~~が挙げられています。
みたいに書いた方がいいかなと思いました。
標準サポートになることは
でTOMLフォーマットを標準サポートすることは
とか
パッケージングに選ばれている
パッケージに関する情報を記述するpyproject.tomlの
とか?(ちょっと表現がふわっとしている&省略されているかなと思った
3.11
Python 3.11
サポート
サポートが連続するので言い換えたい。
プログラミング言語にTOMLファイルに対応したライブラリがあります。
とか
ブーリアン
IMO: 真偽値の方が好み
print(tomllib.load(f))
結果が見にくいのでpprintしてほしい派
Required/NotRequiredの例
サンプルコードがちょっとわかりにくいかなと思いました。
基本的には必須で、任意のフィールドがあるときは NotRequired を指定する
逆に、ほとんど任意で一部必須の場合には、total=Falseを指定して、必須のフィールドにのみRequiredを指定する
だと思うので、この2つを分けて説明するのがいいと思います。
PEP 655
リンクがほしい
本来の引数
「本来の引数」というのが何を指しているのかがちょっとわからないなと思いました
TypedDict
TypedDictの方が使うことが多いと思うので、Anyの次でいいかなと思った
そのまま維持したままラップしたいとき
nits: まま、が連続するので冗長かな
「引数を維持したまま」で意味は通じそう
デコレータ
nits: 表記揺れ: デコレーター
Python 3.12以降では
この文章を5.16のコードの前に持っていく方がいいかなと思いました
PEP 695
リンクを入れて欲しい(脚注にURLが入るはず)
mypy.ini .mypy.ini pyproject.toml setup.cfg
ここ、インデントした方がいいかも?
どちらが主流になるか(またはどちらも廃れるか?)は
今後主流になるかは
くらいでいいのでは
print( convert_movie_info_into_md( "エピソード4
以下は冗長なので省略でよさそう
前述の「Pyreflyの使い方」で使ったサンプルコードを対象に
これだと短すぎるので、なんかのリポジトリをまるっと型チェックとかする方がいいかなと思いました
example.py
このリンクがわかりにくいので、説明を書いて欲しいかな。
サンドボックスでexample.pyを◯◯した結果
みたいな
比較してみる
nits: 比較する、でいいかなと
VSCode
VS Codeと書くのが正しいはず https://code.visualstudio.com/
動作する
nits: 体言止めと~~するがまざっているのでどっちかに統一がいかな
高速に動作 付ける機能
でよさそう
。
あとで比較対象にもなっているので、「型チェッカーにはmypy、pyrightなどがありますが、Pyrefryには◯◯な特徴があります」みたいな感じの文章があるといいなと思いました