今後修正等をする場合のドキュメンテーションです。
特に環境依存のものはないはずなので、下記のコマンドで大丈夫だと思います。
gir clone https://github.com/misc-org/RuleBook.git #リポジトリのクローン
cd RuleBook #クローンしたファイルに移動
npm i #依存関係のインストール
または GitHub Desktop
等の GUI ツールでも構いません。ディレクトリに移動して npm i
してください。
vscode または webstorm 等の拡張機能を持つ IDE を使用する場合は Astro
拡張機能を入れるといいでしょう。言語サーバーないと難しいので。
Important
.gitignore
で package-lock.json
をパスしたい気持ちはわかりますが、デプロイで必要らしいので残しておいてください。
特にいじることはないかと。開発依存追加してもいいけど、必要最低限だね。自分で組んだ方が処理軽い時はそうした方がイイかも。
ノータッチ。どうせ上書きされるので。
一応 .env
は入れてるけど、.env.development
とか追加するなら気をつけてもらって。
gitpod 使ったから入ってるけど別にいらない。
結構重要。
integrations
: プラグイン系はnpx astro add
ってすれば勝手にやってくれると思うけど、手動で入れるならここ。site
: ベースリンク。基本変更不要だけど、ホスト先変えたり、リンクが変わるならここも変える。base
: github pages の時は、リポジトリ名だけ別にしなきゃいけないらしい。上同様変える時はこっちも変更。redirect
: 流石にリンクを/start/start
ってするのはカッコ悪いからつけてみた。多分別のとこでやった方がきれい。
postcss
使いたいから入れただけ。特にプラグインとかは入れてないし、使いたい時は 公式ドキュメント 参照。
tailwind
使いたいから( 以下略 )。
darkMode: 'class'
: ダークモードをどれで管理するか。一応クラスで管理してるからノータッチ or ダークモードシステムの見直し。
僕の方が教えてほしい( 泣 )
compileOptions
: 大体ここに入れる( らしい )plugins
:"name": "@astrojs/ts-plugin"
は vscode 使ってない人用に入れておく。vscode では不要らしい。"verbatimModuleSyntax": true,
: なんだっけ… 確か TypeScript のインポート関係で型チェックとかimport type
とか使えるようにするやつbaseURL
: お決まりの。src
とかファイル構造変えるならこれもセットに変えた方がイイかも。paths
:@lib/
とかのやつ。一応直下も拾えるように全部二パターン登録してる。
全部書く必要あるかな… 最低限に絞るからまあ他は頑張って読み取って。
astro がデフォルトで pages がルートになるらしい。
こんだけでルート以降のパスを勝手に取得して Astro.params
に入れてくれる。便利だね!
今回みたいに動的ページだけの時は、このページだけ作っておけばどうにかなりそう。代わりにルート関係の制約ができるからそこだけ守らないとすぐ 404 が出る。
export const getStaticPaths = (async () => {
const MDXs = await getCollection("mdx");
return MDXs.map((entry: Entry) => ({
params: {path: `/${entry.slug}`},
props: {entry},
}));
}) satisfies GetStaticPaths;
getStaticPaths
関数をエクスポートするだけで、勝手に astro 側が実行してくれる。優秀だね。
getCollection
関数は、src/content
内のファイル名で指定したらそっから md or mdx を一気に全部持ってきてくれる。優秀か??
使う時は src/content/config.ts
でエンドポイントと作ってあげて、そこで型指定とかしておくと使えるようになるらしい。エラーが出る時は一回 run dev
すると .astro
ファイルがディレクトリ直下に生成されて、それでエラーが治る…らしい。
あとは型ですぐ怒られるから satisfies GetStaticPaths
で型指定。無理矢理だね。
レイアウト専用コンポーネント的な。head
とかをここに入れておくのが通例らしい。
md or mdx でインポートすると、Markdown 自体のレイアウトも調整可能。天才か?
default.astro
がページ全体に適応されてるレイアウトで、mdx.astro
が Markdown 用のレイアウト。
もうすごい頭の悪いことしてるから改善案モトム。
<ViewTransitions/>
を head
に入れるだけでページ遷移時のトランジョンを設定してくれるんだけど、何如せん SPA と相性が悪くて、トランジョン後に状態を維持してくれる機能があるんだけど、こいつがひどい。
仕組みとしては僕も曖昧だけど、前のページと今のページで同じ要素を見つけて、それはそれで扱うからページの読み込み速度も早いし、みたいな仕様らしい。
ただ、ここで問題になるのが、例えば今回だったらナビゲーションバーに使ってるアイコンを astro-icon
で指定してるんだけど、こいつを mdx 内でも使う時に、アイコンが同じだと生成するコードも同じだからそのページから遷移するときだけナビゲーションバーのアイコンも消えるっていう( 語彙力 )
まあ結局 mdx 内で使うコンポーネント変えたので今は問題なし。
は…特にいうことはない。ただのコンポーネント群。個人的にテーマ切り替えのボタンがお気に入り。
こいつだけ紹介。前項 [...path].astro
で、getStaticPaths
を使って全取得って言ったけど、流石に順番とかまでは指定できないから、階層構造だけこっちで書いてます。
ページの追加・削除・名前修正の時はこっちも必須です。あとグループ名もここで決めてるのであしからず。
バック側のエンドポイント。getCollection
実行時にはこっから呼び出されてるっぽい。
基本的に型を指定してるだけだけど、何故か mdx にも型指定が適応されるから、 mdx でも指定した型は全部書かないと怒られる。
ファイル名じゃないけど、一応 mdx の書き方。基本的な部分は Markdown とほぼ一緒だし、せいぜい js が増えたくらいだからそこは割愛。ここでは astro とのコラボレーションの部分だけ。
-
frontmatter : ファイルの情報をまとめる。
title
はナビゲーションの表示されるやつ兼各ページのHead
になる。tags
にness
を追加すると、必読項目としてマークされるよにしてます。なんでか知らないけど""
をつけてもつけなくても一緒。多分勝手に文字列化してくれるんだと思う。 -
ページ内リンク : 絶対パスで書いてください。かつ、階層を跨ぐときだけ
/
を使ってください。src/content/stat/stat
の時はstart/start
です。フィーリングでよろ。
触らぬ神に祟りなしです。僕もコピペしただけです。逆に触るとエラー起きそうだし、せいぜいタイトル変えるくらいかと。
あまり難しいこともしていないので、多分普通に読めると思います。
もし何書いてんだこれってなったら Slack とかで @shiki-01 と同じアイコンの人に DM してください。多分みます。