URL : https://denkoken.github.io/
src
ディレクトリ内のReactJS
で書かれた.jsx
ファイルと、config
ディレクトリ内の設定用.json
ファイルを
Webpackにより、
main.bundle.js
とbundle.css
にまとめて
docs
ディレクトリに出力、master
ブランチにpush
することで
Webページが公開されます。
# 必要パッケージのインストール
npm install
# 開発用ビルド
npm run watch
# 本番用ビルド (このコマンドを用いてコンパイルしたものをpushしないでください)
babel-node ./node_modules/webpack/bin/webpack.js --config webpack.prod.js
# main.bundle.js解析
npm run analyze
# Webページアップロード (必要なら本番用ビルドも走ります)
npm run publish
# または
babel-node publish.js
記事は.json
ファイルで管理されます。
記事の追加後はnpm run publish
を実行してgitにcommitしてください。
該当する.json
ファイルや画像ファイルを変更してもwebpackでbuildする必要はありません。
以下のように記事を並べると複数の記事となります。
{
"kizi_1": {
...
},
"kizi_2": {
...
},
"tokusyu_na_kizi": {
...
},
...
"iten_no_oshirase": {
...
}
}
各記事のパラメータは以下の通りです。
key | value type | description |
---|---|---|
title |
String | 記事のタイトル |
body |
Array of String | 記事の本文。Markdownでかけます。見やすさのためにArrayとなっていますが、全て連結されるのでどこで区切っても変わりません。 |
src |
String | headerとなる画像のパス。著作権フリーの画像を使いましょう。 |
{
"main": {
"title": "超電子工学研究会",
"body": [
"<h4>",
"慶應義塾大学公認団体 超電子工学研究会, ",
"通称電工研のホームページです.<br>",
"詳しくは <a href=\"./?topic=about_us\">電工研について</a>",
"をご覧ください.<br>",
"また、新歓情報は<a href=\"./?topic=shinkan\">こちら</a>",
"で公開中です.",
"</h4>"
],
"src": "img/index.jpg"
}
}
config/internal_paths.json
で管理されます。
今は以下の通りになっています。
場所 | key | デフォルトのpath(書き換えられます) |
---|---|---|
トップページ | index |
data/article/index.json |
電工研について | about_us |
data/article/about_us.json |
告知 > 新歓情報 | shinkan |
data/article/shinkan.json |
告知 > 三田祭情報 | mita |
data/article/mita.json |
告知 > 矢上祭情報 | yagami |
data/article/yagami.json |
制作物 | work |
data/list/work.json |
設定ファイルはconfig
ディレクトリに.json
ファイルとして配置してあります。
Webページの基本的な設定用のファイルです。 変更を反映するにはリビルドが必要です。
必要なパラメータは以下の通りです。
key | value type | description |
---|---|---|
name |
String | Webページのタイトルに表示される文字列です |
footer |
dict | Webページのフッターに表示される文字列です。フォーマットはfooter.name ©footer.yearです |
load_json_failed |
String | jsonデータの動的読み込みに失敗したときに表示される文字列です |
github_url |
String | 取得すべきデータが配置されているgithub上のルートパスです |
default_image_url |
String | 記事やリストでヘッダ画像の指定がなかったときに表示される画像のdocsディレクトリからの相対パスです |
Webページのクエリ文字列においてtopic
で指定された値と読み込むべき
.json
ファイルのdocsディレクトリからの相対パスの対応を
クエリ文字列による値をkey、パスをvalueとした
dict型で記述したファイルです。
クエリ文字列により指定される値の種類は後述のconfig/menuitem.json
を参照してください。
変更を反映するにはリビルドが必要です。
Webページのヘッダに表示されるメニューバーの項目の設定です。
メニュー項目を指定するdictのdictになっています。
後述するメニュー項目のパラメータ、type
がinternal
のときは必ず
メニュー項目のkeyとしてconfig/internal_paths.json
と共通のものを指定してください。
変更を反映するにはリビルドが必要です。
メニュー項目を設定するパラメータは以下の通りです。
key | value type | description |
---|---|---|
label |
String | メニュー項目に表示される文字列です |
icon |
String | メニュー項目に表示されるアイコンを指定する文字列です。アイコンの種類についてはこちらを確認してください。 |
type |
String | メニュー項目選択時の挙動を指定します。詳しくは後述 |
path |
Strinh | 後述のtype にて説明します |
child |
dict | サブメニューとなるメニュー項目のdictを取ります。ネストの深さは1まで可能です。この項目が設定された場合のみtype の設定は不要です |
success |
String | type にclipboard が指定された場合のみ可能です。クリップボードへのコピーが成功したときに表示する文字列です |
failed |
String | type にclipboard が指定された場合のみ可能です。クリップボードへのコピーが失敗したときに表示する文字列です |
パラメータtype
には次の3つが指定可能です。
internal
: 内部リンクexternal
: 外部リンクclipboard
: クリップボードへのコピー
internal
は選択されたメニュー項目のkeyに対し、
./?topic=key
へのリダイレクトを行います。
external
は選択されたメニュー項目のpath
で指定されたURLを
新しいタブで開きます。
clipboard
は選択されたメニュー項目のpath
で指定された内容を
クリップボードにコピーします。
publish.js
で実行される処理の設定ファイルです。
詳しい処理内容については後述のpublish.js
を参照してください。
利用可能なパラメータは次の通りです。
key | value type | description |
---|---|---|
list |
list | 記事を配置するディレクトリとその記事を含む記事一覧の組を表すdictのlistです。dictのフォーマットは後述 |
update |
dict | 変更されていた場合にgit add するファイルを指定します。dictのフォーマットは後述 |
rebuild |
dict | 変更されていた場合にリビルドを実行しgit add するファイルを指定します。dictのフォーマットは後述 |
bundle |
list | publish.js が実行された結果リビルドが行われた場合新たにgit add されるファイル一覧を指定します |
パラメータlist
が持つべきパラメータは次のとおりです
key | value type | description |
---|---|---|
dst_path |
String | 記事一覧のデータが格納されるjson ファイル |
src_dir |
String | 記事一覧に追加するファイルが格納されるディレクトリ |
パラメータupdate
, rebuild
が持つべきパラメータは次の通りです。
key | value type | description |
---|---|---|
dir |
list | このlist内のディレクトリ内のファイルすべてが処理を実行する対象となる |
file |
list | このlistに記述されたファイルが処理を実行する対象となる |
except |
list | このlistに記述されたファイルはdir で指定したディレクトリ内にあっても処理は実行されない |
publish.js
は変更したファイルのeslint、git addやeslint、
また記事一覧の作成などを必要に応じて行うスクリプトです。
実行にはbebel-cli
が必要となります。
config/publish.json
で指定したファイルに対しそれぞれ次の処理を行います。
- 以前のcommit以降変更または追加のあったファイルについて、
list
,update
,rebuild
の対象であるものを抽出します。 - 抽出したファイルの内、
.js
,.jsx
ファイルに対しeslintを実行します。 eslintに失敗した場合処理はここで終了しますので、 ソースコードの修正を行ってください。 list
対象のファイルに対し、記事一覧のjson
ファイルに タイトル、現在日時、パスを追加します。 また、記事一覧のjson
ファイルもgit add
の対象に加えます。rebuild
対象のファイルが存在する場合、webpack.prod.js
の設定を使用して リビルドを行います。この処理には1, 2分程度の時間がかかります。 また、bundle
で指定したファイルをgit add
の対象に加えます。 Webpackに失敗した場合処理はここで終了しますので、 ソースコードの修正を行ってください。list
,update
,rebuild
で指定したファイル及びgit add
の対象に追加された ファイルに対しgit add
を実行します。- commitします
master
ブランチにプッシュします。pushにユーザー名、パスワードの入力が不要な状態にしておく必要があります。pushにユーザー名、パスワードの入力が不要な状態にしておくことを推奨します。
処理の終了後は念の為git show
などで最新のcommitを確認してください。
npm run publish
を実行し新たに記事が更新された場合、
config/twitter.json
を適切に設定しておくことで
電工研のTwitterアカウントで自動ツイートすることが可能です。
Twitterアカウント不正アクセス防止のため、
git clone
しただけでは有効化されません。
config/twitter.json
の設定は以下のとおりに行ってください。
- こちらにアクセスし、 電工研のTwitterアカウントにログインする。
- 表示されたページを見て、次のとおりに
config/twitter.json
を入力する。comsumer_key
に"Comsumer Key (API Key)"として表示された文字列をコピーcomsumer_secret_key
に"Comsumer Secret (API Secret)"として表示された 文字列をコピーaccess_token_key
に"Access Token"として表示された文字列をコピー (改行不要)access_token_secret
に"Access Token Secret"として表示された文字列を コピー
- 適宜
content
を編集してホームページ更新時の文言を変える。
ツイートは次のようなフォーマットでなされます。
${
config/twitter.json
のcontent
に書かれた内容} ${更新されたページのURL}
Linterとしてeslint
を使用します。
設定ファイルは.eslintrc.json
です。
eslint
が通っていないファイルのpushを防ぐため、
可能な限りpublish.js
を介したアップロードを行ってください。
ReactJSとともに用いるUI Componentとして Ant Design of Reactを使用しています。