Skip to content

Commit e077b47

Browse files
committed
3章までGeminiに書かせたものをコピペ
1 parent a982136 commit e077b47

File tree

5 files changed

+583
-4
lines changed

5 files changed

+583
-4
lines changed

app/[docs_id]/page.tsx

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,33 @@ const components: Components = {
3636
<h1 className="text-2xl font-bold my-4" {...props} />
3737
),
3838
h2: ({ node, ...props }) => (
39-
<h2 className="text-xl font-semibold my-3" {...props} />
39+
<h2 className="text-xl font-bold mt-4 mb-3 " {...props} />
4040
),
4141
h3: ({ node, ...props }) => (
42-
<h3 className="text-lg font-medium my-2" {...props} />
42+
<h3 className="text-lg font-bold mt-4 mb-2" {...props} />
43+
),
44+
p: ({ node, ...props }) => <p className="mx-2 my-2" {...props} />,
45+
ul: ({ node, ...props }) => (
46+
<ul className="list-disc list-outside ml-6 my-2" {...props} />
47+
),
48+
ol: ({ node, ...props }) => (
49+
<ol className="list-decimal list-outside ml-6 my-2" {...props} />
50+
),
51+
li: ({ node, ...props }) => <li className="my-1" {...props} />,
52+
a: ({ node, ...props }) => <a className="link link-primary" {...props} />,
53+
code: ({ node, ...props }) => (
54+
<code
55+
className="bg-base-200 border border-base-300 p-1 rounded font-mono text-sm "
56+
{...props}
57+
/>
58+
),
59+
pre: ({ node, ...props }) => (
60+
<pre
61+
className="bg-base-200 border border-primary mx-2 my-2 px-4 py-2 rounded-lg font-mono text-sm overflow-x-auto"
62+
{...props}
63+
/>
64+
),
65+
hr: ({ node, ...props }) => (
66+
<hr className="border-primary my-4" {...props} />
4367
),
44-
p: ({ node, ...props }) => <p className="my-2" {...props} />,
4568
};

app/sidebar.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ export function Sidebar() {
1010
</h2>
1111
<ul className="menu w-full">
1212
<li>
13-
<Link href="/1">1</Link>
13+
<Link href="/python-1">python-1</Link>
14+
</li>
15+
<li>
16+
<Link href="/python-2">python-2</Link>
17+
</li>
18+
<li>
19+
<Link href="/python-3">python-3</Link>
1420
</li>
1521
</ul>
1622
</div>

docs/python-1.md

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
# 第1章: Pythonへようこそ:環境構築と基本思想
2+
3+
プログラミング経験者にとって、新しい言語を学ぶ上で最も重要なことの一つは、その言語特有の「流儀」や設計思想を理解することです。この章では、Pythonの開発環境を構築し、Pythonがどのような考え方で作られているのかを探ります。
4+
5+
## Pythonのインストールとバージョン管理
6+
7+
Pythonを始めるには、まずお使いのコンピュータにPythonをインストールする必要があります。しかし、プロジェクトごとに異なるバージョンのPythonを使いたい場面は頻繁にあります。そこで、複数のPythonバージョンを簡単に切り替えて管理できる **`pyenv`** の利用を強く推奨します。
8+
9+
**`pyenv` とは?**
10+
`pyenv` は、システム全体に影響を与えることなく、ユーザーのホームディレクトリ内で複数のPythonバージョンを管理できるツールです。これにより、「プロジェクトAではPython 3.9を、プロジェクトBではPython 3.11を使う」といったことが容易になります。
11+
12+
### インストール手順(macOS/Linuxの例):
13+
Homebrew(macOS)やgitを使って簡単にインストールできます。
14+
15+
1. **pyenvのインストール:**
16+
17+
```bash
18+
# Homebrewの場合 (macOS)
19+
brew install pyenv
20+
```
21+
22+
2. **シェルの設定:**
23+
インストール後、以下のコマンドをシェルの設定ファイル(`.zshrc`, `.bash_profile`など)に追加します。
24+
25+
```bash
26+
eval "$(pyenv init --path)"
27+
eval "$(pyenv init -)"
28+
```
29+
30+
3. **Pythonのインストール:**
31+
利用可能なバージョンを確認し、特定のバージョンをインストールします。
32+
33+
```bash
34+
# インストール可能なバージョンの一覧を表示
35+
pyenv install --list
36+
37+
# 例として Python 3.11.5 をインストール
38+
pyenv install 3.11.5
39+
```
40+
41+
4. **バージョンの切り替え:**
42+
`pyenv` を使うと、ディレクトリごと、またはグローバルに使用するPythonのバージョンを切り替えられます。
43+
44+
```bash
45+
# このディレクトリでは 3.11.5 を使う
46+
pyenv local 3.11.5
47+
48+
# グローバルで 3.11.5 を使う
49+
pyenv global 3.11.5
50+
```
51+
52+
Windowsユーザーの方は、`pyenv`のWindows版である **`pyenv-win`** を利用すると同様の環境を構築できます。
53+
54+
55+
## 対話モード(REPL)の活用
56+
57+
Pythonには **REPL** (Read-Eval-Print Loop) と呼ばれる対話モードが備わっています。これは、コードを1行書くたびに即座に実行・評価し、結果を返してくれる機能です。他の言語での経験者にとっても、新しいライブラリの動作確認や、ちょっとした文法のテストに非常に便利です。
58+
59+
ターミナルで `python` と入力するだけで起動します。
60+
61+
```python
62+
$ python
63+
Python 3.11.5 (main, Aug 24 2023, 15:09:47) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
64+
Type "help", "copyright", "credits" or "license" for more information.
65+
>>> message = "Hello, Python!"
66+
>>> print(message)
67+
Hello, Python!
68+
>>> 1 + 2 * 3
69+
7
70+
>>> exit()
71+
```
72+
73+
より高機能なREPLとして **IPython****Jupyter Notebook** も人気があります。これらはコード補完や履歴管理、インラインでのグラフ描画など、さらに強力な機能を備えています。
74+
75+
76+
## スクリプトの実行方法
77+
78+
一連の処理をまとめて実行する場合は、`.py` という拡張子を持つファイルにコードを記述します。例えば、`hello.py` というファイルを以下のように作成します。
79+
80+
**hello.py**
81+
82+
```python
83+
def main():
84+
print("Hello from a Python script!")
85+
86+
if __name__ == "__main__":
87+
main()
88+
```
89+
90+
`if __name__ == "__main__":` は、このスクリプトが直接実行された場合にのみ `main()` 関数を呼び出すためのお決まりの書き方です。他のスクリプトからモジュールとしてインポートされた際には `main()` は実行されません。
91+
92+
このスクリプトを実行するには、ターミナルで以下のようにコマンドを入力します。
93+
94+
```bash
95+
python hello.py
96+
```
97+
98+
出力結果:
99+
100+
```
101+
Hello from a Python script!
102+
```
103+
104+
105+
## Pythonの禅 (The Zen of Python)
106+
107+
Pythonには、その設計哲学を端的に表した **「The Zen of Python」** という短い詩のような文章があります。これはPythonの思想を理解する上で非常に重要です。対話モードで `import this` と入力すると表示されます。
108+
109+
```python
110+
>>> import this
111+
The Zen of Python, by Tim Peters
112+
113+
Beautiful is better than ugly.
114+
Explicit is better than implicit.
115+
Simple is better than complex.
116+
Complex is better than complicated.
117+
Flat is better than nested.
118+
Sparse is better than dense.
119+
Readability counts.
120+
...
121+
```
122+
123+
「美しいは醜いより良い」「明示的は暗黙的より良い」「シンプルは複雑より良い」といった言葉は、Pythonでコードを書く上での指針となります。Pythonらしいコードとは、**読みやすく、シンプルで、意図が明確なコード**であると言えます。
124+
125+
## パッケージ管理ツール `pip` と仮想環境 `venv`
126+
127+
Pythonの強力なエコシステムは、豊富なサードパーティ製パッケージ(ライブラリ)によって支えられています。これらのパッケージを管理するのが **`pip`** です。
128+
129+
**`pip`** はPythonの標準パッケージインストーラで、例えばデータ分析で人気の `pandas` をインストールするには、以下のコマンドを実行します。
130+
131+
```bash
132+
pip install pandas
133+
```
134+
135+
しかし、プロジェクトAでは `pandas` のバージョン1.0が必要で、プロジェクトBでは2.0が必要、といった依存関係の衝突が起こる可能性があります。これを解決するのが **仮想環境** です。
136+
137+
**`venv`** は、プロジェクトごとに独立したPython環境を作成するための標準モジュールです。仮想環境を有効にすると、`pip` でインストールしたパッケージはその環境内にのみ保存され、他のプロジェクトやシステムのPython環境を汚染しません。
138+
139+
**仮想環境の作成と利用:**
140+
141+
1. **作成:** プロジェクトディレクトリで以下のコマンドを実行します。(`.venv` は仮想環境を保存するディレクトリ名で、慣例的によく使われます)
142+
143+
```bash
144+
python -m venv .venv
145+
```
146+
147+
2. **有効化 (Activate):**
148+
149+
```bash
150+
# macOS / Linux
151+
source .venv/bin/activate
152+
153+
# Windows (Command Prompt)
154+
.\.venv\Scripts\activate
155+
```
156+
157+
有効化すると、プロンプトの先頭に `(.venv)` のような表示が追加され、このターミナルセッションでは仮想環境が使われていることが分かります。
158+
159+
3. **パッケージのインストール:**
160+
この状態で `pip install` を実行すると、パッケージは `.venv` ディレクトリ内にインストールされます。
161+
162+
```bash
163+
(.venv) $ pip install requests
164+
```
165+
166+
4. **無効化 (Deactivate):**
167+
仮想環境から抜けるには `deactivate` コマンドを使います。
168+
169+
```bash
170+
(.venv) $ deactivate
171+
```
172+
173+
`pyenv` でPythonのバージョンを管理し、`venv` でプロジェクトごとのパッケージを管理する。この2つを組み合わせることが、現代的なPython開発の基本スタイルです。

docs/python-2.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# 第2章: Pythonの基本構文とデータ型
2+
3+
他の言語での経験を活かし、Pythonの基本的な文法と組み込み型を素早くキャッチアップしましょう。特に、多くの静的型付け言語と異なる**インデントによるブロック表現****動的型付け**は、Pythonを理解する上で最初の重要なポイントです。
4+
5+
## インデントが持つ意味: 波括弧 `{}` からの解放
6+
7+
多くのプログラミング言語では、`if`文や`for`ループなどのコードブロックを波括弧 `{}` で囲みます。しかし、**Pythonではインデント(字下げ)そのものがコードブロックを定義します**。これはPythonの構文における最大の特徴の一つです。
8+
9+
一般的に、インデントには**スペース4つ**を使用することが強く推奨されています(PEP 8スタイルガイド)。
10+
11+
**Java/C++でのブロック表現:**
12+
13+
```java
14+
if (score > 80) {
15+
System.out.println("合格です。");
16+
System.out.println("おめでとうございます!");
17+
}
18+
```
19+
20+
**Pythonでのブロック表現:**
21+
22+
```python
23+
score = 85
24+
if score > 80:
25+
# このブロックはインデントによって定義される
26+
print("合格です。")
27+
print("おめでとうございます!")
28+
29+
print("処理終了") # インデントが戻ると、ifブロックの外側
30+
```
31+
32+
インデントを間違えると `IndentationError` という文法エラーが発生します。これにより、誰が書いてもコードの見た目が統一され、可読性が高まるというメリットがあります。
33+
34+
## 変数宣言と動的型付け
35+
36+
静的型付け言語(Java, C++, C\#など)に慣れている方にとって、Pythonの変数宣言は非常にシンプルに感じられるでしょう。
37+
38+
**Pythonでは、変数の型を事前に宣言する必要はありません**。変数への代入が初めて行われたときに、変数が作成され、代入された値の型が自動的にその変数の型となります。これを**動的型付け**と呼びます。
39+
40+
```python
41+
# 変数 `count` は整数(int)型として自動的に解釈される
42+
count = 100
43+
print(f"値: {count}, 型: {type(count)}")
44+
45+
# 同じ変数に別の型(文字列)を再代入できる
46+
count = ""
47+
print(f"値: {count}, 型: {type(count)}")
48+
```
49+
50+
上記の例のように、`count` という同じ名前の変数に、最初は整数を、次に文字列を代入できます。`type()` 関数は、変数が現在どの型を持っているかを確認するのに便利です。
51+
52+
## 基本的なデータ型
53+
54+
ここでは、プログラミングで頻繁に使用される基本的なデータ型を紹介します。
55+
56+
### 数値 (`int`, `float`)
57+
58+
Pythonには整数 (`int`) と浮動小数点数 (`float`) があります。型の区別は自動的に行われます。
59+
60+
```python
61+
# 整数 (int)
62+
x = 10
63+
64+
# 浮動小数点数 (float)
65+
y = 3.14
66+
67+
# 演算
68+
print(x + y) # 結果は float になる -> 13.14
69+
print(x * 2) # -> 20
70+
print(x / 3) # 通常の除算 -> 3.333...
71+
print(x // 3) # 整数の除算(切り捨て) -> 3
72+
print(x % 3) # 剰余 -> 1
73+
print(x ** 3) # べき乗 -> 1000
74+
```
75+
76+
### 文字列 (`str`)
77+
78+
文字列はシングルクォート `'` またはダブルクォート `"` で囲みます。どちらを使っても機能的な違いはありません。
79+
80+
```python
81+
message1 = "こんにちは、世界"
82+
message2 = 'Hello, World!'
83+
84+
# 文字列の連結
85+
greeting = message1 + " & " + message2
86+
print(greeting)
87+
88+
# 文字列の繰り返し
89+
separator = "-" * 10
90+
print(separator) # -> ----------
91+
```
92+
93+
**f-stringによるフォーマット**
94+
他の言語での文字列フォーマット(`printf``String.format`)に相当するものとして、Python 3.6以降では**f-string**が推奨されます。非常に直感的で強力です。
95+
96+
文字列の前に `f` を置き、波括弧 `{}` の中に変数名や式を直接記述できます。
97+
98+
```python
99+
name = "佐藤"
100+
age = 28
101+
point = 88.5
102+
103+
# 従来の方法(少し面倒)
104+
# print("名前: " + name + ", 年齢: " + str(age) + "点")
105+
106+
# f-string を使った方法(推奨✨)
107+
profile = f"名前: {name}, 年齢: {age}, 点数: {point}"
108+
print(profile) # -> 名前: 佐藤, 年齢: 28, 点数: 88.5
109+
110+
# f-string内では計算も可能
111+
print(f"{name}さんは10年後、{age + 10}歳です。")
112+
```
113+
114+
### 真偽値 (`bool`)
115+
116+
真偽値は `True` または `False` の2つの値を持ちます。**先頭が大文字であることに注意してください**
117+
118+
```python
119+
is_active = True
120+
is_admin = False
121+
122+
# 論理演算子 (and, or, not)
123+
print(f"Active AND Admin: {is_active and is_admin}") # -> False
124+
print(f"Active OR Admin: {is_active or is_admin}") # -> True
125+
print(f"NOT Active: {not is_active}") # -> False
126+
```
127+
128+
## 型ヒント (Type Hints) の紹介
129+
130+
動的型付けはコードを素早く書ける一方で、大規模なプロジェクトやチーム開発では、関数がどのような型の引数を期待し、何を返すのかが分かりにくくなることがあります。
131+
132+
そこでPython 3.5から導入されたのが**型ヒント**です。これは、変数や関数の引数、戻り値に「期待される型」を注釈として付与する機能です。
133+
134+
**重要**: 型ヒントはあくまで「ヒント」であり、Pythonのインタプリタはこれを**実行時に強制しません**。しかし、エディタや静的解析ツール(MyPyなど)がこのヒントを解釈し、型の不一致を開発段階で警告してくれるため、コードの可読性と堅牢性が大幅に向上します。
135+
136+
```python
137+
# nameはstr型、ageはint型を期待し、戻り値はstr型であることを示す
138+
def create_user_profile(name: str, age: int) -> str:
139+
return f"ユーザー名: {name}, 年齢: {age}"
140+
141+
# 正しい使い方
142+
user1 = create_user_profile("田中", 35)
143+
print(user1)
144+
145+
# 変数にも型ヒントを付けられる
146+
user_id: int = 101
147+
148+
# --- 型ヒントに反する使い方 ---
149+
# 警告が出る可能性があるが、実行はできてしまう
150+
user2 = create_user_profile("鈴木", "25歳") # ageに文字列を渡している
151+
print(user2) # -> ユーザー名: 鈴木, 年齢: 25歳
152+
```
153+
154+
静的型付け言語の経験者にとって、型ヒントは馴染みやすく、動的言語の柔軟性と静的解析の安全性を両立させるための強力なツールとなるでしょう。
155+
156+
-----
157+
158+
この章では、Pythonの構文の基礎となるインデントルール、柔軟な動的型付け、そして基本的なデータ型について学びました。特にf-stringと型ヒントは、モダンなPython開発における必須知識です。
159+
160+
次の章では、複数の要素をまとめて扱うための強力なデータ構造である**リスト****タプル**について詳しく見ていきます。

0 commit comments

Comments
 (0)