20200330のMySQLに関する記事は12件です。

【SQL】ページング処理用のSQL

はじめに

Googleの検索結果などで「○○件中××件」という表記が見られますが、このように複数ページに結果を表示してページを遷移させることを「ページング」と呼びます。

今回はページング処理のベースとなる、データをDBから取り出す際のSQLを少し考えてみました。

使用した環境

MySQL

  • OS
    • CentOS7.7(1908)
  • RDBMS
    • MySQL8.0.19

Oracle

  • Oracle社が提供しているOracle Live SQLでOracle19cを利用しました。

作成したSQL

MySQLの場合

  • 以下のSQLでは、「山データを標高の昇順に並べて、先頭(OFFSET=0)から10件取得する」という処理が行われます。
  • ページを遷移させたい時は、OFFSET値だけ変更します。
    • 2ページ目を表示させる場合、LIMIT 10 OFFSET 10となります。
  • ページに表示させたい件数を調節する時は、LIMIT値を変更します。
    • 5件ずつ表示させる場合、LIMIT 5 OFFSET 0となります。
MySQLの場合
SELECT
  *
FROM
  mountain
ORDER BY
  altitude ASC
LIMIT 10
OFFSET 0;
実行結果
+----+--------------+----------+--------------+
| id | name         | altitude | note         |
+----+--------------+----------+--------------+
| 23 | 八子ヶ峰     |     1833 | 北八ヶ岳     |
| 21 | 双子山       |     2224 | 北八ヶ岳     |
| 16 | 丸山         |     2330 | 北八ヶ岳     |
| 20 | 大岳         |     2381 | 北八ヶ岳     |
| 17 | 茶臼山       |     2384 | 北八ヶ岳     |
|  2 | 西岳         |     2398 | 南八ヶ岳     |
| 18 | 縞枯山       |     2403 | 北八ヶ岳     |
| 19 | 北横岳       |     2480 | 北八ヶ岳     |
| 15 | 中山         |     2496 | 北八ヶ岳     |
|  1 | 編笠山       |     2524 | 南八ヶ岳     |
+----+--------------+----------+--------------+

Oracleの場合

Oracle12c以降の場合

  • Oracle12c以降であれば、OFFSET n ROWSFETCH FIRST n ROWS ONLYを組み合わせて、「山データを標高の昇順に並べて、先頭(OFFSET=0)から10件取得する」という処理を実現できます。
    • @nakaie さん、コメントありがとうございました。
  • MySQLのOFFSETLIMITの組み合わせよりもわずかにSQLが長くなりますが、OFFSET n ROWSFETCH FIRST n ROWS ONLYの組み合わせの方が、SQLを見た時に処理内容を素直に理解しやすいと感じました。
Oracle12c以降の場合
SELECT
  *
FROM
  mountain
ORDER BY
  altitude ASC
OFFSET 0 ROWS
FETCH FIRST 10 ROWS ONLY;
実行結果
+----+----------+------+----------+
| ID | 山名     | 標高 | 備考     |
+----+----------+------+----------+
| 23 | 八子ヶ峰 | 1833 | 北八ヶ岳 |
| 21 | 双子山   | 2224 | 北八ヶ岳 |
| 16 | 丸山     | 2330 | 北八ヶ岳 |
| 20 | 大岳     | 2381 | 北八ヶ岳 |
| 17 | 茶臼山   | 2384 | 北八ヶ岳 |
| 2  | 西岳     | 2398 | 南八ヶ岳 |
| 18 | 縞枯山   | 2403 | 北八ヶ岳 |
| 19 | 北横岳   | 2480 | 北八ヶ岳 |
| 15 | 中山     | 2496 | 北八ヶ岳 |
| 1  | 編笠山   | 2524 | 南八ヶ岳 |
+----+----------+------+----------+

Oracle11g以前の場合

  • 以下のSQLでは、「インラインビューで標高の昇順に並べた時のROW_NUMBERを取得して、標高の昇順に付けられた通し番号の範囲を指定して先頭(通し番号=1)から10件取得する」という処理が行われます。
  • MySQLやOracle12c以降と比べて、かなりSQLが長く複雑になってしまいます...
Oracle11g以前の場合
SELECT
  ID,
  山名,
  標高,
  備考
FROM
  (
    SELECT
      id AS ID,
      name AS 山名,
      altitude AS 標高,
      note AS 備考,
      ROW_NUMBER() OVER(ORDER BY altitude ASC) AS 通し番号
    FROM
      mountain
  )
WHERE
  通し番号 >= 1
  AND 通し番号 <= 10
ORDER BY
  標高 ASC;

備忘録

  • Oracle12c以降ではMySQLのAUTO INCREMENTに相当するGENERATED ALWAYS AS IDENTITYおよびGENERATED BY DEFAULT AS IDENTITYが登場しました。
    • Oracle11gまでは、AUTO INCREMENTに近いものとしてSEQUENCE列の最大値+1を使うケースが多かったようです。
  • 今回は自動採番した後にid列の値を書き換える必要が無かったため、GENERATED ALWAYS AS IDENTITYを使いました。
Oracle用のCREATE文
CREATE TABLE mountain ( 
  id NUMBER(2) GENERATED ALWAYS AS IDENTITY,
  name VARCHAR2(50) NOT NULL,  
  altitude NUMBER(4) NOT NULL, 
  note VARCHAR2(200), 
  CONSTRAINT PK_id PRIMARY KEY (id) 
);

参考URL

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

【MySQL】データのエクスポートとインポート

エクスポート

ファイル名に現在時間をつけてエクスポート

mysqldump -h 【ホスト名】 -u 【ユーザー名】 -p 【DB名】 > 【ファイル名】_`date "+%Y%m%d-%H%M%S"`.sql

インポート

mysql -h 【ホスト名】 -u 【ユーザー名】 -p 【DB名】 < 【ファイル名】_YYYYmmdd-HHMMSS.sql

または

mysql -h 【ホスト名】 -u 【ユーザー名】 -p 【DB名】
mysql > source 【ファイル名】_YYYYmmdd-HHMMSS.sql;

その他

今どこのデータベースにつないでるか忘れたとき

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

autodetect’: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.

masterからサブブランチに切り替えて、

rails s

をしたら、

autodetect’: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.

とエラー分が表示され、Javascriptになにか関係が??初めて見るエラー分で、何かしたかと思っていると、、、、

最近、何かとこのエラーに遭遇する人が多いだとか、、、、、

私の場合は、masterからサブブランチに切り替えたときに起こりましたが、これはタイミングが被っただけではないでしょうか。

解決策としては、gemfileに

gem 'therubyracer'
gem 'libv8'

として、bundle installでいけるのかと、思いきやここでエラー分が出たため、node.jsをインストールすることにしました。

一度、上記のgemをインストールできるか試してみてください。

node.jsをhomebrewを使ってインストールする場合は、

 brew install nodejs

でインストールできます。

見事rails sが可能になりました。

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

DBから取得したデータの中身を取得する方法 Ruby on Rails

MySQLからデータを取得してきた

whereメソッドを使って、特定条件下で検索に該当するクエリを発行させると、条件に当てはまったレコード全てを引っ張ってくる。

log_in.rb
yesterday_time = Time.now.yesterday
log_in_collection = LogIn.all #LogInというモデルを作成してあり、そこからデータを全て引っこ抜いている
log_in_list = log_in_collection.where("loged_in_at >= ?", yesterday_time)

そうすると、log_in_listをpメソッドで出力すると、

#<ActiveRecord::Relation [#<LogIn id: 456,  uid: "hogehoge", log_in_at: "2020-03-25 05:49:43", created_at: "2020-03-25 05:50:47", updated_at: "2020-03-25 05:50:47">]>

こんな感じのデータが取れる。パッと見、ハッシュに見える物が取ってこれているのが分かる。今回必要なのはこのuidにおけるhogehogeだけを引っ張ってくることがゴールです。

以下の自分の考え方に間違いがあったら、指摘をお願いします。

最初に犯したミス

欲しいデータを手に入れたければ、ハッシュのキーになっているものでメソッドチェーンすればいいってことだったので、安直に前述したコードの変数であるlog_in_listを使って、

hogehoge.rb
p log_in_list.uid

と書いて、hogehogeが取れているかを確認してみました。すると、ログはおろか、localhostでこの処理部分を走らせてみると、画面に真っ赤な文字でundefined uidと表示されてしまう。何でやねん。

ハッシュみたいなものからオブジェクトを取り出すような書き方はできん

ハッシュみたいなやつと書いているのは、ActiveRecordから取ってきているデータのことをなんて呼んでいいかわからないからですが、こう考えてみると、log_in_listを最初にpした時、これはデータの型がハッシュみたいなやつであって、オブジェクトになっていない。これが本当にハッシュで、ハッシュの値を取り出すには、

example.rb
log_in_list["uid"]

とかにせねばならない。今回のデータはActiveRecordから引っ張ってきているものなので、これでのアクセスもできない・・・ハズ。

また、whereは条件にあった全てのレコードを引っ張ってくるので、条件にあった全てのuidを抜き取る作業を必要とする。それじゃどうするか・・・一旦、このハッシュっぽい奴のデータをオブジェクトにしてやればいい。

hogehoge.rb
log_in_list.each do |data|
  log_in_users = data.uid
  p log_in_users
end

eachを使って、log_in_listの中身をdata変数へと入れ込むと、オブジェクト化してくれるので、オブジェクトへのアクセスする書き方が可能になる。これでhogehogeだけを引っ張ってこれる。

補足

後で知ったことですが、ハッシュ用のループ処理で使えるeachもある。この記事によると、やはりハッシュにはハッシュオブジェクトがちゃんと存在してそのオブジェクトへのアクセスの仕方も違うようだ・・・

ハッシュに対する繰り返し

考察

重要なのは2つあるかなと思いました。

書いているコードに内包されているデータの型を意識的に脳内で可視化すること。脳内で可視化って意味不明かもしれませんが、言わんとしていることは分かると思うんですよ。「今持ってきているデータは〇〇型で、まだ日オブジェクトだな」みたいな意識を持つイメージでしょうか。

また、それをオブジェクト化した時のアクセス方法を知っていること、もしくはそこから検索をかけて調べる足掛かりにする、ということでしょうか。

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

簡単なSQL構文(自分用)

初めに

備忘録として残します。

構文

検索編

昇順で抽出

test.sql
select user_id
      ,last_name
      ,first_name
      ,role_id
 from m_user
 order by user_id 

降順で抽出

test.sql
select user_id
      ,last_name
      ,first_name
      ,role_id
 from m_user
 order by user_id desc

条件で抽出

test.sql
select user_id
      ,last_name
      ,first_name
      ,role_id
 from m_user
 where user_id = 'あいう'
 order by user_id desc

条件で抽出(〇〇~)

test.sql
select user_id
      ,last_name
      ,first_name
      ,role_id
 from m_user
 where user_id Like'n%'
 order by user_id desc

NULLが検索条件

test.sql
select user_id
      ,last_name
      ,first_name
      ,role_id
 from m_user
 where user_id is null
 order by user_id desc

追加編

単純な追加

カラム順番通りに並べて

test.sql
insert into syain (id,name,romaji) values (1,'鈴木','suzuki');

結果

id name romaji
1 鈴木 suzuki
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS EC2】Amazon Linux2にMySQLのclientだけをインストールしてRDSに接続する方法

概要

  • AWS EC2(AMI: Amazon Linux 2)にMySQLのクライアントだけをインストールしてRDS上のMySQLに接続する

環境

  • AWS EC2
    • OS: Amazon Linux 2
    • AMI ID: amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2
  • RDS
    • engine: MySQL Community
    • version: 8.0.17

構築手順

1. すでにインストールされているmariadbを取り除く

  • Amazon Linux2にはMariaDBがデフォルトでインストールされている
  • 干渉したら困るので念のため削除しておく
$ yum list installed | grep mariadb
mariadb-libs.x86_64                   1:5.5.64-1.amzn2               installed
$ sudo yum remove mariadb-libs
Removed:
  mariadb-libs.x86_64 1:5.5.64-1.amzn2
Dependency Removed:
  postfix.x86_64 2:2.10.1-6.amzn2.0.3
Complete!

2. mysql8.0のリポジトリを追加する

  • yum infoでmysql8.0がインストールできるか確認する
  • インストールできないのでmysql8.0のリポジトリを追加する
$ yum info mysql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
31 packages excluded due to repository priority protections
Error: No matching Packages to list

$ sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
Installed:
  mysql80-community-release.noarch 0:el7-3

3. mysql8.0のリポジトリを有効化する

  • mysql80-community-release-el7-3.noarchの中にmysql5.7も入っている
  • 今回はmysql8.0をインストールしたい
    • mysql5.7のリポジトリを無効化し、mysql8.0のリポジトリを有効化する
$ sudo yum-config-manager --disable mysql57-community
$ sudo yum-config-manager --enable mysql80-community

4. mysql-community-clientをインストールする

$ sudo yum install -y mysql-community-client
Installed:
  mysql-community-client.x86_64 0:8.0.19-1.el7
Dependency Installed:
  mysql-community-common.x86_64 0:8.0.19-1.el7                               mysql-community-libs.x86_64 0:8.0.19-1.el7
  ncurses-compat-libs.x86_64 0:6.0-8.20170212.amzn2.1.3
Complete!

$ mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

5. RDSに接続する

  • EC2からRDSへの3306ポートの通信は許可してあるものとする
$ mysql -h hoge.rds.amazonaws.com -P 3306 -u root -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.03 sec)

参考

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

phpMyadmin 接続できない 

はじめに

phpを学習していくうちに、mysqlのバージョンをUPDATEした際に起こったエラーです。
php、mysql学習中であり、かなりてこずったので備忘ログとして残しておく。

私のmacOSデバイスでは、ローカルのWeb開発にMAMPアプリを使用しています。しかし、phpMyAdmin Webページにアクセスしようとすると、次のエラーメッセージが表示から始まりました。

エラー内容

スクリーンショット 2020-03-29 21.56.27.png

今まではphpMyadminに接続できていたのに、急にこの画面のエラーが...

エラー内容はこんな感じです。

1.接続できません:無効な設定

Cannot connect: invalid settings

2.'localhost'のアクセスが拒否されました(パスワードを使用:YES)

mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)

3.構成内のホスト、ユーザー名、パスワードを確認し、それらがMySQLサーバーの管理者から提供された情報に対応していることを確認してください。

phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.

解決策

この問題を解決するには、phpMyAdmin構成ファイルを変更して、MySQL rootユーザーの実際のパスワードを使用するだけ。
ただこれだけでよったのです...

phpMyAdmin構成ファイル設定

1.MAMPアプリが実行されている場合は、Stop Serversボタンをクリックしてアプリを終了します。

2.Finderで、フォルダに移動Applications→ MAMP→ bin→ phpMyAdmin。

3.config.inc.phpテキストエディターでファイルを開きます。

4.検索を使用して、以下の行を見つけます(大体87行目あたり)

$cfg['Servers'][$i]['auth_type']     = 'config';    // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user']          = 'root';     // MySQL user

*'root'MySQLのrootユーザーの実際のパスワードに置き換えます。
$cfg['Servers'][$i]['password']      = 'root';     // MySQL password (

これでphpMyAdmin構成ファイル設定はおk!

MySQL rootユーザの設定

実際、rootユーザのパスワード等を忘れてしまった方(Mysql8の場合)はこちら参考に
https://qiita.com/avicii2314/items/3a6c9da5f9195c93be9a

(補足) MySQL8のパスワード認証プラグインについて

MySQLでは、パスワードの認証時に、実行される、「authentication plugin」という仕組みのがあります。

例えば上記のコマンドで設定したパスワードについて、下記のコマンドで、確認できます。

mysql> select User, Plugin from mysql.user where User = 'root';
+------+-----------------------+
| User | Plugin                |
+------+-----------------------+
| root | caching_sha2_password |
+------+-----------------------+Copy

下のコマンドで確かめられるように、MySQL8 からは、「caching_sha2_password」がデフォルトとなったようなのですが・・、

mysql > use mysql;
mysql > show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+Copy

mysqlを利用するクライアントソフトウェア(例えば、PhpMyAdminなど)では、この認証方法をサポートしていないため、エラーとなりログイン出来ないことがあるみたいです。

パスワードを下記のコマンドで設定すると、回避できます。

mysql> ALTER USER 'root'@'localhost' identified WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.01 sec)

MAMP(pro)設定確認

ここ
cahnge password of user"root":

パスワードをしっかり合わせる
スクリーンショット 2020-03-30 12.00.57.png

phpMyAdmin Webページにアクセス

https://localhost/phpMyAdmin/index.php
アクセスできれば完了です。

最後に

このエラーを通じて、mysqlの設定や、phpMyadminの設定方法が少しですが、身につきました。
この記事が問題の解決に役に立てれば幸いです。

参考サイト
https://mycyberuniverse.com/phpmyadmin-fails-access-mysql.html

https://stackoverflow.com/questions/50691977/how-to-reset-the-root-password-in-mysql-8-0-11

認証プラグインについて
https://www.s-style.co.jp/blog/2018/05/1807/

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

mysqlのgroup_concatを使えば複数レコードの値を一気に取得できる

こんな便利な機能があるのを知らなかったなんて情弱でした。

記事とカテゴリーをマッピングしたテーブルとして以下のようなものがあるとします。よくある多対多のテーブルです。

posts_categoriesテーブル

post_id category_id
1 1
1 3
1 5
2 2
2 3
2 4
2 5
3 2

これに以下のSQLを実行すると

select post_id, group_concat(distinct category_id separator \',\') as result from posts_categories group by post_id;

このような結果が得られます。

post_id result
1 1,3,5
2 2,3,4,5
3 2

PHP等の言語からMySQLを呼び出す場合など、これでデータを取得してexplode(',', $result);とするだけで、category_idの配列を取得することが出来て便利です。

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

MySQLのgroup_concatを使えば複数レコードの値を一気に取得できる

こんな便利な機能があるのを知らなかったなんて情弱でした。

記事とカテゴリーをマッピングしたテーブルとして以下のようなものがあるとします。よくある多対多のテーブルです。

posts_categoriesテーブル

post_id category_id
1 1
1 3
1 5
2 2
2 3
2 4
2 5
3 2

これに以下のSQLを実行すると

select post_id, group_concat(distinct category_id separator \',\') as result from posts_categories group by post_id;

このような結果が得られます。

post_id result
1 1,3,5
2 2,3,4,5
3 2

PHP等の言語からMySQLを呼び出す場合など、これでデータを取得してexplode(',', $result);とするだけで、category_idの配列を取得することが出来て便利です。

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

MySQL8 root パスワード リセット変更

経緯

MySQLでrootパスワードを紛失したり、またはパスワードが行方不明になったりしたとき、MySQLへの接続が出来なくなった....そんなときに

このようなエラーを見かけます...

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

セーフモード(mysqld_safe)で起動

1.サーバーストップ
$ mysql.server stop

2.セーフモードでの起動、
$ mysqld_safe --skip-grant-tables &

3.パスワードなしでログインできる
$ mysql -u root

パスワードを空にする

mysql > UPDATE mysql.user SET authentication_string=null WHERE User='root';

ではrootパスワードを変更します

今まで通りこのようなコマンドで変更しようとしたところ、

//失敗例1
mysql > update mysql.user set password=password('hogehoge') where user = 'root';

//失敗例2
mysql > SET PASSWORD FOR root@localhost=PASSWORD('hoge');

//結果
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('root')' at line 1

このように文法エラーという結果が帰ってきます。

PASSWORD() 関数は、MySQL version 5.67 までで廃止

MySQL 8 においては、そもそも関数が存在しないようです。

*下記のコマンドでパスワードを変更

1. MySQL再起動(非セーフモード)
$ mysql.server restart

2. 空のパスワードでログイン
$ mysql -u root -p 
enterでパスなしでログイできる

3.パスワード変更
mysql > USE mysql;
mysql > ALTER USER 'root'@'localhost' identified BY '自分の決めるパスワード';

Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0C

変更できました。

参考サイト
http://www-creators.com/archives/5574

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

【MySQL版】プログラミング初心者と行うrails環境構築講座【Win版】

プログラミング初心者向けのRuby on Rails環境構築をまとめた記事です。
なかなか一つにまとまっている記事が見つからず、時間がかかったので忘備録的な意味も込めてここに記したいと思います。

動作環境

OS:Win10 (64bit)
Ruby2.4.9(x64)
Rails 5.0.7.2
db:MySQL

以上が僕のRailsを動かすにあたる環境です。
まず最初にこれらのものを順にインストールしていきましょう。

Rubyのインストール

インストーラのダウンロード

こちらのDEVKITの欄からRuby+Devkitをダウンロードしてください。
(64bitの方はx64、32bitの方はx86)
※バージョンはなんでも構いませんが、何もわからない!という方は推奨verの2.6.5-1をダウンロードするといいでしょう。

インストール

インストーラ(~.exe)がダウンロードされたら、実行してインストールを行いましょう。
何もわからない場合はデフォルトのまま進めちゃってokです。
finishしたら、大きくRubyInstallerと書かれた画面に遷移しますが、指示通りに進めて大丈夫です。

インストールできたか確認

ターミナルで下記のコマンドを実行して、無事インストールできたか確かめます。

$ ruby -v

自分がインストールしたrubyのバージョンが表示されればokです。

バージョン確認できなかった場合

PATHが通ってない可能性があるので、Windowsの設定を開き、検索ボックスで環境変数を検索、環境変数の編集に飛んでいただき、上部のユーザーの環境変数からpathを選択して、編集。
インストールしたrubyフォルダのbinディレクトリを新規として追加しましょう。
※pathが存在しなかった場合、下部のシステム環境変数からpathを新規として追加してください。

Railsのインストール

railsのインストールは簡単で下記コマンドを実行するだけです。

$ gem i rails #最新バージョンがインストールされる

$ gem i -v (バージョン番号) rails

上のコマンドだと最新のバージョンがインストールされてしまうので、それでは不都合が生じてしまう方は下のコマンドでバージョンを指定してください。

インストール確認

$ rails -v

これはお決まりです

MySQLのインストール

railsではsqlite3がデフォルトデータベースに設定されていますが、それだと僕は環境構築時に自力で解決できない不具合が発生したのでMySQLにしています。
また、現在自分自身データベースの知識が不足しているので、細かいことはよくわかりません。
ここには自分がうまくいった手順を載せています。

インストーラのダウンロード

こちらから下のサイズが大きいものをダウンロードしてください。
oracleアカウントにログインさせようとしてきますが、今回は無視して下部のNo thanks~~をクリックしてダウンロードしましょう。

インストール

インストーラ(~.msi)を実行しましょう。
これも基本的にデフォルトのまま適宜Executeボタンを押しつつ進めちゃってください。

Accounts and Rolesの設定

Accounts and Rolesと書かれた画面が出てきたら上部のボックスに希望のパスワードを入力してください。
これがrootアカウントのパスとなるため、メモを控えといてください。

次にMySQLアカウントを追加します。
Add Userボタンを押して希望のユーザー名、パスワードを入力(他はデフォルトのままで)し、ユーザーを追加します。
ここでのパスワードはrootアカウントのものと異なっていてもokです。

この作業が終了したら、あとは前と同じようにデフォルトのまま進めていけばインストールが完了します。

インストール確認

$ mysql --version

バージョン確認できなかった場合

Rubyの場合と同じくPATHが通ってない可能性があるので、設定からPATHにインストールしたMYSQLフォルダのbinディレクトリを新規として追加しましょう。

ターミナルがGit bashの場合

自分git bashをターミナルとして用いているのですが、MySQLコマンドを実行する場合は先頭に必ずwinptyをつけないと実行できないようです。(原因はわからず、、、)

Railsアプリの作成、設定

ここまででrailsアプリの作成に必要な最低限のソフトのインストールが終了しました。
ここからは環境に合わせつつ、Railsで作成するアプリの設定を行っていきます。

Railsアプリの作成

下記コマンドを実行します。

$ cd (任意のディレクトリ名) 
#railsアプリを設置したいディレクトリに移動

$ rails new (任意のrailsアプリ名) --database=mysql 
#デフォルトのdbをmysqlに変更してアプリ作成

これでrailsアプリが作成されます。

railsアプリデータベースの作成

database.ymlの編集

作成されたrailsアプリフォルダ内のconfig内に存在するdatabase.ymlファイルを編集します。
上のほうにあるデフォルトのusernamepasswordだけ下記のように編集してください。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: (MySQLインストール時に作成した名前)
  password: (MySQLインストール時に作成したパスワード)
  host: localhost
データベース作成

下記のコマンドをrailsアプリ上で実行し、データベースを作成してください。

$ rails db:create

開発環境構築完了!!!

ひとまずRailsアプリを開発する環境はこれで整いました。
自分がこれまで学んできたことや、参考書、サイトなどを活かしてrailsアプリの開発を行いましょう。

※herokuにデプロイして公開する記事も後日執筆予定です。
※何か間違っている点、疑問点等ございましたらコメントお願いします。

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

【MySQL版】プログラミング初心者と行うRuby on Rails環境構築講座【Win版】

プログラミング初心者向けのRuby on Rails環境構築をまとめた記事です。
なかなか一つにまとまっている記事が見つからず、時間がかかったので忘備録的な意味も込めてここに記したいと思います。

注意

本記事では最低限の環境構築しか行わないため、手っ取り早くrailsアプリの開発が行いたい初心者さん向けの記事です。

様々な拡張機能や応用などには対応しきれていない部分もあるので、必要な方は個人で調べてください。

動作環境

OS:Win10 (64bit)
Ruby2.4.9(x64)
Rails 5.0.7.2
db:MySQL

以上が僕のRailsを動かすにあたる環境です。
まず最初にこれらのものを順にインストールしていきましょう。

※特にバージョンの指定などはありませんが、不安な場合は僕と同じバージョンをインストールしたほうが確実だと思います。

Rubyのインストール

インストーラのダウンロード

こちらのDEVKITの欄からRuby+Devkitをダウンロードしてください。
(64bitの方はx64、32bitの方はx86)
※バージョンはなんでも構いませんが、何もわからない!という方は推奨verの2.6.5-1をダウンロードするといいでしょう。

インストール

インストーラ(~.exe)がダウンロードされたら、実行してインストールを行いましょう。
何もわからない場合はデフォルトのまま進めちゃってokです。
finishしたら、大きくRubyInstallerと書かれた画面に遷移しますが、指示通りに進めて大丈夫です。

インストールできたか確認

ターミナルで下記のコマンドを実行して、無事インストールできたか確かめます。

$ ruby -v

自分がインストールしたrubyのバージョンが表示されればokです。

バージョン確認できなかった場合

PATHが通ってない可能性があるので、Windowsの設定を開き、検索ボックスで環境変数を検索、環境変数の編集に飛んでいただき、上部のユーザーの環境変数からpathを選択して、編集。
インストールしたrubyフォルダのbinディレクトリを新規として追加しましょう。
※pathが存在しなかった場合、下部のシステム環境変数からpathを新規として追加してください。

Railsのインストール

railsのインストールは簡単で下記コマンドを実行するだけです。

$ gem i rails #最新バージョンがインストールされる

$ gem i -v (バージョン番号) rails

上のコマンドだと最新のバージョンがインストールされてしまうので、それでは不都合が生じてしまう方は下のコマンドでバージョンを指定してください。

インストール確認

$ rails -v

これはお決まりです

MySQLのインストール

railsではsqlite3がデフォルトデータベースに設定されていますが、それだと僕は環境構築時に自力で解決できない原因不明の不具合が発生したのでMySQLにしています。
(友人も同じ現象が起こったため、この問題で悩んでる方、多いと思います)

また、現在自分自身データベースの知識が不足しているので、細かいことはよくわかりません。
ここには自分がうまくいった手順を載せています。

インストーラのダウンロード

こちらから下のサイズが大きいものをダウンロードしてください。
oracleアカウントにログインさせようとしてきますが、今回は無視して下部のNo thanks~~をクリックしてダウンロードしましょう。

インストール

インストーラ(~.msi)を実行しましょう。
これも基本的にデフォルトのまま適宜Executeボタンを押しつつ進めちゃってください。

Accounts and Rolesの設定

Accounts and Rolesと書かれた画面が出てきたら上部のボックスに希望のパスワードを入力してください。
これがrootアカウントのパスとなるため、メモを控えといてください。

次にMySQLアカウントを追加します。
Add Userボタンを押して希望のユーザー名、パスワードを入力(他はデフォルトのままで)し、ユーザーを追加します。
ここでのパスワードはrootアカウントのものと異なっていてもokです。

この作業が終了したら、あとは前と同じようにデフォルトのまま進めていけばインストールが完了します。

インストール確認

$ mysql --version

バージョン確認できなかった場合

Rubyの場合と同じくPATHが通ってない可能性があるので、設定からPATHにインストールしたMYSQLフォルダのbinディレクトリを新規として追加しましょう。

ターミナルがGit bashの場合

自分はgit bashをターミナルとして用いているのですが、MySQLコマンドを実行する場合は先頭に必ずwinptyをつけないと実行できないようです。(原因はわからず、、、)

Railsアプリの作成、設定

ここまででrailsアプリの作成に必要な最低限のソフトのインストールが終了しました。
ここからは環境に合わせつつ、Railsで作成するアプリの設定を行っていきます。

Railsアプリの作成

下記コマンドを実行します。

$ cd (任意のディレクトリ名) 
#railsアプリを設置したいディレクトリに移動

$ rails new (任意のrailsアプリ名) --database=mysql 
#デフォルトのdbをmysqlに変更してアプリ作成

これでrailsアプリが作成されます。

railsアプリデータベースの作成

database.ymlの編集

作成されたrailsアプリフォルダ内のconfig内に存在するdatabase.ymlファイルを編集します。
上のほうにあるデフォルトのusernamepasswordだけ下記のように編集してください。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: (MySQLインストール時に作成した名前)
  password: (MySQLインストール時に作成したパスワード)
  host: localhost
データベース作成

下記のコマンドをrailsアプリ上で実行し、データベースを作成してください。

$ rails db:create

開発環境構築完了!!!

ひとまずRailsアプリを開発する環境はこれで整いました。
自分がこれまで学んできたことや、参考書、サイトなどを活かしてrailsアプリの開発を行いましょう。

※herokuにデプロイして公開する記事も後日執筆予定です。
※何か間違っている点、疑問点等ございましたらコメントお願いします。

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