Pythonプロジェクトのためのテンプレート: my-python-templateの紹介

## はじめに

Pythonプロジェクトを始める際には、プロジェクトの構造や依存関係の管理、コードの品質を保つためのツールなど、設定すべき項目が多くあります。そこで今回は、これらの設定を一元化したPythonプロジェクトのテンプレート、[my-python-template](https://github.com/C-Naoki/my-python-template)を作成しました。こちらについて今回は紹介いたします。

## my-python-templateの内容

このテンプレートには以下のファイルとフォルダが含まれています。

- `pyproject.toml`: プロジェクトの設定と依存関係を管理するためのファイルです。
- `.pre-commit-config.yaml`: pre-commitの設定を行うファイルです。
- `Makefile`: プロジェクトのビルドやテストなど、一連のコマンドを自動化するためのファイルです。
- `.mypy.ini`: 型チェッカーmypyの設定を行うファイルです。
- `.flake8`: Pythonの静的解析ツールflake8の設定を行うファイルです。
- `README.md`: プロジェクトの説明を記述するファイルです。
- `.gitignore`: Gitが追跡しないファイルやディレクトリを指定するファイルです。
- `poetry.lock`: プロジェクトの依存関係を具体的なバージョンまで固定するためのファイルです。これにより、開発環境の再現性が保たれます。
- `LICENSE`: プロジェクトのライセンスを記述するファイルです。
- `poetry.toml`: Poetryの設定を行うファイルです。

## my-python-templateの使い方

my-python-templateを新しいプロジェクトのベースとして使用するには、以下の手順を守ってください。

1. **新しいリポジトリを作成**: まず、GitHub上で新しいリポジトリを作成します。これが新しいプロジェクトのリポジトリになります。

2. **テンプレートを新しいディレクトリにクローン**: ローカルマシン上で、このテンプレートリポジトリを新しいプロジェクトになる新しいディレクトリにクローンします。その後、`.git`ディレクトリを削除してテンプレートから完全に切り離します。
    ```bash
    git clone https://github.com/C-Naoki/my-python-templete.git <new-project>
    cd <new-project>
    rm -rf .git
    ```

3. **ローカル開発環境の設定**: 必要なPythonのバージョンをインストールし、ローカルのPythonバージョンを設定し、新しいpoetry環境を作成して使用し、プロジェクトの依存関係をインストールします。これは、提供されている`Makefile`を使用して以下のコマンドで行うことができます。

    ```bash
    make install
    ```

4. **新しいリポジトリを初期化**: 次に、新しいディレクトリで新しいリポジトリを初期化します。

    ```bash
    git init
    ```

5. **新しいリポジトリのリモートを設定**: 新しいGitHubリポジトリを新しいプロジェクトのリモートとして設定します。

    ```bash
    git remote add origin <url-of-your-new-repository>
    ```

6. **新しいリポジトリにプッシュ**: 全てのファイルをステージングし、コミットし、新しいリポジトリにプッシュします。

    ```bash
    git add .
    git commit -m ":tada: initial commit"
    git push -u origin master
    ```

これらの手順に従うことで、このスターターセットを基に新しいプロジェクトを開始することができます。

## 使用ツールの紹介

このテンプレートでは、Pythonプロジェクトの品質を保つために、以下のツールが使用されています。

### Poetry

PoetryはPythonの依存関係管理とパッケージングを行うためのツールです。`pyproject.toml`と`poetry.lock`ファイルを使用して、プロジェクトの依存関係を管理します。これにより、開発環境の再現性と整合性が保たれます。また、Poetryはパッケージのバージョン管理も行うため、プロジェクトの成長とともに依存関係を適切に管理することが可能です。

### Flake8

Flake8はPythonの静的解析ツールで、コードの品質をチェックします。コードスタイルの違反やエラーを検出し、それらを修正することでコードの読みやすさと保守性を向上させます。Flake8はPEP 8というPythonの公式スタイルガイドに準拠しており、コードの一貫性を保つために役立ちます。

### Mypy

MypyはPythonの静的型チェッカーで、コードに型注

釈が正しく適用されているかを確認します。これにより、型エラーを早期に検出し、バグを防ぐことができます。Pythonは動的型付け言語ですが、大規模なプロジェクトでは型注釈を使用してコードの可読性と安全性を向上させることが推奨されています。Mypyはこのプロセスを支援します。

### isort

isortはPythonのインポートをソートするツールです。これにより、インポートの順序が一貫性を持ち、コードの読みやすさが向上します。大規模なプロジェクトでは、多数のモジュールをインポートすることがあり、それらを適切に管理することはコードの可読性に大きく影響します。isortはこの問題を解決します。

### Black

BlackはPythonの自動コードフォーマッターで、コードをPEP 8と互換性のある形式に自動的にフォーマットします。これにより、コードのスタイルが一貫性を持ち、読みやすさが向上します。Blackは"自動化された"フォーマッターであるため、開発者がコードスタイルについて考える時間を大幅に減らすことができます。

### pre-commit

pre-commitはGitのコミット時に自動的に実行されるフックを管理するツールです。このテンプレートでは、pre-commitを使用して、コミット前にFlake8、Mypy、isort、Blackを自動的に実行し、コードの品質を保つように設定されています。これにより、コードの品質を維持しながら、開発のスピードを維持することができます。

## まとめ

my-python-templateは、Pythonプロジェクトを始める際に必要な設定やツールを一元化したテンプレートです。このテンプレートを使用することで、新しいプロジェクトを迅速に開始し、コードの品質を維持することができます。Poetry、Flake8、Mypy、isort、Black、pre-commitといったツールを組み合わせて使用することで、Pythonプロジェクトの開発効率と品質を向上させることができます。

もし何かバグを見つけたり、あったほうがより便利になる機能があれば、ぜひGitHubのissueに投稿してください。皆様のフィードバックは、このテンプレートをより良いものにするための大切な情報源です。皆様からのご意見、ご感想をお待ちしております。