20200806のMySQLに関する記事は5件です。

タイムゾーンはちゃんと設定しよう

サービスを開発する際、最初にタイムゾーンをしっかり設定していないと、MySQLのcreated_at や updated_at などをうまく使えないというようなことになります。

MySQLでは、カラムにcreated_at や updated_atなどを加えると、それぞれSQLのinsertやupdateが実行されたときに自動でtimestampを入れてくれたりします。

始めにしっかり設定しておかないと、あとから必要になったときに、自力でそれらの値を取得して挿入するはめになってしまいます。(実体験)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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.php

html(controller)
- bbs.php
- bbs_insert.php
- bbs_update.php
- bbs_delete.php

model
- db.php
- functions.php
- bbs.php

view
- bbs_view.php

テーブルの作成

bbs.sql
CREATE 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.php
function 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);'

参考

CRUD機能と7つのアクションの関係性
MVCモデルについて

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[SQL]INSERT文でテーブルへデータ挿入

テーブルへデータを挿入

テーブルへデータを挿入するには、INSERT文を用います。
以下が記述方式です。

INSERT INTO テーブル名 (カラム名1, カラム名2, ...) VALUES ('値1', '値2', ...); 

実際に書いていくとこんな感じになります。
「値」を入力する場合、文字データは「'」で囲むことを忘れないでください。

mysql> INSERT INTO meibo (id, name) VALUES (1, 'テスト太郎');
Query OK, 1 row affected (0.20 sec)

「Query OK」と表示されているので、挿入成功です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

デプロイ方法②(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 rehash  

1つ目のコマンドは、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を利用しています。

Oracle社のMySQL紹介ページ
MySQL公式ページ

1.png

一つの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 start

mysql ではなく 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 -p

Enter 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から抜けておきましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

デプロイ方法(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 rehash  

1つ目のコマンドは、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を利用しています。

Oracle社のMySQL紹介ページ
MySQL公式ページ

1.png

一つの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 start

mysql ではなく 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 -p

Enter 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から抜けておきましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む