20210613のMySQLに関する記事は7件です。

Redshiftのvarcharについて

Redshiftのvarchar()でハマった Redshiftは、PostgreSQLと互換性があるが、文字型で異なる。 MySQL : 文字数 PostgreSQL : 文字数 Redshift : バイト数 MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.4.1 CHAR および VARCHAR 型 Redshiftの文字列はバイト数換算 - 山pの楽しいお勉強生活 文字型 - Amazon Redshift
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【個人開発】独学開始から2ヶ月の実務未経験者が、制作期間1ヶ月で作ったポートフォリオアプリ

0. はじめに 実務未経験・独学開始から約2ヶ月のいわゆる”駆け出しエンジニア”の私が、制作期間約1ヶ月でポートフォリオのWebアプリを0から作ってみたので、ご紹介させて頂きたいと思います。 昨今いろんな先輩方のポートフォリオ作成記事が多く存在しますが、この記事も同じ初学者の方にとって、何か参考になれば幸いです。  簡単に自己紹介 現在24歳、大学を卒業し金融系企業に勤める3年目OL Web・IT技術に惹かれて独学でのプログラミング学習を開始し、さらにプログラミングの虜になりエンジニアへの転身を決意 好きなマンガはワンピース(人生の教科書) 1.使用技術 フロントエンド:JavaScript / jQuery 3.6.0 / Ajax バックエンド:PHP 7.3.11 / Laravel 8.38.0 データベース:MySQL インフラ:Heroku バージョン管理:Git / GitHub 2.実際のアプリ紹介 タイトル「Golf Score Share」 URL(スマホ・タブレット専用) http://golf-score-share.herokuapp.com/golf ※heorku無料版では30分ごとに使っていなければwebサーバーが停止する(スリープ状態)ようなので、起動に時間がかかるかと思います。ご了承くださいm(__)m GitHub https://github.com/hinakonagao/golf-score-share アプリ概要 ゴルフコースを回る際、Web上でスコアカードを共有し、一緒に回るメンバーが各々のスマホから共有のスコアカードを見たり、スコアを書き込めるアプリです。 使い方 スコアカード作成者 1. start a new gameをタップします。 2. ゲーム名・パスワードを決め、start a new gameをタップしてスコアカードを作成します。※過去に使われているゲーム名は使えません。 3. スコアカード画面に遷移します。 スコアカードへの参加者 1. join the game をタップします。 2. 作成者が登録したのと同じゲーム名・パスワードを入力し、join the gameをタップしてスコアカードに参加します。※ゲーム名・パスワードの一致が確認できなけれなエラーになります。 3. スコアカード画面に遷移します。 スコアカード画面の使い方 ・作成者・参加者の誰でも、スコアカードに書き込むことが出来ます。 ・スコアカードに書き込んだ時点で、自動的にデータは更新されます。(Ajax通信でデータ保存) ・他の人が更新した内容を自分の画面に反映させる為には、updateボタンを押してください。 (例)Aさんがスコアカードにhole1のスコアを入力。→Bさんが自分のスマホのupdateボタンを押すと、Aさんが入力したスコアがBさんの画面にも反映する。 開発背景 私自身ゴルフが好きでコースを回ることがあり、こんなサービスが欲しいなと思っていました。ゴルフ仲間にも相談すると、「実現すれば是非使いたい」「便利で面白い」と賛同が得られ、ゴルフ好きには需要があると考えました。 競合のいないブルーオーシャンだった。(個人でスコアカードを保存するスマホアプリや、同じスマホアプリをダウンロードしている人同士でスコアカードを共有できるサービスはありますが、誰でも準備不要ですぐに使えるサービスは見つかりませんでした。) 3.実装した機能 スコアカード新規作成 スコアカードが作成された際、プレーヤーのデータを自動生成 スコアカードに参加(既に作成されたスコアカードと一致するゲーム名・パスワードを入力すると、そのスコアカードに参加できる) スコアカード編集(スコアカードに参加した人は誰でも編集可能) ※編集したデータはAjax通信でデータベースへ保存 機能は少なく、シンプルなアプリかと思います。 ですがそれまでudemyなどで学習した、基本的なCRUD機能を持ったアプリやSNSアプリとは全く構成が違うので、どういう仕組みにすれば作りたい機能を実現できるのか0から考える事が難しくもあり、機能を実現するプログラムの流れを自分なりに考えて調べて実装できた時は本当に楽しいと感じました。 4.サービス設計・ER図 スコアカードを作成するとRoomテーブルにレコードが作成されると同時に、RoomPlayerテーブルにプレーヤー4人のレコードが自動生成されます。 スコアカードのマス目一つ一つがinputタグになっており、RoomPlayerテーブルへデータをPOSTする窓口であると同時に、データベースに保存されているスコアを表示する機能も兼ねています。 テーブル名 説明 Room スコアカード管理 RoomPlayer スコアカードに紐づくプレーヤーの名前・スコアを管理 5.工夫したこと バックエンド SQL発行回数を最小限に 〈当初〉RoomPlayerテーブルに4つのレコード(プレーヤー4人)を生成する際、1レコード生成するにあたり1回SQLを発行していました。 〈改善〉配列とinsert()を使って一気にデータ保存することで、SQL発行回数を4回→1回に抑えました。 * スコアカード更新の際の通信削減 〈当初〉スコアカードの値をひとつ変更する毎に、スコアカードのカラム全てについてデータベースの値を更新する処理を行なっていました。 〈改善〉フォームのinputタグにdata属性を指定し、jQueryで変更のあったカラムのみを取得することで、変更のあったカラムのみデータベースを更新する処理を可能にしました。 * Ajaxを使用した非同期通信によるデータ保存 スコアカードを更新した際は、Ajaxでデータベースへデータを保存するようにしました。 フロントエンド(UI) スコアカードの名前入力欄には、「名前を変更」という背景文字を表示 この点は、以下のようにユーザーの声を反映して改善を繰り返してきました。 ①プレーヤーのレコード生成時に、「プレーヤー1」「プレーヤー2」…というように名前の初期値をデータベースへ登録する。 →プレーヤー名を変更できることに気づいてもらえなかった。 ②データベースへ登録する初期値を「名前を変更」にする。 →名前を変更する際、一度消さなければいけないのが面倒 ③プレーヤーのレコード生成時、名前の初期値はnullとする。代わりにHTMLのinputタグのplaceholder属性で、「名前を変更」と背景文字を設定する。 スコアカードの表示方法 まずスコアカード上にRoomPlayerテーブルの該当レコード4つをforeachで表示しまし、スコアカードの縦横をCSSで入れ替える事で、スマホで見やすい縦向きのスコアカードを実現しました。 6.開発の進め方 このアプリ開発に取り組む前に、udemyの教材でLaravel・PHP・MySQLについて学びました。 【2日でできる】はじめての PHP 7 x Laravel 6 入門 https://www.udemy.com/course/php7study/ PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門 https://www.udemy.com/course/php7basic/ これらでMVCモデルの全体像やPHP・MySQLの基本を勉強し、あとは作りながら、必要なことを学ぶというやり方で進めました。 つまり、実装する機能(アウトプット)をまず決めて、そのために必要な知識を勉強(インプット)するということです。 その際によく活用したサイトも紹介させていただきます。 Laravel学習帳 https://laraweb.net/ ReaDouble https://readouble.com あとは公式ドキュメントや、偉大な先輩方のQiita記事もたくさん参考にさせていただきました。 udemyで学習する際には公式ドキュメントなどほとんど読んだ事がありませんでしたが、しっかり読んでみると公式ドキュメントが一番分かりやすかったりして、勉強になりました。 7.まだできていない・これからやりたいこと まだまだ出来ていない事はたくさんあります? また、開発を進める途中で実装したいなと思う機能もどんどん出てきました。 PHPUnitでのテスト AWSでデプロイ デバッグツールの活用(xdebug) Https化 ログイン・ユーザー登録機能を追加し、過去のスコアカードを振り返れるようにする。 現在はスコアカードを更新する際、変更したデータの保存のみAjaxで行なっているが、他の人のスコアカードへの反映もAjaxで実装する。 RoomPlayerテーブルにTotalカラムを追加する。 コンペ機能を追加する。(複数組でラウンドを回る際、他の組みのスコア進捗も見られるように) 前半後半の9ホールずつ表示し、タブで切り替えられるSPAにする。 8.さいごに 初めての個人開発だったので、どのぐらい時間が掛かるものなのか、目標設定の見当もつきませんでした。 そこでまず1ヶ月を目安として、あれこれと欲張らず最低限の機能だけでも「やり切る」ことを重視して開発に取り組みました。 結果、メイン機能は実装を終え無事デプロイまで辿り着きました。 先述の通り、まだまだ出来ていない事・やりたい事はあるので、これから少しずつ改修していきたいなと思います。 開発の進め方については、実装する機能(アウトプット)をまず決めて、そのために必要な知識を勉強(インプット)する方法は、やって良かった事と思っていて、これは是非同じ初学者の方々にもおすすめしたいです。 正直、udemyで作ったSNS風アプリをアレンジする…というようなことから始めれば良かったと思うこともあり、何度も挫けそうになりました。 ですが、udemyを真似て作るのとは比べ物にならないほど、自分で0から考えて調べてコードを書くと理解が深まりました。何より、自分の力で書いたプログラムが動く瞬間は、嬉しくて楽しくてニヤけずにはいられませんでした(笑) 今後の最優先課題 MVCモデルやプログラムの流れについては少しだけ理解が出来たかなと思う一方、Webの根本的な技術・仕組みについてもっと知らなければいけないという課題を感じたので、勉強していこうと思います。 この記事について間違っている箇所があれば、ご指摘頂けると幸いです。 拙い文章でしたが、最後までご覧いただき本当にありがとうございました!!?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【個人開発】独学開始から2ヶ月の実務未経験者が、制作期間1ヶ月で作ったポートフォリオアプリについて

0. はじめに 実務未経験・独学開始から約2ヶ月のいわゆる”駆け出しエンジニア”の私が、制作期間約1ヶ月でポートフォリオのWebアプリを0から作ってみたので、ご紹介させて頂きたいと思います。 昨今いろんな先輩方のポートフォリオ作成記事が多く存在しますが、この記事も同じ初学者の方にとって、何か参考になれば幸いです。  簡単に自己紹介 現在24歳、大学を卒業し金融系企業に勤める3年目OL Web・IT技術に惹かれて独学でのプログラミング学習を開始し、さらにプログラミングの虜になりエンジニアへの転身を決意 好きなマンガはワンピース(人生の教科書) 1.使用技術 フロントエンド:JavaScript / jQuery 3.6.0 / Ajax バックエンド:PHP 7.3.11 / Laravel 8.38.0 データベース:MySQL インフラ:Heroku バージョン管理:Git / GitHub 2.実際のアプリ紹介 タイトル「Golf Score Share」 URL(スマホ・タブレット専用) http://golf-score-share.herokuapp.com/golf ※heorku無料版では30分ごとに使っていなければwebサーバーが停止する(スリープ状態)ようなので、起動に時間がかかるかと思います。ご了承くださいm(__)m GitHub https://github.com/hinakonagao/golf-score-share アプリ概要 ゴルフコースを回る際、Web上でスコアカードを共有し、一緒に回るメンバーが各々のスマホから共有のスコアカードを見たり、スコアを書き込めるアプリです。 使い方 スコアカード作成者 1. start a new gameをタップします。 2. ゲーム名・パスワードを決め、start a new gameをタップしてスコアカードを作成します。※過去に使われているゲーム名は使えません。 3. スコアカード画面に遷移します。 スコアカードへの参加者 1. join the game をタップします。 2. 作成者が登録したのと同じゲーム名・パスワードを入力し、join the gameをタップしてスコアカードに参加します。※ゲーム名・パスワードの一致が確認できなけれなエラーになります。 3. スコアカード画面に遷移します。 スコアカード画面の使い方 ・作成者・参加者の誰でも、スコアカードに書き込むことが出来ます。 ・スコアカードに書き込んだ時点で、自動的にデータは更新されます。(Ajax通信でデータ保存) ・他の人が更新した内容を自分の画面に反映させる為には、updateボタンを押してください。 (例)Aさんがスコアカードにhole1のスコアを入力。→Bさんが自分のスマホのupdateボタンを押すと、Aさんが入力したスコアがBさんの画面にも反映する。 開発背景 私自身ゴルフが好きでコースを回ることがあり、こんなサービスが欲しいなと思っていました。ゴルフ仲間にも相談すると、「実現すれば是非使いたい」「便利で面白い」と賛同が得られ、ゴルフ好きには需要があると考えました。 競合のいないブルーオーシャンだった。(個人でスコアカードを保存するスマホアプリや、同じスマホアプリをダウンロードしている人同士でスコアカードを共有できるサービスはありますが、誰でも準備不要ですぐに使えるサービスは見つかりませんでした。) 3.実装した機能 スコアカード新規作成 スコアカードが作成された際、プレーヤーのデータを自動生成 スコアカードに参加(既に作成されたスコアカードと一致するゲーム名・パスワードを入力すると、そのスコアカードに参加できる) スコアカード編集(スコアカードに参加した人は誰でも編集可能) ※編集したデータはAjax通信でデータベースへ保存 機能は少なく、シンプルなアプリかと思います。 ですがそれまでudemyなどで学習した、基本的なCRUD機能を持ったアプリやSNSアプリとは全く構成が違うので、どういう仕組みにすれば作りたい機能を実現できるのか0から考える事が難しくもあり、機能を実現するプログラムの流れを自分なりに考えて調べて実装できた時は本当に楽しいと感じました。 4.サービス設計・ER図 スコアカードを作成するとRoomテーブルにレコードが作成されると同時に、RoomPlayerテーブルにプレーヤー4人のレコードが自動生成されます。 スコアカードのマス目一つ一つがinputタグになっており、RoomPlayerテーブルへデータをPOSTする窓口であると同時に、データベースに保存されているスコアを表示する機能も兼ねています。 テーブル名 説明 Room スコアカード管理 RoomPlayer スコアカードに紐づくプレーヤーの名前・スコアを管理 5.工夫したこと バックエンド SQL発行回数を最小限に 〈当初〉RoomPlayerテーブルに4つのレコード(プレーヤー4人)を生成する際、1レコード生成するにあたり1回SQLを発行していました。 〈改善〉配列とinsert()を使って一気にデータ保存することで、SQL発行回数を4回→1回に抑えました。 * スコアカード更新の際の通信削減 〈当初〉スコアカードの値をひとつ変更する毎に、スコアカードのカラム全てについてデータベースの値を更新する処理を行なっていました。 〈改善〉フォームのinputタグにdata属性を指定し、jQueryで変更のあったカラムのみを取得することで、変更のあったカラムのみデータベースを更新する処理を可能にしました。 * Ajaxを使用した非同期通信によるデータ保存 スコアカードを更新した際は、Ajaxでデータベースへデータを保存するようにしました。 フロントエンド(UI) スコアカードの名前入力欄には、「名前を変更」という背景文字を表示 この点は、以下のようにユーザーの声を反映して改善を繰り返してきました。 ①プレーヤーのレコード生成時に、「プレーヤー1」「プレーヤー2」…というように名前の初期値をデータベースへ登録する。 →プレーヤー名を変更できることに気づいてもらえなかった。 ②データベースへ登録する初期値を「名前を変更」にする。 →名前を変更する際、一度消さなければいけないのが面倒 ③プレーヤーのレコード生成時、名前の初期値はnullとする。代わりにHTMLのinputタグのplaceholder属性で、「名前を変更」と背景文字を設定する。 スコアカードの表示方法 まずスコアカード上にRoomPlayerテーブルの該当レコード4つをforeachで表示しまし、スコアカードの縦横をCSSで入れ替える事で、スマホで見やすい縦向きのスコアカードを実現しました。 6.開発の進め方 このアプリ開発に取り組む前に、udemyの教材でLaravel・PHP・MySQLについて学びました。 【2日でできる】はじめての PHP 7 x Laravel 6 入門 https://www.udemy.com/course/php7study/ PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門 https://www.udemy.com/course/php7basic/ これらでMVCモデルの全体像やPHP・MySQLの基本を勉強し、あとは作りながら、必要なことを学ぶというやり方で進めました。 つまり、実装する機能(アウトプット)をまず決めて、そのために必要な知識を勉強(インプット)するということです。 その際によく活用したサイトも紹介させていただきます。 Laravel学習帳 https://laraweb.net/ ReaDouble https://readouble.com あとは公式ドキュメントや、偉大な先輩方のQiita記事もたくさん参考にさせていただきました。 udemyで学習する際には公式ドキュメントなどほとんど読んだ事がありませんでしたが、しっかり読んでみると公式ドキュメントが一番分かりやすかったりして、勉強になりました。 7.まだできていない・これからやりたいこと まだまだ出来ていない事はたくさんあります? また、開発を進める途中で実装したいなと思う機能もどんどん出てきました。 PHPUnitでのテスト AWSでデプロイ デバッグツールの活用(xdebug) Https化 ログイン・ユーザー登録機能を追加し、過去のスコアカードを振り返れるようにする。 現在はスコアカードを更新する際、変更したデータの保存のみAjaxで行なっているが、他の人のスコアカードへの反映もAjaxで実装する。 RoomPlayerテーブルにTotalカラムを追加する。 コンペ機能を追加する。(複数組でラウンドを回る際、他の組みのスコア進捗も見られるように) 前半後半の9ホールずつ表示し、タブで切り替えられるSPAにする。 8.さいごに 初めての個人開発だったので、どのぐらい時間が掛かるものなのか、目標設定の見当もつきませんでした。 そこでまず1ヶ月を目安として、あれこれと欲張らず最低限の機能だけでも「やり切る」ことを重視して開発に取り組みました。 結果、メイン機能は実装を終え無事デプロイまで辿り着きました。 先述の通り、まだまだ出来ていない事・やりたい事はあるので、これから少しずつ改修していきたいなと思います。 開発の進め方については、実装する機能(アウトプット)をまず決めて、そのために必要な知識を勉強(インプット)する方法は、やって良かった事と思っていて、これは是非同じ初学者の方々にもおすすめしたいです。 udemyを真似て作るのとは比べ物にならないほど、自分で0から考えて調べてコードを書くと理解が深まりました。何より、自分の力で書いたプログラムが動く瞬間は、嬉しくて楽しくてニヤけずにはいられませんでした(笑) 今後の最優先課題 MVCモデルやプログラムの流れについては少しだけ理解が出来たかなと思う一方、Webの根本的な技術・仕組みについてもっと知らなければいけないという課題を感じたので、勉強していこうと思います。 この記事について間違っている箇所があれば、ご指摘頂けると幸いです。 拙い文章でしたが、最後までご覧いただき本当にありがとうございました!!?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS RDSのMySQLデータベース構築

参考サイト まず、本件はこちらの方々の記事のいいところ取りです。 皆様の記事がなければ、ここまでできませんでした。 ありがとうございます。 https://dev.classmethod.jp/articles/sales-create-ec2/ https://dev.classmethod.jp/articles/sales-rds-ec2-session/ https://qiita.com/Takao_/items/a55c85996dd6a8a8bb4c では、はじめます。 VPCまわり VPC作成 VPCクリック VPC作成 VPCの設定 名前タグ:好きな名前 IPv4 CIDR ブロック : 10.0.0.0/16を利用 サブネット作成 [サブネット] > [サブネットの作成] VPC ID : さっき作ったVPC サブネット名:任意の名前 アベイラビリティーゾーン:任意の場所 IPv4 CIDR ブロック: 10.0.0.0/24 ルートテーブル作成 [ルートテーブル] > [ルートテーブルを作成] ルートテーブル設定 名前:任意の名前 VPC:  さっき作ったVPC インターネットゲートウェイ作成 [インターネットゲートウェイ] > [インターネットゲートウェイの作成] 名前タグ:任意 アクション > VPCとアタッチ アタッチするVPSを選ぶ [ルートテーブル]  該当のルートテーブルをチェック [ルートを編集] [add Route] 送信先: 0.0.0.0/0 TARGET: 作成したIGWを選択 サブネットにルートテーブルを紐付け サブネット  > さっき作ったサブネットをチェック > ルートテーブルタブ > ルートテーブルの関連付けを編集 今回作ったルートテーブルを選択 EC2構築 コンソールからEC2の管理画面 > インスタンス インスタンスを起動 AMIの選択。 無料利用枠にチェック > Linux2 AMI(64bit) 任意だけど タグの追加 一番下は [すべてのICMP - IPv4] 起動 EC2へのSSH接続の確認 インスタンス状態が 実行中 になってから。 IPv4パブリックIPをコピー ターミナル画面 ping + IPアドレス 入力し、 次の画面が表示されれば接続準備はOK $ ping 13.230.153.4 PING 13.230.153.4 (13.230.153.4): 56 data bytes 64 bytes from 13.230.153.4: icmp_seq=0 ttl=235 time=71.973 ms 64 bytes from 13.230.153.4: icmp_seq=1 ttl=235 time=58.444 ms 64 bytes from 13.230.153.4: icmp_seq=2 ttl=235 time=98.557 ms 64 bytes from 13.230.153.4: icmp_seq=3 ttl=235 time=308.163 ms 64 bytes from 13.230.153.4: icmp_seq=4 ttl=235 time=186.163 ms SSHの接続確認 先ほど作成したpemキーを.sshフォルダに移動 次のコマンドの手順で入力し、次の結果が表示されればEC2への接続が完了 $ mv Downloads/EC2-test.pem .ssh/ #pemキーを.sshフォルダに移動 $ sudo chmod 600 ~/.ssh/EC2-test.pem  #指定している鍵の権限が広すぎるため変更 $ ssh -i ~/.ssh/EC2-test.pem ec2-user@13.230.153.4  #pemキーとパブリックIPを使用 The authenticity of host '13.230.153.4 (13.230.153.4)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])? #ここは yesで回答 (未知のホスト鍵の場合こんな質問がある) __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-0-200 ~]$ RDS設定 DB用のセキュリティグループの作成 DBへのアクセスは既存のEC2のみアクセスするように設定。 [EC2]>[セキュリティグループ]>[セキュリティグループの作成] セキュリティグループ名、説明、EC2があるVPCを設定 インバウンドルール ・タイプ: MYSQL/Aurora ・ソース: EC2のセキュリティグループ DB用のサブネットの作成 RDSを利用するには、異るAZに属するサブネット2つを用意する必要があるので、DB用のサブネットを2つ作成し、この2つのサブネットは「1a」「1c」のAZを指定。 CIDRブロックの範囲は使用済みの数値は指定できない。 VPC > サブネット > サブネットを作成 AZ(1a)のサブネットを作る AZ(1c)のサブネットを作る DB用のサブネットグループの作成 RDS > サブネットグループ > DB サブネットグループの作成 名前、説明、VPCやサブネットはEC2のあるところを選択し作成します。 データベースの作成 RDS > データベース > データベースの作成 あとはデフォルトどおりに 一番下にある「データベースの作成」をクリック RDSへ接続 まずEC2に接続 $ssh -i ~/.ssh/EC2Testkey.pem ec2-user@13.230.153.4  #EC2接続 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-0-200 ~]$ sudo yum update -y #EC2接続時に最初に実行 [ec2-user@ip-10-0-0-200 ~]$ sudo yum install mysql -y #MySQLのインストール 完了しました! [ec2-user@ip-10-0-0-200 ~]$ AWSのコンソール画面に戻り、作成したRDSのエンドポイントをコピーします。 $ mysql -h aws-test.cl0w7wsj1gla.ap-northeast-1.rds.amazonaws.com -u admin -p #RDSのエンドポイントとRDS作成時のマスターユーザ名(admin)を使用 Enter password:〇〇〇〇〇〇〇〇 #RDS作成時のパスワード(いつものパスワードではないので注意) Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.20 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>  #exitで抜けます 以上、MySQL構築できました! こんな感じでデータベースを作ります。 $ SET time_zone = 'Asia/Tokyo'; $ CREATE DATABASE project; $ USE project; $ CREATE TABLE users (id INT AUTO_INCREMENT, userId TEXT, branch TEXT, name TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id)) DEFAULT CHARSET=utf8; $ SHOW tables; +-------------------+ | Tables_in_project | +-------------------+ | users | +-------------------+ 1 row in set (0.01 sec) $ DESCRIBE users; +------------+-----------+------+-----+-------------------+-----------------------------------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------+------+-----+-------------------+-----------------------------------------------+ | id | int | NO | PRI | NULL | auto_increment | | userId | text | YES | | NULL | | | branch | text | YES | | NULL | | | name | text | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | +------------+-----------+------+-----+-------------------+-----------------------------------------------+ $ INSERT INTO users (userID, branch, name) values ('000000','本店','山田太郎'); $ select * from users; +----+--------+--------+--------------+---------------------+---------------------+ | id | userId | branch | name | created_at | updated_at | +----+--------+--------+--------------+---------------------+---------------------+ | 1 | 000000 | 本店 | 山田太郎 | 2021-06-13 05:11:59 | 2021-06-13 05:11:59 | +----+--------+--------+--------------+---------------------+---------------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでAWS RDSのMySQLデータベース構築したよ

参考サイト まず、本件はこちらの方々の記事のいいところ取りです。 皆様の記事がなければ、ここまでできませんでした。 ありがとうございます。 AWSで基本的なサーバー環境を構築してみました。 【初心者向け】営業がVPC作成からEC2インスタンス構築までやってみました では、はじめます。 VPCまわり VPC作成 VPCクリック VPC作成 VPCの設定 名前タグ:好きな名前 IPv4 CIDR ブロック : 10.0.0.0/16を利用 サブネット作成 [サブネット] > [サブネットの作成] VPC ID : さっき作ったVPC サブネット名:任意の名前 アベイラビリティーゾーン:任意の場所 IPv4 CIDR ブロック: 10.0.0.0/24 ルートテーブル作成 [ルートテーブル] > [ルートテーブルを作成] ルートテーブル設定 名前:任意の名前 VPC:  さっき作ったVPC インターネットゲートウェイ作成 [インターネットゲートウェイ] > [インターネットゲートウェイの作成] 名前タグ:任意 アクション > VPCとアタッチ アタッチするVPSを選ぶ [ルートテーブル]  該当のルートテーブルをチェック [ルートを編集] [add Route] 送信先: 0.0.0.0/0 TARGET: 作成したIGWを選択 サブネットにルートテーブルを紐付け サブネット  > さっき作ったサブネットをチェック > ルートテーブルタブ > ルートテーブルの関連付けを編集 今回作ったルートテーブルを選択 EC2構築 コンソールからEC2の管理画面 > インスタンス インスタンスを起動 AMIの選択。 無料利用枠にチェック > Linux2 AMI(64bit) 任意だけど タグの追加 一番下は [すべてのICMP - IPv4] 起動 EC2へのSSH接続の確認 インスタンス状態が 実行中 になってから。 IPv4パブリックIPをコピー ターミナル画面 ping + IPアドレス 入力し、 次の画面が表示されれば接続準備はOK $ ping 13.230.153.4 PING 13.230.153.4 (13.230.153.4): 56 data bytes 64 bytes from 13.230.153.4: icmp_seq=0 ttl=235 time=71.973 ms 64 bytes from 13.230.153.4: icmp_seq=1 ttl=235 time=58.444 ms 64 bytes from 13.230.153.4: icmp_seq=2 ttl=235 time=98.557 ms 64 bytes from 13.230.153.4: icmp_seq=3 ttl=235 time=308.163 ms 64 bytes from 13.230.153.4: icmp_seq=4 ttl=235 time=186.163 ms SSHの接続確認 先ほど作成したpemキーを.sshフォルダに移動 次のコマンドの手順で入力し、次の結果が表示されればEC2への接続が完了 $ mv Downloads/EC2-test.pem .ssh/ #pemキーを.sshフォルダに移動 $ sudo chmod 600 ~/.ssh/EC2-test.pem  #指定している鍵の権限が広すぎるため変更 $ ssh -i ~/.ssh/EC2-test.pem ec2-user@13.230.153.4  #pemキーとパブリックIPを使用 The authenticity of host '13.230.153.4 (13.230.153.4)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no/[fingerprint])? #ここは yesで回答 (未知のホスト鍵の場合こんな質問がある) __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-0-200 ~]$ RDS設定 DB用のセキュリティグループの作成 DBへのアクセスは既存のEC2のみアクセスするように設定。 [EC2]>[セキュリティグループ]>[セキュリティグループの作成] セキュリティグループ名、説明、EC2があるVPCを設定 インバウンドルール ・タイプ: MYSQL/Aurora ・ソース: EC2のセキュリティグループ DB用のサブネットの作成 RDSを利用するには、異るAZに属するサブネット2つを用意する必要があるので、DB用のサブネットを2つ作成し、この2つのサブネットは「1a」「1c」のAZを指定。 CIDRブロックの範囲は使用済みの数値は指定できない。 VPC > サブネット > サブネットを作成 AZ(1a)のサブネットを作る AZ(1c)のサブネットを作る DB用のサブネットグループの作成 RDS > サブネットグループ > DB サブネットグループの作成 名前、説明、VPCやサブネットはEC2のあるところを選択し作成します。 データベースの作成 RDS > データベース > データベースの作成 あとはデフォルトどおりに 一番下にある「データベースの作成」をクリック RDSへ接続 まずEC2に接続 $ssh -i ~/.ssh/EC2Testkey.pem ec2-user@13.230.153.4  #EC2接続 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-0-200 ~]$ sudo yum update -y #EC2接続時に最初に実行 [ec2-user@ip-10-0-0-200 ~]$ sudo yum install mysql -y #MySQLのインストール 完了しました! [ec2-user@ip-10-0-0-200 ~]$ AWSのコンソール画面に戻り、作成したRDSのエンドポイントをコピーします。 $ mysql -h aws-test.XXXXXXXX.ap-northeast-1.rds.amazonaws.com -u admin -p #RDSのエンドポイントとRDS作成時のマスターユーザ名(admin)を使用 Enter password:〇〇〇〇〇〇〇〇 #RDS作成時のパスワード(いつものパスワードではないので注意) Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.20 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>  #exitで抜けます 以上、MySQL構築できました! こんな感じでデータベースを作ります。 $ SET time_zone = 'Asia/Tokyo'; $ CREATE DATABASE project; $ USE project; $ CREATE TABLE users (id INT AUTO_INCREMENT, userId TEXT, branch TEXT, name TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id)) DEFAULT CHARSET=utf8; $ SHOW tables; +-------------------+ | Tables_in_project | +-------------------+ | users | +-------------------+ 1 row in set (0.01 sec) $ DESCRIBE users; +------------+-----------+------+-----+-------------------+-----------------------------------------------+ | Field | Type | Null | Key | Default | Extra | +------------+-----------+------+-----+-------------------+-----------------------------------------------+ | id | int | NO | PRI | NULL | auto_increment | | userId | text | YES | | NULL | | | branch | text | YES | | NULL | | | name | text | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | +------------+-----------+------+-----+-------------------+-----------------------------------------------+ $ INSERT INTO users (userID, branch, name) values ('000000','本店','山田太郎'); $ select * from users; +----+--------+--------+--------------+---------------------+---------------------+ | id | userId | branch | name | created_at | updated_at | +----+--------+--------+--------------+---------------------+---------------------+ | 1 | 000000 | 本店 | 山田太郎 | 2021-06-13 05:11:59 | 2021-06-13 05:11:59 | +----+--------+--------+--------------+---------------------+---------------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SQLSTATE[HY000]: General error: 1364 Field 'body' doesn't have a default value

前提・環境 ・記事投稿処理をした際に遭遇したエラーになります。 ・Docker ・Docker-compose ・MySQL8 ・Laravel6.0 ・PHP7.4 エラー問題 記事投稿ボタンをクリックすると、、下記のエラーに遭遇しました。。 SQLSTATE[HY000]: General error: 1364 Field 'body' doesn't have a default value 解決方法 日本語訳に訳してみるとこのような訳になります!! SQLSTATE [HY000]:一般エラー:1364フィールド「body」にデフォルト値がありません しっかりArticlController.phpを確認すると、 $article->body = $request->body;が抜けていました。。(すごく凡ミスですね。) ArticleController.php // 記事投稿処理の実装 public function store(ArticleRequest $request, Article $article) { $article->title = $request->title; $article->user_id = $request->user()->id; $article->save(); return redirect()->route('articles.index'); } 下記に記入後、解決です! ArticleController.php // 記事投稿処理の実装 public function store(ArticleRequest $request, Article $article) { $article->title = $request->title; $article->body = $request->body; $article->user_id = $request->user()->id; $article->save(); return redirect()->route('articles.index'); }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

'/tmp/mysql.sock' (2)エラー解決方法

環境 Rails6.1.3 Ruby3.0.1 MySQL8.0.23 エラー内容 時々、 ActiveRecord::ConnectionNotEstablished (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)): というソケットに接続できないエラーが出ることがあります。 原因 原因の一つとして考えられるのが、Mysqlサーバーが起動していないことです。 MySQLサーバーの状態を確認してみます。 % mysql.server status Permission denied ERROR! MySQL is not running, but PID file exists PIDファイルはあるが、サーバーが動いていないと表示されました。 PIDとはプロセスIDのことで、プロセスを管理するための識別子のことです。実際にファイルの中身をみてみると整数が割り当てられていると思います。 PIDファイルもない場合は、ファイルを作成することになります。 解決方法 サーバーを動かすために以下のコマンドを入力します。 % sudo mysql.server start Starting MySQL SUCCESS! これでもうまくいかない時は、 % sudo mysql.server restart も試してみてください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む