Last Updated: 2/6/2024, 5:44:57 AM

# このサイトの趣旨

公式ドキュメントや
ソースコードを読む
きっかけに
なることです。

以下、こちらの方の文章を引用させていただきます。

全部は無理でも、とっかかりになればと思いこのサイトを作りました。 自分も今でも読んでいて、全然わからないことだらけです。 最悪なのは、大抵の場合、ソースコードはおろかチュートリアルでさえ、 公式ドキュメントは、難しかったりします。 僕もわからないことを調べようとして初めて公式ドキュメントを読んだとき、こんな気分になりました笑

# 深い谷

市販の入門書やチュートリアルには優れたものがたくさんあります。 しかし、ソースコードとの間には、とても深い谷があるように思います。 なぜ、このようなことが起こるのでしょうか?

もちろんいくつか要因はあると思うのですが、 その中の1つに Python の混みいった機能を使っていることが挙げられると思います。 そんな強力な機能を使われると、読みにくくなったりするので、 必ずしも素晴らしいことではないのかなとも思ったり、思わなかったりします。

強力な機能
このような機能は避ける。
Google Python スタイルガイド (opens new window)

しかし、よく使われているのを目にするのは確かです。 そのためソースコードを読む際に、 強力な機能が使われていることが、 物凄い精神的な負荷となる1つの要素になります。 GitHub にせっかく良質なソースコードはあるのに、読むことさえしたくないのです。

実際に使われているソースコードに触れられるようになるというのは、 とても良い機会のように感じます。 このサイトの内容だけで触れることはできなくても、 近づいていきたいというのが1つの思いです。

成長するには良いポジションが必要だそうです。 GitHub などに上がっている優れたソースコードは、 そういった機会のごく一部だけかもしれませんが提供してくれるのではないかと感じています。 書くことはできなくても、読ませてもらうことはできます。

夢のない話なんですが、実際には、どんなに努力しても、 人が育ってポジションにふさわしい人材になるということはほとんどないんですよ。 現実はその逆で、「ポジションが人を育てている」というのが実態です。
「努力すればスキルが向上して上に昇れる」というのは幻想 (opens new window)

# どうやって?

Python が、どのようにして動いているのか How、なぜそのように動いているのか Why について理解を深めます。 このサイトでは、最初に習う代入, クラス定義文, if 文, for 文 という 全てありきたりなものを出発点にして少しずつ掘り下げていきます。

その上で GitHub 上のコードを読む心理的な壁を取り払うことを目的にしています。 カテゴリは大きく分けて3つです。 まず「オブジェクト」、「型」、「名前空間」です。

# もうちょっと詳しく...

# ◯ フック

「オブジェクト」では「代入」、「クラス定義文」、「属性」について復習します。 「型」では「if 文」、「for 文」、「try 文」について復習します。 「名前空間」では「オブジェクト指向」について復習します。

いまさら「for 文」かよ!?って感じですが、 Python には内側に潜り込むためのフックがたくさんあります。 これを起点にして潜り込んでいきます。

フック (hook)とは (opens new window)

プログラムの中に独自の処理を割りこませるために用意されている仕組み。

もしくは

プログラムにおいて、本来の処理を横取りして独自の処理を割りこませること

です。

具体的には、このような機能です。

#
# 対話モード >>> に
# コピペで動きます
#
class Container:
    def __init__(self, container):
        self._container = container
    
    def __iter__(self):
        return iter(self._container)

container = Container(range(3))

# 自分で定義したクラスのオブジェクトを
# 直接 for 文の in の中に書けるようにする
for element in container:
    print(element)
>>> # 自分で定義したクラスのオブジェクトを
... # 直接 for 文の in の中に書けるようにする
... for element in container:
...     print(element)
... 
0
1
2
>>> 

このような「フック」を通して潜れるところを潜って見ます。

# ◯ 抽象構文木、バイトコード、仮想マシン

さらに内側の話をします。キチガイがなんか叫んでるな程度に流してください。

実は Python のコードは実行される前に、 「ソースコード」は、「抽象構文木」そして「バイトコード」へと変換されています。 そして変換されたバイトコードを、「仮想マシン」が実行しています。

今回は「抽象構文木」、「バイトコード」、「仮想マシン」には、 潜り込みませんが、いつかやりたいと思っています。

この3つはごくごく稀に引っかかることがありますが、 よほど重箱の隅を突くようなことをしない限りは知らなくても大丈夫かなと思います。

ソースコードを読むだけであれば、 「フック」を通して潜り込むだけで十分かなと感じています。

# ◯ このサイトの位置付け

このサイトが取り扱う内容は「フック」で潜れるところまで、 「抽象構文木」、「バイトコード」、「仮想マシン」の手前までという位置付けです。

# とは言え...

ここに書かれていることは知っていた方がいいですが、 別に知らなくてもいいことです。 知らなくてもコードは書けます。

かなり伝わりにくい文章や、きちんと調べきれていないことが、 まだ、たくさん残っています。 暇を見つけてはリライトしているのですが。

読みにくい文章ばかりですが、 そんな時は「あー、まだ頑張ってるんだな」程度に流していただけると幸いです。

まだまだその域には全然達していませんが。 気軽に気分転換に読めるようなものにできたらと思っています。

ここまで、長文にお付き合いいただいた方が、もしいらっしゃたら幸いです。 ありがとうございました!

はじめに