ゼロから始めるDjangoソースコード解読 part1

導入

突然ですが、プログラムを書いている際に

「どんなソースコードが綺麗なの?」、「ファイルの構成ってこれでいいの?」

と思ったことはないでしょうか?私はいつも思っています←(開発経験1年目)

ですが、そういった記事をネットで調べようとしても意外と載っていないのが現状です。

そこで、手っ取り早く調べるにはどうすればいいか。そう、有名なソースコードを読めばいいのです!

有名だからといって、書かれていることがすべて正しいというわけではないとは思いますが、開発経験1年の私よりは遥かに綺麗なソースコードだと断言できます。

なので、1からソースコードを読み解いていき、これからの開発に役立つ知識をためていこうと思います。

私自身プログラミング初心者なので、同じ初心者にもわかりやすく書いていければと思います。

解読するソースコード

私はpythonを主に使用しているので、pythonフレームワークで有名なdjangoを解読していこうと思います。

github.com

解読

どこから解読していくか悩みますが、まずは一番最初の階層にあるファイルから解読していこうと思います。

.editorconfig

概要

.editorconfigは、EditorConfigという様々なエディターやIDE(総合開発環境)で同じプロジェクトに取り組んでいる開発者に対して、一貫したコーディングスタイルを維持するのに役立つ設定を記載しているファイルです。

EditorConfig

Pluginを別途必要とする環境とそうでない環境があります。Pluginを必要としない環境では、.editorconfigファイルを置くだけで、設定が反映されます。

試しにインデントの数を変えて、PyCharmで設定が反映されているか確認したところ、問題なく反映されていました。

f:id:id_Teto:20210323231224p:plain
インデント数:4

f:id:id_Teto:20210323231253p:plain
インデント数:16

設定の詳細

# https://editorconfig.org/

root = true

[*]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8

# Docstrings and comments use max_line_length = 79
[*.py]
max_line_length = 119

# Use 2 spaces for the HTML files
[*.html]
indent_size = 2

# The JSON files contain newlines inconsistently
[*.json]
indent_size = 2
insert_final_newline = ignore

[**/admin/js/vendor/**]
indent_style = ignore
indent_size = ignore

# Minified JavaScript files shouldn't be changed
[**.min.js]
indent_style = ignore
insert_final_newline = ignore

# Makefiles always use tabs for indentation
[Makefile]
indent_style = tab

# Batch files use tabs for indentation
[*.bat]
indent_style = tab

[docs/**.txt]
max_line_length = 79

[*.yml]
indent_size = 2


root設定

root = true

これは、.editorconfigが存在する階層がrootディレクトリかどうかを決める設定です。

EditorConfig Pluginは、あるファイルを開いた際に、そのファイルより上の階層に.editorconfigが存在するかどうかを探しに行きます。

trueに設定した場合、それ以上上の階層には探しに行かなくなります。

例:以下のような階層の場合、sample2/.editorconfigでroot=falseに設定していると、sample.pyを開いた際にsample1フォルダの.editorconfigまで読み込んでしまいます。

- sample1
        | - .editorconfig
        | - sample2
                | - .editorconfig
                | - sample.py


ファイル指定

[*]
[*.html]
[docs/**.txt]

これらは、対象とするファイルをワイルドカードで指定しています。

項目 説明
* パス区切り文字(/)を除く任意の文字列に一致します
** 任意の文字列に一致します
? 任意の1文字に一致します
[name] 名前の任意の1文字に一致します
[!name] 名前に含まれていない任意の1文字に一致します
{s1,s2,s3} 指定された(コンマで区切られた)任意の文字列に一致します(EditorConfig Core 0.11.0以降で使用可能)
{num1..num2} num1とnum2の間の任意の整数に一致します。ここで、num1とnum2は正または負のいずれかになります。


その他オプション

indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8
max_line_length = 119
項目 説明
[*] すべてのファイルを対象とする , .py, *.{less,css,scala}などのワイルドカード
indent_style インデントの単位をタブにするかスペースにするか tab, space
indent_size 1回のインデントのサイズ 2,4,8
insert_final_newline ファイル末尾に空行を挿入するか true, false
trim_trailing_whitespace 行末尾のホワイトスペース(空白文字)を削除するかどうか true, false
end_of_line 改行コードの指定 cr, lf, crlf
charset 文字コードの指定 latin1, utf-8, utf-8-bom, utf-16be or utf-16le
max_line_length 一行に記載できる最大の長さを指定できる 正の整数、off


それ以外にも、オプションがあります。詳しくはEditorConfigのWikiで。

github.com


このような感じで、1ファイルずつ投稿していこうと思います。 間違っている点などがあれば、ご指摘ください。 今回はここまで。