Skip to content

Repository files navigation

ogurilab.org

cosense-site-kit で生成する ogurilab の研究室サイト。 コンテンツは Cosense(旧 Scrapbox)で執筆し、#publish を付けたページが公開されます。

  • データソース: Cosense プロジェクト(cosense.config.tssource.project
  • テーマ: theme/(cosense-theme-lab をこのリポジトリに vendoring。編集自由。フレームワーク @cosense-site-kit/* のみ npm 由来)
  • デプロイ: Cloudflare Pages(プロジェクト ogurilab-org + 独自ドメイン ogurilab.org)。.github/workflows/deploy.yml が cron で再フェッチ→ビルド→doctor→公開。 Cloudflare 側の Git 連携によるビルドは意図的に無効化している(deployments_enabled: false)。Cosense の編集は git のコミットを生まないため push 起点のビルドでは記事の更新を拾えず、定期実行できる Actions 側に公開経路を一本化している。再有効化すると公開経路が二重になるので注意。 この設定の反映として、Cloudflare ダッシュボード(Workers & Pages)にはオレンジのアイコンと**「デプロイが一時停止されました」(Deployments paused)が常時表示される**。これは異常ではなく、Git 連携によるビルドを止めてある状態を指している。wrangler pages deploy による公開はこの表示と無関係に動くため、公開が生きているかは Actions の deploy website の実行結果で判断する。
  • CI: .github/workflows/ci.yml が PR ごとにビルド検証(fetch→ビルド→doctor)を回す。公開はしない。 doctor は結果をログに残すだけで PR を落とさない(fail 条件のほとんどが Cosense 側の編集起因で、コード変更と無関係に赤くなるため)。 コンテンツを検査するゲートは、コンテンツを公開する経路である deploy.yml 側に置いている(下記)。

公開前ゲート

deploy.yml はビルドの後・公開の前に cosense-site doctor を挟み、fail なら公開しない。fail 条件(公開 0 件・.sitecode:site.yaml がパース失敗・nav / home の参照切れ・slug 衝突)はどれも今公開されているサイトより悪いものを出す状態にあたる。

止まったときに起きるのは「サイトが消える」ではなく「直前のデプロイが配信され続ける」。Cosense 側を直せば次の cron(12 時間後)で自動的に復帰する。warn 止まりの項目(broken link)は exit code に影響しないのでゲートには入らない。

止まったことに気付けるよう、失敗した run は deploy-blocked ラベル付きの Issue を 1 件だけ自動で起票する。直したらその Issue を close すること(open のままだと次の失敗が起票されない)。

承知のうえで公開したいときは、手動実行で skip_doctor: true を付けるとゲートを飛ばせる。

gh workflow run "deploy website" -f skip_doctor=true

スケジュール実行の維持

GitHub はリポジトリに 60 日間アクティビティが無いとスケジュール実行を自動で無効化する。ワークフローの実行自体は活動に数えられない。このサイトはコンテンツを Cosense に置くため、記事を書いてもコミットが生まれず、放置すると cron が止まる(実際に 292 日間止まっていた)。

対策として deploy.yml が月に一度だけ .github/last-deploy.json を更新してコミットし、リポジトリを活動状態に保っている。ログに現れる chore: 稼働記録を更新する (YYYY-MM) はこの仕組みによるもの。

止まってしまった場合、gh workflow enable "deploy website"名前解決に失敗して黙って何もしないstateactive を返すのに実体は無効のままで、dispatch してもジョブが 0 件のまま滞留する)。ID 指定で有効化すること

gh api -X PUT repos/ogurilab/ogurilab.org/actions/workflows/99228705/enable

開発

npm install
npm run fetch   # Cosense からページ取得 → .cosense-cache/
npm run dev     # http://localhost:4321

コマンド

コマンド 内容
npm run dev 開発サーバ
npm run fetch Cosense から再フェッチ
npm run build fetch + astro builddist/
npm run preview ビルド結果のプレビュー
npm run validate 中間データの検証
npm run doctor 公開前チェック(公開 0 件・参照切れ・slug 衝突など。deploy.yml のゲートと同じもの)

テンプレート

ページごとの見せ方は theme/templates/ が持ちます。.sitetemplates: マッピングか、 Cosense ページの #template/<名前> タグで割り当てます。

テンプレート 用途
page 既定。ふつうの記事
sections セクションを積み上げた案内ページ(About / Research など)→ 書き方
members code:members.yaml からのメンバー一覧
publications code:publications.yaml からの論文一覧

トップページ(一画面のハブ)

トップは スクロールしない 1 画面 で、研究室名+ミッションを示し、各ページ(About / News / Members / Publications / Contact / Join)へ振り分けるだけの入口です。詳しい内容は各ページが持ちます。

  • 背景は GPU 描画の生成的フィールド(自作 WebGL シェーダー、components/ShaderHero.astro)。カーソルに反応し、非対応環境・省データ・prefers-reduced-motion では静止にフォールバックします。
  • 見出し下の一文(ミッション)は ホームページ(.sitehome.page = Welcome)の最後の段落を自動表示します。差し替えたいときは Welcome を編集してください。
  • 下部の行き先カードは ナビ(.sitenav)と同じ並びです。順番やラベルはナビを直せば連動します。

Join(学生の方へ)を出すには

Join というタイトルのページを作り #publish を付けると、行き先に Join カードが自動で増えます(配属を考える学生・大学院志望・見学歓迎などの内容を想定)。別タイトルにしたいときは .sitecode:site.yaml で:

join:
  page: 学生の方へ     # 既定は Join

写真ページ(Gallery)や「主な研究・作品」ショーケースは、以前の版でトップに載せていましたが、1 画面ハブ化に伴いトップからは外しました(各ページ側で活用できます)。

About

Cosense で書いて cron で公開する ogurilab の研究室サイト (Astro + Cloudflare Pages)

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages