- 投稿日:2019-04-11T23:25:50+09:00
初心者teamlabのオンラインスキルアップ課題step1をやってみた(コード初心者向け記事)
dockerって何とか、DBとの連携でコード上で具体的にどうするのとか、初心者的にはイメージがつかないほど良くわからないので、teamlabさんのオンラインスキルアップ課題をやってみた。
こちらから課題にアクセスします。
STEP1の内容は下記のようになっています。
- インターネットのしくみ
- WEBサーバについて
- HTMLとCSSについて 4-a. 【Windows】Dockerと開発環境の作り方 4-b. 【Mac】Dockerと開発環境の作り方
- PHPを書いてみる
- PHPでGET/POSTをやってみる
- データベースについて
- SQLを書いてみる
- PHPでデータベースを操作してみる
- 10. GitとGitHubについて
4-b:【Mac】Dockerと開発環境の作り方
1,2,3はわかった気になってとりあえず進めて、まずは4のDockerのセットアップから入ります。
docker-compose -vdockerがちゃんとインストールされているか上記のコマンドで確かめます。
docker-compose up -dteamlabさんのサイトからダウンロードしたフォルダに遷移して、上のコマンドを叩くとコンテナを作成して、起動します。
※Dockerのコマンドに関してはこちら
なんかいろいろエラーは起きたのですが、無事?doneになっています。
「skillup-php-step1-master」をダウンロードして解凍したフォルダに移動したいけど移動できない!っていう場合にですが、フォルダさえ探せれば、フォルダごとターミナルに落としてあげることでpathが表示されるので、あとは先頭にcdつけるだけでフォルダに移動できるはずです。1-6:PHPでGET/POSTをやってみる
1-5は普通にコピペでコード貼って、Dockerで立ち上げたlocalhostにアクセスするだけなので、はしおります。
まず、エディターがない人は適当なエディターをインストールしてください。
(ぼくはsublimeをつかっています。)とりあえず、課題のpostだけやってみました
index.html1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <p>コメントしてください。</p> <form method="POST" action="index.php"> <input name="comment" /> <input type="submit" value="送信" /> </form> </body> </html>php1
<?php //commentがPOSTされているなら if(isset($_POST["comment"])){ //エスケープしてから表示 $comment = htmlspecialchars($_POST["comment"]); print("あなたのコメントは「 ${comment} 」です。"); } else { ?>最後にこの課題があります。
[課題]送信する内容を変更してみよう
掲示板に必要な情報としては少なくとも名前と本文が必要です。名前も送信し、受け取るように変更してみましょう。余力のある人はタイトル・文字色・メールアドレスなども追加してみましょう。なんかとりえあえず複数のデータを送ってみてほしいとのことだったので、僕は次のようにしました。
index.html2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <style> .cell{ padding: 1px 15px; margin: 1px 30px; line-height: 0.1; } </style> <h1>「同窓会の参加有無」</h1> <div class=cell> <form method="POST" action="index.php"> <ol> <li><p>氏名:<input name="name" /></p></li> <li><p>メール:<input name="mail" /></p></li> <li><p>参加可否:<input name="comment" /></p></li> <input type="submit" value="送信" style= "width:150px;,height:100px;"/> </div> </form> </body> </html>php 2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <?php //commentがPOSTされているなら if(isset($_POST["mail"],$_POST["name"],$_POST["comment"])){ //エスケープしてから表示 $mails = htmlspecialchars($_POST["mail"]); $names = htmlspecialchars($_POST["name"]); $comments = htmlspecialchars($_POST["comment"]); print("あなたの入力した情報は以下になります。<br/>"); print("名前:${mails}<br/>"); print("メール:${names}<br/>"); print("参加有無:${comments}<br/>"); }else{ print("情報の入力が正しくありません。"); } ?> </body> </html>震えるくらいクソコードであることはなんとなくですが、自覚してます....
STEP1-9.PHPでデータベースを操作してみる
これやってみたのですが、すごい勉強になりました。
phpでデータベースをこうやっていじるんだ!みたいなのがなんとなくですが理解できます。こちらも特に説明を読んでいけば問題なく進めました。
唯一初心者目線でひっかかりそうなのが、データベースにアクセスするときに自分でつけたデータベースの名前じゃないと、エラーになるので注意が必要。
僕の場合はdbname=「TEST」ではなくて「text」でしたので最初はエラってました。実行結果1
先程はDBのname,textを全て表示したが今度はJohnにしぼったものだけを表示させます。
実行コード
<?php $dsn = 'pgsql:dbname=test;host=pgsql;port=5432'; $user = 'postgres'; $pass = 'example'; try { // DBに接続する $dbh = new PDO($dsn, $user, $pass); //$query_result = $dbh->query('SELECT * FROM test_comments'); $sth_select = $dbh->prepare('SELECT * FROM test_comments WHERE name = ?'); // prepareメソッド(INSERT)最下部でinsertするname/textを定義 $sth = $dbh->prepare('INSERT INTO test_comments (name, text) VALUES (?, ?)'); // DBを切断する $dbh = null; } catch (PDOException $e) { // 接続にエラーが発生した場合ここに入る print "DB ERROR: " . $e->getMessage() . "<br/>"; die(); } ?> <?php //これでdbのnameとtextに新たに文字列が加わる $name = "John"; $text = "Power to the People"; $sth->execute(array($name, $text)); ?> <?php $name = "John"; $sth_select->execute(array($name)); //実行したクエリから実行結果を取得している $prepare_result = $sth_select->fetchAll(); foreach($prepare_result as $row) { print $row["name"] . ": " . $row["text"] . "<br/>"; } $sth_select->execute(array($name)); ?>実行結果2
とりあえず、無事表示されました。
次は気が向いたらSTEP2をやります。
- 投稿日:2019-04-11T23:25:50+09:00
初心者がteamlabのオンラインスキルアップ課題step1をやってみた(コード初心者向け記事)
dockerって何とか、DBとの連携でコード上で具体的にどうするのとか、初心者的にはイメージがつかないほど良くわからないので、teamlabさんのオンラインスキルアップ課題をやってみた。
こちらから課題にアクセスします。
STEP1の内容は下記のようになっています。
- インターネットのしくみ
- WEBサーバについて
- HTMLとCSSについて 4-a. 【Windows】Dockerと開発環境の作り方 4-b. 【Mac】Dockerと開発環境の作り方
- PHPを書いてみる
- PHPでGET/POSTをやってみる
- データベースについて
- SQLを書いてみる
- PHPでデータベースを操作してみる
- 10. GitとGitHubについて
4-b:【Mac】Dockerと開発環境の作り方
1,2,3はわかった気になってとりあえず進めて、まずは4のDockerのセットアップから入ります。
docker-compose -vdockerがちゃんとインストールされているか上記のコマンドで確かめます。
docker-compose up -dteamlabさんのサイトからダウンロードしたフォルダに遷移して、上のコマンドを叩くとコンテナを作成して、起動します。
※Dockerのコマンドに関してはこちら
なんかいろいろエラーは起きたのですが、無事?doneになっています。
「skillup-php-step1-master」をダウンロードして解凍したフォルダに移動したいけど移動できない!っていう場合にですが、フォルダさえ探せれば、フォルダごとターミナルに落としてあげることでpathが表示されるので、あとは先頭にcdつけるだけでフォルダに移動できるはずです。1-6:PHPでGET/POSTをやってみる
1-5は普通にコピペでコード貼って、Dockerで立ち上げたlocalhostにアクセスするだけなので、はしおります。
まず、エディターがない人は適当なエディターをインストールしてください。
(ぼくはsublimeをつかっています。)とりあえず、課題のpostだけやってみました
index.html1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <p>コメントしてください。</p> <form method="POST" action="index.php"> <input name="comment" /> <input type="submit" value="送信" /> </form> </body> </html>php1
<?php //commentがPOSTされているなら if(isset($_POST["comment"])){ //エスケープしてから表示 $comment = htmlspecialchars($_POST["comment"]); print("あなたのコメントは「 ${comment} 」です。"); } else { ?>最後にこの課題があります。
[課題]送信する内容を変更してみよう
掲示板に必要な情報としては少なくとも名前と本文が必要です。名前も送信し、受け取るように変更してみましょう。余力のある人はタイトル・文字色・メールアドレスなども追加してみましょう。なんかとりえあえず複数のデータを送ってみてほしいとのことだったので、僕は次のようにしました。
index.html2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <style> .cell{ padding: 1px 15px; margin: 1px 30px; line-height: 0.1; } </style> <h1>「同窓会の参加有無」</h1> <div class=cell> <form method="POST" action="index.php"> <ol> <li><p>氏名:<input name="name" /></p></li> <li><p>メール:<input name="mail" /></p></li> <li><p>参加可否:<input name="comment" /></p></li> <input type="submit" value="送信" style= "width:150px;,height:100px;"/> </div> </form> </body> </html>php 2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>POSTのサンプル</title> </head> <body> <?php //commentがPOSTされているなら if(isset($_POST["mail"],$_POST["name"],$_POST["comment"])){ //エスケープしてから表示 $mails = htmlspecialchars($_POST["mail"]); $names = htmlspecialchars($_POST["name"]); $comments = htmlspecialchars($_POST["comment"]); print("あなたの入力した情報は以下になります。<br/>"); print("名前:${mails}<br/>"); print("メール:${names}<br/>"); print("参加有無:${comments}<br/>"); }else{ print("情報の入力が正しくありません。"); } ?> </body> </html>震えるくらいクソコードであることはなんとなくですが、自覚してます....
STEP1-9.PHPでデータベースを操作してみる
これやってみたのですが、すごい勉強になりました。
phpでデータベースをこうやっていじるんだ!みたいなのがなんとなくですが理解できます。こちらも特に説明を読んでいけば問題なく進めました。
唯一初心者目線でひっかかりそうなのが、データベースにアクセスするときに自分でつけたデータベースの名前じゃないと、エラーになるので注意が必要。
僕の場合はdbname=「TEST」ではなくて「text」でしたので最初はエラってました。実行結果1
先程はDBのname,textを全て表示したが今度はJohnにしぼったものだけを表示させます。
実行コード
<?php $dsn = 'pgsql:dbname=test;host=pgsql;port=5432'; $user = 'postgres'; $pass = 'example'; try { // DBに接続する $dbh = new PDO($dsn, $user, $pass); //$query_result = $dbh->query('SELECT * FROM test_comments'); $sth_select = $dbh->prepare('SELECT * FROM test_comments WHERE name = ?'); // prepareメソッド(INSERT)最下部でinsertするname/textを定義 $sth = $dbh->prepare('INSERT INTO test_comments (name, text) VALUES (?, ?)'); // DBを切断する $dbh = null; } catch (PDOException $e) { // 接続にエラーが発生した場合ここに入る print "DB ERROR: " . $e->getMessage() . "<br/>"; die(); } ?> <?php //これでdbのnameとtextに新たに文字列が加わる $name = "John"; $text = "Power to the People"; $sth->execute(array($name, $text)); ?> <?php $name = "John"; $sth_select->execute(array($name)); //実行したクエリから実行結果を取得している $prepare_result = $sth_select->fetchAll(); foreach($prepare_result as $row) { print $row["name"] . ": " . $row["text"] . "<br/>"; } $sth_select->execute(array($name)); ?>実行結果2
とりあえず、無事表示されました。
次は気が向いたらSTEP2をやります。
- 投稿日:2019-04-11T18:27:28+09:00
D-Oceanで遊ぶ
はじめに
こんにちは。
現在、東京大学で主にシステムデザインを学んでいる学生です。
今回は授業で簡単なデータの解析を行いましたので、備忘録もかねてその過程を記したいと思います。D-Oceanとは
株式会社ディーオーシャンが提供しているソーシャルデータプラットフォームで、誰でも無料でデータを利用することができる。2019年2月14日よりサービスが提供されている。
D-Oceanの使い方
1. 画面右上の「ログイン」へ進む
2. 持っているアカウントでログイン
3. データを選択する
4. 「Query」を選択
5.「Execute」を選択
とりあえずデフォルトで書かれているSQLを実行します。
6. 結果
次回
実際に欲しいデータをD-Oceanから取得してみたいと思います!
- 投稿日:2019-04-11T18:22:09+09:00
Laravelのクエリビルダを使い回す際の注意
はじめに
Laravel初心者向け- 自分がハマったので他の人がハマらないように残す
該当ソース
$company_where = Company::where(['is_valid' => '1']); $company1 = $company_where->where(['id' => '1'])->toSql(); var_dump($company1); // "select * from `companies` where (`is_valid` = ?) and (`id` = ?)" $company2 = $company_where->where(['id' => '2'])->toSql(); var_dump($company2); // "select * from `companies` where (`is_valid` = ?) and (`id` = ?) and (`id` = ?)"やりたいことは
is_validが1の企業(有効な企業)の中でid=1のもの、2のものを取得したい
is_validの条件は共通なので変数に持ち、それを使いまわそうと思って書いたコードなのですが見事にハマりました
id=1は無事に取れるが、id=2が何故かとれない…レコードはあるしis_valid=1なのに何故…解説
もうソースにコメントで書いてありますが
toSqlで発行されるクエリに注目です-- 1つ目 select * from `companies` where (`is_valid` = ?) and (`id` = ?) -- 2つめ select * from `companies` where (`is_valid` = ?) and (`id` = ?) and (`id` = ?)2番目のクエリにidの検索条件がANDで2つついているのが分かるかと思います
1つ目のクエリのwhereでid=1の検索条件がつき、2つ目のクエリで上書きされるかと思いきや同じカラムでもAND検索で追加される仕様のようでした
(まぁメソッドチェーンでAND検索になるんだから当然っちゃ当然なんですが。。。)解決策
大人しくインスタンスを分けましょう
$company_where1 = Company::where(['is_valid' => '1']); $company1 = $company_where1->where(['id' => '1'])->toSql(); var_dump($company1); // "select * from `companies` where (`is_valid` = ?) and (`id` = ?)" $company_where2 = Company::where(['is_valid' => '1']); $company2 = $company_where2->where(['id' => '2'])->toSql(); var_dump($company2); // "select * from `companies` where (`is_valid` = ?) and (`id` = ?)"もしくはクエリを分けなくても良い方法を考えましょう
$companies = Company::where(['is_valid' => '1']) ->whereIn('id', ['1', '2']) ->toSql(); var_dump($companies); // "select * from `companies` where (`is_valid` = ?) and `id` in (?, ?)"おわりに
自分と同じ状況でハマっている人が解決したなら良かったです
- 投稿日:2019-04-11T18:13:58+09:00
データベースプラットフォームD-Oceanを使ってみた
こんにちは
初投稿です。まっつんと言います。東京大学工学部システム創成学科システムデザインアンドマネジメントコースに在籍してます。
この記事では、今学科でやっている基礎プロジェクト(大規模データ分析)という授業で学んだことを書いていきます。データベースとは
データベースについては、僕自身詳しくはわかっていませんが、こちらの記事などに詳しく書いてあります。
D-0cean
D-OceanはGoogleが作ったデータベース、BigQueryを操作するためのプラットフォームです。2019年2月に出来たばかりのようです。
どれかのデータをクリックすると、SQLを入れるボックスが出てきます。SQLはデータベースの操作をするための言語です。後々、SQLのメモ記事もあげる予定です。
出来たばかりということと、僕が他のデータベースプラットフォームを使ったことがないというのもあり、D-Oceanが使いやすいのかはわかりませんが、見た目はかっこいいと思います。機会があったら積極的に使っていこうと思います。
- 投稿日:2019-04-11T16:58:01+09:00
D-Oceanを一から!
D-Oceanのログインから
D-Oceanはデータプラットフォームであり、いろいろな種類のデータを使うことができる。右上のログインボタンを押して、Google アカウントなどでログインしよう。
【注意】
GROUP内のデータを使う場合、GROUP をそのまま押してはいけない。
GROUPを押してプルダウンメニューが出たグループをクリックしないと、グループ内に共有されたデータは見ることができない。
なんというシステムでしょう。。。これでグループ内で共有されたデータは見れるはずなので、ひとつクリックしてみよう。
クリックすると以下のようなウィンドウになる
下にcomment、queryがあるので、queryを押してみよう!
ここからはqueryでsql文を書くことになる。CSVデータの読み込みと分析
CSVのデータはQueryからCSVをプルダウンで選んだ後、ダウンロードできる。
今回は1000行だけダウンロードする。
- 投稿日:2019-04-11T16:58:01+09:00
D-Oceanで取得したデータをpythonで料理する!
ここではD-Oceanを使ってデータを取得し、pythonのpandasを使って処理することを考えます。
目次
・D-Oceanのログインから
・BigQueryとは何か
・BigQueryにおけるSQL文
・csvデータの読み込みと分析D-Oceanのログインから
D-Oceanはデータプラットフォームであり、いろいろな種類のデータを使うことができる。データ処理の練習したい人にはおすすめかも。右上のログインボタンを押して、Google アカウントなどでログインしよう。
【注意】
授業などでGROUPでデータが共有されることもある。
GROUP内のデータを使う場合、GROUP をそのまま押してはいけない。
GROUPを押してプルダウンメニューが出たグループをクリックしないと、グループ内に共有されたデータは見ることができない。
なんというシステムでしょう。。。これでグループ内で共有されたデータは見れるはずなので、ひとつクリックしてみよう。
クリックすると以下のようなウィンドウになる
下にcomment、queryがあるので、queryを押してみよう!
ここからはqueryでsql文を書くことになる。BigQueryとは何か
BigQueryに興味がある人は以下のリンクからみてみるのが一番早いと思われる。
https://thinkit.co.jp/story/2015/08/27/6346BigQueryにおけるSQL文
SQL文はあんまり詳しくないので、以下の基本的な文法構造だけのせておきます。
SELECT column FROM table_nameが基本構造で、*はすべての列、LIMITは何行か指定して選ぶことができる。
SQLはムズイです!csvデータの読み込みと分析
csvのデータはQueryからcsvをプルダウンで選んだ後、ダウンロードできる。
今回は1000行だけダウンロードする。
csvファイルをダウンロードしたらここからはpythonの出番。
このcsvファイルをダウンロードしたら、テキストエディタをなにか開いてpythonファイルをつくろう。import.pyimport pandas as pd import matplotlib.pyplot as plt data = pd.read_csv('downloads/data/file_name.csv') data.tail() #下から5行取得可能pandasはpythonで使えるめっちゃはやいエクセル、だと勝手に考えている。
pd.read_csv()という関数でcsvファイルをpandasのdataframe(エクセルの表みたいな)に落とし込むことができる。
これでdataを料理する準備はできました!ちなみに上から5行抽出したい場合は以下のhead()を使って確認することができる。
head.pydata.head()
Name_ location latitude longitude phone 0 関子ども家庭支援センター 練馬区関町北1-21-15 35.726719 139.578657 1 練馬子ども家庭支援センター(児童福祉担当係石神井) 練馬区石神井町3-30-26 石神井庁舎4階 35.743405 139.602759 2 練馬子ども家庭支援センター練馬駅南分室 練馬区豊玉北5-18-12 35.737083 139.654433 3 光が丘子ども家庭支援センター 練馬区光が丘2-9-6 光が丘区民センター6階 35.759233 139.629303 4 練馬子ども家庭支援センター 練馬区豊玉北6-12-1 東庁舎4階 35.735650 139.652422
- 投稿日:2019-04-11T14:06:11+09:00
データベース(SQL)の概要
データベースとは
・大量の情報を保存し、コンピュータから効率よくアクセスできるように加工したデータの集まりのこと
・データベースを管理するコンピュータシステムのことを「データベース管理システム(RDBS)」という
・SQLを使って操作するなぜデータベースが必要なのか
データを管理するなら、Excelのような表計算ソフトでもいいと思います。しかしデメリットもあります。
・データの共有に向かない
・大量のデータを扱えない
・万が一の事故に対応できない
など代表的なデータベース
関係データベースとも呼ばれる。代表的なRDBMSは次の5つ
・Oracle Database (Oracle社)
・SQL Server (Microsoft社)
・DB2 (IBM社)
・PostgreSQL (オープンソース)
・MySQL (オープンソース)データベース構成
・クライアント/サーバー型のシステム
・データベースを読み書きするにはサーバーにクライアントからSQL文を送信
・テーブルと呼ばれる表でデータを管理
・テーブルはデータ項目を表すカラム(列)、1件のデータを表すレコード(行)からなる
・1つのマス目をセルといい、1つセルには1つのデータしか入れられないSQLの概要
SQLの文には種類がある
・DDL(データ定義言語) データを格納する入れもの
・DML(データ操作言語) テーブルのレコードを検索・変更
・DCL(データ制御言語) データベースに対して操作の制御設定や、変更を確定したり取り消したりする実際に使われるSQL文のうち90%がDMLです。
記述ルール
・SQL文はセミコロンで終わる(;)
・キーワードの大文字・小文字は区別されない SELECTはselectと書いても同じ(ただし、テーブルに登録されているデータは別)
・文字列・日付・数値などはシングルクォーテーションで囲む(')
・単語と単語の間は半角スペース 例)CREATE DATABASE shop;参考文献
・SQL 第2版 ゼロからはじめるデータベース操作















