「index」を含む日記 RSS

はてなキーワード: indexとは

2018-12-09

Nginxの設定メモ

解決方法

参考
やったこ

Ubuntuで以下のようにコマンドを実行してみました。

管理者になる
sudo su -
Nginxインストール
apt install nginx
Nginx関係場所確認
whereis nginx

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz

Nginx設定ファイルを追加
cd /etc/nginx
ls -la
cd /etc/nginx/conf.d
touch default.conf
vi default.conf

default.confに以下のような内容をコピペしました。

server {
        listen 8000 default_server;
        listen [::]:8000 default_server ipv6only=on;

        root /var/www/html;
        index index.html index.htm;
}
Nginx再起動
nginx -s reload
index.html作成

「/var/www/html」に「index.html」というファイルを作ります

内容を以下のようにして保存します。

<html>

 <head>

  <title>TEST</title>

 </head>

 <body>

  <h1>TEST PAGE</h1>

 </body>

</html>

Chrome確認

WindowsChromeを起動します。

http://localhost:8000」にアクセスします。

上記index.htmlが表示されました。

 

結論

Nginxの設定が抜けてました。

 

アドバイスどうもありがとうございました。

2018-11-19

増田プログラマー養成講座 その22 データベース設計 概念物理

前回は、DB設計の(1)要件定義を学びました。

今回は、DB設計の(2)概念設計、(3)論理設計、(4)物理設計を見てみましょう。

 

DB設計の流れ

  1. 要件定義
  2. 概念設計
  3. 論理設計
  4. 物理設計

 

DB設計の教材

データベース解説本やWeb記事を調べてみた。

  1. 本「スッキリわかるSQL入門」 第12章 テーブル設計 https://book.impress.co.jp/books/1111101167
  2. Web記事「できるエンジニアになるためのちょい上DB術」 https://www.edifist.co.jp/lecture/dbdesign/

 

スッキリわかるSQL入門」のDB設計説明コンパクトにまとまっていて、分かりやすいと思いました。(是非一度読んでみてください。)

 

 

 

概念設計論理設計物理設計概要

スッキリわかるSQL入門」第12章の説明(p.374)を参考にしてみよう。(詳しくは本を読んでみてください。)

 

概念設計

管理すべき情報はどのようなものなのかを整理します。

データベースシステムに関することは考えず、要件に登場する情報だけをザックリと把握します。

たとえば、家計簿データベースであれば、扱うべき情報として「利用者情報」や「入出金情報」などがあることを明確にします。

また、情報間で関連がある場合、どのような関係があるかも併せて整理します。

 

論理設計

概念設計で明らかになった各情報について、RDBを使う前提で構造を整理し詳しく具体化していきます

論理設計では「どのようなテーブルを作り、それぞれのテーブルにどのような列を作るか」まで明らかにすれば十分です。

型や制約など、付随的な部分については考えません。

 

物理設計

特定DBMS製品(たとえばMySQL)を使う前提に立ち、論理設計で明らかになった各テーブルについて、その内容を詳しく具体化していきます

すべてのテーブルのすべての列について、型、インデックス、制約、デフォルト値など、テーブル作成必要なすべての要素を確定させます

この物理設計に基づいて、CREATE TABLE文などを含む一連のDDL文を作成し、最終的にデータベース内にテーブル作成することができます

 

本書の「図12-4 データベース構築のおおまかな流れ」も参考にして欲しい。

入力 お客様要件(全国の倉庫商品があって、その在庫管理したいんだけど~)

 

 

●処理 DB設計作業

 ・概念設計:(商品)(在庫)(倉庫) …ER図を作成

 ・論理設計:[商品][在庫][倉庫]    …正規化

 ・物理設計:[SHOHIN][ZAIKO][SOUKO]  …使うDB仕様に合わせてテーブル定義表を作成

 

 

●出力 DDL

 ・CREATE TABLE

 ・CREATE VIEW

 ・CREATE INDEX

 

 

 

(2) 概念設計

 

ER図とは?

ER図とは、「Entity-relationship Diagram」(実体関連図)の省略形だ。

 

ER図の用語

コンピューター用語英語ばっかりだから日本語にして欲しいよねw

 

ER図の書き方
  1. エンティティ―」は四角い箱で書く。
  2. 箱の中にエンティティ―の詳細な中身=「アトリビュート」を書く。
  3. 箱と箱を「リレーション」の線でつなぐ。
  4. 線の両端に「カーディナリティー」「オプショナリティー」の記号を書く。

 

ER図で使う記号は、「IE記法」や「IDEF1X記法」など、いろいろな規格がある。

情報処理技術者試験のデータベーススペシャリストの問題では、「UML」という図の記法も使われる。

 

 

 

(3) 論理設計

 

正規化とは?

正規化 Normalization」とは、データの形を「正規形」(Normal form)に変えること。

ざっくり言うと、テーブル(表)を分割して、データの重複や不整合を解消する作業だ。

 

テーブルの形を変えていくステップには、第1~第5まで5段階ある。

  1. 第1正規
  2. 第2正規
  3. 第3正規
  4. 第4正規
  5. 第5正規

それぞれの変形方法について理解しておこう。

実務では第3正規形まで正規化できればとりあえずOK

 

第3.5正規形(ボイス-コッド正規形)

第3正規形をより厳密にした「ボイス-コッド正規形」という形もある。

第3と第4の間なので「第3.5正規形」とも呼ばれている。

(ボイス-コッド形もカウントに入れたら、第1~第5、+第3.5で計6段階になる。)

 

非正規

正規化を進めると、SQLJOIN」の利用が増えてくる。JOINを多用する処理は遅い=DBの性能低下につながる。

第3正規形まで分割しても、実際に使ってみて遅い場合は、第2正規形や第1正規形に戻して使うこともある。これを「非正規化」とか「正規化を崩す」などという。

 

RDBでは処理速度が遅くなる場合、代わりに「NoSQL」を使う場合もある。

 

 

 

(4) 物理設計

 

時間がない場合、先にGUIDB管理ツールでデータベース作成してしまい、その後でテーブル定義表を作成することもある。

 

DB設計に慣れてきたら上記の各段階はすっ飛ばして、いきなりデータベースを作れるようになるだろう。

 

ここまで、SQLの使い方やデータベース設計について学びました。

次回は、その他のSQLに関連する話も見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181119224031 増田プログラマー養成講座 その22 データベース設計 概念物理 ←★今ここ★

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

[]2018年11月18日日曜日増田

時間記事文字数文字数平均文字数中央値
0011023622214.766.5
01608069134.562
02262959113.860
0333300591.167
04172171127.767
05877296.583
0681751218.952.5
0735312589.322
08364310119.751
091171028487.941
10109826575.841
111111002090.342
1271621087.541
131471034070.342
141241158593.448.5
15496528133.269
1667627293.638
1711912976109.042
188114061173.651
19434364101.551
20114710862.426.5
211321001075.840
221711317477.039
2386790591.956.5
1日1874188886100.844

頻出名詞 ()内の数字単語が含まれ記事

人(170), 自分(163), 今(95), 話(79), 増田(73), 日本(63), 人間(61), 前(58), 時間(54), 好き(53), ー(50), 男(48), あと(46), 必要(46), 問題(43), 金(42), 仕事(42), 頭(41), 感じ(37), 意味(37), 気(36), 女(35), 女性(33), 相手(33), しない(33), 普通(32), 気持ち(31), 人生(31), 日本人(29), 子(29), 最初(29), 理解(29), 今日(28), 子供(28), 世界(27), 場合(27), 全部(27), 一番(27), 社会(27), 他人(26), 関係(26), 会社(26), ホテル(25), 目(25), 無理(25), 店(25), 存在(25), 国(24), じゃなくて(24), 逆(24), 学校(24), アニメ(24), 東京(24), 毎日(23), レベル(23), 昔(23), 内容(23), 他(23), 理由(23), 一人(22), 勉強(22), 別(21), 大阪(21), しよう(21), 最近(21), 自信(21), 場所(21), 言葉(21), ダメ(20), ゴミ(20), 絶対(20), 手(20), 嫌(20), 親(19), ギャル(19), バカ(19), 検索(19), 馬鹿(18), 職場(18), 家(18), 当たり前(17), 結果(17), 顔(17), 経験(17), 苦手(17), 結局(17), 可能性(17), 生活(17), 無駄(17), 昨日(16), 勝手(16), 確か(16), 大事(16), 嘘(16), 部分(16), 元増田(16), 漫画(16), 自体(16), 男性(16), 外(16)

頻出固有名詞 ()内の数字単語が含まれ記事

増田(73), 日本(63), じゃなくて(24), 東京(24), 大阪(21), 可能性(17), 元増田(16), スマホ(15), マジで(13), いいんじゃない(13), 価値観(12), 慰安婦(12), 韓国(12), デリヘル(11), iPhone(11), 娘(10), なのか(10), アメリカ(10), わからん(10), 巨乳(10), なんだろう(10), 学生時代(9), にも(9), ネトウヨ(9), 基本的(9), OK(8), PC(8), 人間関係(8), …。(8), 1回(8), 分からん(8), w(8), 個人的(7), 上の(7), リアル(7), ルーマニア(7), 中国(7), hatena(7), ツイッター(7), 江戸時代(7), ???(7), 米(7), ブコメ(7), 自分自身(7), s(6), ー(6), 毎日(6), Google(6), 社会人(6), 何度(6), IT(6), キチガイ(6), ツイート(6), 3年(6), 外国人(6), お勧め(6), マウンティング(6), 社会的(6), サイバーセキュリティ(6), トラバ(6), ブクマ(6), ワイ(6), twitter(6), 悪いこと(6), 個人情報(5), テンプレ(5), イギリス(5), 糖質(5), 冷凍食品(5), 5分(5), 一日(5), いない(5), VR(5), 普通に(5), 四日(5), セブンイレブン(5), メルカリ(5), 歩行者(5), 1日(5), アプリ(5), 東大(5), 知らんけど(5), 2018年(5), な!(5), Twitter(5), 発達障害(5), はてブ(4), まんこ(4), 数年(4), 日本橋(4), 犯罪者(4), 1年(4), キミ(4), 10万(4), v(4), index(4), 化粧品(4), 交通刑務所(4), とはいえ(4), あるある(4), エヴァ(4), 朝鮮(4), 平成(4), 最終的(4), 経験値(4), フットサル(4), 3割(4), ガチ(4), NHK(4), a.(4), はてなー(4), マンコ(4), AV(4), 自動運転(4), クオリティ(4), Eカップ(4), 公式サイト(4), 日本政府(4), 経済的(4), 養子縁組(4), -1(4), SNS(4), 警察庁(4), .s(4), 人として(4), 被爆者(4), 長崎(4), 笑(4), 一般的(4), 異世界(4), -2(4), 金(4), Android(4)

本日の注目単語 ()内の数字単語が含まれ記事

安宿(5), 四日(5), ルーマニア(7), 農作業(3), 名医(4), Eカップ(4), 大阪城(3), 農薬(6), Ctrl(4), 交通刑務所(4), 威厳(4), 体育(15), 慰安婦(12), デリヘル(11), 自炊(13), ギャル(19), 乗車(8), 死者(8), 農家(6), 車内(7), 講座(6), 食材(8), ホテル(25), 大阪(21), 江戸時代(7), 化粧(13), しらん(7), 交通(7), 訓練(8), ファッション(12), iPhone(11), 受験(12), 巨乳(10), ケチ(10), 低能(12), 学生時代(9), 自信(21)

頻出トラックバック先(簡易)

自分に自信が無い人ほどファッションや化粧をしない説 /20181117113030(30), ■おっさんも楽しめるアニメありますか? /20181117123024(20), (タイトル不明) /20130818033214(20), ■体育苦手だったけど社会に出たら全く困らなかった /20181118095342(20), ■オススメを教えてください。何でもいいです。 /20181117123321(12), ■ツイッターで擬似的な死を楽しんでいる /20181118011243(11), ■ルーマニア学生です、日本人が憎いです /20181118100448(9), ■これ好きなの俺だけだろみたいな漫画ない? /20181118134304(8), ■女「なんでAndroidなんですか?」俺「iPhoneの方が不便だよ?例えば…」 /20181117114626(7), (タイトル不明) /20181118112423(7), ■大阪四日目、お前ら俺に勇気をくれ /20181118202222(6), ■獣人と人 /20181118214230(6), ■男は卑劣でクソみたいな生き物 /20181118133044(5), ■セクハラしかねない僕たちなのであなたとはコミュニケーションを取りません /20181118084732(5), ■地方だと生活に飽きてくるんだが、みんなどうしてるのか /20181118145523(5), ■お勧めweb講座ってある? /20181118130013(5), ■ /20181118163411(5), ■夫の財布がダサい /20181118140948(5), ■景気とオタク関係 /20181117212213(5), ■二次元宗教とか作らないの? /20181116191502(5), ■anond20181117114626 /20181117175335(5), ■anond20181118100448 /20181118100901(5), ■帰省したくない /20181118160021(5), ■レベルの低い大学に入ってしまったと思ったら /20181118041941(5)

増田合計ブックマーク数 ()内の数字は1日の増減

5803361(3115)

2018-11-10

増田プログラマー養成講座 その20 SQLデータの削除

前回は、SQLデータ更新をやりました。

今回は、SQLデータの削除をやりましょう。

 

メッセージの削除

基本は、同じなので前回やった更新処理をちょっと変えれば削除もすぐできます

 

投稿されたメッセージを削除する機能を、Webページに付けてみよう。

 

削除ページにジャンプするリンク

前々回作ったメッセージの一覧の中に、削除ページにジャンプするリンクも入れておいた。

<td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

という1行が削除ページにジャンプするためのリンクになる。

ブラウザーHTMLソースを見ると、ここが以下のようなHTMLに書き換わってる。

<td><a href="welcome/delete/2">削除</a></td>

これは「メッセージID番号が2のメッセージ」を削除対象にして、削除ページにジャンプする。

 

Controllerの改造

ユーザーが「http://localhost/waf/welcome/delete/2」というURLで、削除ページにアクセスしたら、コントローラーで「2」を受け取って使いたい。

CodeIgniterでは、URL文字列を解析して、使うことができる。

以下のようにコントローラーを改造してみよう。

 

// 削除画面

public function delete($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_delete');

}

 

Controllerの改造の解説

delete()メソッド引数で、URL中の「2」の部分を受け取れる。

これは前回の編集ページ(更新の処理)と同じ。

「$id = $this->uri->segment(3);」でも受け取れる。

 

Viewの改造

削除ページでは、確認する質問を入れてみよう。

ユーザーに「本当に削除しますか?」みたいな注意喚起をしておきたい。

 

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

  <p>以下のメッセージを削除しますか?</p>

  <form action="welcome/delete" method="post" accept-charset="utf-8">

   <?php if (isset($talk)): ?>

   <p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="delete">

   <?php else: ?>

   <p>※該当するメッセージがありません。(または削除済です。)</p>

   <?php endif;?>

   <button>削除する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

<p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

削除するメッセージを色付きで強調して、ユーザー確認してもらう。

 

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

コントローラー削除対象メッセージID番号を送るため、inputタグの「type="hidden"」でメッセージID番号を仕込んでおく。

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 削除画面

public function delete($id = '')

{

 $id = $id ? $id : $this->input->post('id');

 $action = $this->input->post('action');

 if ($action == 'delete') {

  $this->chat_model->delete_message($id);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_delete', $data);

}

 

Controllerの改造の解説

やってることは、前回のデータ更新場合とほぼ同じ。

$this->chat_model->delete_message($id);

で、モデルに用意したデータ削除用メソッドを呼び出しているだけ。

次は、モデルdelete_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Delete

public function delete_message($id = 0)

{

 $sql = "DELETE FROM talk WHERE id = ?";

 $param = array($id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「DELETE」を使えば、指定したレコード(1件分のデータ)を削除できる。

DELETE FROM talk WHERE id = ?」で、talkテーブルmessageid指定して削除している。

 

データを削除した後の挙動は、メッセージID番号がなくなるので、削除ページに表示できるメッセージデータがなくなる。

(例)id=2のデータを削除したら、SQLで「SELECT * FROM talk WHERE id = 2」を取得しても、空のデータデータがない状態

その場合は、

<p>※該当するメッセージがありません。(または削除済です。)</p>

と表示させてる。

 

まとめ

以上で、SQLの「DELETE」を使ったデータの削除ができた。

長々と説明したが、今回の大事な点は、SQLの「DELETE」の使い方だ。

 

以上で、MVCフレームワークを使ったOOPの使い方とSQLの使い方を見てきた。

SQLSQLだけで説明したほうが良かったね!MVCフレームワーク説明SQL説明が混在すると要点が分かりづらくなる?)

ちょっと失敗だったかも。m(__)m)

 

次回は、データベースの設計について学んでみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除 ←★今ここ★

anond:20181111205255 増田プログラマー養成講座 その21 データベース設計 (1)要件定義

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その19 SQLデータ更新

前回は、Webアプリの骨組み(スケルトン)に、SQLデータの追加と取得をやりました。

今回は、SQLデータ更新をやりましょう。

 

メッセージ更新

 

編集ページにジャンプするリンク

前回作ったメッセージ一覧に、[編集]のリンクも入れておいた。

<td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

という1行の部分。

[編集]をクリックすると、編集用ページにジャンプする。

ブラウザーHTMLソースを見ると、以下のようなHTMLになってるはず。

<td><a href="welcome/update/2">編集</a></td>

これは「メッセージID番号が2」を対象にして、編集ページにジャンプすることを意味する。

 

Controllerの改造

編集用ページのコントローラーを作ろう。

「http://localhost/waf/welcome/update/2」というURL編集ページにアクセスしたら、メッセージID番号の「2」を受け取れるようにしたい。

URL文字列を処理して「2」を取り出せるようにしよう。

 

// 更新画面

public function update($id = '')

{

 echo "ID=".$id;

 $this->load->view('chat_update');

}

 

CodeIgniterでは、URLから文字列を取り出す方法がいくつか用意されている。

  1. 「update($id = '')」のようにメソッド引数「$id」を用意すれば、「2」の部分を取り出せる。
  2. 引数を使う以外の方法も用意されていて、「$id = $this->uri->segment(3);」のように書けば、「2」の部分を取り出せる。

// 更新画面

public function update()

{

 $id = $this->uri->segment(3);

 echo "<hr> ID=".$id;

 $this->load->view('chat_update');

}

 

Controllerの改造の解説

CodeIgniterで、URL文字列から特定部分の文字列を取り出す方法を見ておこう。

 

例えば、「http://localhost/waf/welcome/update/aaa/bbb/ccc」というURLアクセスしたときCodeIgniterではURL中の「aaa」「bbb」「ccc」という部分は、以下のようにして取り出せる。

$seg1 = $this->uri->segment(1); // → 1番目のURL文字列:「welcome」=コントローラークラス

$seg2 = $this->uri->segment(2); // → 2番目のURL文字列:「update」=クラスの中のメソッド

$seg3 = $this->uri->segment(3); // → 3番目のURL文字列:「aaa」の部分

$seg4 = $this->uri->segment(4); // → 4番目のURL文字列:「bbb」の部分

$seg5 = $this->uri->segment(5); // → 5番目のURL文字列:「ccc」の部分

URLを「/」で区切って、base_url(http://localhost/waf/)の次から順番に、1番目のURL文字列、2番目のURL文字列、3番目のURL文字列、…とsegment()メソッドで順番を指定すれば取得できる。

 

Modelの改造

データベースでメッセージID指定して、メッセージを取り出す機能を用意しよう。

 

ファイルに以下のメソッドを追加する。

// Read by Id

public function read_message_by_id($id = 0)

{

 $sql = "SELECT * FROM talk WHERE id = ?";

 $param = array($id);

 $query = $this->db->query($sql, $param);

 return $query->row_array();

}

 

Modelの改造の解説

SQLの「WHERE」句で、絞り込む条件を指定できる。

 

SELECT * FROM talk WHERE id = ?

「WHERE id = 2」とすれば、メッセージID番号が2のメッセージデータが「talkテーブルから取り出せる。

もし該当するデータがなければ、返されるデータは空になる。(データが返ってこない。)

 

CodeIgniterの「row_array()」は、1件分のデータ配列の形にして返すメソッドだ。

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

  <p>メッセージを変更して「更新する」ボタンを押してください。</p>

  <form action="welcome/update" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <?php if (isset($talk)): ?>

   <input type="text" name="message" value="<?php echo $talk['message']; ?>">

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="update">

   <?php else: ?>

   <p>※該当するメッセージがありません。</p>

   <?php endif;?>

   <button>更新する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewの改造の解説

データベースから取り出した1件分のメッセージを表示する部分を追加した。

<input type="text" name="message" value="<?php echo $talk['message']; ?>">

の「<?php echo $talk['message']; ?>」という部分だ。

これで変更したいメッセージの本文を表示できる。

 

あと、編集したメッセージWebサーバーに送信できるように、Formタグ送信ボタン(「更新する」の部分)も追加した。

このときメッセージID番号も送信できるように、

<input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

という1行も仕込んである

 

Controllerの改造

ファイルの内容を以下のように編集する。

// 更新画面

public function update($id = '')

{

 $id = $id ? $id : $this->input->post('id'); // id -> segment or post

 $action = $this->input->post('action');

 if ($action == 'update') {

  $message = $this->input->post('message');

  $this->chat_model->update_message($id, $message);

 }

 $data['talk'] = $this->chat_model->read_message_by_id($id);

 $this->load->view('chat_update', $data);

}

 

Controllerの改造の解説

メッセージID番号を指定して、データベースから取り出し、Viewに渡すデータを用意している。

$data['talk'] = $this->chat_model->read_message_by_id($id);

 

ユーザーメッセージ編集をしてWebサーバーに送信したら、データ更新する指示を出す部分も追加した。

$action = $this->input->post('action');

if ($action == 'update') {

 $message = $this->input->post('message');

 $this->chat_model->update_message($id, $message);

}

モデルにupdate_message()メソッドを用意して、$idと$messageを渡せば、該当データ更新するようにしたい。

次は、モデルでupdate_message()メソッドを用意しよう。

 

Modelの改造

ファイルの内容を以下のように編集する。

// Update

public function update_message($id = 0, $message = '')

{

 $sql = "UPDATE talk SET message = ? WHERE id = ?";

 $param = array($message, $id);

 $this->db->query($sql, $param);

 return $this->db->affected_rows();

}

 

Modelの改造の解説

SQLの「UPDATE」を使えば、指定したレコード(1件分のデータ)を更新できる。

「UPDATE talk SET message = ? WHERE id = ?」で、talkテーブルmessageid指定して更新している。

 

CodeIgniterの「affected_rows()」メソッドは、更新した行数を返す。=成功なら1行、失敗なら0行となる。

 

補足

コントローラーの「$id = $id ? $id : $this->input->post('id');」という行は、$idの受け取り方が2パターンあるので、それに対応している。

編集ページの表示で、1回目の表示と、2回目以降の表示で、$idの受け渡し方が変わっている。

  • 1回目:URLに埋め込まれID番号をupdate($id = '')の引数$idで受け取っている。($this->uri->segment(3)で受け取るのと同じ)
  • 2回目以降:Formタグで送られてきた$idを$this->input->post('id')で受け取っている。

URLに埋め込む方法上記の1回目のような方法)は、ユーザー勝手に値をいじれるので、基本的には使わない方が良い。

 

まとめ

以上で、SQLの「UPDATE」を使った、データ更新ができた。

長々と説明したが、今回の大事な点は、SQLの「UPDATE」の使い方だ。

CodeIgniterの使い方や、Webサイトの作り方(FormタグなどのHTML知識)は、オマケ程度に見ておいて欲しい。

 

次回は、データを削除するSQLDELETE」の使い方を見てみよう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新 ←★今ここ★

anond:20181110182445 増田プログラマー養成講座 その20 SQLデータの削除

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-11-04

増田プログラマー養成講座 その18 SQLデータの追加と取得

前回は、Webアプリの骨組み(スケルトン)までを作って、製作過程を見てみました。

今回は、データベースCRUD操作を行なって、チャットメッセージを追加/取得/変更/削除する機能実装してみましょう。

 

Visual Studio Codeの準備

Webアプリを作るときに、「Visual Studio Code」というIDE統合開発環境)を使ってみましょう。PHP用の各種プラグイン(「PHP IntelliSense」「PHP Debug」など)を入れておけば、便利に使える。

 

メッセージの追加

  1. ViewHTMLのFormタグを使って、メッセージ入力送信できるようにする。
  2. Controller:Viewから送信したデータを受け取れるようにする。
  3. Model:Controllerが受け取ったデータデータベースに保存する。

という機能実装してみよう。

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form action="welcome/index" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <input type="text" name="message">

   <input type="hidden" name="action" value="add">

   <button>投稿する</button>

  </form>

 </body>

</html>

 

Viewの改造の解説

本当はセキュリティーを考慮して、入力値の検査バリデーション)とか、もっといろいろな仕込みが必要だが、ここでは練習なので省略します。

 

Controllerの改造

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

  $this->output->enable_profiler(true); // for debug

 }

 

 // 初期画面

 public function index()

 {

  $action = $this->input->post('action');

  if ($action == 'add') {

   $message = $this->input->post('message');

   $this->chat_model->create_message($message);

  }

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

Controllerの改造の解説

 

Modelの改造

ここでやっとSQL文の登場だ!!!

SQL説明たかったのに(SQLとは本質的関係がない)Webアプリ説明が延々と続いた。(説明方法を変えた方がいいねw)

データベースデータを保存(追加)するSQLコマンド「INSERT」を使ってみよう!

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

 

 // Create

 public function create_message($message = '')

 {

  $sql = "INSERT INTO talk SET create_at = ? , message = ?";

  $param = array(date('Y-m-d H:i:s'), $message);

  $this->db->query($sql, $param);

  return $this->db->insert_id();

 }

}

 

Modelの改造の解説

 

以上、メッセージの追加を実現するために、MVCの各パーツを用意した。これでメッセージの追加だけができるようになった。

これだけではメッセージの取得=表示がまだできないので、次はデータベースからメッセージデータを取得して、Webページに表示できるように改造しよう。

 

メッセージの取得

SQLの「SELECT」を使えば、データベースからデータを取り出せる。

メッセージデータを取り出して、Webページの表示で使おう。

 

Modelの改造

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

 

 // Create

 public function create_message($message = '')

 {

  $sql = "INSERT INTO talk SET create_at = ? , message = ?";

  $param = array(date('Y-m-d H:i:s'), $message);

  $this->db->query($sql, $param);

  return $this->db->insert_id();

 }

 

 // Read All

 public function read_message()

 {

  $sql = "SELECT * FROM talk";

  $query = $this->db->query($sql);

  return $query->result_array();

 }

}

 

Modelの改造の解説

 

これでデータベースからデータを取り出すSQLメソッドモデルに用意できた。

 

Controllerの改造

 

ファイルの内容を以下のように編集する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

  // $this->output->enable_profiler(true); // for debug

 }

 

 // 初期画面

 public function index()

 {

  $action = $this->input->post('action');

  if ($action == 'add') {

   $message = $this->input->post('message');

   $this->chat_model->create_message($message);

  }

  $data['talk'] = $this->chat_model->read_message();

  $this->load->view('welcome_index', $data);

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

Controllerの改造の解説

これは全部CodeIgniterで用意されている機能なので、マニュアルを読めば使い方が分かるようになってます

 

Viewの改造

ファイルの内容を以下のように編集する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form action="welcome/index" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <input type="text" name="message">

   <input type="hidden" name="action" value="add">

   <button>投稿する</button>

  </form>

  <h2>投稿一覧</h2>

  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#CCCCFF">

   <tr>

    <th>No.</th>

    <th>投稿日時</th>

    <th>メッセージ</th>

    <th>編集</th>

    <th>削除</th>

   </tr>

   <?php if(isset($talk)): ?>

   <?php foreach($talk as $item): ?>

   <tr>

    <td><?php echo $item['id']; ?></td>

    <td><?php echo $item['create_at']; ?></td>

    <td><?php echo $item['message']; ?></td>

    <td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

    <td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

   </tr>

   <?php endforeach; ?>

   <?php endif; ?>

  </table>

 </body>

</html>

 

Viewの改造の解説

 

説明文が300行を超えてしまった!これ以上は増田で表示できない。)次回はメッセージの変更をやってみよう。

 


anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得 ←★今ここ★

anond:20181110120715 増田プログラマー養成講座 その19 SQLデータ更新

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その17 Webアプリの骨組み

前回は、Webアプリの完成見本を先に見てみました。

今回は、Webアプリを作る途中の過程を見て、作る雰囲気を一緒に味わってみましょう。

 

フレームワーク使用ルール=「設定より規約」=手抜きをする仕組み

最近フレームワークは、「設定より規約」(CoC、convention over configuration)という発想で作られている。

フレームワーク規約使用ルール)に従うと、プログラマー作業量が減って、楽ができる。

 

設定より規約(convention over configuration)とは、開発者の決定すべきことを減少させ、単純にするが柔軟性は失わせないというソフトウェア設計パラダイム

使用しているツール実装した規約開発者の望む動作と一致していれば、設定ファイルを書く必要もない。実装規約と望みの動作が違っている場合必要動作を設定しなければならない。

 

最近フレームワークは「設定より規約アプローチ採用しているものが多い。

例えば、Ruby on Rails、Kohana、Grails、GrokZend FrameworkCakePHPSymfony などがある。

 

CodeIgniter使用ルール

CodeIgniter使用ルールは、マニュアルチュートリアル確認できる。

↑このページの「アプリケーションフローチャート」を見てみよう。

 

  1. 一番左の「index.php」が、Webアプリ入口になっている。(エントリーポイントフロントコントローラーパターン等ともいう)
  2. から2番目の上段「Routing」で、URLに応じて、仕事の振り分け先を決定する。(ディスパッチ、マッピングルーティング等ともいう)
  3. から4番目の「Application Controller」で、具体的な処理の指示を出す。
    1. Application Controllerは、「Model」に必要データを用意させる。
    2. Application Controllerは、「View」に表示用の画面を作らせる。
    3. Application Controllerが、index.phpに表示用の画面を渡す。
  4. 表示用の画面(最終的な処理の結果)を受け取った「index.php」は、ユーザーブラウザー)に画面を渡す。

 

 


 

それでは、CodeIgniterプログラマーが用意する部分のM(Model)とV(View)とC(Application Controller)を、骨組みから作ってみよう。

事前準備として、前々回と前回のWebアプリ完成見本を用意するところまでやっておこう。

 

スケルトンとは?

スケルトン(skeleton, 骨格)とは動物人間の骨格。

コンピュータプログラムコードの骨格部分。プログラムコード作成では、初期段階でスケルトン作成し、その後で詳細部分を肉付けしていく。

 

 

 

Application Controllerの骨組み

まずは、MVCのCの骨組みを作ろう。

Controllerは、ユーザーからリクエストを受け付けて、ModelViewに指示を出す監督です。

 

上記フォルダの中に「Welcome.php」というファイルを作る。(デフォルトであるはずなので、それを使ってOK

 

CodeIgniterルールで、Application Controllerを置く場所は「application/controllers」というフォルダになっている。

CodeIgniterルールで、一番最初に呼び出されるApplication Controllerは「Welcome.php」というファイルになっている。

→これは「C:\xampp\htdocs\waf\application\config\routes.php」という設定ファイルで決められている。

$route['default_controller'] = 'welcome'; // 別の名前にすれば変えられる。

 

「Welcome.php」の中身を以下にように変更する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 // 初期画面

 public function index()

 {

  echo "Here is index()";

 }

 // 更新画面

 public function update()

 {

  echo "Here is update()";

 }

 // 削除画面

 public function delete()

 {

  echo "Here is delete()";

 }

}

これがチャットApplication Controllerとして動作する最小限の内容=骨格だ。

 

継承

class Welcome extends CI_Controller

という行に注目してみよう。

CodeIgniterで用意されてる「CI_Controller」クラス継承して、プログラマーが「Welcome」クラスを作ってる。

継承によって、フレームワークが用意してる様々な機能をWelcomeクラス内で使えるようになる。

 

URLリクエスト)とControllerの対応マッピング)のルール

「Welcome」クラスの中に、「index()」「update()」「delete()」という3つのメソッドを用意した。

CodeIgniterURLは、Action Controllerのクラス名やメソッド名とひもづけられている。

今回作るWebアプリだと、

「http://localhost/waf/クラス名/メソッド名」

という対応関係になっている。

(例)

http://localhost/waf/        →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/index  →Welcomeクラスindex()メソッドが呼び出される。

http://localhost/waf/welcome/update →Welcomeクラスのupdate()メソッドが呼び出される。

http://localhost/waf/welcome/delete →Welcomeクラスdelete()メソッドが呼び出される。

 

 

 

Viewの骨組み

次にMVCのVの骨組みを作ろう。

ビューは、表示する画面の部分です。HTMLWebページの構造を書きます

 

 

welcome_index.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

 </body>

</html>

 

chat_update.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

 </body>

</html>

 

chat_delete.php編集

以下の内容にして保存する。

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

 </body>

</html>

 

Viewファイルの追加に合わせて、Controllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

(変更点の説明

コンストラクターの追加

コンストラクター「__construct()」は、クラスからインスタンスが作られるとき自動的に実行されるメソッドだ。コンストラクターは、初期化最初にやっておくべき下準備を書いておく。

$this->load->helper('url');

CodeIgniterには、リンクの表示を補助する「URLヘルパー」という機能が用意されている。

上記のように書くとURLヘルパーを呼び出して、使えるようになる。

Viewファイルの以下の行でURLヘルパーを使っている。=「base_url()」という関数URLヘルパーの1つ。

<base href="<?php echo base_url(); ?>">

 

ビュー読み込みメソッドの追加

$this->load->view('welcome_index');

というメソッドによって、Viewファイルの「welcome_index.php」を呼び出し、画面を出力します。

 

これでMVCのCとVの骨組みができた。

今の段階でWebブラウザーで各ページを表示させると、各Viewファイルの中身が表示される。

 

 

 

Modelの骨組み

次にMVCのMの骨組みを作ろう。

モデルは、具体的な処理内容(ロジック)を書いて、データを読み書きする部分です。

データベースを操作するSQL文もモデルに書きます

 

上記フォルダの中に「Chat_model.php」というファイルを作り、以下の内容にして保存する。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

}

 

CodeIgniterで用意されてる「CI_Modelクラス継承して、プログラマーが「Chat_modelクラスを作ってる。

「Chat_modelクラスコンストラクターには、以下のように書いている。

$this->load->database();

これは、データベースを使用する準備だ。

 

Modelの追加に合わせて、さらにControllerも一部変更します。

 

Welcome.php編集

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

 }

 

 // 初期画面

 public function index()

 {

  $this->load->view('welcome_index');

 }

 

 // 更新画面

 public function update()

 {

  $this->load->view('chat_update');

 }

 

 // 削除画面

 public function delete()

 {

  $this->load->view('chat_delete');

 }

}

 

コンストラクター

$this->load->model('chat_model');

と書いて、「Chat_model」というモデルを読み込むようにした。

これで、モデルに用意するいろんな機能コントローラーで使えるようになる。

 

 

 

以上で、MVCの骨組み(スケルトン)だけを作成するプロセスを見ていきました。

まだ中身はスカスカで、何も機能がついてませんね。

次回は、データベースのCRUD操作を行なって、チャットメッセージを追加/取得/変更/削除する機能実装してみましょう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベースの参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み ←★今ここ★

anond:20181104233013 増田プログラマー養成講座 その18 SQLデータの追加と取得

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-11-01

増田プログラマー養成講座 その16 Webアプリの完成見本(続き)

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本」の続きです。

 

index.php編集

Webサーバーの時間設定がズレていると、メッセージ作成したときに、作成日時もズレてしまます

(=12時に投稿したメッセージが、3時に投稿したことになってしまう、等。)

時間がズレてた場合は、Webサーバーの時刻を一時的に変更する処理を追加しておきましょう。

 

index.phpファイルの先頭に以下の内容を追加します。

上記フォルダの中の「index.phpファイルを開いて、先頭付近(2行目辺り)に以下の内容を追加します。

<?php

date_default_timezone_set('Asia/Tokyo'); // 2行目あたりに追加

 

動作確認

以上で、簡易チャットWebアプリが設置できました。

ブラウザーアクセスして、動作確認してみましょう。

 

 

以上で、データベースを利用したWebアプリが用意できました。

コピー作成しただけでは、プログラム意味が分からないと思うので、次回以降プログラムの部分を解説してみます

次回は、

を見ていきましょう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き) ←★今ここ★

anond:20181104161900 増田プログラマー養成講座 その17 Webアプリの骨組み

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

増田プログラマー養成講座 その15 Webアプリの完成見本

前回は、Webアプリモックアップ(ハリボテ)を作るところまでやりました。

今回は、Webアプリ機能実装してみましょう!

 

学習の狙い

データベースを使ったWebアプリを作って、データベースの基本操作CRUDの4つ)を練習してみよう!

CRUD
  1. Create 追加
  2. Read  取得
  3. Update 更新
  4. Delete 削除

 

説明の順番について

どういう順番で説明したら分かりやすいか検討してみた。

  1. まず先に、Webアプリの完成見本を提示します。
  2. 続いて、作る過程説明しながら、各プログラム意味説明してみます

 

作業の流れ

ざっくりと、以下のような流れで作っていきます

  1. XAMPPを起動する。(参考 anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備)
  2. CodeIgniterインストールする。(参考 anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう)
  3. phpMyAdminでデータベース操作する。(参考 anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう)
  4. ApacheWebサーバーソフト)の設定を変更する。(今回説明
  5. Visual Studio Code等のツールプログラムを書く。(次回説明
  6. ブラウザー動作確認する。

 

XAMPPを起動させる

(参考 anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備)

講座その6を参考にして、XAMPPを起動させて、ApacheMySQLスタートして下さい。

 

CodeIgniterインストールする。

(参考 anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう)

講座その9を参考にして、XAMPPの中にCodeIgniterインストールしておきます

 

phpMyAdminでデータベース操作する。

(参考 anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう)

講座その11を参考にして、MySQLWebアプリ用のデータベーステーブル作成しておきます

 

データベースの設定

講座その11で、データベース練習で「chat」というデータベースを作ってみました。

そのときmessage」というテーブル作りましたが、今回Webアプリで使うテーブルとして新たに「talk」というテーブル作成します。

(補足:前に作ったテーブルmessage」の中に、テーブル名と同じ「message」という名前カラム(列)を作ってました。これでも問題ないんだけど、プログラムを書くときテーブル名とカラム名を混同しないようにしたいので、念のため作り変えときましょう。)

 

talkテーブル新規作成する

SQLで「talk」というテーブルを作る場合、以下のようなSQL文になります

CREATE TABLE `talk` (

 `id` int(11) NOT NULL,

 `create_at` datetime NOT NULL,

 `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

 `message` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

このSQL文をphpMyAdminで実行すれば「talkテーブルを作れます

  1. phpMyAdminを開く。
  2. データベース「chat」を開く。(前に作った「messageテーブルは使わないので削除してもOK
  3. phpMyAdmin画面の上部メニューの「SQL」をクリックする。
  4. データベース chat 上でクエリを実行する:」の空欄に上記SQL文をコピーして実行すれば、「talk」というテーブルができる。

 

これでデータベースの準備ができました。

 

Apacheの設定

CodeIgniterで使う「URL」の表示方法ちょっと変更しておきたいので、ApacheWebサーバーソフト)の設定を変更しておきます

(「URL」=情報がどこにあるのかを示すインターネット上の住所)

Apacheの「mod_rewrite」という仕組みによって、URLの扱い方を変更します。)

 

(例)

変更前: http://localhost/waf/index.php/welcome/

変更後: http://localhost/waf/welcome/

というように、URLの中にある「/index.php」という文字列を表示させない設定にします。

 

Apache設定ファイル.htaccess

Apacheの設定は「.htaccess」という名前設定ファイルを用意して変更します。

 

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]

 

.htaccess」の書き方を理解するには、「正規表現」という仕組みの知識必要です。

まだ「正規表現」を勉強してない段階では、とりあえずコピペして使って下さい。

 

Webアプリ完成見本

CodeIgniterで、

を行ないます

 

CodeIgniter設定ファイルconfig.php」の編集

config.php」をIDEやエディターで開いて、以下のように変更する。

$config['base_url'] = 'http://localhost/waf/';

$config['index_page'] = '';

 

最初は、

$config['index_page'] = 'index.php';

になってるけど、「index.php」を削除して、「''」(空)にしておく。

 

CodeIgniterデータベース設定ファイル「databese.php」の編集

「databese.php」をIDEやエディターで開いて、以下のように変更する。

$db['default'] = array(

 'dsn' => '',

 'hostname' => 'localhost',

 'username' => 'root',

 'password' => '',

 'database' => 'chat',

 'dbdriver' => 'mysqli',

(※上記のように、MySQLのusernamepasswordは「root」(管理者)のデフォルト設定を使ってます。)

 

Controllerの作成

上記フォルダの中に「Welcome.php」というファイルを作って、内容を以下のようにします。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Welcome extends CI_Controller

{

 public function __construct()

 {

  parent::__construct();

  $this->load->model('chat_model');

  $this->load->helper('url');

  // $this->output->enable_profiler(true); // for debug

 }

 

 // 初期画面

 public function index()

 {

  $action = $this->input->post('action');

  if ($action == 'add') {

   $message = $this->input->post('message');

   $this->chat_model->create_message($message);

  }

  $data['talk'] = $this->chat_model->read_message();

  $this->load->view('welcome_index', $data);

 }

 

 // 更新画面

 public function update($id = '')

 {

  $id = $id ? $id : $this->input->post('id'); // id -> segment or post

  $action = $this->input->post('action');

  if ($action == 'update') {

   $message = $this->input->post('message');

   $this->chat_model->update_message($id, $message);

  }

  $data['talk'] = $this->chat_model->read_message_by_id($id);

  $this->load->view('chat_update', $data);

 }

 

 // 削除画面

 public function delete($id = '')

 {

  $id = $id ? $id : $this->input->post('id');

  $action = $this->input->post('action');

  if ($action == 'delete') {

   $this->chat_model->delete_message($id);

  }

  $data['talk'] = $this->chat_model->read_message_by_id($id);

  $this->load->view('chat_delete', $data);

 }

}

 

View作成

上記フォルダの中に「welcome_index.php」「chat_update.php」「chat_delete.php」という3つのファイルを作って、内容を以下のようにします。

 

Viewファイル「welcome_index.php」の中身

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form action="welcome/index" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <input type="text" name="message">

   <input type="hidden" name="action" value="add">

   <button>投稿する</button>

  </form>

  <h2>投稿一覧</h2>

  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#CCCCFF">

   <tr>

    <th>No.</th>

    <th>投稿日時</th>

    <th>メッセージ</th>

    <th>編集</th>

    <th>削除</th>

   </tr>

   <?php if(isset($talk)): ?>

   <?php foreach($talk as $item): ?>

   <tr>

    <td><?php echo $item['id']; ?></td>

    <td><?php echo $item['create_at']; ?></td>

    <td><?php echo $item['message']; ?></td>

    <td><a href="welcome/update/<?php echo $item['id']; ?>">編集</a></td>

    <td><a href="welcome/delete/<?php echo $item['id']; ?>">削除</a></td>

   </tr>

   <?php endforeach; ?>

   <?php endif; ?>

  </table>

 </body>

</html>

 

Viewファイル「chat_update.php」の中身

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

  <p>メッセージを変更して「更新する」ボタンを押してください。</p>

  <form action="welcome/update" method="post" accept-charset="utf-8">

   <label>メッセージ</label>

   <?php if (isset($talk)): ?>

   <input type="text" name="message" value="<?php echo $talk['message']; ?>">

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="update">

   <?php else: ?>

   <p>※該当するメッセージがありません。</p>

   <?php endif;?>

   <button>更新する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Viewファイル「chat_delete.php」の中身

<?php defined('BASEPATH') or exit('No direct script access allowed');?>

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

  <base href="<?php echo base_url(); ?>">

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

  <p>以下のメッセージを削除しますか?</p>

  <form action="welcome/delete" method="post" accept-charset="utf-8">

   <?php if (isset($talk)): ?>

   <p style="background-color:lightpink"><?php echo $talk['message']; ?></p>

   <input type="hidden" name="id" value="<?php echo $talk['id']; ?>">

   <input type="hidden" name="action" value="delete">

   <?php else: ?>

   <p>※該当するメッセージがありません。(または削除済です。)</p>

   <?php endif;?>

   <button>削除する</button>

  </form>

  <p><a href="welcome/index">戻る</a></p>

 </body>

</html>

 

Model作成

上記フォルダの中に「Chat_model.php」というファイルを作って、内容を以下のようにします。

<?php

defined('BASEPATH') or exit('No direct script access allowed');

 

class Chat_model extends CI_Model

{

 public function __construct()

 {

  parent::__construct();

  $this->load->database();

 }

 

 // Create

 public function create_message($message = '')

 {

  $sql = "INSERT INTO talk SET create_at = ? , message = ?";

  $param = array(date('Y-m-d H:i:s'), $message);

  $this->db->query($sql, $param);

  return $this->db->insert_id();

 }

 

 // Read All

 public function read_message()

 {

  $sql = "SELECT * FROM talk";

  $query = $this->db->query($sql);

  return $query->result_array();

 }

 

 // Read by Id

 public function read_message_by_id($id = 0)

 {

  $sql = "SELECT * FROM talk WHERE id = ?";

  $param = array($id);

  $query = $this->db->query($sql, $param);

  return $query->row_array();

 }

 

 // Update

 public function update_message($id = 0, $message = '')

 {

  $sql = "UPDATE talk SET message = ? WHERE id = ?";

  $param = array($message, $id);

  $this->db->query($sql, $param);

  return $this->db->affected_rows();

 }

 

 // Delete

 public function delete_message($id = 0)

 {

  $sql = "DELETE FROM talk WHERE id = ?";

  $param = array($id);

  $this->db->query($sql, $param);

  return $this->db->affected_rows();

 }

}

 

この続きは、

anond:20181101230220 増田プログラマー養成講座 その16 Webアプリの完成見本(続き)」

へ続きます

2018-10-31

増田プログラマー養成講座 その14 Webアプリの試作品作成

前回は、SQL文法を学びました。

今回は、データベースを使ったWebアプリ制作を通じて、SQLの使い方を確認してみましょう。

 

Webアプリとは?

WebブラウザーGoogle Chromeなど)で動作するアプリのこと。

ウェブアプリケーションWeb application)は、インターネット(もしくはイントラネット)などのネットワークを介して使用するアプリケーションソフトウェアである

多くの場合、これらのアプリケーションは、Webブラウザ上で動作するプログラミング言語(たとえばJavaScript)によるプログラムWebサーバ側のプログラム協調することによって動作し、ユーザはそれをWebブラウザ上で使用する。

 

準備

Windowsパソコンを使ってたら、「XAMPP」を使ってすぐにWebアプリを試作できる。

以前の講座(その6、その9)を参考にして、XAMPPCodeIgniterを用意しておこう。

 

Webアプリ制作の流れ

最近アプリの作り方は、「デザインスプリント」と呼ばれる方法流行ってます。本やネット情報がたくさんあるので調べてみよう。

 

ざっくりと、以下のような流れです。

  1. アイデア企画)を出す。
  2. アイデアを基に、ペーパープロトタイプ(紙の試作品)を作る。=アナログの試作品ノートなどにアプリの完成予想図、画面などを描く。
  3. ペーパープロトタイプを基に、動くモック(ハリボテ)を作る。=デジタルの試作品
  4. モック画面を基に、実際のプログラム作成して、アプリを完成させる。
  5. 完成したアプリを改良していく。

それでは順番にやってみよう。

 

アイデア

以前にデータベース練習をしたとき、「後で簡単チャット(おしゃべり)ができるWebアプリ作ってみたいと思う。」と言ったので、今回のアイデアは「チャットを作る」にしよう。

 

ペーパープロトタイプ

チャット必要な画面は3つある。

  1. トップページの画面(新規投稿投稿一覧がある)
  2. 投稿更新する画面
  3. 投稿を削除する画面

ノートなどに描いて画面をデザインしてみよう。

 

モック

Webページを作るには、HTMLCSS知識必要だ。HTMLCSSを使ったことがなければ、本やネット情報勉強してみよう。

今回はCSSを使わずに、HTMLだけでシンプルWebページを作ってみよう。(練習から余計なもの無駄を省きたい。)

 

Webページ制作ツール

ブラウザーテキストエディター(またはIDE)が必要です。

特にこだわりがなければ、Microsoftの「Visual Studio Code」という無料IDE統合開発環境)を使ってみよう。

インストール方法や使い方、メニュー日本語化のやり方は、検索して調べてみよう。

 

フォルダを作る。

デスクトップに「mock」というフォルダを作る。

 

ファイルを作る。

「mock」フォルダの中に

  1. index.html」 (トップページの画面)
  2. 「edit.html」 (投稿更新する画面)
  3. delete.html」(投稿を削除する画面)

という3つのファイルを作る。

テキストエディターで保存するとき文字コードを「UTF-8」にしておく。

 

ファイルの中身を編集する。

index.htmlファイルエディターやIDEで開き、以下のような内容に編集して保存します。(コピペする場合、行頭の字下げ(インデント)の全角スペースを半角スペースに置換して下さい。)

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>新規投稿</h2>

  <form>

   <label>メッセージ</label>

   <input type="text" name="message">

   <button>投稿する</button>

  </form>

  <h2>投稿一覧</h2>

  <table border="1" cellpadding="5" cellspacing="0" bordercolor="#CCCCFF">

   <tr>

    <th>No.</th>

    <th>投稿日時</th>

    <th>メッセージ</th>

    <th>編集</th>

    <th>削除</th>

   </tr>

   <tr>

    <td>3</td>

    <td>2018-10-20 12:34:56</td>

    <td>Webアプリを作ってみる!</td>

    <td><a href="edit.html">編集</a></td>

    <td><a href="delete.html">削除</a></td>

   </tr>

   <tr>

    <td>2</td>

    <td>2018-09-10 22:33:44</td>

    <td>今日からプログラミングを勉強します。</td>

    <td>編集</td>

    <td>削除</td>

   </tr>

   <tr>

    <td>1</td>

    <td>2018-08-01 11:22:33</td>

    <td>こんにちは!</td>

    <td>編集</td>

    <td>削除</td>

   </tr>

  </table>

 </body>

</html>

 

「edit.htmlファイルエディターやIDEで開き、以下のような内容に編集して保存します。(コピペする場合、行頭の字下げ(インデント)の全角スペースを半角スペースに置換して下さい。)

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>編集</h2>

  <p>メッセージを変更して「更新する」ボタンを押してください。</p>

  <form>

   <label>メッセージ</label>

   <input type="text" name="message" value="Webアプリを作ってみる!">

   <button>更新する</button>

  </form>

  <p><a href="index.html">戻る</a></p>

 </body>

</html>

 

delete.htmlファイルエディターやIDEで開き、以下のような内容に編集して保存します。(コピペする場合、行頭の字下げ(インデント)の全角スペースを半角スペースに置換して下さい。)

<!DOCTYPE html>

<html>

 <head>

  <meta charset="utf-8">

  <title>増田チャット</title>

 </head>

 <body>

  <h1>増田チャット</h1>

  <h2>削除</h2>

  <p>以下のメッセージを削除しますか?</p>

  <form>

   <p style="background-color:lightpink">Webアプリを作ってみる!</p>

   <button>削除する</button>

  </form>

  <p><a href="index.html">戻る</a></p>

 </body>

</html>

 

以上でモックWebページ(HTMLファイル)ができました。

Webブラウザーで「index.html」を開いてください。「編集」や「削除」、「戻る」をクリックして、チャットの画面を確認してください。

 

モックを作ってからWebサイトを作る方法

実務では「仕様書」という書類を大量に作る場合もありますが、時間と労力の無駄になっている場合が多々あります。(紙の仕様書はあまり使われる機会がない)

紙の仕様書アナログ)の代わりに、モック仕様書デジタル)として使うと、その後の段階がスムーズになります

どうしても紙でなければ困る場合以外は、モックをそのまま仕様書として使ってみましょう。

 

プロトタイプ作成ツール

モック(動くハリボテ)を作るための便利なツールがいろいろあります

 

 

 

ちょっと長くなったので、モックを基に機能実装プログラミング)するのは次回にしましょう。

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミングの練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214133 増田プログラマー養成講座 その11 データベースを使ってみよう

anond:20181026145516 増田プログラマー養成講座 その12 データベース参考書

anond:20181028152656 増田プログラマー養成講座 その13 SQL文法

anond:20181031014212 増田プログラマー養成講座 その14 Webアプリの試作品作成 ←★今ここ★

anond:20181101225335 増田プログラマー養成講座 その15 Webアプリの完成見本

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-22

増田プログラマー養成講座 その9 MVCフレームワーク

前回はオブジェクト指向プログラミングOOP)で使う様々な仕組みについて学びました。

今回はOOPWebアプリを作ってみよう!

 

今日学ぶこと

 

OOPの使いどころ

OOP文法を学んだ後、OOP長所が発揮される場面をどうやって説明したらいいのか?を考えてみた。

横田意見を参考にして、「フレームワーク」を使って、OOPの使い方を見てみよう。

 

フレームワークとは?

framework →「枠組み」「骨組み」「構造」などという意味英語

システム開発で使われる「フレームワーク」とは、よく使われる機能のパーツを用意して、まとめて1つのパッケージにしたプログラム群のことだ。

 

イメージとしては、いろんなおかずが入ってる豪華な幕の内弁当のようなものだ。

ただし、ご飯のマスだけが空になっていて、プログラマー自分ご飯を用意しないと、弁当としては完成していない形になってる。

普通の白いご飯を作って追加しても良いし、好みや必要に応じて、炊き込みご飯やまぜご飯を作って追加しても良い。

ゼロから豪華な幕の内弁当を作るのは大変だけど、ご飯だけ用意すれば完成するので楽ができる。

 

プログラムの開発でフレームワークを使うと、プログラマー必要最小限のコードを書くだけでアプリを完成させられるので楽ができる。

 

ライブラリーフレームワークの違い

フレームワーク」と似た用語で「ライブラリー」という用語がある。

イメージとしては、ライブラリーは、ばら売りのおかずだ。

弁当を作るときに使いたいおかず(ライブラリー)を自分で考えて探し出し、選ばないといけない。

フレームワーク最初からおかずが全部用意されているので、自分でわざわざ選ばなくてもOK

 

プログラム動作で見た場合フレームワークライブラリーでは決定的な違いがある。

↑このページの「図1●フレームワークにおける制御の反転」という図解を見てみよう。

制御の反転」(Inversion of Control、IoC)といって、自分の書いたコードが主役から脇役になってる点が違う。

 

(主役と脇役という説明は適切ではないかもしれないけど、イメージとしてはそんなかんじ?)

 

MVCフレームワークとは?

フレームワークはいろんな機能全部入りで、こいつを使えば、ちょっとコードを書くだけで、高機能アプリがすぐに作れる。

ここでは「MVCパターン」という仕組みで作られた「MVCフレームワーク」を使ってみよう。

 

MVCは「Model」「View」「Controller」の略で、MとVとCの3つを自分で用意すれば、アプリが作れちゃう仕組みだ。

MVC歴史は古くて、GUI(Graphical User Interfaceグラフィカルユーザインタフェース)を作る方法定番だ。

→「MVC 仕組み」でGoogle画像検索すると、分かりやすい図解がいろいろ出てくる。

 

(参考)

Wikipedia説明は、文章学術的で難しいけど、正確な説明になってると思う。

↑このページの「MVC概要」という図が、MVCの仕組み=動作の流れを分かりやす説明してる。

 

MVCの仲間たち

MVCパターンと似たような仕組みが、他にもいろいろある。

 

こういうプログラム設計に関するノウハウは、「アーキテクチャー・パターン」という分野に蓄積されている。詳細はGoogle検索してみよう。

 

WAF(Web Application Framework

Webアプリを作るときに使われるMVCフレームワークには、いろいろある。

WAFを使うと、Webアプリが手軽に作れる。

 

有名なものとして、

などが挙げられる。

 

PHPOOP学習しているので、ここではPHPのWAFの1つであるCodeIgniter」を使ってみよう。

 

CodeIgniterコードイグナイター)

CodeIgniterは使い方がシンプルで、覚えるルールが少ないので教材に向いているだろう。

それでは、CodeIgniterを使ってみよう。

 

準備

↑このページの「Downloadから「3.1.9.zip」という圧縮ファイルダウンロードする。(2018年10月現在バージョン3.1.9でした)

 

ダウンロードしたファイル解凍して、「CodeIgniter-3.1.9」というフォルダが出てきたら、「waf」という名前に変えよう。(「waf」はWeb Application Frameworkの略。)

今「waf」フォルダの中には、「index.php」というファイルや、「application」「system」などフォルダがあるね?

この「waf」フォルダを以前用意したXAMPPの中にコピーする。(参照:anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備)

=「C:\xampp\htdocs」(Cドライブの中の「xampp」の中の「htdocs」というフォルダ)の中に「waf」をコピーして下さい。

=「C:\xampp\htdocs\waf」という位置コピーできたらOK

 

動作チェック

これで「Welcome to CodeIgniter!」というWebページが表示されたら、CodeIgniter動作確認OKです。

 

CodeIngiterの設定

$config['base_url'] = 'http://localhost/waf/';

 

Webアプリ作成

それでは「Hello, world!」と表示させるシンプルWebアプリを作ってみよう。

 

MVC「C」作成する。

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

 

class Hello extends CI_Controller {

 public function index()

 {

  $this->load->view('hello_index');

 }

}

ここで注目して欲しいのは、「class Hello extends CI_Controller」という部分です。

フレームワークが用意している「CI_Controller」というクラス継承して、自分で「Hello」というクラスオブジェクト設計図)を作っている、という点です。

ここでOOPの仕組み~継承を使ってるわけですね。

 

MVCの「V」を作成する。

次に、

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

<!DOCTYPE html>

<html>

<head>

 <meta charset="utf-8">

 <title>Test</title>

</head>

<body>

 <p>Hello, world!</p>

</body>

</html>

 

これでWebアプリができました!

今回は簡単なので、MVC「M」は用意しませんでした。(CとVだけで完成)

 

Webアプリ動作確認

Webブラウザーで「http://localhost/waf/index.php/hello」というURLアクセスして下さい。

画面に「Hello, world!」と表示されたら、Webアプリ作成成功です!

 

Hello, world!」の表示だけではショボ過ぎるけど、Webフレームワークを使えばもっといろいろな機能が作れます

詳細は、CodeIgniterマニュアルを参照して下さい。

↑このページで「ユーザガイド(日本語)」を読んでみて下さい。

 

まとめ

 

次回は、OOP理解を深めるための参考書を紹介してみます

 

Webアプリを作るときデータベースがないと不便なので、次の次ぐらいにSQLを学ぼう。

MySQLデータベース)を使えば、掲示板などのWebアプリも作れるようになります

 


anond:20181015215004 未経験からプログラマーなんだが全然からない

anond:20181016015826 増田プログラマー養成講座 その1 パソコンの用意

anond:20181016164341 増田プログラマー養成講座 その2 プログラムデータ+処理、プログラム言語の種類

anond:20181016180059 増田プログラマー養成講座 その3 構造プログラミングの基本(順次、反復、分岐

anond:20181016193144 増田プログラマー養成講座 その4 子ども向け教材「Scratch」で構造プログラミング練習

anond:20181017161003 増田プログラマー養成講座 その5 オブジェクトとは何か?

anond:20181017191404 増田プログラマー養成講座 その6 OOPの種類、PHPの準備

anond:20181019181549 増田プログラマー養成講座 その7 OOPの仕組み(前半)

anond:20181020230044 増田プログラマー養成講座 その8 OOPの仕組み(後半)

anond:20181022232327 増田プログラマー養成講座 その9 MVCフレームワークを使ってみよう ←★今ここ★

anond:20181023184616 増田プログラマー養成講座 その10 OOP参考書

anond:20181024214737 増田プログラマー養成講座 コンテンツ一覧

2018-10-13

[] 【1】2018秋、ベトナムホーチミン

<< この旅行記の先頭へ


anond:20181013111225





Day 1



1日目 成田ベトナムの翼、タンソンニャット


羽田深夜便だった前2回の旅行と違い、今回は成田発で、昼出発。

しかもややメンタルに不調を抱えているとあって、余裕を持った出発を心掛けたかったが、時間勘違いして、ギリギリ成田エクスプレスに駆け込み、その上方向を間違えて折り返すという失態を演じてしまった。

南国ホーチミンに行く前に国内でもう汗ダクだ。

肝心な時には何かバタバタする傾向がある自分なので、「またやってしまったー」と思ったが、どうやらチェックインには間に合いそうで、成田エクスプレスの車窓から畑を眺めながら、「この旅行に行って何になるんだろう」と愚にもつかない事を考えた。

別に何が起こるわけではない。

ただ若いからずっとボンヤリあった心象風景、雨のベトナムで川を眺めながらお茶料理を食べる、その画をこの目で見て来るのだ。

メンタル不調なんて、ボンヤリするのに格好の舞台装置じゃないか


前回の香港旅行では、事前に広東語フレーズをいくつか覚えて行ったが、「話せるものの聞き取れない」という致命的な見落としがあり、結局中学校時台成績2の片言にもほどがある英語と、メモによる筆談で乗り切ることになった。

ベトナム語も広東語と同じ声調言語(音の高低と発音意味が決定する言語)であり、しかもその声調というのが「コブシを効かせるようにいちど下げて上げる」「波のようにうねって上げ下げして上げる」という難解極まるモノで、もう「ありがとう」「これください」「トイレはどこですか」以外のコミニュケーションは投げている。

今回も筆談翻訳機とGoogle mapが頼りだ。


今回搭乗したベトナム航空は、ベトナムフラッグシップのようで、エコノミークラスといえど、タイガーエア台湾香港エクスプレスとはモノが違う。もちろんTGATやHKEXが悪いって訳じゃないけど、地上職員日本語ができるし、機材も大型で安定していて、シートには枕やブランケットが用意され、機内食も出る。

さらに、シートにはモニターが設置されていて、映画その他も見られる。

海外に行くときはその地のポップカルチャーを予習して行きたいのだが(香港前に発見したアガサ・コンは最高だった)、ベトナムはまだYoutubeでの情報が少なく、これと言った映画アーティスト発見できずにいた。

そこでモニターポチポチやっていると、果たして良さげなベトナムアーティスト(多分)を発見したのだった。

ホアン・ティエン・ミン・トリ

英語詞の曲とベトナム語詞の曲が半々。音楽性はR&BEDMダブステップの様な強めじゃないムーディーなやつ)とジャズを掛け合わせた様な感じで、ジャスティン・ティンバーレイクを思わせる。

これでラップが入ってきたら完璧だ。

機内では検索できないので、あとで調べよう。

朝飲んだ安定剤が効いているのかな、憂鬱な気分が後退してきていい感じだ。


ややあって、海外旅行なら一度は聴いてみたい、「pork or fish rice ?」というフレーズと共に機内食サーブされた。

ベトナム航空会社なのに機内食和食が出るという不思議仕様でもっぱら噂のベトナム航空だ。

ここで「fish」と答えれば和食が出て来る事は間違いなく、折角の海外旅行しかも出発便の機内食和食というのもどうかという事で、「pork」と答えると、豚の唐揚げ煮物チャーハンぶっかけたようなご飯と、海鮮春雨サラダパンデザートが出てきた。

春雨の方はヤムウンセンとかそれに類するもので明確にアジア料理だが、ぶっかけご飯の方はなんだか分からない。

付け合わせが椎茸煮しめだったり、桜の形に型抜きされたニンジンである事も地味に混乱する。

味はというと、エコノミーでこれだけの物が食べられれば充分満足で、その後、暖かいコーヒーサービスがあったり至れり尽くせりだったのだが、あれはベトナム料理だったのだろうか。

カラトリーがまとめられた袋の底に、スパイスの小袋が入っており、「甘利香辛食品株式会社」と書いてあった。京都伏見会社であるという事だった。


機内食で腹を満たし、少し微睡む。

眼が覚めると機内は消灯されていた。

英語スポーツチャンネルを見ながら、「早くホテルで横になりたいな。でも何を楽しめるんだろう?テレビをつけても何言ってるか分かんないだろうし」という思いが浮かんで来る。

チャンネルでは、MTBアーティスト大木バランスボール建築物ワインディングロードなど様々な障害をキッカーにしてトリックをキメていた。インスピレーションを色々なものから受けて、驚くべきビデオやショーを生み出すらしい。

他の人から無意味に見えるもの価値見出して楽しみ、アートを生み出している。

意味不明に見えるけど羨ましい。

普段自分もそういうキャラなんだけど、ダメかもなぁと感じてしまう。

多分、朝飲んだ安定剤が切れる頃合いだ。

自律神経失調症で襲って来る不安無力感安定剤を飲んで感じる旅行への期待。

正常と狂気の境は曖昧だと思っていたが、こうして自分のものだと思っていたものが揺れ動くと、もっと根本的な、「自分」や「個性」というものが虚ろなものに思える。

深追いはしないでおこう。

しばらくして血糖値が安定すれば、少し収まって来るに違いないから。

今日はまだ頭痛は襲ってきてない。


「間も無く、当機はホーチミンに到着いたします。到着は19:30、ホーチミンの気温は38℃です。」

機内アナウンスに耳を疑った。

今年の異常熱波関東平野都市化が高気圧をブーストしており、バンコクより気温が高い、なんだったらユーラシア大陸で一番高いとさえ思っていたが、勝手思い込みだったようだ。飛行機を降りると湿った空気を感じる。日本人の歪んだプライドは常夏のホーチミンの湿った熱波が吹き飛ばししまった。


19:50、国際空港入国審査というのはどこか陰鬱雰囲気ものだが、イミグレーションを抜けてもタンソンニャット国際空港は静かだった。

思った以上に質素空港

香港国際空港羽田と比べると、まるで石垣空港みたいだ。

改めて旅程について説明しておくと、3泊5日というのは、帰国便がこのタンソンニャット国際空港 6:25発であり、ホテルのチェックアウトが当日では到底間に合わないので、前日にチェックアウトして空港で出発便をまつ、という事だ。

帰りはここで夜を明かすんだろうか。

そう思って建物を出て驚いた。

なんと半解放の広大なスペースに待合ベンチが設置されている。

軒を並べる飲食店、溢れる活気、びっくりするほどの騒がしさ。

タンソンニャット国際空港はこの半野外のスペースも含めての空港だった。

こんな空港日本ではまずない。

「ははは、スゲーな!」薬が抜けてるに決まってる時間帯だが自然に笑ってしまった。

たことがない光景だ。やっぱり先生の言う通り、この街に来て正解だった。


【2】2018秋、ベトナム、ホーチミン Day 1|ベトナムの名誉 へ >>

2018-10-11

日本社会学における査読論文価値研究者評価大勢

備忘録程度に

社会学における査読論文位置

一般に、日本社会学において査読論文は重視されます特に、若手にとって査読論文を出すことは研究業績を重ねる上で、非常に重要であると考えられています

ただ、以下の三点が一般的な「アカデミア」のイメージとずれているため、わかりにくいところかなと思います

雑誌の格が厳格に決まっているわけではない

日本社会学においては雑誌の格が明確に決まっておらず、これがIFやh-index論文の格がある程度自動的に決定される理系(+経済学)と違うところです。

たとえば、おそらく日本社会学で一番格が高い雑誌日本社会学会が発行する『社会学評論』でしょうが、これに掲載が決まったからと言って、マーケットにおいてダントツ評価が高くなるということは無いですし、掲載率も25%程度とそこそこ高いです。

一方、関東社会学会が発行する『年報社会学論集』や関西社会学会が発行する『フォーラム現代社会学』なども掲載率は同程度ですし、評価もされると思われます。つまり査読論文の質がジャーナルの格によって決定される、という仕組みが弱いです。これは社会学領域多様性手法多様性+後述する国際意識の弱さに起因していると思われます

また、『思想』『現代思想』といった一部商業雑誌や、『ソシオロジ』『ソシオロゴス』といった同人誌に近い形態を取る査読雑誌が、ある程度の評価を受けているという点も特殊かな。

依頼論文査読論文より偉いということはないが、同程度の評価はされる

依頼論文査読論文より偉いというのはまず無いと思いますが、一方で依頼論文評価されないということもないです。一般に依頼論文査読論文と同程度の評価を受けているかと思われます

ただ、依頼論文の質がピンキリだというのが所感です。

なぜ査読論文を書かずに本にしたがるのか

エライ社会学者ほど査読論文を書きたがらない、というのは事実です。というのも、彼らは自分の考えたことを本にしてまとめてしまうからですね。

ではなぜ本にしてしまうのかというと、査読を受けたがらないというのも確かにあるのですが、概ね①社会学ギョーカイ一定程度の市場があり、エライ教授がまとめた(キャッチーor教科書になる)本は出版社としても出したがる傾向が依然としてある②査読プロセスが長い(半年-2年)ため、自分の考えをとっとと出せる本のほうが魅力的③先述した社会学領域多様性手法多様性により、査読による集合知が先駆的研究場合働きにくい場合があるという点のほうが大きいかなと思います

特に特殊なのは①ですね。この日本社会学の市場の大きさが与えたアカデミズムへの影響は、無視できないと思います

なぜ日本社会学は国際化されてないのか

日本社会学がどちらかというと内向きな傾向にあることは否定出来ないと思います比較的国際化が進んでいるのは計量分析が盛んであり、アメリカ社会学親和性が強い家族人口ネットワーク社会学の一部と、伝統的に留学風潮の強い学説史・理論でしょうか。とはいえ後者はいわゆる「国際化」とはずれてますが。いずれにせよこれら以外の領域では、英仏独語論文を書くという行為はあまり一般的ではないです。

ではなぜ内向きなのかというと、前述したように社会学比較的まだ「売れる」学問から、というのが大きいように思います。つまり国内マーケットの中で、研究にせよ知名度にせよ院生にせよある程度獲得できてしまうという現状が、外に目を向けない元凶かなと。

もちろん社会学という学問が、もともと世界的な共有知を探求するというよりも、個別特殊的事例や、異なる側面から理論体系を構築する研究を好む傾向があるということも大きいでしょう。

ただ、国際化されてないからと言って国際化が評価されていないかというとそういうことはなく、IFを持つ海外査読誌に論文が載ることは、希少故に非常に意義があるものとして認められています

社会学ムラにおける研究評価

上記したように、社会学においては論文の格は雑誌によって決定されず、査読論文と依頼論文区別曖昧であり、内向き志向である。とすれば一体研究評価はどのようになされているのでしょうか?

この問に答えるのは容易ではないですが、平均的な回答をしておきます

博論単著の出来

まず重要なのはこれで、博論単著が出せるか、出したあと評価されるかは、研究個人評価に決定的な影響を及ぼします。

一部大学院で未だに課程博士をなかなか出したがらないのは、これも影響しています。つまり単著で出せるような博論でないと、そもそも就職が覚束ないという考えなんですね。

同様に、単著就職の際の評価点として重要です。

査読論文の数

査読論文の格が特に決まってないとはいえ査読論文重要評価対象とみなされているということは、先述したとおりです。ですので、いきおい査読論文の数は、若手研究者の就職にあたって非常に重要です。いくら良い博論単著刊行できたとしても、査読論文がない研究者が就職することは(比較的)難しいでしょう。

ではどのくらい必要なのかということですが、だいたい就職までに3~4本(紀要除く)書いているのが一般的なようです。

なお、海外著名ジャーナルや『社会学評論』に載っていると、当然その分評価されますが、評価が格段に良くなるということは無いように思います。これが「格がない」という言葉事実であります

最後社会学ムラ内での振る舞い次第…

どういうことかというと、結局いくら査読論文重要とはいえ、それ以外の仕事というのも社会学では評価対象となります。つまりムラのネットワークの中で、いか仕事(ブックチャプターや非常勤講師など)を貰えるかが、結果的研究評価において非常に重要ファクターとなるんですね。コネ採用されるというのはほぼなくなったと思いますが、未だに特定大学院生比較就職やすいのは、あるネットワーク所属していると、比較研究業績を増やしやすいということもあると思います。こうした状況の中で若手研究者は業績を稼ぐために媚びへつらい、顔を売り、己が付き合っていて気持ちがいい人間であることをアピールするために、愛想笑いを浮かべながら査読論文抜き刷りを配り歩くのです。

とはいえ、これは一般的な「社会」でも一緒ですからなんとも言えないですね。とかくこの世は世知辛いアカデミアがコミュ障楽園だと思っていたら、実はベンチャー企業営業類似スキル必要であることを痛感するのは、博士課程進学後になってからなのです。

ちなみに一部の大学ではこうした制度公的に備えているところもありますが、これは先述したネットワークが発達した大学への対抗実践として見ることもできるでしょう。

なお社会学ムラ内でのふるまいのコードは、一般的な民間企業とも、いわゆる「アカデミア」の無縫さとも異なる独自の体系があるのですが、それは省略

問題などありましたら、ご指摘ください。あくまでも個人的意見です。

2018-10-10

関数詰め込んで100メガ行くエクセル作らないで下さいよ

VLOOKはせめてINDEX+MATCHにしとくとかさあ

2018-10-09

anond:20181009044911

citation indexってなんや……ってググって初めて知ったレベルです。文系研究者そういうの知らんと思うがひょっとすると知らないのは俺だけで俺の周りの人は知ってるのかな。

ただこの場合、繰り返すけど私の論文ヨーロッパの隅っこの人口数百万の国で出版された現地語で書かれた紙の本に引用されてたのに気づいた、という話です。

citation indexってそういうの教えてくれるんですかね。厳しくない?

逆に私がヨーロッパの別の国で現地語で書かれた論文電子版がない和文査読誌に引用したことも、現地人には気付かれてないと思う。引用したうち何人かには「こういうの書いたよ」って言って現物を送ったけど、そうでもしないと気づきもしないんじゃないかと思いますね。だって引用文献一覧がウェブに上がってないんだもの、無理ですよ(査読誌ですが商業流通もしてるのでウェブに上げるのはNGと言われました)。

著書が研究業績になるのは日本だけの話ではないので、仮にフィンランド語とかで書かれた本に引用されてても気付かないと思いますし、日本語の文献を引用した東アジア研究の本も見たことありますけど、ヨーロッパの片隅の人口数百万の国で出版された現地語の本だったので引用された日本研究者は多分知らないんじゃないかな(その研究者の教え子である知り合いには「こういう本が出てたよ」って教えたので、知ってるかも。でも逆に言うと私が教えなかったら知らなかった可能性がすごく高いですね。東アジア研究してる人が目を向けることはまずない国なので……)。

anond:20181009040817

文系にはcitation indexはないの?

一定信頼性担保されているcitation indexがないとすると、少なくとも業績を客観評価する取り組みは文化的に重視されてないんだろうね。

2018-10-06

吉村市長ががサンフランシスコとの姉妹都市を解消した件の英語報道

ttps://www.npr.org/2018/10/04/654474739/osaka-ends-ties-with-san-francisco-in-protest-of-comfort-women-statue

ttp://time.com/5416425/japan-osaka-san-francisco-comfort-women-statue/

ttps://www.nytimes.com/2018/10/04/us/osaka-sf-comfort-women-statue.html

ttps://www.bbc.com/news/world-us-canada-45747803

ttps://www.japantimes.co.jp/news/2018/10/05/national/san-francisco-mayor-denounces-osaka-counterpart-unilaterally-ending-sister-city-ties/

ttps://edition.cnn.com/2018/10/04/us/san-francisco-sister-city-comfort-women-trnd/index.html

ttps://www.irishtimes.com/news/world/asia-pacific/osaka-drops-san-francisco-as-sister-city-over-comfort-women-statue-1.3652055

2018-09-27

anond:20180925183624

麻婆焼きそば ×

1970年代前半に、仙台市内の中華料理店「まんみ」にて賄い料理として提供したのが始まり

//ja.wikipedia.org/wiki/%E4%BB%99%E5%8F%B0%E3%83%9E%E3%83%BC%E3%83%9C%E3%83%BC%E7%84%BC%E3%81%9D%E3%81%B0

せり鍋 ○

河北新報の「仙台やすこ歩き」によると、

発案者が思いついたのが10年前と言っていたので、

2000年代の真ん中から広まったのではないでしょうか?

//detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11156573366

ただし他にも元祖を名乗る店がある。

チーズタッカルビ

16年2月に「チーズタッカルビ」を発売

//www.itmedia.co.jp/business/articles/1802/20/news021.html

塩焼きそば ×

1959年 4月

清ちゃん1959年4/10開店となる!

ここから小松名物塩焼きそば伝説が産声をあげる!

//www.sio-yakisoba.com/

ツナマヨおにぎり ×

1983年(昭和58年)に「ツナマヨネーズおにぎり」を発売

//q.hatena.ne.jp/1256202677

パン

14〜15年前ですかね。パンって、夏は本当に売れないんですよ。暑いからみんなソーメンを食べたり、おやつスイカになったりしてね。なんとか夏に売れるパンができないかなぁと思って開発したのが、塩分補給もできる塩パンだったんです

//tabi-labo.com/287605/painmaison-yawatahama

2018年のインタビューなので2003年頃か。

ししゃもっこの軍艦

1970年代以降、シシャモ代用魚として輸入が急増

//ja.wikipedia.org/wiki/%E3%82%AB%E3%83%A9%E3%83%95%E3%83%88%E3%82%B7%E3%82%B7%E3%83%A3%E3%83%A2

寿司メニューになった時期は不明

豆乳鍋

当店が1991年に開発したオリジナル

//irori.owst.jp/foods

ただし他にも元祖を名乗る店がある。

おにぎらず

【第22巻・第213話】いま話題おにぎらずクッキングパパ発祥

//cookpad.com/recipe/2831394

第22巻は1991年発売。

フルーツグラノーラ

91年にフルーツを加えた「フルグラ」(当時のブランド名は「フルーツグラノーラ」)を発売

//www.cross-m.co.jp/column/insight/insight82/

恵方巻 ×

1970年代半ばからマスメディアに取り上げられるようになり、以降は再び定着するようになった。

//ja.wikipedia.org/wiki/%E6%81%B5%E6%96%B9%E5%B7%BB

ご存知のとおり発祥には諸説ある。

魚のカルパッチョ ×

落合「僕が帰って来たのが1981年で、前のお店を開けさせていただいたのが1982年ですから

(中略)

干場「実は、魚のカルパッチョを作ったのは落合さんなんですか!?

落合「実はそうですよ(笑)

//www.tfm.co.jp/cruise/index.php?itemid=91890

1982年に魚のカルパッチョを作ったとは語られていないが、近い時期であることが示唆されている。

塩麹 ×

古くは本朝食鑑の鱗部の巻「鰯」の箇所に「或有甘塩者有糟漬者有塩麹漬者号曰黒漬」という下りがあり、「塩麹漬」という文字列が見られる。

//ja.wikipedia.org/wiki/%E5%A1%A9%E9%BA%B9

本朝食鑑は1697年刊行

レバ刺し ×

日本人はいから牛の生肉生レバーを食べるようになったのか。

焼き肉などの食文化に詳しい滋賀県立大鄭大聲(チョン・デ・ソン)名誉教授は「戦後在日韓国朝鮮人が家庭で食べていたもの焼き肉店で出すようになり広まったのではないか」という。

//sankei.jp.msn.com/life/news/120428/trd12042822020023-n1.htm

万葉集内臓生食示唆する歌があるとの話もあり。

魚介つけ麺

つけめん」が定着するきっかけとなったのは2000年頃からのことです。つけめんの考案者である東池袋大勝軒の店主 山岸 一雄氏のお弟子さん達が独立し始め、大勝軒系列の店が増えたこと、大勝軒常連から人気店になった「べんてん(高田)」、「道頓堀(成増)」といったお店が繁盛したこと、そして川越にある「頑者」が「自家製極太麺×魚粉×濃厚つけだれ」という新しいジャンルつけめんを生み出したことが影響し大きなエポックとなりました。

//web.archive.org/web/20130622095039///www.asahi.com/business/pressrelease/ATP201005190013.html

サーモン寿司 ×

プロジェクトが始まったのは86年。当初の計画では、輸出の要はカペリン(カラフトシシャモ)だった。しかし、その前年、時の漁業相らが日本を視察して方針が変わった。日本には生のサーモンを食べる文化がない。江戸前寿司にもない生サーモン握り寿司を考案し、試食会を重ねた。

//trendy.nikkeibp.co.jp/atcl/pickup/15/1008498/061500791/

ティラミス ×

日本イタリア料理史の中で、最大のブームとなったのは「ティラミス」と言って間違いありません。80年代半ばから評判を呼び、90年に雑誌Hanako」で特集が組まれるや、人気は最高潮に達します。

//www.metromin.net/feature/15133.html

アボカド ×

日本の輸入量は1970年代までは微々たるものだったが、1970年代後半から増え、1980年には479トン、1990年2163トン、2000年14070トン、2005年は28150トンと急増している。

//ja.wikipedia.org/wiki/%E3%82%A2%E3%83%9C%E3%82%AB%E3%83%89

オリーブオイル ×

1908年明治41年)、魚の油漬け加工に必要オリーブオイルの自給をはかるため、農商務省アメリカ合衆国から導入した苗木を三重県鹿児島県香川県試験的に植えた。香川県小豆島に植えたオリーブけが順調に育ち、大正時代の初めには搾油が出来るほどの実が収穫された。

//ja.wikipedia.org/wiki/%E3%82%AA%E3%83%AA%E3%83%BC%E3%83%96%E3%83%BB%E3%82%AA%E3%82%A4%E3%83%AB

バターコーヒー

「朝はヨーグルトより、バターを食べる」

//www.amazon.co.jp/dp/4478039674

チキンタツタ

1991年4月期間限定商品として初登場

//ja.wikipedia.org/wiki/%E3%83%81%E3%82%AD%E3%83%B3%E3%82%BF%E3%83%84%E3%82%BF

単なる竜田揚げとして見れば×。

油そば ×

1952年昭和28年)に創業した国立市一橋大学そばの「三幸」が、のびたラーメンをヒントに昭和30年代前半頃から酒の肴として提供を開始したとする説や、同じく昭和30年代武蔵野市境の亜細亜大学そばの「珍々亭」が中国拌麺をヒントに油そばを発売したという2説が存在している。

//ja.wikipedia.org/wiki/%E6%B2%B9%E3%81%9D%E3%81%B0

火鍋 ×

火鍋唐代に普及

//ja.wikipedia.org/wiki/%E7%81%AB%E9%8D%8B

日本のしゃぶしゃぶは火鍋をもとにして作られたとの説も。

発泡酒 ×

新規企業の太洋醸造が当時自由販売化していたイモとホップ使用したイモ・ビール試験醸造申請して認可され、1950年昭和25年)から新発売され、日本市販発泡酒第1号となった

//ja.wikipedia.org/wiki/%E7%99%BA%E6%B3%A1%E9%85%92

食べるラー油

垣島在住の夫婦(夫は中国陝西省西安出身の辺銀暁峰、妻は東京都出身愛理)が、具材を食べるタイプラー油を開発し、2000年(平成12年)、石垣島にて開催されたイベント販売したのが始まりである(ただし、具の入ったラー油のもの中国にて古くから存在している)。

//ja.wikipedia.org/wiki/%E7%9F%B3%E5%9E%A3%E5%B3%B6%E3%83%A9%E3%83%BC%E6%B2%B9

2018-08-22

[]2018年8月21日火曜日増田

時間記事文字数文字数平均文字数中央値
0016821608128.647.5
0177630181.847
02434360101.457
03101003100.383
04112112192.064
05856170.146
06104280428.049
07283272116.959.5
0861554590.953
099810595108.143
1012413474108.752
111531121073.341
121661493990.051.5
1314318555129.843
1413626552195.255.5
151891475778.145
161541319985.749
1712717331136.551
181761353176.944
192241688775.442
201281272599.444
211191091991.845
2211212289109.745
2312621129167.745
1日2591277134107.046

頻出名詞 ()内の数字単語が含まれ記事

人(231), 自分(176), 話(130), 増田(102), 問題(95), 今(92), 日本(86), 男(84), 前(70), 女(65), 感じ(65), ー(64), 人間(60), 仕事(59), 意味(58), 男性(57), 映画(56), 普通(55), 関係(55), 差別(54), あと(53), 必要(52), 好き(50), 作品(50), 女性(49), 理由(48), 日本人(46), 子供(44), 金(44), 理解(44), 結局(44), ネット(43), 気持ち(43), 相手(42), 時間(42), 最近(41), レベル(41), 頭(40), 世界(39), 気(38), 痴漢(38), 扱い(38), 批判(37), 無理(37), 無能(37), アニメ(36), ゲーム(36), 存在(36), 言葉(35), スマホ(35), 女性専用車両(34), 全部(34), オタク(34), 表現(34), しない(33), 犯罪(33), 人生(33), 他(32), 会社(32), 隣(32), 社会(32), 時代(31), 一人(31), 一番(31), 馬鹿(31), 現実(31), 別(31), 映画館(31), 逆(31), 演技(31), じゃなくて(30), 場合(30), バカ(30), 被害妄想(29), 結果(29), 他人(29), 声(29), 横(29), 昔(28), 結婚(28), 周り(28), 事実(27), 今日(27), 最初(27), 完全(27), 勝手(27), 被害者(26), 主張(26), 子(26), 毎日(26), 嫌(26), 行動(25), 差別主義(25), ただ(25), 意見(24), 田舎(24), 嘘(24), トトロ(24), 根拠(24), ゴミ(24), 説明(24)

頻出固有名詞 ()内の数字単語が含まれ記事

増田(102), 日本(86), 女性専用車両(34), スマホ(34), じゃなくて(30), 被害妄想(29), 被害者(26), 差別主義(25), トトロ(24), 元増田(22), ようじょ(21), 甲子園(20), わからん(20), 東京(19), リアル(19), 男性差別(18), キチガイ(18), 男性専用車両(16), キモ(16), 犯罪者(16), なのか(16), ブコメ(15), ブログ(15), はてなー(15), ツイッター(15), いない(15), 金足(14), 大阪桐蔭(14), 主義者(14), 朝鮮人(14), 女性差別(14), マジで(14), 可能性(14), はてブ(13), ブクマ(13), カス(12), twitter(12), 一緒に(12), キモい(12), 毎日(12), 基本的(11), AI(11), ネトウヨ(11), 和田(11), プレイ(10), 個人的(10), 笑(10), Twitter(10), AV(10), …。(10), アメリカ(10), 具体的(9), LGBT(9), 加害者(9), 低能先生(9), ソシャゲ(9), なんだろう(9), セカンドレイプ(9), ちゅ(9), 鉄道会社(8), w(8), にも(8), オチ(8), 痴漢冤罪(8), 東北(8), な!(8), フェミ(8), 外国人(8), エクストリーム(8), 価値観(8), イケメン(8), 欧米(8), 20年(8), 中国(8), コスプレ(7), いつまでも(7), アメリカ人(7), 1人(7), a(7), チョウセンメクラチビゴミムシ(7), ニート(7), index(7), 最終的(7), .s(7), 映画監督(7), メイ(7), 3年(7), 1日(7), ワロタ(7), アプリ(7), 高校野球(7), ガラケー(7), 迷惑行為(7), 自民党(7), 男性学(7), 魂の殺人(7), いいんじゃない(7), 分からん(7), 表現規制(7), no(6), BOX(6), 全体的(6), THE(6), ポリコレ(6), 2018年(6), お勧め(6), Hagex(6), 知らんけど(6), ブクマカ(6), 普通に(6), 何回(6), 吉田(6), 社会的(6), 仕方がない(6), なんの(6), AV女優(6), トラバ(6), metoo(6), 上田(6), 10年(6), au(6), ツイート(6), pixiv(6), 1回(6), Google(6), 感動ポルノ(6), more(6), P(6), is(6), GHOST(6), 利用者(6), 夫婦(6), ???(6), JR(6), 安倍(6), OK(6), IT(6), 先進国(6), 秋田(6)

投稿警察もどき日中に再投稿された本文の先頭20文字 ()内の数字投稿された回数

クソが (5), お前が答えたら答えてやるよ (5), うんち (5), うん。最近朝鮮人は高性能でびっくり(5), たか村民コメントになに突っかかっ(5), 俺が朝鮮人じゃないってことすら理解で(5), ふ? (2), へ? (2), 上田(映画監督)、友人の大坪(劇団員(2), こちらが何を言ってもお前は「被害妄想(2), こちらが何を言ってもお前は「被害妄想(2), 全部は読んでないけど、増田は何の仕事(2), なんで嘘ついたの? 聞かせて! (2), フォォォォォーーーーーーー!!!!!(2), 違いはない。   ー完ー (2), ああ、いいぞ (2), かーば (2), それな (2), は? (2), ひ? (2)

頻出トラックバック先(簡易)

日本役者の演技が酷すぎる。 /20180821141938(39), ■トトロってどんな話なの? /20180820185203(13), ■軽自動車に乗っているやつって馬鹿じゃないの? /20180821070403(13), ■ 『カメラは止めるな!』 盗作騒動時系列 /20180821130054(11), ■映画館の男性客は治安悪化させ女性客を排除する /20180820142528(9), ■金足農高が東北代表ツラされるのは違和感がある /20180821093936(9), ■オタクを題材にした作品って今だと何になるの? /20180820230404(9), ■正常な人間は自宅での暇な時間をどう過ごしてるの? /20180820183639(8), ■ /20180821180206(7), (タイトル不明) /20180821065037(7), ■Steamって日本ユーザーはそこそこ多いらしいのに /20180821080319(7), ■新幹線ビールを開けたら /20180820194208(6), ■pixivアカウントが停止されたので、訴訟を考えている件 /20180821102200(6), ■なぜバカクズばかり出世するのか /20180821204014(6), ■お盆がえり、新幹線指定席トラブルがあったんだが、JRはきちんと対処してほしい /20180820153925(6), ■役作りで俳優に極端に体重を増減させるあれ /20180821180550(6), ■なんでオタク左翼が嫌いになったのか? /20180821123104(6), ■お財布携帯現金化する方法 /20180820165812(6), ■スマホ所有を補助して欲しい /20180821115618(6), ■ドンキ1兆円 /20180821191631(6), ■苛々するので吐き出したい。 /20180821171643(6), ■世間公立高校びいきが気持ち悪い /20180820214205(6)

増田合計ブックマーク数 ()内の数字は1日の増減

5529741(4473)

2018-08-12

サマータイム反対の意見表明をする方法

政府

関係省庁の問い合わせフォームから意見を送ることができる

政党

支持している政党にも支持していない政党にも有権者として堂々と意見を送ろう

政治家

自分の住んでいる選挙区政治家意見を送ろう

anond:20180807003156

新聞

ネットをやらない世代新聞投書欄などに目を通している。サマータイムは良くないものだということを前提にした投稿投書欄川柳欄に載れば載るほど反対意見は浸透する。サマータイムによって悪影響を直接受ける業界にいるのなら、情報提供フォームを使って取材を促すのも良いだろう。

テレビ

朝、昼、夜の情報番組の影響力は大きい。各情報番組で取り上げるよう要望を各局に送ろう。

ラジオ

ラジオ仕事をしながら個人で聞いたり、職場食堂や各種待合室で流しっぱなしになっていたりするのでネットとは違う層に届く。情報番組投稿コーナーにサマータイム反対の意見を送って幅広い層と認識を共有しよう。番組で取り上げるよう要望を送るのもいいだろう。

SNS

TwitterFacebookで「いいね」をしたり、はてなブックマーク上でブックマークをしたりすると、それだけで対象投稿が多くの人のトップページに表示されるようになる。サマータイム反対の投稿は片っ端からいいね」してブックマークしよう。

ネット署名

change.orgで探してみたところ、現時点で2つキャンペーンが立ち上がっているようだ。

生活

実家テレビを見ていてサマータイム話題が出るなどしたら、自分サマータイムに反対だということを家族や周りの人に伝えよう。「なんとなく良さそう」くらいに思っている人を「なんとなく良くなさそう」にするくらいのことはできるだろう。デモなどがあれば参加しよう。

2018-06-29

from typing import Sequence


class ReverseSequence(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence  # reference to container
        self.index = len(sequence)  # current index

    # Step 1. define __iter__ method whitch returns self.
    def __iter__(self):
        return self

    # Step 2. define __next__ method
    #             rasing StopIteration at the end of iteration.
    def __next__(self):
        if self.index &gt; 0:
            self.index = self.index - 1  # next index
            return self.sequence[self.index]
        else:
            raise StopIteration


class ReverseSequenceGenerator(object):
    def __init__(self, sequence: Sequence):
        self.sequence = sequence
        self.index = len(sequence)

    def __iter__(self):
        while self.index &gt; 0:
            self.index = self.index - 1
            yield self.sequence[self.index]
        raise StopIteration


assert list.__eq__(
    [element for element in ReverseSequence('spam')],
    [element for element in ReverseSequenceGenerator('spam')]
)

class Reverse:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


class ReverseGenerator:
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        while True:
            if self.index == 0:
                raise StopIteration
            self.index = self.index - 1
            yield self.data[self.index]


assert [s for s in Reverse('spam')] == [s for s in ReverseGenerator('spam')]

2018-04-06

cyriakみたいな奴教えて下さいえらいひと

https://www.youtube.com/watch?v=zKPhjkw3Y84&list=RDCBBvXth-O_g&index=2

みたいに、ズンズンなったあと、うわ~ってフラクタルになってワイドスクリーン・バロック的にドーンってなるやつお願いします。

2018-03-06

anond:20180306182944

横だけど。

どの位前に遡るか、にもよるかもですが、弱者男性そもそも所帯もてないとかじゃないかな。地域によるでしょうが

平等感を感じているなら、思考対象現代にした方が良いでしょう。

幸福度調査の男女の差

幸福の要因の男女差(既婚と未婚、子供のいるなし)

公務員新卒採用の男女比

アファーマティブアクションの是非

あと私も調べ切れてないのですが、Global Gender Gap Index以外の男女の指標は調べたいなぁ

これ https://togetter.com/li/1184900 以外にもいろいろあった

ごめん、リスト記法がまちがってるね。

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん