# 開発への協力方法

これは個人的なフォークなので、基本的には本家 Firefish の開発に協力してもらえればと思います。ただし、最近は本家 Firefish へのマージリクエストのマージが滞りがちですし、本家版にいきなり貢献するのはハードルが高いと思ったりマージしてもらえるか分からないニッチな機能を作ったりした場合にはこのフォークへ貢献していただいてもよいです。

現状、マージリクエストを直接送る方法が無いので patch ファイルまたは別のサイトにフォークしたリポジトリに追加したコミットへの URL を[私](https://post.naskya.net/@dev)に送ってください。

## 開発の方法

### 環境構築

1. 以下のソフトウェアをインストールする

    - podman
    - podman-compose
    - make
    - nodejs
    - pnpm
    - shellcheck
    - sea-orm-cli
    - cargo

2. コンテナを起動し、PGroonga を有効化する

    ```bash
    cd dev
    make up
    ```

3. 以下の内容の `.config/default.yml` を作成する

    ```yaml
    url: http://localhost:3000
    port: 3000
    db:
      host: localhost
      port: 25432
      db: firefish_db
      user: firefish
      pass: password
    redis:
      host: localhost
      port: 26379
    ```

コンテナを作り直すと簡単にデータベースを初期化できます。

```bash
cd dev
make
```

参考にした記事: [Firefish 開発環境の準備(バックエンド向け)](https://hackmd.io/@nmkj-io/HJHNbM_8a)

### 実行

```bash
make debug
```

### コミット前に行う確認

```bash
make pre-commit
```

### コミットメッセージ

コミットメッセージの書き方に厳密な規則はありませんが、私は以下のようにコミットメッセージを書いているのである程度それに則ってもらえると助かります。でも適当で大丈夫です(更新を取り込む際にコミットメッセージが書き換えられる場合もありますが、ご了承ください)。

コミットメッセージは英語で書き、場合によっては冠詞などを適度に省いて短く収めてください。長い説明が必要な場合には、以下の規則で 1 行目にざっくりとしたコミットメッセージを書いてから 2 つ改行して(つまり 1 行空けて)詳細説明を続けてください。

コミットメッセージの頭文字は大文字にせず、動詞から始める場合には現在形を用いてください。例えば、`feat: Added xxxxx` とはせずに `feat: add xxxxx` としてください。

1. 重大な不具合の緊急修正: `hotfix: 不具合の内容`
    - プログラム自体が起動しなくなったり投稿が一切できなくなるなどの重大な不具合を回避するための更新には `hotfix:` を頭につけます。
2. ドキュメントのみの更新: `docs: 更新の概要`
    - 内容がドキュメントの更新のみの場合、`docs:` を頭につけます。たとえ更新内容が誤字の訂正であったとしても `fix: typo` ではなく `docs: fix typo` とします。
3. 翻訳の更新: `locale: 更新の概要`
    - `locales/` 以下のファイルをいじった場合のコミットなどがこれに該当します。
4. コンテナイメージに関する更新: `container: 更新の概要`
    - `Dockerfile` や `docker-compose.yml` の更新など、Podman/Docker のユーザー以外には一切影響しない更新がこれに該当します。
5. Firefish のプログラム本体には変更を加えない更新: `dev: 更新の概要`
    - アップデートスクリプトや Makefile の更新など、プログラム本体への変更は加えない場合には `dev:` を頭につけます。
    - `packages.json`, `packages/`, `locales/` に変更を全く加えていないコミットは大体これに該当します。
    - 開発とは全く関係無い場合には `meta:` を用いてもよいです。
6. 不具合の修正: `fix: 不具合の内容`
7. 機能の追加: `feat: 更新の概要`
8. パフォーマンスの向上のための再設計: `perf: 再設計の概要`
9. Web クライアントの見た目の変更: `style: 更新の概要`
10. プログラムの再設計: `refactor: 再設計の概要`
11. その他の雑務: `chore: 更新の概要`
    - コードのフォーマットや非常に小規模なプログラムの書き換え(一箇所の `||` を `??` に書き換えるなど)や依存パッケージの更新がこれに該当します。

更新が本当に小規模な場合には `:` の直前に `(minor)` を入れても良いです(例: `docs (minor): fix typo in README.md`)が、ほとんどの場合にこれは使う必要がありません。

## 注意事項

データベースのマイグレーションを伴う変更を加える場合にはマイグレーションのファイルを [`packages/backend/migration-neko`](https://code.naskya.net/naskya/firefish/source-by/main/packages/backend/migration-neko) の下に作成し、マイグレーションを打ち消す SQL クエリを [`neko/revert.sql`](https://code.naskya.net/naskya/firefish/source-by/main/neko/revert.sql) の**一番上に**追記してください。