LoginSignup
1
1

More than 1 year has passed since last update.

さくらVPSでSinatra(+mysql)を使って簡単なWEBアプリを作る

Last updated at Posted at 2023-01-15

■環境

  • さくらVPS(Cent OS7)
  • Nginx
  • MySQL (5.7)
  • Sinatra (2.2.0)

■ゴール

Rubyで書いた簡単なTodoアプリを Nginxで動かしてみたいと思います。

■サーバの準備と Nginxのインストール

  • サーバのプログラムをアップデートし、 Nginx等をインストールする準備をする。
  sudo yum update
  • Nginxをインストールする。
  sudo yum install nginx
  • ブラウザからログインし、Cent OSトップページが表示されることを確認する。

  ※ さくらVPSのコンパネにログインすればIPアドレスを確認できます。
スクリーンショット 2023-01-15 21.34.29.png

  • トップページのHTMLは /usr/share/nginx/html/index.html に記載されており、このディレクトリ以下のHTMLを Nginxがブラウザに返してくれます。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>タスク管理アプリケーション</title>
  </head>
  <body>
    <h1>タスク管理アプリケーション</h1>
    <input id="task-title-input" type="text" />
    <button id="task-add-button">追加</button>
    <h2>タスク一覧</h2>
    <table>
      <thead>
	<tr>
	  <th>タイトル</th>
	  <th>作成日時</th>
	</tr>
      </thead>
      <tbody id="tasks-table-body"></tbody>
    </table>
    <script src="main.js"></script>
    <p id="message"></p>
  </body>
</html>

ここまでで静的なHTMLは完成しています。

■動的なJavaScriptファイル作成

  • 動的コンテンツ作成のため、以下のJavaScriptファイルを作成します。

/usr/share/nginx/html/main.js

const tasksTableBodyElement = document.getElementById('tasks-table-body')
const taskTitleInputElement = document.getElementById('task-title-input')
const taskAddButtonElement = document.getElementById('task-add-button')

async function loadTasks() {
	const response = await fetch('/api/tasks')
	const responseBody = await response.json()
	console.log(responseBody)

	const tasks =responseBody.tasks

	while(tasksTableBodyElement.firstChild) {
		tasksTableBodyElement.removeChild(tasksTableBodyElement.firstChild)
	}

	tasks.forEach((task) => {
		const titleTdElement = document.createElement('td')
		titleTdElement.innerText = task.title

		const createdAtTdElement = document.createElement('td')
		createdAtTdElement.innerText = task.createdAt

		const trElement = document.createElement('tr')
		trElement.appendChild(titleTdElement)
		trElement.appendChild(createdAtTdElement)

		tasksTableBodyElement.appendChild(trElement)
	})
}

async function registerTask() {
	const title = taskTitleInputElement.value
	console.log(title)
	const requestBody = {
		title: title
	}

	await fetch('/api/tasks', {
		method: 'POST',
		body: JSON.stringify(requestBody)
	})

	await loadTasks()
}

async function main() {
	taskAddButtonElement.addEventListener('click', registerTask)
	await loadTasks()
}

スクリーンショット 2023-01-15 21.29.51.png

  • 以上で簡単なTodoアプリ作成完了です。トップページの入力欄にタスクを追加することで画面にタスク名・登録時間を表示できます。現状ではDBMSを導入していないことから、ブラウザのリロードのたびにタスクが初期化されてしまうので、次回MySQLの導入から記載していきます。

■引用

MySQLの設定(CentOS 7)

さくらのVPSにRubyをインストール - Qiita

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1