ローカルにNode.jsをインストールした環境での開発と、docker-composeでの開発が可能です。
作業するときには、新たにブランチを作って、そのブランチで作業します。作業が終われば、mainブランチへのpull requestを作成して変更を反映します。
ただし、より気軽に作業できるようにするために以下の場合は直接mainに変更をpushできることにします
vpn-website-resource
への変更src/data/member-data.yaml
へ自分の情報を追加・編集する場合- ドキュメントの誤字脱字等の修正
src/blog_posts/
以下にあるブログファイルの変更
- 最新の Node.js v16 が動作する環境
npm ci
npm run build
npm run serve
Ctrl + C
で中止します。
npm start
Ctrl + C
で中止します。
- 最新のdocker-composeが動作する環境
以下のコマンドを実行後、[http://localhost:3000]にアクセスします。
doocker-compose up
npm run lint
試験的にコミット文の検証(Conventional Commits) を導入しています。このルールに違反する場合、コミットを弾きます。
<前置詞>: 本文
詳細
- 前置詞を
build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test
のいずれかとする - 本文の頭文字は大文字が、末尾は句点が使えない
feat: コンポーネント Hoge を実装した
fix: fixed a bug that Hoge component cause crash
GitHub Actions を使用した CI/CD を導入しています。
main
ブランチに push した場合、ビルドしてout
フォルダをgh-pages
ブランチへ push します。- 他のブランチに push した場合、ビルド・Lint を行います。
メンバー一覧の情報を、src/data/member-data.yaml
から読み込んでいます。
member-data.yaml
から読みこんだ情報は、ブログの著者表示(アイコンと名前)にも利用しています。
情報を追加するには以下のような形式で、member-data.yaml
に追記してください。
例:
# 内部で使用するID, 他の人と被らない適当な英数字
tamayurasouki:
# Required, 一般的な名前
name: "珠響 そうき"
# Optional, メンバー一覧で表示される名前の読み
alphabetName: "Tamayura Souki"
# Optional, アイコン画像のパス, 詳細は画像のアップロード方法参照
# "vpn-website-resource/public/author-icons/tamayurasouki.png"を参照している
iconPath: "/author-icons/tamayurasouki.png"
# Optional, メンバー一覧でタグ形式で表記される
favs:
- "Python"
- "Machine_Learning"
- "CS"
- "Rust"
- "Amateur"
# Optional, メンバー一覧やブログの著者部分につくリンク
homepageUrl: "https://twitter.com/tamayurasouki"
画像等の静的リソースは別のリポジトリ、vpn-website-resource
で管理しています。
https://github.com/VirtualProgrammersNetwork/vpn-website-resource
vpn-website-resource
内のpublic
以下に適当に配置すれば、ビルド時に自動でリソースとして含まれるようになっています。
vpn-website-resource/public/author-icons/tamayurasouki.png
を参照するには
/author-icons/tamayurasouki.png
と指定してください。
src/blog_posts/
以下に配置した.md
ファイルから、/posts/
以下にページが生成されます。
マークダウンの先頭に、Front Matterで、ブログに関する情報を書く必要があります。
例:
---
title: タイトルを書く # Required, ブログのタイトル
authorId: tamayurasouki # Required, member-data.yamlに記入したID
tags: ["tag1", "tag2"] # Optional, ブログの内容を表すタグ
---