diff --git a/system/event/index.html b/system/event/index.html
new file mode 100644
index 0000000..8cb6dfb
--- /dev/null
+++ b/system/event/index.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+ イベントページ
+
+
+
+
+
+
+
+
+
+
+
diff --git a/system/event/script.js b/system/event/script.js
new file mode 100644
index 0000000..77f09ef
--- /dev/null
+++ b/system/event/script.js
@@ -0,0 +1,81 @@
+ // GASからJSONデータを取得してHTML要素を生成する
+ async function fetchAndGenerateData() {
+ const response = await fetch('https://script.google.com/macros/s/AKfycbxXB5BAlZtAwDjvKMbi70uFI3C1K2tyO7wyXP3isbm-dj2dMvBdTy8afKRbwTGSKA1b/exec');
+ const jsonData = await response.json();
+ // HTML内の要素を取得
+ const nameElement = document.getElementById('name');
+ const eventContainer = document.getElementById('eventContainer');
+
+ nameElement.textContent = jsonData[0].areaID;
+
+ const categories = {};
+ // JSONデータをもとに要素を生成
+ for (const data of jsonData) {
+ const category = data.category;
+ if (!categories[category]) {
+ categories[category] = [];
+ }
+ categories[category].push(data);
+ }
+
+ for (const category in categories) {
+ const categoryContainer = document.createElement('div');
+ categoryContainer.classList.add('categoryContainer');
+
+ const h2 = document.createElement('h2');
+ h2.classList.add('category');
+ h2.textContent = category;
+ eventContainer.appendChild(h2);
+ // カテゴリーごとにメニューを追加できるようにした
+ for (const data of categories[category]) {
+ const div = document.createElement('div');
+ div.classList.add('event-item');
+
+ // pageLink データがある場合にのみ a タグを生成
+ if (data.pageLink) {
+ const a = document.createElement('a');
+ a.href = data.pageLink; // pageLink をリンク先として設定
+ a.target = '_blank';
+ div.appendChild(a);
+
+ const img = document.createElement('img');
+ img.src = data.img;
+ a.appendChild(img);
+ } else {
+ // pageLinkデータがない場合は画像のみを生成
+ const img = document.createElement('img');
+ img.src = data.img;
+ div.appendChild(img);
+ }
+
+ const h3 = document.createElement('h3');
+ h3.classList.add('eventName');
+ h3.textContent = data.eventName;
+ div.appendChild(h3);
+
+ // LocationとDateが記入されている場合に表示
+ if (data.location) {
+ const p1 = document.createElement('p');
+ p1.classList.add('location');
+ p1.textContent = `場所: ${data.location}`;
+ div.appendChild(p1);
+ }
+
+ if (data.date) {
+ const p2 = document.createElement('p');
+ p2.classList.add('date');
+ if (data.inSession === 'O') {
+ p2.textContent = `開催期間: ${data.date} (終了)`;
+ } else {
+ p2.textContent = `開催期間: ${data.date}`;
+ }
+ div.appendChild(p2);
+ }
+
+ categoryContainer.appendChild(div);
+ }
+ eventContainer.appendChild(categoryContainer);
+ }
+ }
+ // ページ読み込み時にJSONデータを取得してHTML要素を生成
+ window.addEventListener('DOMContentLoaded', fetchAndGenerateData);
\ No newline at end of file
diff --git a/system/event/style.css b/system/event/style.css
new file mode 100644
index 0000000..efef20d
--- /dev/null
+++ b/system/event/style.css
@@ -0,0 +1,146 @@
+body {
+ font-family: 'Noto Sans JP', sans-serif;
+ margin: 0;
+ padding: 0;
+ background-color: #f4f4f4;
+ width: 100%;
+}
+
+.navbar {
+ background-color: #02465b;
+ color: #f4f4f4;
+ width: 100%;
+ position: sticky;/* 2行だけの記述でfixedと同じ配置ができる*/
+ top: 0;
+ z-index: 100;
+ box-shadow: 0px 4px 8px #adadad;
+}
+
+.barContainer {
+ width: 80%;
+ margin: auto;
+ padding: 1em 0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ .navbar h1 {
+ margin: 0;
+ padding: 0;
+ }
+
+ .navbar nav ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ }
+
+ .navbar nav ul li {
+ margin-right: 1em;
+ }
+
+ .navbar nav ul li a {
+ text-decoration: none;
+ color: #f4f4f4;
+ }
+
+ .navbar nav ul li a:hover {
+ border-bottom: 2px solid #ccb540;
+ }
+
+ .navbar nav ul li:nth-child(2) a {
+ color: #ccb540;
+ }
+ /* ここまでは共通で記載する */
+ .category{
+ border-bottom: 1px solid #acacac;
+ width: 100%;
+ }
+ .categoryContainer{
+ display: grid;
+ grid-template-columns: repeat(auto-fit, 300px);
+ justify-content: center;
+ grid-gap:1em;
+ /*
+ ウィンドウに合わせて自動で改行(中央揃え左揃え)を再現するにはflexboxでは難しかった。
+ flex-wrap:wrapとjustify-content:centerでは改行した時に真ん中配置から始まっちゃうよーうまくいかないよー(>_<)
+ しかし、gridなら4行でいけた。もっと短くできるかも。
+ */
+ }
+ #eventContainer {
+ width: 80%;
+ margin:0 auto;
+ }
+
+ .event-item {
+ background-color: #ffffff;
+ border-radius: 10px;
+ box-shadow: 0px 0px 8px #acacac;
+ padding: 0;
+ text-align: center;
+ width: 300px;
+ margin: .5em auto;
+ }
+
+ .event-item:hover {
+ transform: scale(1.1);
+ transition: transform 0.3s ease;
+ }
+
+ .event-item img {
+ width: 100%;
+ height: 25vh;
+ object-fit: cover;
+ border-radius: 10px 10px 0 0 ;
+ padding: 0;
+ }
+
+ .event-item a img:hover{
+ opacity:0.5;
+ }
+
+ .event-item h3 {
+ margin: 0 1em;
+ font-size: 110%;
+ border-bottom: 2px solid #acacac;
+ }
+
+ .location{
+ font-size: 1.2vw;
+ }
+
+ @media screen and (max-width: 1164px){
+ .navbar{
+ width: 100%;
+ }
+ #eventContainer{
+ width: 95%;
+ margin: 0 auto;
+ }
+ .category{
+ width: 80%;
+ margin: 1em auto;
+ }
+
+ @media screen and (max-width: 793px){
+ .category{
+ text-align: center;
+ }
+ .categoryContainer{
+ display: grid;
+ grid-template-columns: repeat(auto-fit, 170px);
+ justify-content: center;
+ }
+ .event-item{
+ width: 170px;
+ }
+ .barContainer {
+ width: 80%;
+ margin: auto;
+ padding: 1em 0;
+ flex-direction: column;
+ }
+ }
+ }
\ No newline at end of file