- 投稿日:2020-08-06T21:07:17+09:00
タイムゾーンはちゃんと設定しよう
サービスを開発する際、最初にタイムゾーンをしっかり設定していないと、MySQLのcreated_at や updated_at などをうまく使えないというようなことになります。
MySQLでは、カラムにcreated_at や updated_atなどを加えると、それぞれSQLのinsertやupdateが実行されたときに自動でtimestampを入れてくれたりします。
始めにしっかり設定しておかないと、あとから必要になったときに、自力でそれらの値を取得して挿入するはめになってしまいます。(実体験)
- 投稿日:2020-08-06T18:54:44+09:00
【PHP入門】CRUD機能
はじめに
今回は、PHPとMySQLを使ってMVCモデルでCRUD機能を実装していきます。
CRUD機能とは?
ほぼ全てのソフトウェアが有する4つの永続的な基本機能の頭文字をそれぞれ並べた用語のこと。
その4つの機能とは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)を指す。バージョン
PHP:7.4.5
phpMyAdmin:5.0.2
MySQL:5.7.30今回作成するファイル
conf / html / model / view の4つのディレクトリを作って進めます。
conf(繰り返し使用するもの定義)
- const.phphtml(controller)
- bbs.php
- bbs_insert.php
- bbs_update.php
- bbs_delete.phpmodel
- db.php
- functions.php
- bbs.phpview
- bbs_view.phpテーブルの作成
bbs.sqlCREATE TABLE `bbs` ( `id` int(11) NOT NULL, `name` varchar(100) NOT NULL, `comment` varchar(100) NOT NULL, `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ALTER TABLE `bbs` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (`id`);定義
const.php<?php // ディレクトリパス define('MODEL_PATH', $_SERVER['DOCUMENT_ROOT'] . '/../model/'); define('VIEW_PATH', $_SERVER['DOCUMENT_ROOT'] . '/../view/'); // MySQL接続用 define('DB_HOST', 'ホスト名'); define('DB_NAME', 'データベース名'); define('DB_USER', 'ユーザ名'); define('DB_PASS', 'パスワード'); define('DB_CHARSET', 'utf8'); // URL define('BBS_URL', '/bbs.php');Viewの作成
bbs_view.php<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ひとこと掲示板</title> </head> <body> <h1>ひとこと掲示板</h1> <!-- 投稿フォーム --> <form method="post"> <div> <label>名前</label> <input type="text" name="name"> </div> <div> <label>コメント</label> <input type="text" name="comment"> </div> <input type="submit" value="送信"> </form> <!-- 表示 --> <table> <thead> <tr> <th>名前</th> <th>コメント</th> <th>投稿時間</th> <th>操作</th> </tr> </thead> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> </body> </html>Create機能の実装
Modelの作成
modelの中にdb.phpを作成(データベース関係)
db.php<?php function get_db_connect(){ // MySQL用のDSN文字列 $dsn = 'mysql:dbname='. DB_NAME. ';host='. DB_HOST. ';charset='. DB_CHARSET; try{ // DB接続 $dbh = new PDO($dsn, DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); }catch(PDOException $e){ exit('接続できませんでした。理由:'.$e->getMessage()); } return $dbh; } function execute_query($db, $sql, $params = array()){ try{ $statement = $db->prepare($sql); return $statement->execute($params); }catch(PDOException $e){ set_error('更新に失敗しました。'); } return false; }modelの中にfunctions.phpを作成(その他機能)
functions.php<?php function redirect_to($url){ header('Location:'. $url); exit; } function get_post($name){ if(isset($_POST[$name]) === true){ return $_POST[$name]; }; return ''; } // セッション function get_session($name){ if(isset($_SESSION[$name]) === true){ return $_SESSION[$name]; }; return ''; } function set_session($name, $value){ $_SESSION[$name] = $value; } // エラーメッセージ function set_error($error){ $_SESSION['__errors'][] = $error; } function get_errors(){ $errors = get_session('__errors'); if($errors === ''){ return array(); } set_session('__errors', array()); return $errors; } // メッセージ function set_message($message){ $_SESSION['__message'][] = $message; } function get_messages(){ $messages = get_session('__message'); if($messages === ''){ return array(); } set_session('__message', array()); return $messages; }modelの中にbbs.phpを作成(掲示板関係)
bbs.php<?php require_once MODEL_PATH. 'functions.php'; require_once MODEL_PATH. 'db.php'; // Create function post_comment($db, $name, $comment){ $sql = " INSERT INTO bbs( name, comment ) VALUES(?,?) "; return execute_query($db, $sql, array($name, $comment)); }Viewの作成
bbs_view.phpにCreate処理へ遷移するよう追記
- 処理結果を表示できるよう追記
- formタグにactionを追記bbs_view.php<!-- 処理結果のメッセージ --> <?php foreach(get_errors() as $error){ ?> <p><?php print $error; ?></p> <?php } ?> <?php foreach(get_messages() as $messages){ ?> <p><?php print $messages; ?></p> <?php } ?> <form method="post" action="bbs_insert.php"> <div> <label>名前</label> <input type="text" name="name"> </div> <div> <label>コメント</label> <input type="text" name="comment"> </div> <input type="submit" value="送信"> </form>Controllerの作成
htmlの中にbbs.phpを作成(bbs_view.php表示用)
bbs.php<?php require_once '../conf/const.php'; require_once MODEL_PATH. 'bbs.php'; session_start(); include_once VIEW_PATH. 'bbs_view.php';htmlの中にbbs_insert.phpを作成(Insert処理用)
bbs_insert.php<?php require_once '../conf/const.php'; require_once MODEL_PATH. 'functions.php'; require_once MODEL_PATH. 'bbs.php'; session_start(); // データベース接続 $db = get_db_connect(); // Postされたものを定義 $name = get_post('name'); $comment = get_post('comment'); // Insert if(post_comment($db, $name, $comment)){ set_message('コメントを投稿しました。'); }else{ set_error('投稿に失敗しました。'); } redirect_to(BBS_URL);Read機能の実装
Createで挿入されたデータを表示されるようにしていきます。
Modelの作成
db.phpにRead機能を追記
db.phpfunction fetch_all_query($db, $sql, $params = array()){ try{ $statement = $db->prepare($sql); $statement->execute($params); return $statement->fetchAll(); }catch(PDOException $e){ set_error('データ取得に失敗しました。'); } return false; }bbs.phpに追記
bbs.php// Read function get_comments($db, $id){ $sql = " SELECT id, name, comment, created FROM bbs "; return fetch_all_query($db, $sql); }Viewの作成
bbs_view.phpに追記
- tableタグ内のtbodyタグに追記bbs_view.php<tbody> <?php foreach($bbs as $data){ ?> <tr> <td><?php print($data['name']); ?></td> <td><?php print($data['comment']); ?></td> <td><?php print($data['created']); ?></td> <td></td> </tr> <?php } ?> </tbody>Controllerの作成
bbs.php<?php require_once '../conf/const.php'; require_once MODEL_PATH. 'bbs.php'; session_start(); // SELECT文で選択したデータを表示させる為に追記 $db = get_db_connect(); $bbs = get_comments($db); include_once VIEW_PATH. 'bbs_view.php';Update機能の実装
Createで生成されたデータを変更できるようにしていきます。
Modelの作成
bbs.phpにUpdate機能を追記
bbs.php// Update function update_comment($db, $id, $comment){ $sql = " UPDATE bbs SET comment = ? WHERE id = ? "; return execute_query($db, $sql, array($comment, $id)); }Viewの作成
bbs_view.phpにUpdate処理へ遷移するよう追記
- tableタグ内のtbodyに追記bbs.php<tbody> <?php foreach($bbs as $data){ ?> <tr> <td><?php print($data['name']); ?></td> <td> <form method="post" action="bbs_update.php"> <input type="text" name="comment" value="<?php print($data['comment']); ?>"> <input type="submit" value="変更"> <!-- hiddenで該当idをpost --> <input type="hidden" name="id" value="<?php print($data['id']); ?>"> </form> </td> <td><?php print($data['created']); ?></td> <td></td> </tr> <?php } ?> </tbody>Controllerの作成
htmlの中にbbs_update.phpを作成(Update処理用)
bbs_update.php<?php require_once '../conf/const.php'; require_once MODEL_PATH. 'functions.php'; require_once MODEL_PATH. 'bbs.php'; session_start(); // データベース接続 $db = get_db_connect(); // Postされたものを定義 $id = get_post('id'); $comment = get_post('comment'); // Update if(update_comment($db, $id, $comment)){ set_message('コメントを変更しました。'); } else { set_error('コメントの変更に失敗しました。'); } redirect_to(BBS_URL);Delete機能の実装
Createで生成されたデータを削除できるようにしていきます。
Modelの作成
bbs.phpにDelete機能を追記
bbs.php// Delete function delete_comment($db, $id){ $sql = " DELETE FROM bbs WHERE id = ? "; return execute_query($db, $sql, array($id)); }Viewの作成
bbs_view.phpにDelete処理へ遷移するよう追記
- tableタグ内のtbodyに追記bbs.php<tbody> <?php foreach($bbs as $data){ ?> <tr> <td><?php print($data['name']); ?></td> <td> <form method="post" action="bbs_update.php"> <input type="text" name="comment" value="<?php print($data['comment']); ?>"> <input type="submit" value="変更"> <input type="hidden" name="id" value="<?php print($data['id']); ?>"> </form> </td> <td><?php print($data['created']); ?></td> <td> <form method="post" action="bbs_delete.php"> <input type="submit" value="削除"> <input type="hidden" name="id" value="<?php print($data['id']); ?>"> </form> </td> </tr> <?php } ?> </tbody>Controllerの作成
htmlの中にbbs_delete.phpを作成(Delete処理用)
bbs.php<?php require_once '../conf/const.php'; require_once MODEL_PATH. 'functions.php'; require_once MODEL_PATH. 'bbs.php'; session_start(); // データベース接続 $db = get_db_connect(); // Postされたものを定義 $id = get_post('id'); // Delete if(delete_comment($db, $id)){ set_message('コメントを削除しました。'); } else { set_error('コメントの削除に失敗しました。'); } redirect_to(BBS_URL);'参考
- 投稿日:2020-08-06T10:34:17+09:00
[SQL]INSERT文でテーブルへデータ挿入
- 投稿日:2020-08-06T10:05:40+09:00
デプロイ方法②(EC2環境構築/Linux/MySQL設定)
※デプロイの方法の手順② 今後の自分のメモ用に
EC2インスタンスの環境構築
設定用のツールをインストール
最初にyumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。
yumコマンド
Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。
パッケージ
LinuxOS下における、ある役割/機能をもったプログラムの集合です。ソフトウェアとも、ライブラリとも呼べます。
あくまでもLinuxOSでは、ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ、ということですパッケージをアップデート
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y updateその他環境構築に必要なパッケージを諸々インストール
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl-yコマンドについて
-y はyumコマンドのオプションです。yum install などのコマンドでは、本当にインストールして良いのか [y/n]のようにYes or Noが問われます。この場合はYキーを押してEnterキーを押せば正常どおりインストールが行われます。しかし、初見であったり誤ってYキー以外を押してしまう場合もあります。 ここでは確実にインストールするために、予めオプションで-yを設定する事で全ての問いにYesで自動的に答えるように設定してコマンドを実行しましょう。
もし誤ってオプションを忘れてしまうと下記のような問いが発生しますので、Yキーを押し次にEnterキーを押してインストールを完了して下さい。
総ダウンロード容量: 120 M Is this ok [y/d/N]:Node.jsをインストール
EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。
Node.js
サーバーサイドで動くJavaScriptのパッケージです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash - [ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejsこちらも確認画面が出てきた場合は、「y」→returnキーで確定してください。
これでNode.jsのインストールは完了です。
rbenvとruby-buildをインストール
rbenvとruby-buildをインストールします。Macの環境構築の際にも利用しましたが、改めて簡単に説明しておきます。
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールになります。これらはRubyをインストールする前に、インストールする必要があります。
ruby-buildはrbenvのプラグインであり、ruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができます。
rbenvを使用することでrubyのバージョンを切り替えることできます。#rbenvのインストール [ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv #パスを通す [ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile #rbenvを呼び出すための記述 [ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile #.bash_profileの読み込み [ec2-user@ip-172-31-25-189 ~]$ source .bash_profile #ruby-buildのインストール [ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build #rehashを行う [ec2-user@ip-172-31-25-189 ~]$ rbenv rehash1つ目のコマンドは、gitからrbenvをクローンしています。
2つ目と3つ目のコマンドは、パスを通す際に必要なコマンドです。パスを通すとは、どのディレクトリからもアプリケーションを呼び出せる状態にするということです。
そして、4つ目のコマンドで、設定したパスを読み込んでいます。
5つ目のコマンドは、gitからruby-buildをクローンしています。
最後のコマンドは、使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。これでrbenvとruby-buildのインストールは完了
Rubyをインストール
インストールするRubyのバージョン、自身のアプリケーションで使っているRubyのバージョンによって適宜変更してください。
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv rehash #rehashを行う [ec2-user@ip-172-31-25-189 ~]$ ruby -v # バージョンを確認1つ目のコマンドで、Rubyの2.5.1のバージョンをインストールしています。Rubyのインストールには時間がかかります。ターミナルに「Installing ruby-2.5.1...」といった表示が出たまま止まって見えますが、そのまま待ちましょう。
2つ目のコマンドは、EC2インスタンス内で使用するRubyのバージョンを決めるものになります。
3行目では再びRehashを行っています。
最後にruby -vコマンドを打ち込み、バージョンを確認しましょう。EC2インスタンス内の環境構築が完了
MySQLの設定
データベースの種類
一口にデータベースと言っても、いくつかの種類があります。以下にその種類を示します。
・階層型データベース
・ネットワーク型データベース
・リレーショナルデータベース
この中で最も利用されているのが、リレーショナルデータベースです。
エクセルの表のような形で情報を整理し、管理することができます。そして、このリレーショナルデータベースを管理するソフトウェアはリレーショナル・データ・ベース・マネジメント・システム(RDBMS)と呼ばれます。そんなRDBMSの中でも代表的なものの一つが、MySQLです。
MySQL
MySQLは、Oracle社が開発・提供をしているRDBMSです。データベースの作成、編集、削除などを行うことができます。オープンソースソフトウェアとして公開されており、誰でも無償で利用することができます。
Ruby on Railsと合わせ利用することができ、本カリキュラムでは一貫してMySQLを利用しています。一つのEC2インスタンスに、Railsをはじめ必要なソフトをすべてインストールしています。MySQLもそのうちの一つです。上の図で「データベースサーバー」と書かれているものが、MySQLに当たります。MySQLのようなソフトはデータベースの管理を行うため、そのように呼ばれることもあります。
MySQLをインストール
Amazon Linuxを利用している場合、MySQLは yum コマンドからインストールすることができます。
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56これは、MySQLのバージョン5.6をインストールすることを意味します。
MySQLを起動
MySQLを起動するために service コマンドを利用します。これは、Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld startmysql ではなく mysqld であることに注意しましょう。「d」はLinuxの用語で「サーバ」を意味する「デーモン(daemon)」の頭文字です。
起動できたか確認する
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld status mysqld (pid 15692) is running...「running」と表示されれば、MySQLの起動は成功
MySQLのrootパスワードの設定
yum でインストールしたMySQLには、デフォルトで root というユーザーでアクセス出来るようになっていますが、パスワードは設定されていません。
そこで、以下のコマンドでパスワードを設定しましょう。'設定したいパスワード'の部分については、例えばpassword0000という文字列を設定するとしたら、 'password0000'と記載しましょう。
0から始まるpasswordは読み込んでくれないケースが多いので、避けましょう!
(例えば、’0331higuchi’など)[ec2-user@ip-172-31-25-189 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行してください'このパスワードは、後ほどRailsからアクセスする時にも利用するので記憶しておいてください。
この時、Warning: Using a password on the command line interface can be insecure.と警告がでることがありますが、ここでは無視していただいて問題ありません。
MySQLへの接続確認
設定したパスワードが使えるか確認
[ec2-user@ip-172-31-25-189 ~]$ mysql -u root -pEnter password: とパスワードを入力するように表示されるので、先程設定したパスワードを入力して、Enterしてください。以下のように表示されれば、MySQLの設定は終了です。
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.33 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>次の作業のために、Ctrl + c でMySQLから抜けておきましょう。
- 投稿日:2020-08-06T10:05:40+09:00
デプロイ方法(EC2環境構築/Linux/MySQL設定)
※デプロイの方法の手順② 今後の自分のメモ用に
EC2インスタンスの環境構築
設定用のツールをインストール
最初にyumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。こうしたプログラムをパッケージと呼びます。
yumコマンド
Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのhomebrewと同じ役割を果たします。yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。
パッケージ
LinuxOS下における、ある役割/機能をもったプログラムの集合です。ソフトウェアとも、ライブラリとも呼べます。
あくまでもLinuxOSでは、ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ、ということですパッケージをアップデート
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y updateその他環境構築に必要なパッケージを諸々インストール
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl-yコマンドについて
-y はyumコマンドのオプションです。yum install などのコマンドでは、本当にインストールして良いのか [y/n]のようにYes or Noが問われます。この場合はYキーを押してEnterキーを押せば正常どおりインストールが行われます。しかし、初見であったり誤ってYキー以外を押してしまう場合もあります。 ここでは確実にインストールするために、予めオプションで-yを設定する事で全ての問いにYesで自動的に答えるように設定してコマンドを実行しましょう。
もし誤ってオプションを忘れてしまうと下記のような問いが発生しますので、Yキーを押し次にEnterキーを押してインストールを完了して下さい。
総ダウンロード容量: 120 M Is this ok [y/d/N]:Node.jsをインストール
EC2上でJavaScriptを動かすためにNode.jsというものをインストールします。
Node.js
サーバーサイドで動くJavaScriptのパッケージです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用されます。
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash - [ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejsこちらも確認画面が出てきた場合は、「y」→returnキーで確定してください。
これでNode.jsのインストールは完了です。
rbenvとruby-buildをインストール
rbenvとruby-buildをインストールします。Macの環境構築の際にも利用しましたが、改めて簡単に説明しておきます。
rbenvとruby-buildは、Rubyのバージョンを管理する際に組み合わせて使うツールになります。これらはRubyをインストールする前に、インストールする必要があります。
ruby-buildはrbenvのプラグインであり、ruby-buildによってRubyの様々なバージョン(2.0.0など)をインストールすることができます。
rbenvを使用することでrubyのバージョンを切り替えることできます。#rbenvのインストール [ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv #パスを通す [ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile #rbenvを呼び出すための記述 [ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile #.bash_profileの読み込み [ec2-user@ip-172-31-25-189 ~]$ source .bash_profile #ruby-buildのインストール [ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build #rehashを行う [ec2-user@ip-172-31-25-189 ~]$ rbenv rehash1つ目のコマンドは、gitからrbenvをクローンしています。
2つ目と3つ目のコマンドは、パスを通す際に必要なコマンドです。パスを通すとは、どのディレクトリからもアプリケーションを呼び出せる状態にするということです。
そして、4つ目のコマンドで、設定したパスを読み込んでいます。
5つ目のコマンドは、gitからruby-buildをクローンしています。
最後のコマンドは、使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。これでrbenvとruby-buildのインストールは完了
Rubyをインストール
インストールするRubyのバージョン、自身のアプリケーションで使っているRubyのバージョンによって適宜変更してください。
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv rehash #rehashを行う [ec2-user@ip-172-31-25-189 ~]$ ruby -v # バージョンを確認1つ目のコマンドで、Rubyの2.5.1のバージョンをインストールしています。Rubyのインストールには時間がかかります。ターミナルに「Installing ruby-2.5.1...」といった表示が出たまま止まって見えますが、そのまま待ちましょう。
2つ目のコマンドは、EC2インスタンス内で使用するRubyのバージョンを決めるものになります。
3行目では再びRehashを行っています。
最後にruby -vコマンドを打ち込み、バージョンを確認しましょう。EC2インスタンス内の環境構築が完了
MySQLの設定
データベースの種類
一口にデータベースと言っても、いくつかの種類があります。以下にその種類を示します。
・階層型データベース
・ネットワーク型データベース
・リレーショナルデータベース
この中で最も利用されているのが、リレーショナルデータベースです。
エクセルの表のような形で情報を整理し、管理することができます。そして、このリレーショナルデータベースを管理するソフトウェアはリレーショナル・データ・ベース・マネジメント・システム(RDBMS)と呼ばれます。そんなRDBMSの中でも代表的なものの一つが、MySQLです。
MySQL
MySQLは、Oracle社が開発・提供をしているRDBMSです。データベースの作成、編集、削除などを行うことができます。オープンソースソフトウェアとして公開されており、誰でも無償で利用することができます。
Ruby on Railsと合わせ利用することができ、本カリキュラムでは一貫してMySQLを利用しています。一つのEC2インスタンスに、Railsをはじめ必要なソフトをすべてインストールしています。MySQLもそのうちの一つです。上の図で「データベースサーバー」と書かれているものが、MySQLに当たります。MySQLのようなソフトはデータベースの管理を行うため、そのように呼ばれることもあります。
MySQLをインストール
Amazon Linuxを利用している場合、MySQLは yum コマンドからインストールすることができます。
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56これは、MySQLのバージョン5.6をインストールすることを意味します。
MySQLを起動
MySQLを起動するために service コマンドを利用します。これは、Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツールです。
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld startmysql ではなく mysqld であることに注意しましょう。「d」はLinuxの用語で「サーバ」を意味する「デーモン(daemon)」の頭文字です。
起動できたか確認する
[ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld status mysqld (pid 15692) is running...「running」と表示されれば、MySQLの起動は成功
MySQLのrootパスワードの設定
yum でインストールしたMySQLには、デフォルトで root というユーザーでアクセス出来るようになっていますが、パスワードは設定されていません。
そこで、以下のコマンドでパスワードを設定しましょう。'設定したいパスワード'の部分については、例えばpassword0000という文字列を設定するとしたら、 'password0000'と記載しましょう。
0から始まるpasswordは読み込んでくれないケースが多いので、避けましょう!
(例えば、’0331higuchi’など)[ec2-user@ip-172-31-25-189 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行してください'このパスワードは、後ほどRailsからアクセスする時にも利用するので記憶しておいてください。
この時、Warning: Using a password on the command line interface can be insecure.と警告がでることがありますが、ここでは無視していただいて問題ありません。
MySQLへの接続確認
設定したパスワードが使えるか確認
[ec2-user@ip-172-31-25-189 ~]$ mysql -u root -pEnter password: とパスワードを入力するように表示されるので、先程設定したパスワードを入力して、Enterしてください。以下のように表示されれば、MySQLの設定は終了です。
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.33 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>次の作業のために、Ctrl + c でMySQLから抜けておきましょう。