Skip to content

denkoken/denkoken.github.io

Repository files navigation

超電子工学研究会 Webページ

URL : https://denkoken.github.io/

srcディレクトリ内のReactJS で書かれた.jsxファイルと、configディレクトリ内の設定用.jsonファイルを Webpackにより、 main.bundle.jsbundle.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

React Component の繋がりについて

図

記事の書き方について

記事は.jsonファイルで管理されます。
記事の追加後はnpm run publishを実行してgitにcommitしてください。
該当する.jsonファイルや画像ファイルを変更してもwebpackでbuildする必要はありません。

jsonの書き方

以下のように記事を並べると複数の記事となります。

{
    "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"
    }
}

jsonの配置場所

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ファイルとして配置してあります。

config/general.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ディレクトリからの相対パスです

config/internal_paths.json

Webページのクエリ文字列においてtopicで指定された値と読み込むべき .jsonファイルのdocsディレクトリからの相対パスの対応を クエリ文字列による値をkey、パスをvalueとした dict型で記述したファイルです。 クエリ文字列により指定される値の種類は後述のconfig/menuitem.json を参照してください。 変更を反映するにはリビルドが必要です。

config/menuitem.json

Webページのヘッダに表示されるメニューバーの項目の設定です。 メニュー項目を指定するdictのdictになっています。 後述するメニュー項目のパラメータ、typeinternalのときは必ず メニュー項目の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 typeclipboardが指定された場合のみ可能です。クリップボードへのコピーが成功したときに表示する文字列です
failed String typeclipboardが指定された場合のみ可能です。クリップボードへのコピーが失敗したときに表示する文字列です

パラメータtypeには次の3つが指定可能です。

  • internal : 内部リンク
  • external : 外部リンク
  • clipboard : クリップボードへのコピー

internalは選択されたメニュー項目のkeyに対し、 ./?topic=keyへのリダイレクトを行います。 externalは選択されたメニュー項目のpathで指定されたURLを 新しいタブで開きます。 clipboardは選択されたメニュー項目のpathで指定された内容を クリップボードにコピーします。

config/publish.json

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

publish.jsは変更したファイルのeslint、git addやeslint、 また記事一覧の作成などを必要に応じて行うスクリプトです。 実行にはbebel-cliが必要となります。

config/publish.jsonで指定したファイルに対しそれぞれ次の処理を行います。

  1. 以前のcommit以降変更または追加のあったファイルについて、 list, update, rebuildの対象であるものを抽出します。
  2. 抽出したファイルの内、.js, .jsxファイルに対しeslintを実行します。 eslintに失敗した場合処理はここで終了しますので、 ソースコードの修正を行ってください。
  3. list対象のファイルに対し、記事一覧のjsonファイルに タイトル、現在日時、パスを追加します。 また、記事一覧のjsonファイルもgit addの対象に加えます。
  4. rebuild対象のファイルが存在する場合、webpack.prod.jsの設定を使用して リビルドを行います。この処理には1, 2分程度の時間がかかります。 また、bundleで指定したファイルをgit addの対象に加えます。 Webpackに失敗した場合処理はここで終了しますので、 ソースコードの修正を行ってください。
  5. list, update, rebuildで指定したファイル及びgit addの対象に追加された ファイルに対しgit addを実行します。
  6. commitします
  7. masterブランチにプッシュします。 pushにユーザー名、パスワードの入力が不要な状態にしておく必要があります。 pushにユーザー名、パスワードの入力が不要な状態にしておくことを推奨します。

処理の終了後は念の為git showなどで最新のcommitを確認してください。

Twitter連携について

npm run publishを実行し新たに記事が更新された場合、 config/twitter.jsonを適切に設定しておくことで 電工研のTwitterアカウントで自動ツイートすることが可能です。
Twitterアカウント不正アクセス防止のため、 git cloneしただけでは有効化されません。

config/twitter.jsonの設定は以下のとおりに行ってください。

  1. こちらにアクセスし、 電工研のTwitterアカウントにログインする。
  2. 表示されたページを見て、次のとおりに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"として表示された文字列を コピー
  3. 適宜contentを編集してホームページ更新時の文言を変える。

ツイートは次のようなフォーマットでなされます。

${config/twitter.jsoncontentに書かれた内容} ${更新されたページのURL}

その他

Linterとしてeslintを使用します。 設定ファイルは.eslintrc.jsonです。 eslintが通っていないファイルのpushを防ぐため、 可能な限りpublish.jsを介したアップロードを行ってください。

ReactJSとともに用いるUI Componentとして Ant Design of Reactを使用しています。

About

超電子工学研究会のホームページです.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •