現在の管理者:
node
,npm
pnpm
npm install -g pnpm
でインストールしても良い
上記ツールをインストールした上で、プロジェクトのルートディレクトリで
pnpm install
pnpm run dev
とするとlocalhost
でのプレビューページのリンクがターミナルに表示されるのでそこにアクセスする。
ファイルを更新しつつ表示が問題ないか確かめ、完成したら
pnpm run fix:fmt
pnpm run build
をしてエラーと警告が出ないかを確認し、問題なければPullRequestを出して管理者にレビューをもらう。
ブランチはfix/*
、feature/*
、chore/*
などの名前で切ることを推奨する。
Web係が通常編集対象とするのは以下のファイルです。 他のページは以下のファイルの更新に合わせて更新されるので編集は不要です。
パス | 内容 |
---|---|
src/asset/team/*/ |
各チームの紹介ページ用の画像 |
src/content/alumni/*.yml |
卒業生のデータ |
src/content/carousel/*.yml |
トップページに出るクラスタの定義 |
src/content/carousel/img/* |
トップページに出るクラスタの画像 |
src/content/member/*.yml |
現役メンバーの情報 |
src/content/member/icons/* |
現役メンバーのアイコン |
src/news/:year/*.mdx |
ニュース記事 |
src/news/:year/img/* |
ニュース記事で使う画像 |
src/publication/:year/*.yml |
出版物 |
src/team/*.mdx |
各チームの紹介ページ |
src/team/cover/* |
各チーム紹介ページのカバー画像 |
プロパティ | 意味 |
---|---|
year |
卒業/退官年度 |
month |
卒業月(type: faculty 以外は必要) |
name |
英語表記での名前 |
type |
faculty , doctor , master , undergraduate |
プロパティ | 意味 |
---|---|
src |
画像ファイルへの相対パス |
name |
名前 |
プロパティ | 意味 |
---|---|
name |
日本語表記での名前。無くても良い |
eng_name |
英語表記での名前 |
occupation |
Faculty , Researcher , Student , ResearchStudent |
grade |
Faculty , Student の場合は必須。 |
team |
algo , arch , perf , pa , fpga , ss |
icon |
yamlファイルからの相対パス |
username |
LDAPに登録されるユーザーネーム |
keywords |
必須ではない。キーワードのリスト |
message |
チーム紹介ページに記載されるメッセージ |
grade
の詳細は以下。必要に応じて追加するのも可能ですが、
どう修正すればいいかわからない場合はadminないしweb係に相談してください。
grade (Faculty ) |
説明 |
---|---|
Assistant Professor |
助教 |
Associate Professor |
准教授 |
Professor |
教授 |
Professor (Cooperative Gradutate School Program) |
連携大学院教授 |
grade (Student ) |
説明 |
---|---|
D3 |
D3 |
D2 |
D2 |
D1 |
D1 |
M2 |
M2 |
M1 |
M1 |
B4 |
B4 |
frontmatterのプロパティ | 意味 |
---|---|
title |
タイトル |
description |
内容の簡潔な説明 |
date |
yyyy-mm-dd 形式での発表日 |
published |
公開するかしないか。false にすると公開されない |
Markdownの拡張であるMDXで記述。<h1>
は自動で挿入されるので<h2>
以下を使うこと。
また、@components/...
とすると他のページで使われるコンポーネントも使用可能。
@components/display/Youtube.astro
など。
プロパティ | 説明 |
---|---|
title |
タイトル |
booktitle |
学会名、ジャーナル名など |
year |
発表年 |
authors |
名前のリスト。正規化はされないので英語名でも日本語名でも大丈夫です |
bibtex |
bibtexのエントリ |
reference |
plaintextでのリファレンス |
class |
詳細は下記 |
journal
international
conference
poster
domestic
conference
poster
workshop
magazine
misc
現在用意されている分類は上記の通り。
src/content/config.ts
の編集で追加は可能ですが、日本語への翻訳があるので少し面倒です。
どう分類するかは過去のファイルを参考にしてください
frontmatterのプロパティ | 説明 |
---|---|
cover.src |
カバー画像への相対パス |
cover.alt |
カバー画像の代替テキスト |
name |
チーム名 |
icon |
チームアイコン。iconify-json のものが使えます |
color |
チーム色 |
| description
| チームの簡潔な説明。卒研配属ページなどに表示される |
| bachelorInfo.capacities
| 受入人数。受け入れ教員と人数を記述する。既存のファイルを参考にすること |
| bachelorInfo.informationSessions
| 説明会の詳細の配列。詳細は下記別表に |
プロパティ | 説明 |
---|---|
day |
yyyy-mm-dd 形式での説明会開催日。記述しないと「随時」となる |
hour |
hh:mm 形式での説明会開始時刻と終了時刻。記述しないと「随時」となる |
place.display |
場所の人間向け文字列。総合研究棟B 1124 など |
place.canonical |
完全な場所の表記。筑波大学 総合研究棟B 1124 など |
note |
オプショナル。特別に記載したいことがある場合は利用する |
recentWorks |
チーム紹介ページに近年の研究成果として表示したい論文のリスト。論文の詳細はsrc/content/publication 以下のものを使うので、src/content/publication 以下に追加してからslugで参照する |
記述はMDXで行う。@component/...
をimport出来るのでそれらを利用して記述する。
recentWorks
、カバー画像、メンバー紹介などは自動で追加されるため、
教員ごとの紹介とその他研究室紹介のみを記述する。
前段がtraefik
でTLS終端を行う。このページ本体のサーブはnginx
。
設定ファイルとDockerfile
はinfra/
に置かれている。
TLS終端はtraefik
に集約。/etc/pki/www
以下の鍵を使う。
docker-compose.yml
があるがあくまで参考程度なので、実際にはsystemd
で個別にdockerコンテナを動かすので良いと思う。
fallback-http
とfallback-https
は従来のWebサーバーをDockerコンテナ化したもの。
2024年まではWordPressを使いページを作成し、それを静的ページに吐き出すStaticPress
プラグインを使ってサイトを構築していた。
しかしStaticPress
プラグインの更新が停止しページ更新が不可能になったため、何らかの手段での解決が求められていた。
PHPはメンテナンスコストがかかるため何らかのJavaScriptでのフロントエンドフレームワークへの乗り換えを行うこととした。 ここでフレームワーク選定を行う上での考慮事項は以下の通りである。
- フレームワークの将来性、及び現状での普及度
- 永遠にメンテナンスし続けることは不可能だが、ある程度は安定して使えることが望ましい。
Next
はPages Router
からApp Router
への移行など、安定性にやや不安があるSvelteKit
はある程度普及を見せているQwik
は早すぎるVue
系は今後が不安
- 静的ページへの書き出し
- NodeJSコンテナでサーブし前段のnginxでキャッシュするのは当然考えられるが、 静的ファイルへ書き出せるに越したことはない
Next
などのSSR系フレームワークは静的エクスポートはあくまでおまけである- いっそ
Remix
に振るのも良いが、基幹系でのコンテナの運用体制が整うまでは静的ファイルで使いたい Astro
は静的ファイルを第一においており、かなり有力
- コンテンツ管理
yaml
ファイルで簡単にコンテンツ管理が出来ることが望ましい。Next
、Qwik
などでも工夫すれば可能ではあるがやや面倒- Headless CMSは自前でホスティングするにせよ外部のものを使うにせよ運用コストがかかる。また移行も面倒になる
Astro
はsrc/content
以下にファイルを置くことで簡易的なコンテンツ管理が可能である。
上記のことを考慮し、Astro
を採用した。
動的な部分についてはReactなどは用いずWebComponents
をShadow DOMを使わずに利用する方向とした。
他のSPAフレームワークの導入によるバンドルサイズの増大の抑制と、
必要な学習コストをWeb標準に寄せるのがWebComponents
採用の理由である。
Shadow DOMを使っていないのは2024年2月時点ではFirefoxがDeclarative Shadow DOMをサポートしていなかったこと、 AstroのCSSのスコーピング機能と統合することが理由である。
また、CSSフレームワークについても別で導入は行わず、AstroのCSSのスコーピング機能だけを用いた。
TailwindCSS
に代表されるユーティリティファーストのCSSフレームワークについては、
そのフレームワークに成熟していなければ読みにくいこと、
デザインシステムが効力を発揮するほどの規模ではないこと、
複雑なセレクタやアニメーションは結局CSSを直接書くしかないことから採用を見送った。
Bootstrap
などのフレームワークについても、デザインから一新するために使用しなかった。
ただしCSS変数は使用している。
2024年3月時点でのWebサーバーインフラには以下の問題がある
Apache httpd
との密結合.htaccess
が大量に用いられている- これによりWebサーバの載せ替えが非常に面倒となっている。設定ファイルも複雑化する
- 単一のWebサーバで全てを行なっている
- PHPの脆弱性を突かれると巨大な権限が奪われる
- 部分的なアップデートが困難
- 責務が分離されておらず、見通しが悪い
- メンテナンスされていないPHPサービス
- 脆弱性の温床
以上の問題を解決するため、将来的にはReverse Proxy + Dockerコンテナの構成に持っていきたい。
Reverse Proxyは見やすいUIとDockerなどのランタイムとの統合を備えたtraefik
を第一候補とし、
PHPサービスは廃止ないしコンテナ単位での分離を目標としていく。
また、.htaccess
への依存をやめて何らかの統一認証基盤を採用することでセキュリティの強化も図る。
全体の更新をいきなり行うのは困難であるため、
まず第一段階としてtraefik
の導入と本ページのnginx
でのサーブだけを最初に行う。