環境構築からプルリクエストまでの流れ
環境構築から執筆、公開までの流れと手順を説明します。
issueの確認
本プロジェクトではチケット駆動を原則としています。加えようとしている変更についてのissueがあるか、十分に議論が交されているかなどを確認してください。
編集環境のセットアップ
リポジトリをGitHub上でフォークし、フォークしたリポジトリをチェックアウトします。(当リポジトリにコミット権限がある方はフォークする必要はありません。)
shell# 一般の方git clone git@github.com:自分のアカウント/フォーク先のリポジトリ名.git# 当プロジェクトにコミット権限がある方git clone git@github.com:yytypescript/book.git
shell# 一般の方git clone git@github.com:自分のアカウント/フォーク先のリポジトリ名.git# 当プロジェクトにコミット権限がある方git clone git@github.com:yytypescript/book.git
Devboxを使って再現性のある環境を構築します。DevboxではNode.jsやBunなど執筆に必要なツールの導入のために利用しています。まだインストールしていない方はDevboxの公式サイトのインストール手順を参照してください。
Devboxで開発用シェルを起動します。
shelldevbox shell
shelldevbox shell
毎回devbox shellを実行するのが面倒な場合は、Direnvをお使いください。Direnvを導入している方は次のコマンドを実行して、.envrcの実行を許可してください。
shelldirenv allow
shelldirenv allow
必要なパッケージをインストールします。
shellbun install
shellbun install
開発サーバーを起動します。
shelltask start
shelltask start
開発サーバーの起動には結構な時間がかかります。プロセスを停止せずにお待ちください。
開発サーバーが起動したら、ブラウザでhttp://localhost:3000を開きます。
ブランチを作る
ブランチを作成します。
bashgit checkout -b ブランチ名
bashgit checkout -b ブランチ名
masterブランチには直接pushできません。そのため変更はブランチで行う必要があります。
コンテンツを作る
新規ページを追加する場合
docsディレクトリに新規ページのMarkdownファイルを追加します。
shellmkdir -p docs/カテゴリ名/サブカテゴリ名touch docs/カテゴリ名/サブカテゴリ名/new-page.md
shellmkdir -p docs/カテゴリ名/サブカテゴリ名touch docs/カテゴリ名/サブカテゴリ名/new-page.md
sidebars.jsに新規ページへのパスを追加します。パスには拡張子.mdを含めません。
sidebars.jsjsmodule.exports = {// ...tutorialSidebar: [{type: "category",label: "カテゴリ名",items: [{type: "category",label: "サブカテゴリ名",items: [// highlight-next-line"カテゴリ名/サブカテゴリ名/new-page",],},],},],};
sidebars.jsjsmodule.exports = {// ...tutorialSidebar: [{type: "category",label: "カテゴリ名",items: [{type: "category",label: "サブカテゴリ名",items: [// highlight-next-line"カテゴリ名/サブカテゴリ名/new-page",],},],},],};
ここまで完了したら、作成したファイルを編集していきます。
既存ページを変更する場合
既存ページを変更する場合は、docsディレクトリから当該ファイルを探して編集してください。
既存ページを移動する場合
- ファイルを移動、またはファイル名を変更します。
sidebars.jsの該当ページのパスを新しいパスに更新します。vercel.jsonのredirectsに旧URLから新URLへのリダイレクト設定を追加します。task buildを実行し、リンク切れがないか確認します。
たとえば、docs/tutorials/setup.md を docs/getting-started/setup.md に移動した場合は、sidebars.js の
"tutorials/setup" を "getting-started/setup" に修正し、vercel.json の redirects には次の設定を追加します。
vercel.jsonjson{ "source": "/tutorials/setup", "destination": "/getting-started/setup" }
vercel.jsonjson{ "source": "/tutorials/setup", "destination": "/getting-started/setup" }
これらの変更後、task build を実行してリンク切れがないか確認します。
コンテンツ編集時に知っておくとよいこと
変更をチェックする
変更をチェックするには、task checkを実行してください。
shelltask check
shelltask check
このコマンドは、コードスタイル、Markdown、日本語、型チェックを行います。もしチェックに失敗した場合は、後述の「トラブルシューティング」を参照してください。
チュートリアルに変更を加えた場合は、可能であれば回帰テストを行ってください。
- チュートリアル回帰テストを行う(コンテナ): 大抵のチュートリアルはコンテナ版で十分です。
- チュートリアル回帰テストを行う(macOS): Homebrewが必要など、特殊なチュートリアルはこちらをお使いください。
コミットする
作成したファイルを編集したらコミットします。
shellgit add docs/カテゴリ名/サブカテゴリ名/new-page.mdgit commit -m "「新しいページ」を追加しました。"
shellgit add docs/カテゴリ名/サブカテゴリ名/new-page.mdgit commit -m "「新しいページ」を追加しました。"
このプロジェクトは日本語話者向けなので、コミットメッセージは日本語で構いません。
コミットメッセージの例:
- 「型注釈」を追加しました。
- 「関数」にサンプルコードを追加しました。
- 誤字「使用」を「仕様」に修正しました。
プルリクエストを送る
プルリクエストを送る前にできるだけコミットが1つになっているか確認してください。
変更内容をpushします。
shellgit push -u origin ブランチ名
shellgit push -u origin ブランチ名
プルリクエストの作成時にはGitHubのキーワードを用いたissueの関連付け機能を用いて、対応したissueをプルリクエストに関連付けてください。これには2つの目的があります。ひとつは、プルリクエストの経緯をたどれるようにすることです。もうひとつは、プルリクエストがマージされた際に、issueが自動クローズされるようにするためです。たとえば、issue #123を解決するプルリクエストであれば、本文中に次のようなキーワードを書きます。
markdownClose #123
markdownClose #123
これはチケット駆動プロセスで必要となる手順です。
プルリクエストが作成されると、CIが走りコードスタイルなどのチェックが行われます。CIに問題がなければメンテナーによってマージされます。マージ権限がある方は、CIの結果を確認の上、問題なければ自分でマージして構いません。
トラブルシューティング
task check:format(Prettier)が失敗する
task formatを実行して自動修正を行ってください。
task formatはファイルを変更します。万が一に備えて、git addやgit commitなどをして、簡単に元に戻せるようにしてから実行してください。
Prettierの自動整形をさせたくないコードブロックには<!--prettier-ignore-->をつけます。
markdown<!--prettier-ignore-->```tstype Code =| 1| 2| 3;```
markdown<!--prettier-ignore-->```tstype Code =| 1| 2| 3;```
task check:markdown(markdownlint)が失敗する
markdownlintで指摘されたエラーの詳細はmarkdownlintのドキュメントをご覧ください。
markdownlintのエラーの中には、task check:markdown:fixを実行することで自動修正できるものがあります。そうでないエラーは手動で修正してください。
task check:markdown:fixはファイルを変更します。万が一に備えて、git addやgit commitなどをして、簡単に元に戻せるようにしてから実行してください。
task check:japanese(textlint)が失敗する
textlintのエラーが出ない書き方が望ましいです。textlintのエラーの中には、task check:japanese:fixを実行することで自動修正できるものがあります。そうでないエラーは手動で修正してください。
task check:japanese:fixはファイルを変更します。万が一に備えて、git addやgit commitなどをして、簡単に元に戻せるようにしてから実行してください。
場合によって、textlintを無効にしたいことがあるかもしれません。無効化したい部分はコメントで囲みます。
markdown...<!--textlint-disable prh-->textlintのprhルールが無効になるエリア<!--textlint-enable prh-->...
markdown...<!--textlint-disable prh-->textlintのprhルールが無効になるエリア<!--textlint-enable prh-->...
注意点として、コメントの前後には空行が必要です。
NGmarkdown<!--textlint-disable-->無効化したいテキスト<!--textlint-enable-->
NGmarkdown<!--textlint-disable-->無効化したいテキスト<!--textlint-enable-->
OKmarkdown<!--textlint-disable-->無効化したいテキスト<!--textlint-enable-->
OKmarkdown<!--textlint-disable-->無効化したいテキスト<!--textlint-enable-->