- 投稿日:2020-01-07T20:54:50+09:00
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」にいきます作成画面になるので
今回は下のように設定し、[作成]を押下します・ネームタグ :testVPC ・IPv4 CIDRブロック:10.0.0.0/16 ・IPv4 CIDRブロック:ブロックなし ・テナンシー :デフォルト2.サブネットの作成
今回のサブネットは[RDS]を配置するためのサブネットを2つを作成する構成です。
サイドメニューのサブネットより[サブネットの作成]を押下します
作成画面になるので
下のように設定し、[作成]を押下します・ネームタグ:testSubnet ・VPC:先ほど作成したものを選択 ・アベイラビリティゾーン:ap-northeast-1a ・CIDRブロック:10.0.0.0/24同様にもう一つ作成します
・ネームタグ:testSubnet2 ・VPC:先ほど作成したものを選択 ・アベイラビリティゾーン:ap-northeast-1c ・CIDRブロック:10.0.1.0/243.インターネットゲートウェイの作成
サイドメニューのインターネットゲートウェイより
[インターネットゲートウェイの作成]を押下します作成画面になるので
下のように設定し、[作成]を押下します名前タグ:testGateway下のように設定し、[アタッチ]を押下する
VPC:先ほど作成したものを選択4.ルートテーブルの作成
サイドメニューのルートテーブルより[ルートテーブルの作成]を押下
作成画面になるので
下のように設定し、[作成]を押下します名前タグ:testTable VPC:先ほど作成したものを選択作成したルートテーブルを選択した状態で、
下のタブ「ルート」>「ルートの編集」を押下、[ルートの追加]を押下下のように設定し[ルールの保存]を押下します
送信先:0.0.0.0/0 ターゲット:Internet Gatewayを選択し、先ほど作成したゲートウェイIDを選択5.サブネットとの紐付け
→左側の「サブネット」を選択します →関連付けを変更するサブネットを選択します →画面下のルートテーブルを選択します →[ルートテーブルの関連付けの編集]を押下します→先ほど作成したルートテーブルIDを選択します →[保存]を押下します6.セキュリティグループの作成
サイドメニューの
セキュリティ>セキュリティグループより>[セキュリティグループの作成]を押下します
下のように設定し、[作成]を押下する
セキュリティグループ名:testSecurityGroup 説明:そのセキュリティグループの説明 VPC:先ほど作成したものを選択画面下のインバウンドのルールの[ルールの編集]を押下し、[ルールの追加]を押下、
下のように設定し、[ルールの保存]を押下するタイプ:SSH ソース:マイIPSTEP2 EC2の設定
AWSでDBを利用したい場合、
・EC2にてインスタンスの作成 ・RDSを利用する ※ ただRDSを使用すると料金が掛かるので、 使用しない場合はサーバーに直接データベースを作成してください。この2種類の方法があります。
今回は
EC2にてインスタンスの作成(サーバーに直接データベースを作成)
をメインに行なっていきます1.EC2にてインスタンスの作成
インスタンスは起動のままだと
課金請求されるので、使わない場合は
停止状態にすることをお勧めしますAWS マネジメントコンソールにて"EC2"を検索しアクセスする
サイドメニューのインスタンスより[インスタンスの作成]を押下する
[次の手順: インスタンスの詳細の設定]をクリックする
下を設定し,[次の手順: ストレージの追加]を押下する
ネットワーク:先ほど作成したVPCを選択 サブネット:先ほど作成したサブネットを選択 自動割り当てパブリック IP:有効 他はデフォルトのままデフォルトのままで,[次の手順: タグの追加]を押下する
タグを追加する
キー:Name 値:testInstanceで[次の手順: セキュリティグループの設定]を押下する
セキュリティグループの設定する
セキュリティグループの割り当て:既存を
選択し、先ほど作成したセキュリティグループを選択し、
[確認と作成]を押下する
一覧画面にて、
最後に[起動]を押下します下ような表示になり、
新しいキーペアを作成を選択、
キーペア名を入力し、
[キーペアのダウンロード]を押下します
(一度作成されたファイルは再度ダウンロードができなくなるので注意)
ダウンロードしたら[インスタンスの作成]を押下します
しばらくするとインスタンスが作成されます!!
2.Elastic IPの割り当て
サイドメニューの
ネットワーク&セキュリティ>
Elastic IP[新しいアドレスの割り当て]を押下する[閉じる]で戻り
インスタンスを先ほど作成したものを選択し、[関連付け]を押下する
※停止していたインスタンスにElastic IPを関連付けたままにしていると小額の料金が発生してしまうので、
インスタンスを停止している場合は解放することをお勧めしますElastic IPをアタッチ(関連付け)しているインスタンスが起動している状態であれば、料金は発生しません。しかし、インスタンスが「停止」している状態や、Elastic IPを使っていない場合、料金が発生します。そのため、使わないElastic IPは削除しなければいけません。
Elastic IPがまだインスタンスにアタッチしている場合は、Elastic IPから該当のIPを選択し、「アクション」→「アドレスの関連付けの解除」をクリックします。確認画面が表示されますので、間違いなければ、「アドレスの関連付けの解除」をクリックし、EIPをデタッチします。
その後、再度該当のIPを選択し、「アクション」→「アドレスの解放」をクリックし、EIPを削除します。これで、料金が発生しなくなります。
3.インスタンスにSSHでログイン
各種インストール
python
$ brew install pythonpip(pythonのパッケージ管理システム)
$ easy_install pipawscli(awsをPCのコンソール上から扱うためのもの)
$ pip install awscliできない場合はこちら
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-macos.htmlec2-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を聞かれるので
無事にログインできました!!!
※
ssh port 22 Operation timed out
エラーになる場合はこちら
https://qiita.com/yokoto/items/338bd80262d9eefb152ehttps://qiita.com/minicoopers0716/items/cac50f29ef79a03f1d8d
ユーザー作成(EC2上での操作)
上記方法でインスタンスにログインしている状態で
[ec2-user|~]$ sudo adduser testuser (#新規ユーザー名の登録) [ec2-user|~]$ sudo passwd testuser (#新規ユーザー名のパスワード登録) パスワードを登録します
vimでユーザーに権限を追加する記述する$ sudo visudovimモードになります
## 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を選択し[保存]すると繋がるようになります
- 投稿日:2020-01-07T20:09:44+09:00
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.javaimport 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.javapackage 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.sqlset 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.javapackage 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.javapackage 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へ値を返すLoginActionpackage 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());
- 投稿日:2020-01-07T19:34:27+09:00
[AWS] EC2からRDS(MySQL)へ接続する方法
参考記事
Amazon RDS編~EC2インスタンスからDBインスタンスへの接続~
EC2からデータベースの中身をみるには
- EC2へssh接続する
- 接続するコマンドを入力する
- 設定したパスワードを入力する
のたった三つの手順です。
接続するコマンドとは
こちらです
mysql -h エンドポイント -P 3306 -u ユーザー名 -p データベース名各パラメータの確認方法
エンドポイント
- AWSへログイン
- サービスから「RDS」を選択
- "データベース"から接続したいデータベースを選択
- 【接続とセキュリティ欄】にてエンドポイントを確認
ユーザー名
1~3まではエンドポイントと同じ
4. 【設定】にてユーザー名を確認データベース名
エンドポイントやユーザー名を確認した際のデータベース名です
以上です
qiita初投稿でした。至らない点があると思いますが、ご指摘いただけたらと思います。
また、この記事がどなたかのお役に立てれば幸いです。
- 投稿日:2020-01-07T16:53:00+09:00
分析関数(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 1Mysql8で実行時エラー内容
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の便利な関数もあり今後機会があったら使いたいと思います。
参考サイト
https://wpchiraura.xyz/mysql-80-reserved-word-list/
https://qiita.com/kakuka4430/items/8c66e743800fcb8bc040
- 投稿日:2020-01-07T09:53:49+09:00
【 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の POINT!! 】
ER図を作成していきますが重要事項があります!
<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!
LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。
【 CRUDを生成してみる! 】
まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!
【 CRUD: 新しいプロジェクトを用意 】
最低限Laravelがインストールした状態 を準備します!
この時点ではまだLOGINは作らないように!
【 CRUD: ダウンロードファイルを確認しましょう 】
Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。
【 CRUD: 配置しおわったら「 Migrate 」しましょう 】
DBや.env設定など最低限の設定が終わっていたら
php artisan migrateで、テーブルを作成してください。
【 完成: ブラウザで確認しましょう! 】
http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
画面が古いままの場合(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
- 投稿日:2020-01-07T09:53:49+09:00
【 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の POINT!! 】
ER図を作成していきますが重要事項があります!
<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!
LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。
【 CRUDを生成してみる! 】
まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!
【 CRUD: 新しいプロジェクトを用意 】
最低限Laravelがインストールした状態 を準備します!
この時点ではまだLOGINは作らないように!
【 CRUD: ダウンロードファイルを確認しましょう 】
Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。
【 CRUD: 配置しおわったら「 Migrate 」しましょう 】
DBや.env設定など最低限の設定が終わっていたら
php artisan migrateで、テーブルを作成してください。
【 完成: ブラウザで確認しましょう! 】
http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
画面が古いままの場合(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
- 投稿日:2020-01-07T09:53:49+09:00
【 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の POINT!! 】
ER図を作成していきますが重要事項があります!
<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!
LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。
【 CRUDを生成してみる! 】
まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!
【 CRUD: 新しいプロジェクトを用意 】
最低限Laravelがインストールした状態 を準備します!
この時点ではまだLOGINは作らないように!
【 CRUD: ダウンロードファイルを確認しましょう 】
Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。
【 CRUD: 配置しおわったら「 Migrate 」しましょう 】
DBや.env設定など最低限の設定が終わっていたら
php artisan migrateで、テーブルを作成してください。
【 完成: ブラウザで確認しましょう! 】
http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
画面が古いままの場合(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
- 投稿日:2020-01-07T09:53:49+09:00
【 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の POINT!! 】
ER図を作成していきますが重要事項があります!
<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!
LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。
【 CRUDを生成してみる! 】
まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!
【 CRUD: 新しいプロジェクトを用意 】
【 CRUD: ダウンロードファイルを確認しましょう 】
Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。
【 CRUD: 配置しおわったら「 Migrate 」しましょう 】
DBや.env設定など最低限の設定が終わっていたら
php artisan migrateで、テーブルを作成してください。
【 完成: ブラウザで確認しましょう! 】
http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!
画面が古いままの場合(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
- 投稿日:2020-01-07T09:53:49+09:00
【 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の POINT!! 】
ER図を作成していきますが重要事項があります!
<<重要>>
主キーのAutoIncrementは どのテーブルも『 id 』 と固定すること!!
LaravelのEloquentModel を便利に使うためには、どのテーブルも 『 id 』 と固定するのが吉です。
理由は「 モデル名::find($id); 」と便利に使う場合は 主キーのAutoIncrement 『 id 』 名にしておかないと動作しないからです( Laravelを勉強してる人はなんとなく知ってることでしょうか )。
※ laravelDB.comのCRUDでも生成されるファイルは「 ○○○::find($id); 」を使ってるためそ!
※ laravelに最初から入っているテーブル「user」「password_resets」は作成しないこと(migrate時に上書きしてしまいます)
※慣れれば簡単ですが、少しだけ慣れる時間は必要ですね。
【 CRUDを生成してみる! 】
まずは、ER図を簡単に作ってみましょう!!
その後に右メニュー「 ER図のLoad/Save 」をクリックすると以下画面が表示されます。
CRUDを生成するボタンが新しく出来ています!!!
※まだデバッグが全て終わってないため「BETA」と書いてますが、クリックです!!!
【 CRUD: 新しいプロジェクトを用意 】
最低限Laravelがインストールした状態 を準備します!
この時点ではまだLOGINは作らないように!
【 CRUD: ダウンロードファイルを確認しましょう 】
Zip圧縮ファイルがダウンロードされるので、Zipを展開(解凍)して中を見てみましょう!
CRUDに必要なファイルが一式入っています。
ダウンロードしたファイル( 各フォルダ内のファイル )を移動しましょう!
※welcome.blade.phpはダウンロードしたファイルへのリンクが生成されているので、上書きしてください。
【 CRUD: 配置しおわったら「 Migrate 」しましょう 】
DBや.env設定など最低限の設定が終わっていたら
php artisan migrateで、テーブルを作成してください。
【 完成: ブラウザで確認しましょう! 】
http://localhost/ (URLは開発環境によって異なります) で確認しましょう!
画面の中央に今までなかったリンクが出来ています。あなたが作ったテーブルのCRUD画面へ遷移できますよ!!作成されたindex/show/editの画面
基本的な処理が最初から出来てます!捗りそうですね!
画面が古いままの場合(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













































