20190714のMySQLに関する記事は6件です。

Rails newするときの流れ

新しくRailsプロジェクトを作る時の流れをメモとしてざっくり残しておきます。

- Railsをインストール -

$ mkdir ○◯◯
$ cd ◯◯◯
$ bundle init

bundle initによりGemfileが作成されるので、Gemfileを編集。

Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails" #ここのコメントアウトを外す

そしたら、
$ bundle install --path vendor/bundle
--pathでパスを指定することによって、指定されたパスにRailsがインストールされる。

- Rails new する -

bundle exec rails new . -B -d mysql -T
Rails new。
Overwrite /Users/apple/Desktop/App/Gemfile? (enter "h" for help) [Ynaqdhm]と、Gemfileを上書きしていいか聞かれるので、Yes。
Rspecを使いたいのでテストはスキップ。

- DBを作成する -

usernameとpasswordを指定。

config/database.yml
  default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: #ユーザー名
  password: #パスワード
  socket: /tmp/mysql.sock

ターミナルで

$ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include"
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

この二つのコマンドを実行し、もう一度bundle installします。

そしてbin/rails db:create

上記の2つのコマンドを入力してbundle installという工程を飛ばすとエラーが出ます(自分の環境だと)。

- Rspecの設定をする -

Gemfile
・・・
group :development, :test do
 gem 'rspec-rails' #それぞれ、必要があればバージョン指定をする。
 gem 'factory_bot_rails'
 gem 'spring-commands-rspec'
end
・・・

Gemfileに上記の3つを追加し、bundle install

$ bin/rails generate rspec:install
RSpecをインストール。

.rspec
--require spec_helper
--format documentation #この行を追加するとテストを実行した際にログが読みやすくなる。

次は$ bundle exec spring binstub rspec
このコマンドを打つとbin/rspecコマンドでテストが実行できるようになる。

config/application.rb
module Test
 class Application < Rails::Application
 ...
  config.generators do |g|
   g.test_framework :rspec,
   fixtures: true,
   view_specs: false,
   helper_specs: false,
   routing_specs: false,
   request_specs: false
  end
 ...
 end
end

上記の行を追加。
これでRSpecのセットアップは完了です。

- Slimを導入する -

Gemfile
...
gem 'slim-rails'
gem 'html2slim'

bundle install でgemをインストール。
bundle exec erb2slim app/views/layouts --delete
erbファイルを削除。

- Bootstrapをインストール -

Gemfile
gem 'bootstrap;

bundle install

$ rm app/assets/stylesheets/application.css
sassを使うために、application.cssを削除。
application.scssを作成し、

application.scss
@import 'bootstrap';

追加。

- i18nで日本語化 -

$ wget https://raw.githubusercontent.com/svenfuchs/rails-18n/master/rails/locale/ja.yml --output-document=config/locales/ja.yml

rawファイルをja.ymlにダウンロード。
config/initializers下にlocale.rbファイルを作成。

config/initializers/locale.rb
 I18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
 I18n.config.available_locales = :ja
 I18n.default_locale = :ja

これで完了です。

- 終わり -

こんな感じで一通り終了です。
いつも忘れてしまうので、ザックリまとめてみました。
ここをこうした方が良いよとか、アドバイスがあったら教えていただけると嬉しいです。

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

[PHP初心者]プログラミング歴2ヶ月目の僕が簡易掲示板を作るまでの軌跡

はじめに

こんにちは。てりーと申します!
プログラミング歴が4ヶ月目に入ろうとしているエンジニアです。

今回は完全初心者だった僕がPHPで簡易掲示板に作るまでにやったことをまとめました。

所謂「やり方をまとめました!」という形式ではなく「PHPを作るまでの形跡を記録したもの」になっているので、読み物として消化してくれると幸いです。

ツイッターアカウント
https://twitter.com/teriteriteriri

環境

PHP7.2
MAMP

製作者の当時のレベル

プログラミング歴1ヶ月
progateでレベル100(これしかやってない)

完成物

github
https://github.com/gunners6518/athena_board2

付けた機能
✓アカウントの新規作成ができる
(ニックネーム、メアド、パスワードを入力する)
✓ログインができる(メアドとパスワードで認証する)
✓ログインしたあとであれば書き込みができる
✓書き込みのとき、ニックネーム、投稿内容、投稿日時をデータベースに保
存する
✓ログインしている・していないに関わらず、他の人が書いた書き込みが見
られる
✓書き込んだ人は、自分の書き込みを消すことができる
✓ソースコードをgithubで管理する

やった事

1 MAMPのインストール

参考:https://qiita.com/kuro-wassan/items/1cb32995acc07a4b4cc6

参考の通りにやった所、1時間程度でインストールできました。
環境設定がスムーズにいって幸先良くてテンション上がりました!

2 ドットインストールの「PHPで作る簡易掲示板」で挫折

https://dotinstall.com/lessons/bbs_php_v2

まずはみんな大好きドットインストールで掲示板を作ろうとしました。
進捗が33%辺りのところで.datファイルが出てきてついていけなくなって挫折しました!

3 自力ではできないと悟り、mentaに契約

ドットインストールで挫折して、何から勉強していけば良いのか分からなくなり、教えてくれる人を着ける事にしました。

使ったサービスはmenta!!
https://menta.work/
3000円ほどでslackで質問し放題のプランで現役のエンジニアの方をメンターにつけました。

結果としてこの選択が僕のプログラミング人生を軌道に乗せました!

4 メンターに従ってPHPとmysqlの接続完了

PHPとmysqlを接続する事で、フォームから送った投稿がDBに保存されるようになります。

データベースへ掲示板テーブルを作成

phpmyqdminにて掲示板テーブルを作成しました!

掲示板記事入力画面の作成

bootstrapを主に使って掲示板のフロントの部分を整えて行きました!
といっても、いいなーと思うサンプルコードを写経して色とか場所などをちょっといじる感じで対応しました。

記事入力画面から登録ボタンをクリックしたタイミングでデータベースの掲示板テーブルへデータ登録

ここで完全にphpとmysqlを接続するフェイズですね!
振り返るとここが初期の難関だったなーと思います。

データベースに飛ばすとエラーが出ちゃう日々を1週間ぐらい過ごしました!
スクリーンショット 2019-04-21 16.42.43.png
https://qiita.com/tabo_purify/items/2575a58c54e43cd59630
http://www.php-labo.net/tutorial/example/message_mysql.html

ここら辺の記事を参考にしつつ、メンターの方と試行錯誤しながらどうにかこの壁を超えました!

5 記事一覧ページの作成

PHPとmysqlを接続した事で、投稿した記事がDBに保存されるようになりました。
今度はDBの投稿一覧がwebから見られるようにして、それらを編集できる機能を付け加えました。

登録したデータの一覧表示

ここでSQL文のSELECTを使うことで指定したDBのテーブルからデータを取ってきます。
この記事を参考にして汚いけど、どうにか投稿データの取得に成功しました!!(IDがうまく振れてませんでした!)
https://gray-code.com/php/getting-data-by-using-mysqli/
スクリーンショット 2019-04-23 20.07.17.png

一覧から編集ボタンをクリックして対象データの編集画面を表示(新規と同じような内容)→更新

この機能はSQL文のUPDATEを使いました。

参考記事はこちらです!
https://gray-code.com/php/update-data-by-using-mysqli/

一覧からの削除ボタンクリックで一覧から対象データを削除

参考記事はこちらです。
https://gray-code.com/php/delete-data-by-using-mysqli/

6 udemyを参考にして仕上げ

こちらを参考にしてコードをシンプルにして行きました!
これだけ写経しても掲示板が作れるぐらいの優れもの!!
分かりやすくまとまってる、復習用にも使えます。

https://www.udemy.com/php7basic/

まとめ

プログラミングを学ぶにあたり、最初はフレームワークを使わずにphpのベタ書きで簡易掲示板を作っていきました!

制作期間は2ヶ月ほど(2019年4-5月)。

プロゲートしかやった事ない初心者でしたが、スクールとかに通わなくても、mentaにサポートして貰いながら独学ベースで掲示板を作る事が出来ました!!

現在はそこからLaravelなどのフレームワークを使って実際にwebーサービスの開発などにも挑戦しています。

最後までご拝読ありがとうございました。

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

MySQLの起動時に ERROR! The server quit without updating PID file のエラーが発生する

事象

MySQLを起動しようとするとエラーが発生する。

$ mysql.server start
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/[pc名].pid).

対応内容

ファイルが存在するか確認する。

$ ls /usr/local/var/mysql/[pc名].pid
ls: /usr/local/var/mysql/MacBook-Air-3.pid: No such file or directory

ファイルが存在しないため、ファイルを作成する。

touch /usr/local/var/mysql/[pc名].pid

ファイル作成後に再起動し、再度MySQLを起動する。

$ mysql.server start
Starting MySQL
.. SUCCESS! 

起動しました。

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

MySQLの基本(データベースの操作)2

前回の続きです。

enum 複数の文字列から一つだけ格納する

カラム作成時に、'カラム名' enum('文字列1' , '文字列2' , '文字列3')とすると
レコード作成時にenumで宣言した値でのみ格納できるようになる。
宣言した値は文字列だけでなく連番で管理される。

create table users (
id int unsigned primary key auto_increment,
name varchar(20),
score float,
rank enum('gold','silver','bronze')
);

insert into users (name, score,rank) values ('taguchi', 5.8,'gold');
insert into users (name, score,rank) values ('fkoji', 8.2,'silver');
insert into users (name, score,rank) values ('dotinstall', 6.1,'bronze');

set 複数の文字列から複数格納する

カラム作成時に、'カラム名' enum('文字列1' , '文字列2' , '文字列3')とすると
レコード作成時にenumで宣言した値でのみ格納できるようになる。
宣言した値を複数選択可能。
宣言した値は文字列だけでなく連番で管理される。(最初の値には 2 の 0 乗の 1 、次が 2 の 1 乗の 2 、次が 2 の 2 乗の 4 、といった具合で値を保持)

drop table if exists users;
create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float,
 coins set('gold','silver','bronze')
);

insert into users (name, score, coins) values ('taguchi', 5.8, 'gold,silver');
insert into users (name, score, coins) values ('fkoji', 8.2, 'silver,bronze');
insert into users (name, score, coins) values ('dotinstall', 6.1,'bronze,gold');

if と case  条件分岐でデータを抽出する

if 使い方例)
 データ抽出時にselectでifを使用することで条件に応じたカラムを生成し抽出できる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

  select
    name,
    score,
    if (score > 5.0, 'OK', 'NG') as result
  from
    users;


>実行結果

+------------+-------+--------+
| name       | score | result |
+------------+-------+--------+
| taguchi    |   5.8 | OK     |
| fkoji      |   8.2 | OK     |
| dotinstall |   6.1 | OK     |
| Tanaka     |   4.2 | NG     |
+------------+-------+--------+

case 使い方例)
 データ抽出時にselectでcaseを使用することで条件に応じたカラムを生成し抽出できる。
whenの後に直接条件を書くことができる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

select
      name,
      score,
      case floor(score) % 2
        when 0 then 'even'
        when 1 then 'odd'
        else null
      end as type
    from
      users;

>実行結果

+------------+-------+------+
| name       | score | type |
+------------+-------+------+
| taguchi    |   5.8 | odd  |
| fkoji      |   8.2 | even |
| dotinstall |   6.1 | even |
| Tanaka     |   4.2 | even |
+------------+-------+------+

抽出結果をテーブルにする

select fromでデータ抽出を行う分の前にcreate tableを使用することで、条件指定で抽出したカラムを含む新たなテーブルを作成できる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

create table '作成するテーブル名' 
  select
    id,
    name,
    score,
    case
      when score > 8 then 'teamA'
      when score > 6 then 'teamB'
      else 'teamC'
    end as team
  from
      users;

select * from users_with_team;

>結果

+----+------------+-------+-------+
| id | name       | score | team  |
+----+------------+-------+-------+
|  1 | taguchi    |   5.8 | teamC |
|  2 | fkoji      |   8.2 | teamA |
|  3 | dotinstall |   6.1 | teamB |
|  4 | Tanaka     |   4.2 | teamC |
+----+------------+-------+-------+

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

SQL Error [08001]: Public Key Retrieval is not allowedの対処法 [JDBC:MySQL]

ローカル環境
・データベース:MySQL 8.0.16
・言語:Java
・JDBCドライバ:mysql-connector-java-8.0.16
・DB参照ツール:DBeaver

DB接続しようとしたら、複数のエラーが発生

JavaからDB接続しようとしたところ、突如繋がらなくなった。
eclipseのコンソールでは下記のエラー記述が。

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet successfully received from the server was 25 milliseconds ago. 
The last packet sent successfully to the server was 28 milliseconds ago.

DBeaverからも接続を試みると、下記のエラー記述が。

SQL Error [08001]: Public Key Retrieval is not allowed

検索をかけて下記の記事を見て解決できました。
https://stackoverflow.com/questions/50379839/connection-java-mysql-public-key-retrieval-is-not-allowed

JDBCドライバのプロパティ「allowPublicKeyRetrieval」をtrue、「useSSL」をfalseにする

DBeaver:
1. 「データベースナビゲータ」の該当接続を右クリックし、「編集 Connection」を押す。
2. 「接続設定」 > 「ドライバのプロパティ」を選択。
3. 「allowPublicKeyRetrieval」をtrueに変更。
4. 「useSSL」をfalseに変更。(ちなみに自分は元々falseになっていたので対応不要だった)
5. 「OK」を押す。

Javaコード:
1. データベース接続文字列に「allowPublicKeyRetrieval=true&useSSL=false」を追加。
<記入例>

sample.java
String database = "jdbc:mysql://localhost:3306/sample_db?allowPublicKeyRetrieval=true&useSSL=false";
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLの起動からユーザ作成&権限付与まで

この記事の内容

初めてMySQLを触ったので備忘録
以下3つの内容に関して記載する
・MySQLを立ち上げる
・ユーザーを作成する
・権限を付与する

環境

mysql: ver 8.0.16 for osx10.13 on x86_64 (Homebrew)
OS:MacOS HighSierra 10.13.6

MySQL立ち上げ

インストール部分は省略(Homebrewでインストール可能)
ターミナルを起動して以下のコマンドを入力してmysql.serverを立ち上げる

mysql.server start

以下の内容が表示されれば起動成功

Starting MySQL
.. SUCCESS! 

次にmysqlに接続
現在ユーザーは作成していないため管理ユーザー-rootで接続する

mysql -uroot

以下のように

>mysql 

と表示されれば接続成功
なお、接続を解除する方法はいくつか存在して、いずれかのコマンドを実行する

>mysql quit
>mysql exit
>mysql \q

ユーザーを作成する

現在はrootでログインしているので、新規にユーザを作成する
ユーザーを新規に作成するためには以下のコマンドを入力する

'user'はユーザ名
'localhost'はホスト名
'password'はパスワード

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password";

以下のコマンドでユーザ一覧を表示できる。
作ったユーザーが一覧に存在していれば作成成功

SELECT user,host FROM mysql.user

作成したユーザーでログインするためには以下のコマンドを実行

mysql -u user -p

そうするとpasswordの入力を求められるので先ほどのpassを入力することでログイン可能
現在ログインしているユーザを確かめるには以下のコマンドを実行

SELECT user()

ログインの際に用いたuserが表示されていればログイン成功

権限を付与する

作成したユーザーは何も権限を持たないため、権限を付与する。
権限は細かに設定可能であり、データベース、テーブル単位で設定も可能
今回は全ての権限を与えるよう設定する。

GRANTのコマンドを使用するのだが、ググったサイトの大半のサイトに記載されてる内容ではうまくいかなかった。
おそらくMySQLのバージョンアップにともないコマンドの仕様が変更されたのではないかと考えられる。

以下のコマンドで全ての権限をuserに付与可能
database名,table名にはアクセスを許可したいものを入力する
database名,table名にはワイルドカード[*]も使用可

grant all privileges on [database名].[table名] to 'user'@'localhost';
grant all privileges on [database名].* to 'user'@'localhost';

現在はお試しで触っているので権限をALLとしているが、
権限の細かな変更に関してはまた必要になったタイミングで記事にしようかと思います。

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