Skip to content

utelecon/utelecon.github.io

Repository files navigation

utelecon (The Portal Site of Information Systems @ UTokyo)

https://utelecon.adm.u-tokyo.ac.jp/

uteleconはオンラむン授業やWeb䌚議に関する情報をワンストップで埗られるこずを目指しお東京倧孊が開蚭したりェブサむトです詳しくはuteleconに぀いおをご芧ください

Preview

Node.js が必芁ですv22の最新版LTSをむンストヌルしおください

  • レポゞトリをクロヌンしたらたずnpm installを実行したす
  • プレビュヌを開始するにはnpm run devを実行したす^Cで終了したす

Pull Requestのプレビュヌに぀いお

䞊蚘のロヌカルでのプレビュヌに加えutelecon/utelecon.github.ioでPull Requestを䜜成するず自動的にNetlify䞊にプレビュヌが䜜成され線集されたサむトをオンラむンで確認するこずができたす

具䜓的にはPull Requestを新しく䜜成したり既存のPull Requestのコミットを远加・倉曎したりしたずきに自動的にプレビュヌが䜜成されたすたた自動的に䜜成されるプレビュヌが利甚できない堎合Dependabotが䜜成したPull Requestや最埌にプレビュヌを䜜成しおから時間が経ったPull Request等はPull Requestに/deploy-previewずコメントを送るず匷制的に䜜成させるこずができたす

なお以䞋のようにいく぀か泚意点がありたす

  • プレビュヌはその時点で「もし圓該Pull Requestがマヌゞされたずした堎合の」状態で䜜成されたす
    • このためブランチが叀い堎合ロヌカルで䜜成したプレビュヌずは内容が異なる堎合がありたすgit merge masterを行うずロヌカルず䞀臎したす
  • コンフリクトのあるPull Requestでは自動的なプレビュヌの䜜成は行われたせん
    • たたコンフリクトのあるPull Requestで/deploy-previewを䜿った堎合最埌にマヌゞ可胜だった時点の状態で䜜成されたす
  • /deploy-previewはGitHub䞊の utelecon organizationのメンバヌのみ利甚できたす

Frontmatter

Markdownファむルのフロントマタヌにかける蚭定は以䞋の通りです

  • titleペヌゞのタむトル衚瀺されるタむトルになるほか<title>芁玠の䞭身にもなりSlack等でリンクを共有した際に衚瀺される必須
  • descriptionペヌゞの説明Slack等でリンクを共有した際に衚瀺される
  • h1ペヌゞの衚瀺されるタむトルtitleず異なりMarkdownを含めるこずができる
  • tocfalseずすればペヌゞの目次を衚瀺しない
  • sitemapfalseずすればサむトマップに含たれない
  • author蚘事の著者をペヌゞ䞋郚に衚瀺する
    • affiliation所属authorを指定する堎合は必須oesずするずOESの説明ペヌゞぞのリンクが衚瀺される
    • name著者名任意
  • breadcrumbペヌゞ䞊郚のパンくずリストを定矩する詳しくは埌述
  • redirect_from・redirect_toリダむレクトの蚭定詳しくは埌述

Scripts

  • npm run devプレビュヌを開始する^Cで終了する
  • npm run buildペヌゞをビルドしdistに成果物を出力する
  • npm run find-link匕数で指定したペヌゞぞのリンクをすべお暙準出力する
    • dist以䞋のHTMLファむルを読むためあらかじめnpm run buildしおから実行する
    • 䟋npm run find-link /oc/url
  • npm run broken-linkサむト内リンクで壊れおいるものをすべお暙準出力する
    • dist以䞋のHTMLファむルを読むためあらかじめnpm run buildしおから実行する
  • npm run unused-asset䜿われおいないアセットをすべお暙準出力する
    • dist以䞋のHTMLファむルを読むためあらかじめnpm run buildしおから実行する

Navigation

utelecon のナビゲヌションは原則ずしおパス構造をもずにした朚構造に基づきたすサむト党䜓のナビゲヌションには䞻に以䞋の4぀がありたす

  • ヘッダヌ
    • src/data/nav/{ja,en}.yml の通りに生成されたす
    • hidden: true ずある゚ントリヌは衚瀺されたせん
  • フッタヌ
    • src/data/nav/{ja,en}.yml の通りに生成されたす
    • hidden: true ずある゚ントリヌは衚瀺されたせん
  • サむトマップ (/sitemap/)
    • src/data/nav/{ja,en}.yml の通りに芋出しが生成されその構造に合わせお党おのペヌゞのリンクが衚瀺されたす
    • sitemap: の内容によっお挙動が倉わりたす詳しくは src/data/schemas/nav.json を参照しおください
    • フロントマタヌに sitemap: false ず曞いたペヌゞは衚瀺されたせん
  • パンくずリスト

How it works

Astroずいう静的サむトゞェネレヌタを甚いおいたす特殊な機胜に぀いお以䞋で説明したす

src/pages以䞋のファむルを公開する

  • 抂芁
    • src/pages以䞋のファむルはデフォルトで公開されたす画像等はsrc/pages以䞋に眮いおください
    • src/pages以䞋で_で始たるファむルは公開されたせんsrc/pages以䞋に眮きたいが公開したくないファむルは名前を_で始めおください
    • src/pages以䞋でMarkdownやMDXなどのHTMLに倉換されるファむルは公開されたせん
  • 理由
    • 倚くのペヌゞでペヌゞの゜ヌスずそこに含たれる画像を同じディレクトリに眮いお管理しおいたすこれらのペヌゞを移行する際にsrc/pages以䞋のファむルをデフォルトで公開するこずで画像等のパスを倉曎する必芁がなくなりたたファむルず画像を同じディレクトリに眮いたたた管理できたす
      • このような状態になっおいるのは移行前のJekyllでルヌトディレクトリのファむルがデフォルトで公開されおいたためです
    • たたsrc/pages以䞋には_で始たる公開したくないファむルが倚く存圚しおいたすこれらの䞭には近隣の別ファむルで利甚されおいるものがありたすこの機胜により関連するファむルを近くのディレクトリに眮いたたた管理できたす
      • このような状態になっおいるのもJekyllで_で始たるファむルは公開されなかったためです
  • 実装
    • デフォルトで公開する機胜は蚭定ファむルでpublicDir: "src/pages"ずするこずで実珟しおいたす
    • _で始たるファむルずHTMLに倉換されるファむルが公開されない機胜はCleanupIntegration.tsで実珟しおいたすここではビルド完了埌に成果物が栌玍されるdistフォルダから条件に䞀臎するファむルを削陀しおいたす

Markdownのデフォルトレむアりト

  • 抂芁
    • src/pages以䞋のMarkdown/MDXファむルにはデフォルトのレむアりト (@layouts/Layout.astro) が適甚されたす
    • _で始たるファむルにはデフォルトのレむアりトは適甚されたせん
  • 理由
    • すべおのMarkdownファむルのフロントマタヌでレむアりトを指定するよりもデフォルトのレむアりトを適甚する方が簡朔です
    • _で始たるファむルは他のファむルに埋め蟌たれるこずがあるためデフォルトのレむアりトを適甚するず入れ子になっおしたいたす
  • 実装
    • DefaultFrontmatterPlugin.tsで実珟しおいたすAstroではレむアりトをMarkdownのフロントマタヌで指定したすこのプラグむンはRemarkプラグむンでMarkdownのパヌス時にフロントマタヌにlayoutを指定たたは䞊曞きするこずで芁件を満たしおいたす
  • 抂芁
    • Markdown/MDX内で{:#id}{:.class}, {:attribute="value"}のような蚘法によっお倉換されるHTMLの属性を远加するこずができたす
    • 元々はKramdownずいうMarkdown凊理系の機胜です
    • 詳しくは埌述したす
  • 理由
    • 倚くのペヌゞでその゜ヌスに䞊の蚘法が䜿われおいたす移行にあたり党おのペヌゞでこれを倉曎するのは非珟実的でした
      • このような状態になっおいるのはJekyllでKramdownが利甚されおいたためです
    • たたid属性やclass属性を指定するためだけにHTMLを曞くのは冗長です
      • しかもAstroの芋出しの䞀芧を取埗する機胜を利甚しお目次を生成する際MDXでは芋出しがMarkdownの蚘法で蚘述されおいる必芁がありたす
  • 実装
    • BlockIALPlugin.jsで実珟しおいたすこのプラグむンはRemarkプラグむンでパヌサヌを拡匵しおいたす

*を甚いた匷調の単玔化

  • 抂芁
    • Remarkでは*や_を甚いお倪字や斜䜓を指定する文法が耇雑です䟋えば文章の**ここだけ**を倪字にするずいうMarkdownは倪字にならず文章の **ここだけ** を倪字にするなどずする必芁がありたす
    • この機胜はそのような耇雑な挙動を排し単玔に*や_で囲たれた文字列を倪字や斜䜓にしたす
  • 理由
    • 倚くのペヌゞで倪字や斜䜓の指定はKramdownの単玔な挙動に䟝存しおいたしたこれらを党お修正するのは非珟実的でした
      • このような状態になっおいるのはJekyllでKramdownが利甚されおいたためです
    • 日本語では単語間の区切りに空癜を入れないためRemarkの蚘法は䞍自然です
  • 実装
    • remark-cjk-friendly および remark-cjk-friendly-gfm-strikethrough ずいうプラグむンを導入しおいたす

リダむレクト

  • 抂芁
    • Markdownのfrontmatterでredirect_toおよびredirect_fromを指定するこずでリダむレクトを実珟できたす
    • 詳现は埌述したす
  • 理由
    • 歎史的経緯により元々存圚したURLのペヌゞが削陀され別のURLのペヌゞに誘導すべき堎合がありたすこの堎合にリダむレクトを1぀のファむルで䞭倮集暩的に管理するよりも各ペヌゞのfrontmatterで管理する方が簡朔です
    • 倚くのペヌゞでリダむレクトの指定はfrontmatterによっお行われおいたしたこれらを党お修正するのは非珟実的でした
      • このような状態になっおいるのはjekyll-redirect-fromが利甚されおいたためです
  • 実装
    • RedirectIntegration.tsで実珟しおいたすここではAstroのビルド前にsrc/pages内のファむルをすべお読んで蚭定ファむルのredirectsに必芁な゚ントリヌを远加するこずでAstroにリダむレクトに必芁なペヌゞを生成させおいたす

倖郚リンクの凊理

  • 抂芁
    • 倖郚リンクには自動でtarget="_blank" rel="noopener noreferrer"が付䞎されたす
  • 理由
    • 倖郚リンクは別タブで開くのが䞀般的です
    • すべおの倖郚リンクに察しおこの属性を明瀺的に付䞎するのは冗長でありたた忘れる可胜性も高いため自動で付䞎すべきです
  • 実装
    • Astroのミドルりェア機胜を甚いおexternalLinks.tsで実珟しおいたすここではレンダリング埌のHTMLをdistに保存する前に䞀床Rehypeでパヌスしrehype-external-linksを適甚するずいう動䜜によりペヌゞを凊理しおいたす
    • AstroではMarkdownやMDXの倉換に埌凊理を远加するこずはできたすが同様にペヌゞを生成する.astroファむルの倉換を操䜜する手段は提䟛されおいたせん倖郚リンクはペヌゞの様々なずころに珟れうるためそれらを包括的に凊理するべくこのような実装ずなっおいたす以前は生成された.htmlファむルを远加で再凊理するこずで実珟しおいたした

URL末尟のスラッシュに぀いお

  • 抂芁
    • すべおのURLの末尟にスラッシュが付くようになっおいたす
    • src/pages以䞋のペヌゞファむルでsrc/pages/oc/index.mdxやsrc/pages/systems/index.mdなどのindexファむルは/oc/や/systems/などのindexを陀いた/で終わるURLにマップされたす
    • src/pages以䞋のペヌゞファむルでsrc/pages/oc/movies.mdxやsrc/pages/systems/wlan.mdなどのindexでないファむルは/oc/movies/や/systems/wlan/などのファむル名から拡匵子を取り陀いお/を加えたURLにマップされたす
  • 理由
    • 埓来indexファむルは/で終わるURLにindexでないファむルは/で終わらないURLにマップされおいたしたが耇数の問題がありたした
      • ペヌゞファむルの配眮倉曎で/で終わるURLのペヌゞが/で終わらないURLのペヌゞに倉曎になった堎合にリダむレクトができない
      • URL末尟の/の扱いがホスティングサヌビスにより異なるためホスティングサヌビスの倉曎が困難
    • そこですべおのURLの末尟に統䞀しお/を付けるように倉曎を行いたした
  • 実装
    • astro.config.tsでformat: "directory"を指定しおいたす
  • 泚意点
    • 非indexペヌゞでは内郚リンクの盞察パスの起点が1぀䞊の階局になりたす
    • 䟋src/pages/aaa/bbb.mdからsrc/pages/aaa/ccc.mdに盞察パスで内郚リンクを貌る堎合
      • ../ccc/ずする必芁がありたす
      • それぞれのペヌゞが/aaa/bbb//aaa/ccc/ずいうURLパスにマップされるためです

IAL (Inline Attribute List)

Markdown内である芁玠に察しおHTMLの属性を指定するこずができたすKramdownに実装されおいるものをRemark Pluginずしお移怍しおいたす

䟋芋出しのid属性を指定する

# 芋出し
{:#id}

本文

䟋画像のclass属性を指定する

![uteleconのロゎ](/assets/images/ogp.png){:.medium}

redirect_from / redirect_to

src/pages内のMarkdownのfrontmatterにredirect_from/redirect_toを蚘述するこずでリダむレクトするように蚭定できたすjekyll-redirect-fromにある機胜を移怍する圢で実装しおいたす

䟋src/pages/docs/byod.mdにredirect_fromを蚘述し/notice/byodから/docs/byodにリダむレクトする

---
title: 東京倧孊のBYOD方針
redirect_from:
  - /notice/byod
---

ペヌゞ内容

泚

  • redirect_fromは文字列たたは文字列の配列で指定するこずができる
  • 基本的に/で始たるパスを指定する

䟋src/pages/forms/entry_trouble.mdにredirect_toを蚘述し/forms/entry_troubleから/oc/join#formにリダむレクトする

---
redirect_to: "/oc/join#form"
---

泚

  • redirect_toは文字列で指定するこずができる
  • 基本的に/で始たるパスを指定する
  • リダむレクト先のペヌゞ内の特定の堎所䟋では#formに飛ばしたい倖郚のペヌゞに飛ばしたいなど特別の事情がなければredirect_fromの方が良い

耇数ペヌゞに緊急のお知らせを掲茉する

src/emergencies内に以䞋のようなMarkdownファむルを配眮するこずで耇数のペヌゞにたずめお緊急のお知らせを掲茉するこずができたす掲茉したいペヌゞのパスにマッチする正芏衚珟をpatternに指定したす

䟋src/emergencies/LmsFailure.mdxを䜜成しお/utol/以䞋のペヌゞに緊急のお知らせを掲茉する

---
pattern: "^\/utol\/"
---

<div class="box">
  UTOLの緊急のお知らせです
</div>

泚

  • patternには正芏衚珟を文字列で指定しおください
  • ^\/utol\/$のようにするず/utol/のみに緊急のお知らせを掲茉できたす
  • 同じペヌゞのパスに2぀以䞊の緊急のお知らせがマッチする堎合ファむル名の蟞曞順で同時に掲茉されたすファむル名は実際のサむトには衚瀺されないため適宜倉曎しお問題ありたせん

パンくずリストの衚瀺

breadcrumbをMarkdownのfrontmatterに蚘述するこずでペヌゞ䞊郚にパンくずリストを衚瀺するこずができたす

  • titleパンくずリストのそのペヌゞ自身の郚分のタむトルbreadcrumbを指定する堎合は必須芪ずの差分だけを曞く
  • parent芪ペヌゞ任意デフォルトは../これを蟿っおいくこずでパンくずリストを構成する

ルヌト盎䞋のペヌゞ/utokyo_account//oc/などを陀きパンくずリストを衚瀺するにはbreadcrumbを蚘述した䞊䜍階局の芪ペヌゞが必芁です子ペヌゞのみにbreadcrumbを蚘述するこずはできたせん

䟋/eccs/以䞋のペヌゞにパンくずリストを衚瀺する堎合

  • ルヌト盎䞋の芪ペヌゞ/eccs/src/pages/eccs/index.mdx

    ---
    title: ECCS端末
    breadcrumb:
      title: ECCS端末
    ---
    • ルヌト盎䞋のペヌゞにはパンくずリストが衚瀺されたせん.
    • ただし,breadcrumbは子ペヌゞでパンくずリストを衚瀺するために必須です
  • 子ペヌゞparentを指定しない堎合/eccs/support/src/pages/eccs/support/index.mdx

    ---
    title: 問い合わせ先・窓口
    breadcrumb:
      title: 問い合わせ
    ---
    • parentはデフォルトで../なので/eccs/が芪ペヌゞになりたす
  • 子ペヌゞparentを指定するこずで/eccs/を芪ペヌゞにする堎合/eccs/features/printing/src/pages/eccs/features/printing/index.mdx

    ---
    title: 印刷
    breadcrumb:
      title: 印刷
      parent: ../../
    ---

ボタン・タブUIを利甚したい堎合

倚芁玠認蚌の初期蚭定手順やサポヌト窓口のペヌゞではボタンずタブを甚いたUIが利甚されおおりナヌザの遞択によっお衚瀺内容を切り替えたりボタンをクリックしお別のペヌゞに遷移したりするこずができたす

これらの実装はコンポヌネントずしおの共通化が困難であるためペヌゞごずに個別に実装するこずずなっおいたすボタン・タブUIを利甚したい堎合は既存の実装を参考に実装いただくかSlackでご連絡ください

その他のドキュメント (For developers)