20200107のMySQLに関する記事は9件です。

AWSでのデプロイ手順①ネットワーク環境設定

初心者には難関である、AWSを使用したデプロイ手順を書いてみます

AWSはUIもよく変化するので、
現在のもの(2019/10)で書いています

※アカウントがない人はまず新規で申し込みしておいてください

今回内容
STEP1 ネットワーク環境設定
1.VPCの作成
2.サブネットの作成
3.インターネットゲートウェイの作成
4.ルートテーブルの作成
5.サブネットとの紐付け
6.セキュリティグループの作成

STEP2 EC2の設定
1.EC2にてインスタンスの作成
2.Elastic IPの割り当て
3.インスタンスにSSHでログイン

次回内容
STEP3以降
AWSでデプロイするまでの手順②サーバー(EC2インスタンス)環境設定

※ここでいうサーバーとはAWS EC2インスタンス (Amazon Linux) のこととする

STEP1 ネットワーク環境設定

1.VPCの作成

https://aws.amazon.com/
Amazon Web Servicesでサインインします

ヘッダーにあるリージョンを東京に設定し、
「VPC」を検索し「VPC」にいきます

スクリーンショット 2019-10-01 10.13.39.png

サイドメニューのVPCより[VPCの作成]を押下します
スクリーンショット 2019-09-29 20.26.18.png

作成画面になるので
今回は下のように設定し、[作成]を押下します

・ネームタグ       :testVPC
・IPv4 CIDRブロック:10.0.0.0/16
・IPv4 CIDRブロック:ブロックなし
・テナンシー       :デフォルト

スクリーンショット 2019-10-01 10.18.41.png

2.サブネットの作成

今回のサブネットは[RDS]を配置するためのサブネットを2つを作成する構成です。

サイドメニューのサブネットより[サブネットの作成]を押下します
スクリーンショット 2019-09-29 20.30.39.png

作成画面になるので
下のように設定し、[作成]を押下します

・ネームタグ:testSubnet
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1a
・CIDRブロック:10.0.0.0/24

同様にもう一つ作成します

・ネームタグ:testSubnet2
・VPC:先ほど作成したものを選択
・アベイラビリティゾーン:ap-northeast-1c
・CIDRブロック:10.0.1.0/24

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34633731633536382d346231352d653262622d636665612d6333373631643964363634642e706e67.png

3.インターネットゲートウェイの作成

サイドメニューのインターネットゲートウェイより
[インターネットゲートウェイの作成]を押下します

スクリーンショット 2019-09-29 20.34.02.png

作成画面になるので
下のように設定し、[作成]を押下します

名前タグ:testGateway

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30303636333333392d383839352d643333632d343637332d6362376530643365353366632e706e67.png

[アクション]を押下し、[VPCにアタッチ]を押下します
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63333666633763662d313638622d626136392d306135652d3365326235653836303433642e706e67.png

下のように設定し、[アタッチ]を押下する

VPC:先ほど作成したものを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f66303032333238392d653838612d326264652d306337632d3661323536666230373264312e706e67.png

4.ルートテーブルの作成

サイドメニューのルートテーブルより[ルートテーブルの作成]を押下

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f37616534643065332d323862302d613333372d346132632d6630623434383936643238352e706e67.png

作成画面になるので
下のように設定し、[作成]を押下します

名前タグ:testTable
VPC:先ほど作成したものを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f32623430326161332d633761652d666461622d616163622d6130326265323933383230652e706e67.png

作成したルートテーブルを選択した状態で、
下のタブ「ルート」>「ルートの編集」を押下、[ルートの追加]を押下

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f35336331383337372d353137662d613265342d313139352d3263613730396130306661632e706e67.png

下のように設定し[ルールの保存]を押下します

送信先:0.0.0.0/0
ターゲット:Internet Gatewayを選択し、先ほど作成したゲートウェイIDを選択

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f63626462313066362d656534352d616239312d613164612d6534363733636333313136662e706e67.png

5.サブネットとの紐付け

→左側の「サブネット」を選択します
→関連付けを変更するサブネットを選択します
→画面下のルートテーブルを選択します
→[ルートテーブルの関連付けの編集]を押下します

スクリーンショット 2019-10-01 10.35.17.png

→先ほど作成したルートテーブルIDを選択します
→[保存]を押下します

スクリーンショット 2019-10-01 10.39.06.png

6.セキュリティグループの作成

サイドメニューの
セキュリティ>セキュリティグループより>[セキュリティグループの作成]を押下します
スクリーンショット 2019-09-29 21.07.37.png

下のように設定し、[作成]を押下する

セキュリティグループ名:testSecurityGroup
説明:そのセキュリティグループの説明
VPC:先ほど作成したものを選択

スクリーンショット 2019-10-01 10.43.36.png

画面下のインバウンドのルールの[ルールの編集]を押下し、[ルールの追加]を押下、
下のように設定し、[ルールの保存]を押下する

タイプ:SSH
ソース:マイIP

スクリーンショット 2019-09-30 21.23.54.png

STEP2 EC2の設定

AWSでDBを利用したい場合、

・EC2にてインスタンスの作成
・RDSを利用する
※ ただRDSを使用すると料金が掛かるので、
使用しない場合はサーバーに直接データベースを作成してください。

この2種類の方法があります。
今回は
EC2にてインスタンスの作成(サーバーに直接データベースを作成)
をメインに行なっていきます

1.EC2にてインスタンスの作成

インスタンスは起動のままだと
課金請求されるので、使わない場合は
停止状態にすることをお勧めします

AWS マネジメントコンソールにて"EC2"を検索しアクセスする

スクリーンショット 2019-09-26 23.58.51.png

サイドメニューのインスタンスより[インスタンスの作成]を押下する

スクリーンショット 2019-09-27 0.02.03.png

今回はこちらをクリックします
スクリーンショット 2019-09-27 0.06.56.png

[次の手順: インスタンスの詳細の設定]をクリックする

スクリーンショット 2019-09-27 0.08.21.png

下を設定し,[次の手順: ストレージの追加]を押下する

ネットワーク:先ほど作成したVPCを選択
サブネット:先ほど作成したサブネットを選択
自動割り当てパブリック IP:有効
他はデフォルトのまま

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f30353438646266632d333631362d396662392d386166662d6265383133353536653934632e706e67.png

デフォルトのままで,[次の手順: タグの追加]を押下する

タグを追加する

[タグの追加]を押下する
スクリーンショット 2019-09-30 16.46.54.png

キー:Name
値:testInstance

で[次の手順: セキュリティグループの設定]を押下する

セキュリティグループの設定する

セキュリティグループの割り当て:既存を
選択し、先ほど作成したセキュリティグループを選択し、
[確認と作成]を押下する
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f39616532356237392d396565342d363531342d396237392d6237333732613434373030322e706e67.png

一覧画面にて、
最後に[起動]を押下します

下ような表示になり、
新しいキーペアを作成を選択、
キーペア名を入力し、
[キーペアのダウンロード]を押下します
(一度作成されたファイルは再度ダウンロードができなくなるので注意)
スクリーンショット 2019-09-30 19.51.28.png

ダウンロードしたら[インスタンスの作成]を押下します

しばらくするとインスタンスが作成されます!!

2.Elastic IPの割り当て

サイドメニューの
ネットワーク&セキュリティ>
Elastic IP[新しいアドレスの割り当て]を押下する

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f36323739383338622d633864352d643366312d383066342d6639613635663234633238612e706e67.png

[割り当て]を押下します
スクリーンショット 2019-09-30 17.06.31.png

[閉じる]で戻り

[アクション]>アドレスの関連付けを押下します
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3335353531372f34643235323034332d663531632d653261362d396330362d3462626139363734326635662e706e67.png

インスタンスを先ほど作成したものを選択し、[関連付け]を押下する
スクリーンショット 2019-09-30 17.09.45.png

※停止していたインスタンスにElastic IPを関連付けたままにしていると小額の料金が発生してしまうので、
インスタンスを停止している場合は解放することをお勧めします

Elastic IPをアタッチ(関連付け)しているインスタンスが起動している状態であれば、料金は発生しません。しかし、インスタンスが「停止」している状態や、Elastic IPを使っていない場合、料金が発生します。そのため、使わないElastic IPは削除しなければいけません。

Elastic IPがまだインスタンスにアタッチしている場合は、Elastic IPから該当のIPを選択し、「アクション」→「アドレスの関連付けの解除」をクリックします。確認画面が表示されますので、間違いなければ、「アドレスの関連付けの解除」をクリックし、EIPをデタッチします。

その後、再度該当のIPを選択し、「アクション」→「アドレスの解放」をクリックし、EIPを削除します。これで、料金が発生しなくなります。

3.インスタンスにSSHでログイン

各種インストール

python

$ brew install python

pip(pythonのパッケージ管理システム)

$ easy_install pip

awscli(awsをPCのコンソール上から扱うためのもの)

$ pip install awscli

できない場合はこちら
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-macos.html

ec2-userでインスタンスにログインする

AWSでは、
EC2インスタンスにログインできるユーザーとして、
デフォルトでec2-userという名のユーザーが用意されています
こちらではまずec2-userでログインします

ターミナルで以下を入れていきます
(※testKey.pemは、先ほどSTEP2でダウンロードしたキーです)

$ mv Downloads/testKey.pem .ssh/
(#作成した公開鍵をsshフォルダに移動)

$ cd .ssh/
(#ディレクトリをsshに移動)

$ chmod 600 testKey.pem
(#公開鍵に600番で定義されたアクセス権を付与する)

$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
(#公開鍵を利用してec2-userとしてログイン)

例:
($ ssh -i testKey.pem ec2-user@13.112.140.56)

yes/noを聞かれるので

yesでEnterを押下
スクリーンショット 2019-09-30 21.49.54.png

無事にログインできました!!!


ssh port 22 Operation timed out
エラーになる場合はこちら
https://qiita.com/yokoto/items/338bd80262d9eefb152e

https://qiita.com/minicoopers0716/items/cac50f29ef79a03f1d8d

ユーザー作成(EC2上での操作)

上記方法でインスタンスにログインしている状態で

[ec2-user|~]$ sudo adduser testuser
(#新規ユーザー名の登録)
[ec2-user|~]$ sudo passwd testuser
(#新規ユーザー名のパスワード登録)


パスワードを登録します


vimでユーザーに権限を追加する記述する

$ sudo visudo

vimモードになります

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

検索モードにし下の
"wheel"を探します
(キーボードで"/wheel"を入力し押下、"N"を押下すると次にいけます)

## Same thing without a password
# %wheel  ALL=(ALL)       NOPASSWD: ALL

キーボードの「i」を押下し、編集モードで

# %wheel ALL=(ALL) NOPASSWD: ALL
のコメントアウトを外します

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

さらに

その下に、作成したユーザーに権限を追加する記述
testuser   ALL=(ALL)       ALL  を追加する
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
testuser   ALL=(ALL)       ALL

キーボードの「esc」を押下します
「:wq」を入力しEnterで保存します

こちらでユーザーの切り替えを行ってください。

[ec2-user|~]$ sudo su - testuser
(#ユーザー名の切り替え)
[testuser@ ~]

無事に[ec2-user|がtestuser(作成したユーザー名)と切り替わればOKです。

exit

を二回いれて
で一度ログアウトする

追加ユーザ用キーペアを作成

こちらはローカルでの作業です

$ cd .ssh
[.ssh]$ ssh-keygen -t rsa
(#公開鍵を作成)
-----------------------------
Enter file in which to save the key ():
(#ここでファイルの名前を記述して、エンターを押す)
test_key_rsa 

Enter passphrase (empty for no passphrase): 
(#何もせずそのままエンター)
Enter same passphrase again: 
(#何もせずそのままエンター)
-----------------------------

[.ssh]$ ls
#「test_key_rsa」と「test_key_rsa.pub」が生成されたことを確認
[.ssh]$ vi config
(#VIMを起動し、設定ファイルを編集する)
-----------------------------

キーボードの「i」を押下し、編集モードで

# 以下を追記
Host test_key_rsa
  Hostname 前出のElastic IP (#自分の設定に合わせて)
  Port 22
  User testuser (#先ほどのユーザー名)
  IdentityFile ~/.ssh/test_key_rsa (#秘密鍵の設定)
* ()部分は削除する。
-----------------------------
キーボードの「esc」を押下します
「:wq」で保存します

[.ssh]$ cat test_key_rsa.pub (#鍵の中身をターミナル上に出力)

★ ssh-rsa~~~~localまでをコピーしておく

サーバー側作業

続いてサーバーでの作業です
ec2-userでログインします

$ cd .ssh
$ ssh -i testKey.pem ec2-user@(@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください。)
[ec2-user|~]$ sudo su - testuser
[testuser@ ~]$ mkdir .ssh
[testuser@ ~]$ chmod 700 .ssh
[testuser@ ~]$ cd .ssh
[testuser@ |.ssh~]$ vi authorized_keys

(vimがオープンするので、「i」を押し、
先ほど ★ で、コピーしたssh-rsaをペーストする)
キーボードの「esc」を押下します
「:wq」で保存します

[testuser@ |.ssh~]$ chmod 600 authorized_keys

$ exit
もう一度
$ exit
ログアウト
[~]$ ssh test_key_rsa

ログインできれば、無事ユーザー設定は終了です。

なお、時間が経つとローカルからログインできなくなることがあるので、その場合は、
セキュリティグループ>インバウンド>編集で
SSHのソースで
マイIPを選択し[保存]すると繋がるようになります

続きはこちら
AWSでデプロイするまでの手順②サーバー(EC2インスタンス)環境設定

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

Javaについて初心者が学習したこと。 基本的な事、コレクションフレームワーク、MVCフレームワーク(truts2)、DB接続(MySQL)、ログイン認証、jsp

#Javaの基本ルール
 ①エディタとコンパイラ、または統合開発環境を使用する
 ②ソースファイルを〇〇.javaとして保存する
 ③コンパイルして実行ファイル(exe)を作成する

Javaのプログラムは、プロジェクトと呼ばれる単位でワンセットで管理する
 ■プロジェクト
    ○src(ソースファイル)
     ・〇〇.java
     ・〇〇.java
    ○ライブラリ
     ・〇〇.jar
     ・〇〇.jar
     ・〇〇.jar

型・変数
文字列にはcharというプリミティブ型があるが、文字列を格納できる型はない。
String(API)クラスライブラリ

割り算の注意点
代入先の変数が浮動小数点型(float,double)でも、
計算式自体が整数の場合は、小数点以下を求めることはできない。
例)
 float A = 10 / 3;
 System.out.printon(A);
 ↓
 3 と表示される

計算式の前に(float)や、(double)を指定することにより、小数点以下を求めることができる。
例)
 float A = (float)10 / 3;
 System.out.printon(A);
 ↓
 3.3333333 と表示される

equalメソッド
 String型で定義した文字列には比較演算子が使用できないため、equalメソッドを使用する。
例)
 String b = "文字列";
  if(b.equals("文字列")){
  System.out.println(b + "です。");
  }
 ↓
 文字列です。 と表示される

条件演算子(三項演算子)
  条件によって処理内容を分けることができる演算子。
  「条件式がtrueの場合、式1を実行する。
      fasleの場合、式2を実行する。」
  条件式 ? 式1 : 式2;

コレクションフレームワーク(List、Map、Set)

  ■コレクション→複数の要素の集まり。
  ■コレクションフレームワーク→コレクション(要素の集まり)を扱う機能
  →配列みたいなものを操作できるもの

List

  複数の要素の順番を保持する。配列の代わりとして利用可能。
  インデックスを利用して要素にアクセスする インデックスは012345...〜
  配列は宣言時に必要な個数を指定する必要があったが、Listでは後から要素数を変更することができるのが特徴。
  Listを使う場合は下記のいずれかを使いインスタンス化する。

クラス 任意の要素へのアクセス 要素の途中追加、削除
ArrayList 高速 低速
LinkedList 低速 高速

  ■インスタンス化の方法
   List<[要素の型]> 変数名 = new ArrayList<[要素の型]>();
   List<[要素の型]> 変数名 = new LinkedList<[要素の型]>();

   ※ArrayListとLinkedListはクラスだが、Listインターフェースなので、
    宣言の型に使用することはできるが、インスタンスの生成はできない。

   あとから要素の型を変更する場合はインターフェースであるListで宣言しておいたほうが便利かもしれないが、それ以外には基本的に
   ArrayList<[要素の型]> 変数名 = new ArrayList<[要素の型]>();
   LinkedList<[要素の型]> 変数名 = new LinkedList<[要素の型]>();

  ■要素の記憶方法
   変数名.add("記憶させる要素");

  ■要素の取得方法
   変数名.get(インデックス番号)

   ●<[要素の型]>の書き方
    <[要素の型]>をジェネリクスという(JDK1.5〜)
    型を予め決めることができ、拡張For文を利用することもできる。
   
 

Map

  キーと要素とのマッピングを表すデータ構造。
  Listのようなインデックスの代わりに、キーで要素を識別する。

  putメソッドで要素を記憶できる。
  変数名.put("キー","記憶させる要素");

  getメソッドで要素取得できる。(キーを引数とする)
  変数名.get("キー");

  containsKey 指定したキーが存在するか確認(存在する場合はtrue)
  Map.containsKey(検索するキー)
  

  Mapを使う場合は下記のいずれかを使いインスタンス化する。

クラス nullの可否 順番
HashMap 可能 登録順は意識されず記憶される
TreeMap 可能 登録したキーが昇順で記憶される
LinkedHashMap 可能 登録した順番で記憶される

  ■インスタンス化の方法
   Map<key,[要素の型]> 変数名 = new HashMap<key,[要素の型]>();
   Map<key,[要素の型]> 変数名 = new TreeMap<key,[要素の型]>();
   Map<key,[要素の型]> 変数名 = new LinkedHashMap<key,[要素の型]>();
   

Set

  重複要素を持たない要素の集合。
  ※追加しようとする値がすでに存在する場合は取り込まれない。
   重複を削除したい場合に、一旦Setにデータを入れて、すべて取り出すといった使い方が多いらしい

  Setを使う場合は下記のいずれかを使いインスタンス化する。

クラス 重複の有無 順番
HashSet 無し 登録順は意識されず記憶される
TreeSet 無し 登録したキーが昇順で記憶される
LinkedHashSet 無し 登録した順番で記憶される

  ■インスタンス化の方法
   Set<[要素の型]> 変数名 = new HashSet<[要素の型]>();
   Set<[要素の型]> 変数名 = new TreeSet<[要素の型]>();
   Set<[要素の型]> 変数名 = new LinkedHashSet<[要素の型]>();

Javaのデータベース接続(MySQL)

  JavaとMySQLは開発者が異なり、直接接続不可のため、双方接続のためのドライバーが必要。
  ①JDBCドライバー(Javaとデータベースを接続するためのプログラムの集まり)
  ②DBConnector(Javaとデータベースを接続するために自分で作成するファイル)

java.sql.DriverManager

  一連のJCBCドライバを管理するためのクラス

java.sql.Connection

  データベースとの接続をするためのパッケージ

java.sql.SQLException

  データベースアクセスエラー等の情報を提供するための例外

java.sql.ResultSet

  データベースの結果を表すデータの表に関するインターフェース

DBConnector.java
import java.sql.Connection;      //データベースとの接続をするためのパッケージ
import java.sql.DriverManager;   //JDBCドライバを管理するためのクラス
import java.sql.SQLException;    //データベースアクセスエラー等の情報を提供するための例外

public class DBConnector{
    private static String driverName = "com.mysql.jdbc.Driver";  //driverNameにJDBCドライバーを代入

      private static String url =
      "jdbc:mysql://localhost/testdb?autoReconnect=true&useSSL=false";  //url指定 ?以降はオプション lodalhost=サーバー名 testdb=データベース名

      private static String user = "root";           //mysqlにログインするための準備
      private static String password = "root";      //mysql rootアカウントのパスワードを"root"に指定

    public Connection getConnection() {      //DBに接続をするためのクラス(下に出てくるAPIのgetConnectionとは別物)
      Connection con = null;               //初期化

      try {                                //try〜catchは例外処理構文
        Class.forName(driverName);                              //ドライバーをロードして使えるようにしている
        con = DriverManager.getConnection(url,user,password);   // 指定されたデータベースのURLへの接続を試みるメソッド(上で代入したurl、user、passwordも代入)
      } catch (ClassNotFoundException e) {   //try内でエラーが発生した場合、catchが受け取り、printStachTrace()でエラーに至る履歴の表示をする
        e.printStackTrace() ;              //ClassNotFoundException クラスが見つからないエラーの場合、スタックトレースを出力
      } catch (SQLException e) {
        e.printStackTrace() ;              //SQLException データベース処理に関するエラーの場合、スタックトレースを出力
      }
        return con ;
    }
}

struts

   Javaで実装するMVC【Model(データ),View(画面),Controller(業務ロジック)を分離して実装しようという考え方】モデルを採用したWebアプリケーションフレームワーク

MVCモデル

   大規模なWebアプリケーションの開発において、Model:処理、View:画面、Controller:司令塔のそれぞれの機能を持った各アプリケーションを分けて独立させることで、開発やメンテナンスをしやすくした開発手法

ログイン認証機能開発

設定ファイルの作成

web.xml

   動的Webプロジェクト作成時自動的に作られる設定ファイルで、
    サイトにアクセスした際、最初に表示するjspファイルや、
    プロジェクトでStruts2を使用することを宣言できる。

web.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 使用するxmlのバージョンと、文字コードの宣言 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<!-- Tomcat バージョン8で使われるヘッダー文 内容→xmls:xsi/schemaLocationが属している名前空間xsiの定義 xmlns/名前空間(同名クラスの衝突を避けるためのパッケージ的なもの)の名前の定義 xsi/先で設定した名前空間の定義内容が入っているファイル参照先 -->
  <display-name>login</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file> <!-- welcome-file-listで囲まれたwelcome-fileのファイルがはじめに開かれるページになる(複数指定可能) -->
  </welcome-file-list>

  <filter> <!-- Webアプリケーションの中のweb.xmlを使って、フィルタに書かれてるものをアプリケーションの一部として設定する。 そのフィルタをWebアプリケーションのurlパターンや特定のサーブレットにマッピングできる -->
    <filter-name>struts2</filter-name> <!-- 下のfilter-nameと同じ名前にする事により、filter-classとurl-patterをマッピング -->
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  <!--struts2の制御担当クラス-->
  </filter>

  <filter-mapping>
    <filter-name>struts2</filter-name> <!-- 上のfilter-nameと同じ名前にする事により、filter-classとurl-patterをマッピング -->
    <url-pattern>/*</url-pattern> <!-- /*で、このプロジェクトの配下全てという意味 このプロジェクト全てでstruts2を使いますという意味になる -->
  </filter-mapping>

</web-app>

struts.xml

   strutsフレームワークを利用する際に作成する設定ファイル
   Javaの処理結果に応じて表示するjspファイルの設定を記述する。
   strutsフレームワークのみで利用される設定ファイル。

struts.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 使用するxmlのバージョンと、文字コードの宣言 -->

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"><!-- struts2.3以降のバージョンの設定であることの記述 -->

<struts>
  <constant name = "struts.devMode" value = "true" /> <!-- Struts2の挙動を制御(開発者が使用しやすく)する設定 具体的にはエラーを知らせてくれるようなデバッグ機能を発揮してくれるようになる。 -->
  <package name = "com.login.action" extends = "struts-default"> <!-- name属性には”このプロジェクトのActionファイルが含まれるパッケージを書く” extendsで、デフォルトのstruts-defaoult(struts2が持っているstruts-default.xmlのことで、ActionSupportクラスはここに入っている)定義を継承-->
    <action name = "LoginAction" class = "com.login.action.LoginAction" method = "execute"> <!-- name属性には”アクション名”、class属性には”具体的なクラス名”をパッケージ名から記述、method属性には”アクションが呼び出されたとき、最初に自動的に実行されるメソッド名(executeとつけるのが慣例) -->
      <result name = "success">loginSuccess.jsp</result>  <!-- Actionの結果、次に表示する画面の設定。(executeメソッドの戻り値で判断) -->
      <result name = "error">loginError.jsp</result>      <!-- Actionの結果、次に表示する画面の設定。(executeメソッドの戻り値で判断) -->
    </action>
  </package>
</struts>

DBConnecterの作成

  データベースへ接続するために
  ・DBの場所
  ・DBの名前
  ・接続するユーザー名
  ・パスワード
  などを設定するDBConnecterクラスを作成する

DBConnecctor.java
package com.login.util;//packageの宣言
import java.sql.Connection;//データベースとの接続をするためのパッケージ
import java.sql.DriverManager;//JDBCドライバを管理するためのクラス
import java.sql.SQLException;//データベースアクセスエラー等の情報を提供するための例外

public class DBConnector {
  private static String driverName =  "com.mysql.jdbc.Driver"; //driverNameにJDBCドライバーを代入
  private static String url = "jdbc:mysql://localhost/logindb_makita"; //urlに、接続先のデータベース名を代入

  private static String user = "root"; //userにmysqlのユーザー名を代入
  private static String password = "root"; //passwordにmysqlのパスワードを代入

  public Connection getConnection() {//DBに接続するためのメソッド
      Connection con = null;//Connection型のconの初期化

      try {
          Class.forName(driverName);//JDBCドライバーをロードして使う準備をしているらしい
          con = (Connection) DriverManager.getConnection(url,user,password);//指定したデータベースへの接続 結果をconへ代入
      }catch(ClassNotFoundException e) {//try内でエラーが発生した場合、catchが受け取り、printStachTrace()でエラーに至る履歴の表示をする
          e.printStackTrace();//ClassNotFoundException クラスが見つからないエラーの場合、スタックトレースを出力
      }catch(SQLException e) {
          e.printStackTrace();//SQLException データベース処理に関するエラーの場合、スタックトレースを出力
      }
       return con;//DBに接続した結果をconで返す
  }

SQLファイルの準備

struts.sql
set names utf8;/*文字コードの設定 ※SQLコンソールからの指定は良いが、アプリケーションから使用するとSQLインジェクションに脆弱になる場合があるらしい。この記述は良いのか?*/
set foreign_key_checks = 0;/*複数テーブル間でデータの整合性を保つための「外部キー制約」を無効にする設定 今回は外部キー制約をそもそも設定していないが記述している*/
drop database if exists logindb; /*もし、データベースlogindbがあったらそれを削除*/
create database logindb;/*logindbの作成*/
use logindb;/*logindbを使う*/

create table user(/*logindbに各カラムを作る*/
id int,
user_name varchar(255),
password varchar(255)
);

insert into user values/*logindbに各データを入れる*/
(1, "taro", "123"),
(2, "jiro", "123"),
(3, "hanako", "123"),
(4, "saburo", "123");
上記sqlにて作成されたテーブル
mysql> use logindb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------------+
| Tables_in_logindb        |
+--------------------------+
| user                     |
+--------------------------+
1 row in set (0.00 sec)

mysql> select * from user;
+------+-----------+----------+
| id   | user_name | password |
+------+-----------+----------+
|    1 | taro      | 123      |
|    2 | jiro      | 123      |
|    3 | hanako    | 123      |
|    4 | saburo    | 123      |
+------+-----------+----------+
4 rows in set (0.00 sec)

クラスファイルの作成

DTOクラスの作成

   DTOクラス(DatabaseTransferObject)は、DAOが取得した値をActionへ戻す際、値を格納するためのクラス
   必要なデータのテーブル上のカラム名に対応したフィールド変数及びgetter/setterで構成する

java:LoginDTO.java
package com.login.dto;//packageの宣言

public class LoginDTO {  //DTO = Database Transfer Object
       private int id;//idカラムに対応する変数の宣言
       private String name;//nameカラムに対応する変数の宣言
       private String password;//passwordカラムに対応する変数の宣言

       public int getID() {//idのgetter
           return id;
       }

       public void setId(int id) {//idのsetter
           this.id = id;
       }

       public String getName() {//nameのgetter
           return name;
       }

       public void setName(String name) {//nameのsetter
           this.name = name;
       }

       public String getPassword() {//passwordのgetter
           return password;
       }

       public void setPassword(String password) {//passwordのsetter
           this.password = password;
       }

}

DAOクラスの作成

   Actionから送られてきた情報を使ってDBへ問い合わせを行う
   DBへ問い合わせて取得した値をDTOクラスに格納する

LoginDAO.java
package com.login.dao;//packageの宣言
import java.sql.Connection;//データベースとの接続をするためのパッケージ
import java.sql.PreparedStatement;//実行するSQL文を格納するオブジェクト
import java.sql.ResultSet;//データベースの結果を表す表オブジェクト
import java.sql.SQLException;//データベースアクセスエラー等の情報を提供するための例外

import com.login.dto.LoginDTO;//LoginDTO.javaのインポート
import com.login.util.DBConnector;//DBConnector.javaのインポート

public class LoginDAO {
  public LoginDTO select(String name, String password)throws SQLException{//Login.jsp→LoginActionから渡された引数name、passwordを扱うselectメソッド
      LoginDTO dto = new LoginDTO();//データベースへアクセスした結果を格納するLoginDTOインスタンスを生成
      DBConnector db = new DBConnector();//データベースに接続するためのフィールドとメソッドを持ったインスタンスの生成
      Connection con = db.getConnection();//データベースへの接続を実際に行うクラスをconに代入

      String sql = "select * from user where user_name=? and password=?";//データを取得するsql文の作成
      try {
          PreparedStatement ps = con.prepareStatement(sql);//sql文を表すPreparedStatement型のpsに、上記sql文の代入
          ps.setString(1,name);//sql文の1つ目の?(プレースホルダー)にnameをセット
          ps.setString(2, password);//sql文の2つ目の?(プレースホルダー)にpasswordをセット
          ResultSet rs = ps.executeQuery();//sql文の実行(結果はResultSet型のrsに入る)
          if(rs.next()) {//実行結果の1行次、つまりカラム名の次に実データが入っている場合、
              dto.setName(rs.getString("user_name"));//dtoのnameのセッターにrs.getStringでuser_nameを格納
              dto.setPassword(rs.getString("password"));//dtoのpassordのセッターにrs.getStringでpasswordを格納
          }
      }catch(SQLException e) {
          e.printStackTrace();
      }finally {
          con.close();//データベースとの接続を終了させる
      }
      return dto;
  }
}

 

Actionクラスの作成

   ユーザーにより画面から送られてきたリクエストを取得する
   処理内容に応じてDAOやDTOクラスを呼び出し、最終的に次のJSPへ値を返す

LoginAction
package com.login.action;//packageの宣言

import java.sql.SQLException;//データベースアクセスエラー等の情報を提供するための例外

import com.login.dao.LoginDAO;//LoginDAOクラスのインポート
import com.login.dto.LoginDTO;//LoginDTOクラスのインポート
import com.opensymphony.xwork2.ActionSupport;//struts2が提供するActionSupportクラスをインポート

public class LoginAction extends ActionSupport{//ActionSupportクラスを継承してログインクラスの定義
  private String name;//jspファイルから受け取る値の定義 ※jspでの定義と変数名を合わせる
  private String password;//jspファイルから受け取る値の定義 ※jspでの定義と変数名を合わせる

  public String execute() throws SQLException{//ActionSupportクラスのexecuteメソッドのオーバーライド
      String ret = ERROR;//戻り値retに初期値ERRORを代入    ERRORはActionSupportが実装しているActionインターフェースに定義されている定数ERROR=“error”

      LoginDAO dao = new LoginDAO();//データベースアクセス担当クラスLoginDAOをインスタンス化
      LoginDTO dto = new LoginDTO();//データベースから取得した値を返すクラスLoginDTOをインスタンス化

      dto = dao.select(name, password);//dao.selectでデータベースにアクセス(login.jspから送られたname、passwordを引数)して、結果をdtoに代入
      if(name.equals(dto.getName())) {//login.jspから送られてきたnameとデータベースから取得したnameが正しい場合、
          if(password.equals(dto.getPassword())){//login.jspから送られてきたpasswordとデータベースから取得したpasswordが正しい場合、
              ret = SUCCESS;//戻り値retにSUCCESSを代入する SUCCESSはActionSupportが実装しているActionインターフェースに定義されている定数SUCCESS=“success”
          }
      }
      return ret;//actionの結果に"error"か"success"を代入 struts.xmlで次に遷移するページを判断する。
  }

  public String getName() {//nameのgetter
      return name;
  }
  public void setName(String name) {//nameのsetter
      this.name = name;
  }
  public String getPassword() {//passwordのgetter
      return password;
  }
  public void setPassword(String password) {//passwordのsetter
      this.password = password;
  }
}

 ※getter/setterは、どの作成ファイルからも呼び出されていないが、
  struts2では、jspファイルとActionクラス間で値をやり取りする際に、
  ValueStackという値の保管庫を経由する。Actionクラス内に、リクエストパラメタ(値)と同名で
  getter/setterメソッドを記述しておけば、自動的にgetter/setterは実行される

JSPの作成

  ブラウザに表示される画面
  ・login.jsp:name及びpasswordの入力画面
  ・loginSuccess.jsp:ログインに成功した際に遷移する画面
  ・loginError.jsp:ログインに失敗した際に遷移する画面
  の3つを作成する

login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><!-- ページの設定 -->
<%@ taglib prefix="s" uri="/struts-tags" %><!-- struts2のカスタムタグ(s:formとか)を使えるようにしている -->

<!-- HTMLは、バージョンごとにそのバージョンで使用できる要素(タグ)や属性の名前と、それらの配置のしかたについて厳密に定義されている。 これはDTD(Document Type Definition)と呼ばれるもので、「文書型の定義」を意味する。 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- Transitional DTDのバージョンを宣言
非推奨要素や属性は使用できるが、フレーム(frame)を使用することができない。 要素の配置については比較的制限が緩やか。 -->
<html>
<head>
  <meta charset = "UTF-8">
  <title>ログイン画面</title>
</head>
<body>

<s:form action = "LoginAction"><!-- s:formタグで囲まれた情報が、struts.xmlのactionタグ内のname属性LoginActionで指定したactionクラスに渡される -->
<s:textfield name = "name"/><!-- "name"と同名のactionクラスのフィールドに情報を渡す ※ブラウザでは<imput type="text" name="name">と認識される-->
<s:password name = "password"/><!-- "password"と同名のactionクラスのフィールドに情報を渡す ※ブラウザでは<imput type="password" name="password">と認識される-->
<s:submit value = "ログイン"/><!-- ブラウザでは<imput type="submit" value="ログイン">と認識される -->
</s:form>
</body>
</html>
loginSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>ログイン成功画面</title>
</head>
<body>
  <h1>ログインに成功しました。</h1>
</body>
</html>
loginError.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>ログイン失敗画面</title>
</head>
<body>
  <h1>ログインに失敗しました。</h1>
</body>
</html>

ログイン認証機能開発

1.ログイン認証機能
 ①ログイン画面からID、パスワード情報を入力し、データベースに格納されたユーザー情報を検索
  入力情報と同じ情報が存在した場合はログイン認証成功、次の画面へ遷移
  入力情報と同じ情報が存在しない場合はログイン認証失敗、ログイン画面へ戻す
2.ユーザー登録機能
  ログイン認証を通過するためのユーザー情報をデータベースに格納する
  画面項目に従って情報を入力し、サービスに登録させる
3.商品購入機能
  商品情報画面に表示されている購入ボタンを押下することで、対象の商品を購入できる
  購入する商品情報が表示される
4.購入履歴機能
  購入した商品の履歴情報を確認でき、ユーザーが任意に購入履歴を削除することができる
  複数の商品を購入した場合は、一覧で履歴が表示される

プロパティ

 ここでいきなり初歩的な話
 プロパティとはメンバ変数の値の取得や変更を行うためのメソッド(アクセサー)のこと。
 つまりgetter/setterのこと。
 なのでjspファイルで<s:property value="">でvalueに書いたプロパティにアクセスしてメンバ変数の値を取ってこれる。
 

様々なクラスやメソッドとその使い方

ファイルやファイル属性等にアクセスするためのクラスやインターフェースを定義したパッケージ java.nio.fileのクラス

Pathインターフェース

 ファイルを特定するために、ファイルパスを表すためのオブジェクト

resolve(String other(パス文字列))

  パス文字列をpathに変換して返す

Pathsクラス

  パス文字列またはURIを変換してPathを返すためのクラス
 

Filesクラス

  ファイルやディレクトリを操作するメソッドで構成されるクラス
 

get(String first(パス文字列), String...more)

  一つのパス文字列もしくは、連結すると1つのパス文字列になる文字列をPathに変換して返す

copy(Path(source), Path(target), CopyOption(options...))

  ソースパスのファイルをターゲットのパスにコピーする
  入出力エラーが発生した場合は、IOExceptionを投げる。
  私が使用した時はFileAlreadyExistsException(コピー先に同じファイル名が既に存在している場合に投げられる例外)が出て苦労した。
  既にある同じファイル名と置換する場合はREPLACE_EXISTINGオプションをつける。

ファイルを、ソースファイルと同じ名前でコピーする場合
    Path source = /...
    Path target = /...
    Files.copy(source, target.resolve(source.getFileName());

  

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

[AWS] EC2からRDS(MySQL)へ接続する方法

参考記事

Amazon RDS編~EC2インスタンスからDBインスタンスへの接続~

EC2からデータベースの中身をみるには

  1. EC2へssh接続する
  2. 接続するコマンドを入力する
  3. 設定したパスワードを入力する

のたった三つの手順です。

接続するコマンドとは

こちらです

mysql -h エンドポイント -P 3306 -u ユーザー名 -p データベース名

各パラメータの確認方法

エンドポイント

  1. AWSへログイン
  2. サービスから「RDS」を選択
  3. "データベース"から接続したいデータベースを選択
  4. 【接続とセキュリティ欄】にてエンドポイントを確認

ユーザー名

1~3まではエンドポイントと同じ
4. 【設定】にてユーザー名を確認

データベース名

エンドポイントやユーザー名を確認した際のデータベース名です

以上です

qiita初投稿でした。至らない点があると思いますが、ご指摘いただけたらと思います。
また、この記事がどなたかのお役に立てれば幸いです。

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

分析関数(Window関数)を利用してmysql8.0でROW_NUMBER取得

分析関数(Window関数)を利用してmysql8.0でROW_NUMBER取得

Mysql8にデーター移行して行数取得でエラー

mysql5.6で問題なかった下記のSQLがmysql8.0で行数取得でエラーが発生。

set @row:=0;
select * 
from 
    (select `id`, @row:=@row+1 as row 
    from `table_a` 
   where `status` = 1 
      and `table_a`.`deleted_at` is null 
      order by `published_day` desc
   ) st 
where `id` = ? limit 1

Mysql8で実行時エラー内容

local.ERROR: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'row from `table_a` where `status` = 1 and

エラー調査

最初はMysql8で下記の書き方が問題なると思い、「Mysql8+row」で調べたら「Window関数」に関する内容が多かった。

@row:=@row+1

ソースを「Window関数」に書き換えて再実行してもエラーは解消されなかった。

select * 
from 
   (select `id`, ROW_NUMBER() OVER (ORDER BY published_day DESC) AS row
   from `table_a` 
   where `status` = 1 and 
      and `table_a`.`deleted_at` is null 
      order by `published_day` desc
   ) st 
where `id` = ? limit 1

エラー原因

Mysql8から「row」が予約語として追加されたのが原因でした。

原因が分かったので下記にソースを変更して再実行したらエラーは解消されました!!

select * 
from 
   (select `id`, ROW_NUMBER() OVER (ORDER BY published_day DESC) AS row_num 
   from `table_a` 
   where `status` = 1 and 
      and `table_a`.`deleted_at` is null 
      order by `published_day` desc
   ) st 
where `id` = ? limit 1

「Window関数」に関して

[1] 基本となるWindow関数
Window関数は、"OVER (PARTITION BY ...)" or "OVER (ORDER BY ...)" をつけて使用します。
OVERの前にくるのは、Window関数に限らず、従来の集約関数(SUM, COUNTなど)でも可能です。
集合関数は後ろにOVER句をつけれれば、分析関数になる。

[2] ROW_NUMBER()
ROW_NUMBER関数は、その名の通り取得した行(レコード)の番号を表示します。
Widnow関数内のORDER BY句で指定されたカラムの順番に沿って、「1」から番号が割り振られます。なお、ROW_NUMBER関数は括弧の中に変数を指定する必要はありません。

従来のMySQLでは行番号を出力する場合に手間がかかっていましたが、ROW_NUMBER()を使えば簡単に取得することができます。

[3] よく使われる関数 : SUM, COUNT, AVG
「Window関数」にはSUM, COUNT, AVGの便利な関数もあり今後機会があったら使いたいと思います。
スクリーンショット 2020-01-07 16.49.28.png

参考サイト

https://wpchiraura.xyz/mysql-80-reserved-word-list/
https://qiita.com/kakuka4430/items/8c66e743800fcb8bc040

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

【 Laravel 】Laravel DB.comでCLUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravle DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

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

【 Laravel 】CLUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravle DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

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

【 Laravel 】CRUD『 表示・登録・更新・削除 』機能をCODEを書かず自動作成

Laravel DB.com は「 ER図 → CRUD生成 」までCODEを書かずに作成可能なツールです

以前にも書きましたが、Laravel DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

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

【 Laravel 】Laravel DB.comで『 CRUD簡単作成 』

Laravle DB.com を使って 「 ER図 → CRUD生成 」を試す!

前提条件

  • Laravelで環境を作ったことがある人(とりあえず動作するまで)
  • Laravelの基本を理解している人(つもりの人)
  • 確認環境:Laravel5.5/PHP7.2.1/MySQL5.6.38

【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

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

【 Laravel 】Laravel DB.comで『 CRUD簡単作成 』を解説

Laravle DB.com を使って 「 ER図 → CRUD生成 」を試す!

以前にも書きましたが、Laravle DB.comでは「CRUD」のコードまで生成するようになりました。\(^o^)/

私の開発環境

  • Laravel5.5/PHP7.2.1/MySQL5.6.38 (Chromeで確認)

メリット

  • CRUDを自動生成!
  • 超便利! ER図を保存できるので、1度作ったものを別のアプリにも転用しやすい!
  • どのPCからでも同じデータを操作できる(ブラウザアプリだから)!

さあ、はじめて行きましょう!


【 LaravelDB.comへ ログイン 】

LaravelDB.com
Googleアカウントのみログイン可能です。
※現在はGoogleアカウントを持っていない人は少ないですからね〜
LaravelDB_com.jpg


【 LaravelDB.comの POINT!! 】

ER図を作成していきますが重要事項があります!

<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!

image.png

LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。


【 CRUDを生成してみる! 】

まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
image.png
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!


【 CRUD: 新しいプロジェクトを用意 】

最低限Laravelがインストールした状態 を準備します!
image.png
この時点ではまだLOGINは作らないように!


【 CRUD: ダウンロードファイルを確認しましょう 】

Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
image.png
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。


【 CRUD: 配置しおわったら「 Migrate 」しましょう 】

DBや.env設定など最低限の設定が終わっていたら

php artisan migrate

で、テーブルを作成してください。


【 完成: ブラウザで確認しましょう! 】

http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!

welcome.blade.php
image.png

作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
image.png


画面が古いままの場合(Cacheかも)

以下コマンドでCacheをクリアしてみましょう

php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

動作した後はコードを見ると良いでしょう

  • Routing
  • Controller
  • Views
  • Model 後は、自分で変更をいれていくだけですね。

こちらのイベントで操作方法等の勘所など解説する予定!

【G'sCreativeCollection #3】GEEKs_Output_LT
Outline】
・日時:1月11日(土)17:00~19:30
・会場:ShibuyaQWS(渋谷スクランブルスクエア15F)内 
・参加費:無料
・定員:30名


日本から海外へ向けたアウトプット

laravelDB.com は日本人が作り、海外でも使われるプロダクトになることを願っております。

Twitterアカウント: LaravelDB.com

m(_ _)m

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