「H2」を含む日記 RSS

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

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

増田プログラマー養成講座 その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-28

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

前回は、データベース参考書を見た。

今回は、DBで使うプログラム言語SQL」の文法を見てみよう。

 

リレーショナル・データベース(Relational Database、RDB)とは?

WikipediaRDB説明を見てみよう。

関係データベース(relational database)は関係モデルにもとづいて設計、開発されるデータベースである

関係データベース管理するデータベース管理システム (DBMS) を関係データベース管理システム (RDBMS) と呼ぶ。

Oracle Database、Microsoft SQL Server、MySQLPostgreSQLDB2、FileMakerH2 Database などがRDBMSである

 

関係モデルIBMエドガー・F・コッドによって考案された現在もっとも広く用いられているデータモデルである

データベース利用者は、クエリ(問い掛け)をデータベースに与え、データ検索したり、変更することができる。

 

データは表に似た構造管理されるが、関係と呼ぶ概念モデル化される。

関係は組(タプル、表における行に相当する)、属性アトリビュート、表における列に相当する)、定義域(ドメイン)、候補キー(主キー)、外部キーなどによって構成される。

SQLなどに代表されるデータベース言語(問い合わせ言語)を用いて、関係に対して制限・射影・結合・和・差・交わりなどの関係代数演算(集合演算を含む)ないし関係論理演算を行うことで結果を取り出す。

関係複数持つことも可能で、互いを関連させることも可能である

要するに、

 

SQLとは?

WikipediaSQL説明も見てみよう。

SQLエスキューエル)は、関係データベース管理システム (RDBMS) において、データ操作定義を行うためのデータベース言語(問い合わせ言語)、ドメイン固有言語である

エドガー・F・コッドによって考案された関係データベース関係モデルにおける演算体系である関係代数関係論理関係計算)にある程度基づいている。

 

SQLは、シークェルと読まれることもある。

これは、SQLの元となったデータベース言語が、IBMが開発したRDBMSの実験実装であるSystem Rの操作言語SEQUEL (Structured English Query Language)」であったことが由来である

SEQUEL (Structured English Query Language)」を略して「SQL」と呼んだらしい。

 

  1. 質問する、尋ねる
  2. 問い合わせ[クエリー]を行う

英語クエリーは、質問する、問い合わせる、という意味なんだね。

 

SQL3分

SQL説明するとき、3つのグループに分類される。

 

↑このページをよく読んでくれ。理解できたらSQL説明は終わりだ!!!

 

 

 

…というと、説明することがなくなるので、ちょっとまとめておこう。

このページの「表1●SQLDDLDML,DCLの三つに大別できる。このうちプログラマが最も多く使うのはDMLだ」という図を見てみよう。

 

という3種類に分けてる。順番に見てみよう。

 

DDL(Data Definition Language:データ定義言語

データベーステーブル、ビュー、インデックスユーザーなどを作成/変更/削除するときに使うSQL

これでデータベースを使う準備ができる。

  • 「CREATE」…作成する。
  • ALTER」…変更する。
  • DROP」…削除する。

 

DML(Data Manipulation Language:データ操作言語

データ操作するときに使う。いわゆる「CRUD」のことで、SQLのうち、このDMLを覚えれば、とりあえずRDBは使えるようになる。

CRUD(クラッド)とは、ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能イニシャルを並べた用語

その4つとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)である

ユーザインタフェースが備えるべき機能情報の参照/検索/更新)を指す用語としても使われる。

 

この中で一番活躍するのは、「SELECTコマンド命令文)だろう。

SELECTは、いろんな条件を付けてデータを絞り込む/加工することができて、便利なんだ。(Excelなどの表計算ソフトよりも高機能

 

JOIN(結合)

RDBは「リレーショナル」(関係)という冠言葉が付いてることからも分かるように、関係がある表と表をくっつけて、データを加工できる。

表と表をくっつける操作のことを「結合」という。

SQLでは「JOIN」というコマンドを使って表と表を結合できる。

↑このページにある丸と丸が重なった図を見てくれ。この図は「ベン図」といって包含関係を示す図だ。図を描いて塗りつぶせば、欲しい部分が分かりやすくなるだろう。

 

結合の種類

表と表のつなげ方には、何通りかパターンがあるよ。

  • 結合は、「内部結合」(INNNER JOIN)と「外部結合」(OUTER JOIN)の2種類に分類できる。
  • 外部結合はさらに、「左結合」(LEFT JOIN)と「右結合」(RIGHT JOIN)と「完全結合」(FULL JOIN)の3種類に分類できる。

 

内部結合は単純だ。外部結合はちょっとややこしい。

外部結合は「LEFT JOIN」の形がよく使われると思うので、まず最初にLEFT JOINの仕組みを理解すれば大丈夫だろう。

(LEFTの仕組みを基準にして、RIGHTやFULLとの相違点を意識すれば、表のつなぎ方を間違えにくい?)

 

DCL(DataControl Language:データ制御言語

トランザクション」は、データ更新に失敗したとき、元に戻せる機能だ。(安全装置

  • 「COMMIT」…更新処理の確定
  • 「ROLLBACK」…更新処理の破棄

 

言葉だけだと意味が分かりづらいと思う。

Google画像検索で「トランザクション」を検索して、分かりやすそうな図解を探してみよう。

↑このページの「図1 処理失敗による不整合の発生」を見てみよう。

 

銀行で口座間の送金を考えてみる。Aさんの口座からBさんの口座へ50万円送金したい。

  1. Aさんの口座から50万円減らす。
  2. Bさんの口座に50万円追加する。

この2つの処理が両方とも成功しないと、送金は失敗だ。(Aさんは送金できてないのに貯金が減ったら怒る。Bさんは送金されてないのに貯金が増えてラッキー!)

AとBの両方が成功したら更新処理を確定する。AとBのどちらか、または両方が失敗したら更新処理は破棄してなかったことにする。(やり直し!)

これがトランザクションだ。

 

クレーム対応難易度

ちょっと話がそれるけど、トラブルの重大さ=クレーム対応難易度について考えてみよう。

  1. 人身事故 …人命にかかわる事故は取り返しがつかない。文句も一番キツイ絶対ミスがあってはならない分野のシステム開発はなるべく避けよう。
  2. 金銭絡み …(命の次に)お金大事という人は多い。人は金の話になるとシビア文句も強烈だ。決済など金銭絡みのシステムでは、RDBトランザクションを使おう。
  3. 上記以外 …その他のクレームは、それほどハードではない。匿名掲示板とか、どうでもいいゴミ情報投稿されるシステムなら、トランザクションは使わなくてもOKだろうw

 

DB管理ツール

ここまで、SQLRDB操作する方法について話した。

RDBは、SQLコマンド操作するだけでなく、DB管理ツールを使って操作することもできる。

DB管理ツールについても知っておこう。

 

この講座では「phpMyAdmin」というDB管理ツールで「MySQL」を操作した。

他にも、Google検索で「DB 管理 ツール GUI」などで探してみよう。商用だけでなく無料でも便利なソフトがたくさんあるね。

 

など。

 

SQLパズルだ!

SQLを駆使すると、欲しいデータをホイホイ取り出せる。

SQLコマンドを組み立てる作業パズルのような要素もあるので、遊びだと思ってSQLに取り組んでみて欲しい。

SQL パズル」でGoogle検索すると、いろんなテクニックが紹介されているので、時間があったらチャレンジしてみよう!

 

SQLの話は、それだけで1冊の本になるぐらい広範だ。今回は、SQL概要説明するだけになってしまった。

SQLの詳細については、前回紹介したSQL参考書などを読んでみてね。

 

まとめ

 

次回は、データベースを使って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:20181024214737 増田プログラマ養成講座 コンテンツ一覧

2018-08-12

ジャンプ史上最高のヒロインって誰なの?

マガジン史上最高のヒロインはベビステのなっちゃんサンデーH2古賀春華は割と定説になってるけど

ジャンプは知らんのよな

多分ジャンルが多岐に渡るからとりあえずスポーツ漫画って事にして、そうすればある程度絞られると思うけど。

2018-07-16

低脳なやつらが esa を使った場合の結末 to: @esa.io

エンジニア向けの社内ドキュメント共有サービスであるhttps://esa.io/ を、義務教育で作文を習ったかあやしいやつらが使うとどうなるか事実を書く。

 

問題点

1. Markdown が使え無い

2. 履歴機能(バージョン管理)が使え無い

3. ディレクトリ構成がゴチャゴチャ

4. WIPとShipItを使い分けることができない

5. H1とかH2とかの階層がゴチャゴチャ

6. 使用する言葉一定でないため検索時間が掛かる(文字のゆらぎ)

7. 誰もドキュメントを整理しようとしない、整理の必要性を感じていない

8. タグが使え無い

9. 更新内容を書かない

10. Archiveしない

 

その結果、

更新依存による検索が始まり、調べるのに時間がかかる

更新内容が分かりづらいための、現状把握への時間がかかる(アップデート内容が分からない)

・何を目的とした記事なのか分からない(情報共有なのかポエムなのか等)

・完成している文章なのかわからない(信頼のおける文章なのか分からない)

・正直、何の話をしているのかわからない(ディレクトリ構成、ヘッダー、文字のゆらぎが激しすぎる等で理解不能

意味不明タグ付け

意味不明な年月日によるディレクトリ構成

・書き捨てられる文章に見える。しかしその実はとても重要文章である。ただし更新依存のため見つかりにくい

ドキュメント作成者は書いて伝えた気持ちになっているが、全く伝わらない

ドキュメント警察必要となるが、ドキュメント警察に割ける時間は0。(ドキュメント警察っていうのは、「この書き方がだめ」とかダメだしする役割修正する役割のことをさした)

 

まず義務教育で作文ならったのかな。

Markdownディレクトリ構成更新方法については教えればいいとして、文章構成が出来ていない点が義務教育を修めたのか懐疑的にさせる。

 

esaみたいなサービスって他にも結構あると思う。ただいずれにせよ自分達がドキュメントを育てることが出来るのかまずは考えてから使い始めた方が良い。

あとサービスによっては無料期間があるので、その間に見極めることも重要と学んだ。

 

正直、GoogleDocsを見ても全て「本文スタイル」で書かれていたりとかして、何を使わせても同じなので明らかな能力不足。

Markdownを教えたりとかタグについて決めたりということはしたんだけど、守られないし風化させられる。教える方がバカに思える。

小学生向けの作文の書き方を元に教えたりしたけどだめだった。

 

ワイの力ではムリでしたごめん

2018-07-13

SEOってやつが嫌いだった

Web業界8年目。

SEOってやつが嫌いだった。

制作の後ろの方にいきなりやってきて「ここはこういうふうに組んで」と言ってくる横暴な奴らが。

ひどい場合になると、正当な表(テーブル)の部分にtableタグを使っているのに、

tableタグにするとSEO的にマズイからtableタグは使わないでください。」

と言ってくる。なので、dlタグをdivタグで囲んで、dlにはdisplay: table-row; divには display: table; をつけてdtddにはtable-cellを割り当ててやったら、

「divは使用を抑えてください。」

と言われて「ならテメーが使うタグ考えろやトーシロが」とキレて問題を起こしたこともあった。あの時の否は未だに認めていない。

 

あれから時間が経つが、SEOが今のようになって本当によかった。

今のようにっていうのは、コンテンツファーストで、ユーザーフレンドリーモバイルユーザーフレンドリー)という意味だ。

SEO業者はあれから入れるのを躊躇って、自分SEO勉強したが、結局あの時SEOに言われたことの大半は今の時代生きていない。h1は多く使う、h2以下は使わないとか、altタグすべてに画像とは関係なくてもサイトキーワードを入れるとか。

そんなくだらないことより、ユーザーにとって何がいいのかを考えるだけですむんだから楽なもんだ。

 

びっくりする話だが、未だに上記のようなテクニック(笑)を大真面目に言うSEO業者、もしくはSEOに詳しい人がいるらしい。

クライアントの中に「○○という会社からこういう事言われたけどうちのサイト大丈夫?」「友人からこうしないとSEOで不利っていわれたのでしてください」と言ってくる人が1割ぐらいいる。

その度に自分は、一昔はそういう話もありましたが今は違いますという話をし、それでも信じられない、SEO業者とやらがいうことが真だと思うのなら保守を乗り換えてもらって構わないという話をするが、今の所1件を除いて「順位が落ちた」「更新を月1回しか受けてくれない」といって戻ってきてくれる。

SEO業者は未だに自分にとって敵だ。(もちろん、優良なSEO業者がいることもわかっているが。)

でも、SEO業者いるから、最終的に顧客自分への信頼を高めてくれるんだから、憎めないものだ。

SEO勉強すれば勉強する度、だんだん好きになっていく。昔業者が入ってあれこれめんどくせーこと言ってたのがほとんどが今では嘘だったとわかったから。

今はSEOがそこそこ好き。

2018-06-20

電子書籍化しないマンガ単行本ランキング

実際は漫画家ランキングな。※ランキング適当です。順番に意味はありません

1位:スラムダンクバガボンド

2位:あずまんが大王よつばと

3位:あだちみつる(最新刊のぞく

上の二人は絵の表現コマ割りにこだわりを感じるので紙媒体で読んでほしいという想いも理解できるが、

最後の人は細かな書き込みはないし見開きすらないよね。

虹色とうがらしを久々に読みたいなー。こないだの増田おもしろマンガランキングにもH2が入っていたじゃないか


と思ったらスローステップだけ去年のうちに電子書籍化してた。なぜにスローステップだけ?

2018-05-21

東京電力ミスで失職した話

東京都中野区某所にある東京電力コールセンターで働いてた。引っ越しするから電気契約したり解いたり、金払ってなくて電気止まった人の対応したり、フリーダイヤルにかけるとそこに繋がる。

東京電力社員ではない。東京電力電話業務委託した会社、そこから更に派遣会社委託、その派遣社員というかなり下の存在だった。

俺はそこで一年以上働いてて、ある程度上から評価もされてたし、CPHも高かった。

CPHとはCall Per Hour、時間当たりの処理数である電話に出て、電話を終えて、PCで客からの用件にあった処理をする数。これが高ければ会社側も東電に顔がたてられるし、1社員として見ても月平均が高ければその人は仕事が出来ているということになる。

俺はそれが大体11.5とか高い月で13とか。7時間100件取った時もあった。

毎月ランキングが出るのだが大体50人くらいいる職場内で毎月5位以内をキープしてた。それくらいには出来る奴だった。でも奴らのミスで辞める事になった。

その事件の発端は仕事を辞める1ヶ月ほど前である

俺が取った電話の内容はこうだった。

今日から引っ越してきて、以前契約したのに電気がつかない」

よくあることだ。実は引っ越し前の場所の解約だけしてて新契約は忘れていたり、日付を間違えていたり、単にブレーカーがついていなかったり。

俺はまず客の住所を聞いた。しかしその住所に新しい人が入ってくるという情報は残っていなかった。本来マンションの一室だろうが一戸建てだろうが、電気メーターそれぞれに対して、どんなに些細な内容だろうと、最低二年間は「こんな電話がありました」というデータが残される事になっている。

しかし客は「たしか電話した。電話したのは先週あたりだ」という。

俺は「当日お電話いただいたのは今お使いいただいているお電話からでよろしいですか?」と聞いた。そうだというので「では私がデータを遡って詳細を確認します。30分以内にお掛け直し致しますので少々お待ちください。」そう言って電話を切った。

何故電話を切る必要があったのか。それは仕事用のPCにも関わらず低スペックXPを使っているため、検索するだけでフリーズ、最悪どの番号から電話かかって来たかも見失って文字通り何も出来なくなるからだ。

その日から一週間の間に客の電話番号からかかってきた履歴検索してみた。すると残っていた。

しかしそれは集合住宅の隣の部屋に当てられたものだった。

隣の部屋に契約してたんだからそりゃ客の部屋の電気がつくはずがない。

まり その電話を受けたオペレーターが部屋番号を聞き間違えてしまたか 客がはじめに電話した時に申告ミスをしたか のどちらかになる。

当時の電話の録音を聞いた。客の申告ミスだった。

ここまで10分程度。ここからの処理は簡単である

俺は先ほどの客に折り返し電話をかけた。

「私で履歴確認し、通話の録音を確認してみました。お客様からお隣のお部屋を申告されていたので…」とりあえず客の間違いであることを伝えないとクレームに発展したら目も当てられないので柔らかく伝える。

客は「えっ、そうでしたか!?ごめんなさい!」とあっさり飲み込んでくれた。

俺は「新しい部屋ですとよくあることなのでお気になさらずに。私の方で以前のお電話を元に正しいお部屋で処理し直しておくので、お客様のお部屋は30分以内に電気がつきます。」と返す。

客は「ありがとうございます」というので、最後に「電気は最新式のスマートメーターを使って遠隔で通電致しますので、ご不在でも電気がつきます火災電気機器故障の恐れもございますので、もしも電気が通る前にご不在にされる場合、ヒーターやアイロン電気コンロなど熱の出る機器は必ず電源のオフをご確認ください」と伝えて電話を切った。

そして引っ越し先の部屋の電気がつくように処理した。この処理すれば早くて5分で電気がつく。

この後客からの連絡はなかったので、この後は何も問題は起こらなかったのだろう。

さて、最後問題だ。

以前処理された、間違って申告された部屋の処理をキャンセルしなくてはいけない。

もしこれが誰も住んでいない部屋だったら簡単だったが、もう別の人が住んでいる部屋だったのだ。

この場合の処理は廃再という。廃止(誰かの電気契約を解除すること)と再点(誰かと電気契約を結ぶこと)、この2つを略したものだ。

契約のある場所に新しい契約の話が来た場合既存契約者に電話をして確認をする。旧契約者が引っ越し等して契約を解除し忘れている場合と新契約者が間違えている場合があるからだ。

しかし前に電話を受けたオペレーターが旧契約者に電話をしたが電話は通じなかった。その場合東電作業員がその場所に出向き、なんらかの方法現場確認して、その結果に準じて処理をするという方法をとる。

契約者はその日から使う予定だったので、東電作業員もその日に確認に行っていた。しかもその作業が既に完了済み。どういう確認を行なっているのかまでは知らないが、なんと新契約者への契約切り替えを受理していたのだ。旧契約者はまだそこを使用しているのに。

この場合作業員所属する東電支社に連絡してこの結果をキャンセルしてもらう必要がある。

この仕事で一番地獄なのが東電の支社に連絡する事だ。クレーマー相手に一時間以上電話続けられたり、殺すぞなどの暴言を浴びた事もあるが、そんなの軽いものだ。

コールセンターは使いっぱしりしか思われてないので、向こうの対応は本当に酷い。「知らねぇよ」とか「そっちで処理出来るだろ」とかそういう言葉遣いを平気でする。

まぁなんとか連絡して、お客様の申告ミスがあったのでと伝えてキャンセルはしてもらった。

その流れを全てメモに残してその日は処理を終えた。何の問題もなかったはずなんだ。

それから約1ヶ月ほど後、辞める発端となった事件の日である

間違えていた部屋に元々住んでいた人から連絡があったのだ。

H2箋が入っている、と。H2箋とは、契約が入ってない部屋なのに電気使用量が出ている、契約するの忘れてませんか?というお知らせの手紙である

元々住んでた人は今まで電気代も払っていたので全く心当たりがない手紙である

何故こんな事になってしまったのか。

それは俺が以前キャンセル要請した廃止と再点の処理について、あろうことか東電支社は 再点だけ キャンセルしたのだ。

契約者の契約廃止はそのまま受理したのだ。

全く意味がわからない。

契約者に対しては以前のデータから契約を復帰するだけなので事情説明するだけで終わるのだが、まだ社内の問題が残ってしまう。

発行額訂正である。これは文字の通り、発行する電気代の請求額に訂正を入れる事である

発行額訂正自体は客のミスでも検針員のミスでもオペレーターミスでも発生するのである程度は仕方ない事でもあるのだが、大手企業の帳簿に影響することなので極力件数を減らすように厳しく言われている。

そのため東電社員もその原因の究明をしなければならないのだが、その原因を全て俺に押し付けて来たのだ。曰く、キャンセル電話なんて支社に入っていないとか。じゃあなんで再点はキャンセルしたんだよと思うが。

そしてコールセンター運営する派遣先会社東電には頭が上がらないのでその責任転嫁を受け入れたのだ。

そこまではまだいい。しか本来であれば、原因を究明する上で処理を行った本人であるから何か話を聞くべきだ。それをせずに全てを俺のせいにした。

俺のせいになったことで特に罰を受けるわけでもないし、金額補填しなきゃいけないわけでもない。

だがやはりその態度が気に入らない。

しかし上の人間は言うのだ。

「でもそれが仕事から重要なのは君が不快に思うとかそういう事じゃないから。うちの会社東電から仕事をもらって成立してる。それが気に入らないならこの仕事は向いてない」と。

から向いてなかったから辞めた。

終わり。

マジクソだな社会

追伸

ま、こうやって文句書き連ねてると東電に悪い印象を持つ人もいるのかもしれないけど、正直東電以外の電力会社も相当酷い。

電力自由化でA●電気とか東●ガスの電力プランとか出て来て乗り換える客も相当数いる。

しかし乗り換え自体は「勝手に出来る」んだ。頭がおかしい。

電力自由化に関する法律だかなんだかの関係である程度の情報があれば勝手に乗り換えられる。

それをいい事に、それなりに名前のある会社でも「うちに乗り換えればお安く出来ると思うんですけど、その試算してみるのでよかったら検針票見せてもらえますか?」と言って勝手に乗り換えるといったケースが頻発してる。

客は乗り換えた覚えがないから何か問い合わせを東電にしてきて、それで初めて今は東電との契約ではないということを知る。

やっぱりジジイババアにそういったのが多いし、そういう人をハメるのは詐欺師と同じだよね。

電力自由化は電力無法化だったよ。

2018-04-25

オタク差別批判することを、やめることにします。

 趣旨は上の通り。

 自分オタクだと自認するようになってからこっち、10年以上にわたって、オタク差別けしからんと言い続けてきた。

 ここ数年、なんとなくそれに違和感を感じることが多くなってきたけれど、それでもやっぱり言い続けてきた。でも今回はっきりわかった。

 オタク差別批判とか、ただの害悪しかない。もうやめたほうがいい。

やはりオタク差別なんて(言うほど)なかったんじゃないのか。

 

 差別というのは、権力構造に根差すものであるという話をだいぶ前にツイッターで見た。

 つまらない約束事のように映ったけれど、まじめに考えるとこれを踏まえないから、差別を相対化して見せては矮小化言葉遊びにふけるような態度が出てくるのである日本人ヘイトだの専用車両男性差別だの在日韓国人による逆差別だの、差別者以外にとってはおもしろくもおかしくもない大喜利パズルでここ何年かでいったいどれだけ無駄な足止めにいそしんでいたというのか。ちゃんベースを踏まえてこそ、くだらない袋小路にはまらないで済む。これはちゃん物理を学んでいない人がブルーバックスくらいだけに目を通しただけで「矛盾」を発見し、相間さんと化すときに似ている。

 今まで自分存在していると思っていたオタク差別は、多分差別ではない。それは、いじめであり、パワハラであり、DVである

 そう視点を変えた方が、いろんなもの整合性をもって見える。中学校時代よくいじめにあっていた同級生は、オタクじゃなかった。正確に言うとオタク「も」いた。

 でもそれは、そいつと俺が割と仲が良いから知っていた話で、きっかけは別のところにあった。運動音痴から足手まといだという扱いだったり、成績がよくて生意気だという扱いだったり、DQN憧れの男の子彼女からだったりした。

 もちろんきっかけがオタクから」というケースもあるんだろう。でも、それはこういったきっかけのワンオブゼムでしかない。それを、民族差別女性差別と並べるのは、視野が広い人間ではなくただの雑な人間だ。

 「差別じゃない」というのは、多分そういうことなのだ。そして、差別じゃないか批判対象にする必要はないという話では、たぶんない。別の枠組で批判すればいい。

 なのにもかかわらず、熱心にじゃああれは差別じゃないんだーという大喜利ばかりをしているツイートばかりが「オタクから流れてくる。いや、どうしてもそこのところをわかりたくないのかもしれない。

 わかりたくないのか、わかろうとしないのか、本当にわからないのか、どれなんだ。

 いろいろ、「オタク差別の事例」というのが流れてきた。前なら、そうだそうだと怒りをぶちあげたであろうものがたくさんある。でもそれはどれもこれも、オタク差別の事例ではない。

 

 そういうものを引いて行って、ある程度確実にあったんじゃないかと思えるのは、「マスコミを通じたもの」だと思う。特にバラエティニュースを通したもの

オタへの偏見を植え付けたのは誰?

 それで思い出すのだけど、俺の中高時代あんまりオタクがいいとか悪いとかい意識を持つことじたいあまりなかった。今思えば自分の机でいつも小説を読んでいて、たまたまホームページの話になったとき「私も持ってる」と言ったのでURLは?と何の気なしに尋ねたらそれはちょっと……みたいに返してきた女の子なんかはオタクだったんだろう。自分だって漫画は好きだったしオタクだったはずだ、今にして思えば。

 じゃあ、そこにどうやってオタクキモイみたいな「偏見」の存在を知らされたかっつーと、漫画だったりインターネットだったり、そして「オタク自身の言説」からなんだよね。

 だってバラエティ番組なんて中二病まっさかり(高校になっても中二だったので)でほとんど見てなかったし。ニュースといってもこの手の話ってだいたいワイドショーである。やってる時間学校にいるんだから見るわけがない。

 金田一少年の事件簿には、小太りですぐキレ気味になる、「オタク」が登場した事件があった。こち亀で、美少女フィギュアを専門とする「色白でアニメ好き」なオタクが登場して、硬派フィギュアマニアのつもりな両津が逃げ出すという展開が「オチ」として機能していた回があった。名探偵コナンホームズフリークの回は……さすがにこの文脈で語るものではないか(でも動機の酷さは「オタクなんてそんなもんだろう」という共通認識が背後にあるような気がする。知らんけど)。

 テキストサイト一世を風靡していたころ、オタクオタクに向けられたコンテンツは叩かれる「べき」もの扱いだった。非オタク向けの、スポーツとかファッションを語るページに迷い込んだら叩かれたという話ではない。漫画感想サイトや、漫画ゲームをメインで扱う日記サイトでの話である

 何を言っているかからない人もいるかもしれない。例えば、ラブひないちご100%やBLACK CATは、軟弱な頭の弱いオタクのためのコンテンツであり、あんものにゲヘゲヘゆってるオタクマジキモイホイッスルミスフルテニスの王子様は腐狙いコンテンツであり、あんもの(ry そういう話である。この範囲結構広くて、らんま1/2H2ぐらいでもオタク向け扱いされることがあった(もちろん、当時これらが連載されてたわけではない。あれってオタ向けの駄作だったよね―みたいな扱い)。

 もちろん彼らが持ち上げるコンテンツというのもあったのだが、この文脈実例を挙げるの風評被害しかないので避ける。俺の好きな作家作品も混じるし。

 テキストサイトだけではなく、2ch(当時)もそんな感じだった。少年漫画板とかそのへんをよく覗いていたのだが、まあ当該作品スレは愛読者が集まるのでそうでもないこともあるのだが(そうであることもある)、総合スレでのオタクコンテンツ叩きはかなり強固だったし、漫画とか関係ないジャンルの板だとなおさらだった。

 そういうものにどっぷりつか……もとい接しているうちにオタクというのは叩かれるべき存在であるのだなというぼんやりとしたイメージ自分のなかで出来てきた。これにもう一つ後押しするように影響したのが、自分オタクだと称する人が、迷惑行為や触法行為のようなものを自慢しながら、「ホラ俺たちオタクからさ」みたいに語っている文章に接する機会があったのも、ああそういう人がオタクなんだなと認識させられた。

 ちょっと話はずれるけれど、当時は、オタクマニアの違いなんていう言い方があって、オタクはそういう迷惑ものを抱えた側の人間やハマりすぎて社会に順応できなくなっている人間、というような線の引き方もあった。

 これは、あくまで俺の話である。だから、他の人がどう偏見を植え付けられたかは、また別の話があるかもしれない。でも、オタク差別を煽ったものとして、「漫画」「インターネット」「オタク自身」という声を、この話でオタク差別に怒っている人の口から出てくるのを見ないのだ。

 ここで挙げたのは、知る人ぞ知るみたいなのじゃなく、だれもが知る有名漫画リドミで上位常連大手サイトオタク文化人として今でも名前を出せば通じる、みたいなのばかりを念頭においている(まあ当時のインターネット文化そもそも、知る人ぞ知るなものでしたけど)。みんな、俺とは違う漫画インターネットを見ていたんだろうか。ワイドショーバラエティばかりを見ていた「オタク」がそんなにたくさんいたんだろうか。

 本当に不思議なのだ。あそこでこんなオタクへの偏見に満ちた報道があったんですよっ!というようなツイートは大量に流れてくるのに。

加害者としてのオタク行方不明すぎる

 これが本当に、ここ数年で疑念として大きくなった末に、今回愛想がつきた一番のポイントなんだけど。

 オタク差別を受ける構造が、あったとする。それは、ネットで語られているほどは大きくないかもしれないけれど。

 それで、今、オタクってなんなんですか、と。特にネット上では、強者、抑圧する側、差別行使する側の「集団」として機能してませんか、と。

 腐女子叩きは昔からあったけれど、女叩き、中韓叩き、などは当たり前のように横行している。時々流れてくる、弱者権利をなんとかして奪ってやろう、人権思想じたいを矮小化してやろう、という意気に満ち満ちたツイッター漫画は誰によって大量RTされているのだろう。俺のところにはだいたいオタクさん経由で回ってくるんだけど。

 趣味、という切り口でみても、オタク文化を愛好する人が自分たちと関係のない趣味なら平気でdisる光景というのはそんなにたぐいまれだっただろうか。インスタ蠅なるイラストが回ってきたことがある。そもそもインスタに投稿するのが趣味になっているような女性を叩くようなツイートが回ってきたことがある。鉄オタは「池沼」「ガイジ」であるなんて言い方もある(「」内は原文の表記尊重)。ゴルフ車など老害趣味だとバカにしていたりもする。そうそう、スイーツ(笑)なる言い回しはいったいどこのどういう人によって流行したんだろうか。「リア充爆発しろ」というフレーズに何げなく込められた、自分関係ない集団への軽視に、どれだけの人が気づいてたんだろか(だって爆発しろ」だよ。あの連中、有明に15万人集まったタイミングで奴等爆発四散しねえかなーって非オタな人が言ってそれがそっちの界隈で大好評を博したら、インターネットな皆さんの間でどういう反応が起こるか考えてみたらいい)。

 そんなオタクばかりじゃないというのは分かる。というか俺がこういう文章を書いてる時点で分かれ。でも、個の話じゃないのだ。集団としての性質の話である。あれだけ、全共闘学生運動について冷笑ぶって叩く人が追いのに、そこに気づかないってどうかと思う。あとリア充爆発しろは使ってましたすいません。

 それに、そういったところで、こんなふうにちゃんと抵抗して、こんなふうに批判して、中から自浄する動きを作りました、このコンテンツからは離れましたと胸を張って言える事例、どれだけあるんですかね?俺が、ノットオールオタクと言い続けたところで、結局「自分批判対象から外してくださいあいつらは関係ない」と逃亡する以外に何の役回りも果たせなかったから、言っているのだ。この記事は違うよなあ~こういう作風は好きじゃないなあ~こういう物言いはよくないよなあ~と個別案件に不満ごちてみせ、自分は違うと思う、もっというなら思ってみただけで、肝心なところからは目をそらしていたんじゃないか? そう思うんである

 逆に、そこに自覚的になったんだろうな、と思える人も何人か知っている。そういう人は、結局C.R.A.C.やツイフェミのようなところに接近し、そのやり方すべてに同意はしないまでも、見解思想共感するようになっていく人がほとんどだ。おそらく今回「オタク差別」に怒っている人は、この人たちを敵であり、オタク仲間と認識していないと思う。

 つまりオタク文化加害者としての側面を見ないふりするか、オタク勘定してもらえなくなるか、二つに一つということだ。

 C.R.A.C.野間氏は個人的には大嫌いだし、たぶん単にオタクが嫌いなんだとは思う。でも今回ツイート応酬を見ていて、残念ながら主張にそれなりに同意せざるを得なかったのは、こういう背景について理解できてしまたからだ。そこで突然くっちゃべられる「オタク差別」。真面目に反差別を考えている人にとっては(多分そこは真面目なんだと思う。この人)、筆算の横棒がミニ定規で引かれていないから×、レベルの見当違い感があったんではないか野間氏の真意など知らないけれど。

 

 そういえばその昔、本田透の「電波男」に感銘を受けながら読み進めていて、後半のほうで腐女子フェミニストについてはずいぶん切り捨てたような言及の仕方なのに疑問を持ったことがあった。いや、フェミニストがオタク差別している、という文脈批判してるなら理解できるんだけど、そうじゃなかったから。権利意識を持つ女性自体が許せなさそうだった。その後「電波大戦」で喪女についての話題が出たとき、対談相手竹熊氏がわりと真面目に実態について話したりしているのに、「困ったモンですね」で終えているのを見て、クジャクママユを盗み出した同級生を見る眼つきになったのを覚えている。だってそこで語られてる喪女本田氏が救済しようとしてやまない喪男と違わないのに。

 そのあとしばらくは新刊も買って真面目に読んでたの、それもどうよって話だけど。

 10年くらい前に、俺たちの麻生なるムーブメントがあった。別に政治家を持ち上げること自体は好きにすればいいんだけど、そこでは当人が積み上げた迷言失言差別発言すべからく許容し、批判したマスコミへの叩きが横行していた。正直、あの政治家のどこがいいのかさっぱり分からなかった。

 当時はオタク個人ニュースが全盛期。そういったサイト管理人は、麻生氏を擁護するまとめブログエントリを紹介しては、叩かれていて困ったものですねぇ、正論なのに、というようなコメントをこぞってつけていた。オタク気質の知り合いなども、熱心に自ブログ擁護していた。

 あれから10年たった今も、麻生氏は差別発言侮蔑発言を繰り返している。あれを見ていて思うのは、この人は息を吸うようにハラスメントをする人なんだな、ということだ。それは、昔も同じだった。だから、どこがいいのかさっぱり分からなかったのだな、と腑に落ちたのだが、同時に当時持ち上げていた人たちにとっては、「だから良かった」んだろうかしら、とぼんやり邪推してしまう。

 今回オタク差別について怒っているツイッター主の中に、表現規制反対などをめぐっての発言をしばしばしているアカウントがいくつかいる。いずれもその界隈ではそれなりに大物だと思う。そして、俺のチェックしている反対派がぼんくら揃いなのかもしれないけれど、ヘイトスピーチの言論の自由を唱え、ポリコレで何も言えなくなることを憂い、自分関係ないところでの言論の自由に興味がないかしろ規制されることを望み、性差別についての提起が出てくるとそれについて考えるより先に提起者の揚げ足を取って袋叩きにするような人たちが勢ぞろいである。さすがに全部きれいに当てはまる人は少数だけれど。そんな反差別運動別にあの界隈に限らず、そういう発想自体)が大嫌いな人たちが、当然のように主張しだすオタク差別批判、いったいなんなのか。ただ、差別社会の中で特権階級になりたいだけじゃないのか。

 そういえば、これはある程度年配のオタクということになるけれど、昔(主に90年代くらい)のバラエティはこんなにおおらかだったのに、今はポリコレがうるさいせいでつまらなくなった、というような声が時々ある。なぜか、そういうつぶやきをしている人が「昔はオタクバカにする表現に寛容でよかったなあ」と語っている声を聴かない。今回オタク差別話題になって、バラエティなどでのオタクの扱われ方という話はけっこう出てきているのに、いない。どこへ行ったんだろう。

 オタク差別、という組み合わせでオタク文化っぽいものを思い返してみると、そんな案件ばかりが、思い出されてくるのだ。

 反差別のために立ち上がったオタク、というのはそれなりの数知っている。そういう人はオタクかそうじゃないかを越えたところのつながりで、反差別をやっている。でも、オタク差別けしからん以外の「反差別」がオタク文化の中心的な動きとしてあったところを、見たことがない。差別煽り偏見煽り強者に諂い(自分たち以外の)弱者嘲笑する、そんな動きならいくつも思い浮かぶのだけど。

 あ、一つ思い出した。(反差別とは少し離れるかもだけど)フリーチベットフリー東トルキスタン

 残念ながら、反中のダシ以上のものであった記憶はないけど。ああいうの、真面目なチベット東トルキスタンにおける人権運動家に失礼だったんじゃないか


 こんな「オタク差別批判」に大真面目に同意したところで、反差別には一ミリもつながらなさそう、むしろ後退させる役割しか果たせなさそうであるメディアを通した差別はもうかなり減ってるといわれるし、それ以外のものオタク差別というくくりより別のくくりで論じた方が有意義でより広い被害を論ずることができるようだ。となるとオタク差別なるものに拘る理由はない。

 もしかしたら、こんなことは本田透の2冊目の著書におかしさを感じた時点で、たどり着かなければならなかったのかもしれないけれど。

 そういう意味でも、失敗した責任を感じる。

2018-03-13

H2は15分で読み終わるのに金田一は1時間かかる

なぜ・・・

2017-11-29

セックス暗喩に気づけなかった腐女子の話

中学時代BLを通じてセックスと言うもの存在を知った私は、暇さえあればセックスのことを考えてニヤニヤしていた。世の中にあふれるセックスに関する言葉、たとえば3Pやら駅弁やらという言葉日常生活の中に発見してはニヤニヤしていたし、シャーペンの芯がHなことにすらニヤニヤしていた。名作野球漫画H2にすらニヤニヤしていたし、「アナリスト」とかい単語にたいそう興奮していた。

そんな私の当時のもう一つの趣味宝塚だったのだが、当時から大好きで何度も見ている公演に、普通にセックス隠喩があったにも関わらず、全く気づかず過ごしていたことが最近わかった。「エリザベート」という作品で、オーストリア皇帝フランツ・ヨーゼフが、娼館をまるごと宮殿に取り寄せたシーンである。もうこの時点でセックスセックスなのだが、家臣が「女性を用意しましょう」みたいなことを言ってのことだったので、ぼんやりと、なんか美人を連れてきてお茶でもすると思っていた。あれだけ日頃セックスセックスで染まっていたのに、全く気づけなかった。

以下は、娼館ママ皇帝バラエティ豊かな女の子たちから自由に選んでさあどうぞみたいなシーンの歌の歌詞である

遠慮せず気取らずに ささ召しあがれ

フレッシュキューティーよ今が食べごろ

食欲が満たされたら たんまりお代いただいてかえる

これ。こんな直接的なセックス暗喩なのに、ふつーに食事野話かと思ってた。

2017-06-26

https://anond.hatelabo.jp/20170626004348

全然ダメやな…

まずは河野太郎のこれを読んどけ

https://www.taro.org/2017/01/%E8%AC%B9%E8%B3%80%E6%96%B0%E5%B9%B4%E7%A0%94%E7%A9%B6%E8%80%85%E3%81%AE%E7%9A%86%E6%A7%98%E3%81%B8.php

研究者の皆様の中に、科学技術振興予算もっと増やせるという幻想を抱いている方がいらっしゃったら、年明け早々にも現実直視していただきたいと思います

科学技術振興予算は今後、増えません。

から現在予算いか効率的に使うか、あるいは成果を生まない大型プロジェクトをつぶしてほかのことに振り替えるか、または成果を生まない研究者予算をほかに振り替えるかしなければなりません。

なぜ科学技術振興予算がこれから増えないのか。

平成28年度の当初予算平成2年度の当初予算比較してみます

なぜ、平成2年度かといえば、平成2年度が赤字国債を出さずに当初予算を組めた最後の年だからです。

単位は兆円です。

H2 H28 伸び率

税収 58.0 57.6 99.3%

その他 2.6 4.7 180.8% (その他収入)

建設国債 5.6 6.1 108.9%

赤字国債 0.0 28.4 –

合計 66.2 96.7 146.1%

一般歳出 25.1 25.9 103.2% (社会保障を除く一般歳出)

交付税 15.3 15.3 100.0%

社会保障 11.6 32.0 275.9%

国債費 14.3 23.6 165.0%

合計 66.2 96.7 146.1%

平成2年度と28年度の税収はほぼ58兆円です。

歳出を見れば、地方交付税はこの四半世紀、全く横ばいです。

社会保障を除く一般歳出は8000億円しか増えていない一方で、社会保障費は20兆円を超える伸びです。

さら国債費も、このゼロ金利マイナス金利時代に10兆円近く増加しています

社会保障を除く一般歳出を詳しく見てみると(単位は兆円)

H2 H28 伸び率

文教科振 5.1 5.4 105.9%

防衛費 4.2 5.1 121.4%

恩給 1.8 0.3 16.7%

公共事業 6.2 6.0 96.8%

ODA 0.8 0.5 62.5%

中小企業 0.2 0.2 100.0%

エネ対策 0.5 0.9 180.0%

その中で科学技術振興予算は(単位は億円)

科学技術 4,755 12,929 271.9%

社会保障費並みに伸びてきています

財政再建のために政府は2020年度にはプライマリーバランスを均衡させる、つまり国債費以外の歳出を税収で賄うこととしています

そのためには経済成長による税収の引き上げや消費税をはじめとする税率の引き上げといった歳入増加策と同時に、歳出の抑制あるいは歳出の削減が必要になります

高齢化による社会保障自然増をどう抑えるかという議論をしている中で、科学技術振興予算を増やせるというのはまったくの幻想です。

こういう予算の状況ですから、ないものねだりをするのではなく、ぜひ、限られた資金をどう効果的、効率的に使って最大限の成果を生むかを考えていかなければなりません。

2017-06-23

あだち充作品電子書籍で読みたい

今やってるMIXしかkindle化してねーじゃん

H2が読みたいんだよ

一気に読みたいんだよ

たのむよ

2017-04-13

HTML閉じタグのインデント

こういう書き方するのはどんなエディタなんだろう?

<th><h2ほげほげ</h2>
    <p>ふがふが</p> <p>ぴよぴよ</p></th>

インデントとか改行とかめちゃくちゃ気になってしょうがない

<th>
    <h2ほげほげ</h2>
    <p>ふがふが</p>
    <p>ぴよぴよ</p>
</th>

こうなってて欲しい

他にも宗派はあると思うけど、上のやつはもうダメ。何教なのかおしえてほしい。

2017-02-14

漫画における死ななくてよかったか委員会

バンビ~ノの羽山さん

H2雨宮のお母さん

NANAのレン

2017-01-08

水素水という人類儚い

水素水詐欺だったみたいですが、これは技術の不完全さによって起きた悲劇と言えます

AI囲碁名人を打ち負かしたように、昨今の科学進歩は目覚ましく、やがて人類は本物の水素水を謳歌することになるでしょう。私たちは悲観的になってはいけません。

本物の水素水いかにして作るか

本物の水素水理論上は濃縮還元水素水と呼ばれるものです。

減圧した装置内のH2Oから真空蒸発濃縮法と呼ばれる技術によって水分を蒸発させます

そうすると装置内のH2Oは水分が飛んだことにより成分が濃縮され、超高純度水素けが残ります。これは通常の水素を濃縮した超高純度の水素で、化学式は(H2)2です。

通常の水素原子は純度が低いのですが、真空蒸発濃縮法によってH2Oから水分を飛ばして濃縮することにより(H2)2を取り出すことが可能になります

濃縮還元水素水はこの超高純度水素(H2)2に水を加えることでできあがるものです。

ただこの過程問題があります。(H2)2に元のH2Oと同量の水を加えてもそれはやや水素の増えたH2Oしかないということです。

今回詐欺と言われた水素水は結局この過程問題がありました。

濃縮還元水素水を作成するにあたって肝要な点は、H2Oをできるだけ加えず超高純度水素(H2)2の濃度を高く保つということです。

したがって理論上完全な濃縮還元水素水はH2O含有量ゼロです。理論的に最大限まで水素の力を引き出す場合、(H2)2そのもの摂取する必要がありますしかしそれはもはや液体でないのはもちろんのこと目に見える物体ですらありません。

装置内のH2Oから水分を蒸発させ、その装置内に存在すると仮定されている超高純度水素(H2)2。しか私たちはそれに水分などの溶媒を加えなければ取り出すことができません。

ここに問題があります真空蒸発濃縮法後の装置内にあるとわかっている完全な超高純度水素(H2)2ですが、それを取り出すという作業をするにはどうしてもそれを不完全な形でしか取り出せないということです。

液体ではない水。それが水素水という人類の夢なのです。

2016-10-30

何度も読みたくなる漫画・時々でいい漫画・一回でいい漫画

何度も読むのはエロ本感?食べ物ものが多いかも(例:深夜食堂バンビーノ美味しんぼ)

時々でいいのはわかりやすエンタメジェットコースターに乗るくらいわかりやすいたぶん一番好きなたぐいの漫画(例:うしおととらスラムダンクドラゴンボールH2とか、数えきれない)

一回でいい漫画は、重くて、病むと見直すこともある。作品としては精神的にもビジュアル的にも高度で一回で結構十分になる(例:おやすみプンプン・ヒメアノール・デスノートライフ)

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん