アフィリエイト広告を利用しています
検索
<< 2023年02月 >>
1 2 3 4
5 6 7 8 9 10 11
19 20 21 22 23 24 25
26 27 28
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。

2023年02月28日

DBクラスにselectメソッドを追加する [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

 本日は、先週データベース接続するクラスを作ったので、そのデータベース接続するクラスに、検索メソッドを作ろうと、文字通り 悪戦苦闘 していました。いろいろやること数時間・・・。やっと動作しない原因が分かりました。悪戦苦闘した理由は、public function connectDb():PDO内のメソッドから、 returnで渡していた値 を、クラス内の publicプロパティへ設定しよう としたところからこの苦労が始まりました。下記プログラムに取り消し線付きのreturnがありますが、まさにそれがそのreturn(※1)です。



<?php

class getDB {
//プライベート変数定義
private $setDb; //データベース名
private $setHost; //ホスト名
private $setChar; //文字コード
private $setUser; //ユーザ名
private $setPass; //パスワード
private $setPara; //接続条件を編集する

//パブリック変数定義
public $getDbConnect;

public function __construct(string $selectDb,string $selectHost,string $selectChar,string $selectUser,string $selectPass) {
//取得した変数を変数として再定義する
$this->setDb = $selectDb; //データベース名
$this->setHost = $selectHost; //ホスト名
$this->setChar = $selectChar; //文字コード
$this->setUser = $selectUser; //ユーザー名
$this->setPass = $selectPass; //パスワード


//接続条件を編集する
$this->setPara = "mysql:dbname=".$this->setDb."; host=".$this->setHost."; charset=".$this->setChar.";";
}

//データベースへ接続する
public function connectDb():PDO {
//データベースへ接続する
try {
static $getDbConnect; //接続コネクタ
return $getDbConnect;
} catch (PDOException $e) {
return $e->getMessage();
} finally {
$getDbConnect = null;
}

}
}
?>




[どんなエラー]
 エラーメッセージは以下の通り。

Fatal error: Uncaught TypeError: getDB::connectDb(): Return value must be of type PDO, none returned


 よく見ると「Return value must be of type PDO」って書いてありましたね・・・。そうです。このエラーメッセージを見落としたため、プログラミングに数時間余計な時間をかけてしまいました。
 ただ、言い訳をさせていただくと、returnが必須の関数なんて今までありませんでしたから・・・。そして、このエラーが出るまでは、いろいろなエラーメッセージが表示され、何がなんだか分からない状態・・・。そのため、このエラーもそのものズバリのエラーと言うことに気づくのにかなり時間がかかってしまいました。

[今日目指したモノ]
 前回は、ドライバからデータベース接続メソッド、connectDb()を呼びだしてみたのですが、このconnectDb()はSQL文を発行する場合必ず使います。それを、ドライバにいちいち記述するのは、 処理が冗長的 になってしまいます。そのため、Select、Insert、Update、Deleteのそれぞれの頭で実施しようと考えました。ただ、ブログを書いていて気づきましたが、connectDb()において、返却値を正しく返すように記述すれば、connectDb()を コンストラクタ に書いてもエラーにならないことが分かりました。

[あとがき]
 本日作ったプログラムは、明日、きれいにして、具体的に解説します。やはり、PHPでオブジェクト指向のプログラムを作るには、慣れるまでに時間がかかりそうです。

 では、また!

※1)今回は、きれいなプログラムができていないので、前回掲載したプログラムを流用しています。

2023年02月27日

旅行から帰ってきました [Coffee Time]


 こんにちは!
 ナビゲータのEVEです。

 昨日旅行先から戻ってきました。東北地方に滞在したのですが、風が強いことに驚きました。風が強いのは暴風壁が乱立している状況から普段から強い風が吹いていることが分かります。
 湖一周して、その近辺の観光スポットを観光した以外は、部屋にいるか温泉に入りリラックスして過ごすことができました。
 そんな三泊四日の小旅行では、いつもと違いWifiを利用することができました。そのため、映画三昧と行きたかったのですが、今回は、3作品を見るのにとどまりました。
 見た作品は、 グリーンブック ドリームガールズ フォー・ウェディング の3本です。フォー・ウェディングはドラマで、前回紹介済みの作品なので、今回は、グリーンブックについてご紹介します。

[グリーンブック]
 この物語は、実話に基づき作られた話で、 ジム・クロウ法 が有効だった期間の話です。ジム・クロウ法、ウィッキペディアを見て知ったのですが、1876年から1964年にかけて存在した、人種差別的内容を含むアメリカ合衆国南部諸州の州法の総称らしいです。そのような時代に、ピアニストで、アフリカ系アメリカ人の ドン・シャーリー は、南部へ演奏旅行を思い立ちます。北部なら南部の3倍ものギャラをもらうことができ、かつ、ジム・クロウ法などといった悪辣な法律がない時にです。
 このドン・シャーリーがどのくらい偉大な演奏家なのかは、彼の住まいから知ることができます。彼の自宅は、 カーネギーホール の2階にありました。普通に考えて、カーネギーホールに住むことができるなんて考えられないのですが、そこに住んでいるというだけでどれだけ優秀な演奏家なのかうかがい知ることができます。
 そんな偉大な彼が、南部に演奏旅行に行くのに用心棒兼ドライバーを雇いました。それが、イタリア系アメリカ人の トニー・ヴァレロンガ です。そのトニーに、ドンのレコードレーベルの担当者は、アフリカ系アメリカ人の旅行者がモーテル、レストラン、給油所を見つけるためのガイドである「 グリーンブック 」1冊をトニーに提供します。ジム・クロウ法が有効なこの時期は、黒人は、宿泊するところ、食事をするところ、トイレなどありとあらゆる部分で差別されていました。そのためのガイドブックです。映画のタイトルは、このグリーンブックからとったようです。このグリーンブックは、この時期の人種差別を象徴しており、その差別により引き起こされるいろいろなハプニングを暗示しているようでした。

[ポイント]
 この映画の面白い点は、人種差別が存在するこの時期に、グリーンブック片手に演奏旅行をしている過程で、黒人嫌いだったトニーと、ドンとの間に奇妙な 友情 が生まれていくところです。
 ドンは非常に知的で落ち着いており、どっちかというとこの時期の白人の富裕層を彷彿させます。それに反して、白人のトニーは、粗野でDearをDeerと書くようなタイプの人間でした。その二人の間に、リスペクトが生まれ、信頼し友情が芽生えていくところは、時代、法律、人種とかあらゆる障壁を超越した何かを感じました。
 その点については、まだ映画を見ていない人は、実際に映画で確認してみて下さい。

 演奏旅行から帰ってきた二人は、その後も友情を温め、2013年に死ぬまで親友であったようです。
 本当に、二人の関係は心温まるものがありました。

[あとがき]
 グリーンブックの紹介が長くなり、今回は、ドリームガールズが紹介できませんでしたが、こちらも大変面白作品でした。ダイアナロスの半生を描いた映画と言ったらいいでしょうか?もし機会がございましたら、こちらもご覧ください。

 話は変わりますが、この旅行で、いいことが1つありました。以前ノートパソコンの内臓バッテリーが壊れたという話をしましたが、この旅行中に直ってしまいました。直ったという表現が適切なのかどうか分かりませんが、エラーのレッドランプが消え、グリーンランプとなりました。このエラーレッドランプ普段使いには全く問題ないのですが、意外と気になるのですよね?それが直ったことは本当によかったです!

 では、旅行の報告はこの辺で!
 明日からは、普通の生活に戻ります。

 では、また!


■グリーンブック
https://www.amazon.co.jp/gp/video/detail/B07Y6NYMPR/ref=atv_dp_share_cu_r

■ドリームガールズ
https://www.amazon.co.jp/gp/video/detail/B00FYM0UZY/ref=atv_dp_share_cu_r

■フォー・ウェディング
https://www.amazon.co.jp/gp/video/detail/B095LQRHCD/ref=atv_dp_share_cu_r

2023年02月22日

EVEシステム ファーストプログラム [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

 EVEシステムの最初のプログラムとして、DBの接続処理をコンストラクタに仕込もうとしていますが、最初っから悩んでいます。30分ぐらいで簡単に作ろうとしたのですが・・・。

[なんで悩んでいる]
 データベースを検索、更新、削除、追加などデータベースを操作するには、必ず、データベースに接続すると言う行為が発生します。その条件だけを聞くと、コンストラクタに処理を入れればいいや!っと単純に考えるのですが、それが 意外と難しい ことに気づきました。
 今回、EVEシステムへ接続するためには、以下の条件があります。

●データベース名、ホスト名などは可変としたい(場合によっては、文字コードも・・・)。

条件は、一点だけなのですが、コンストラクタの制約でこれが難しいことが分かります。
 コンストラクタとは、インスタンス作成時に自動で起動するメソッドです。そのため、引数も戻り値も設定できません。その条件を考えると、どうしても、可変として設定したい変数は、どこかに事前に定義しなくてはいけません。
 困ったな〜♪っと思いながら、サンプルプログラムを見たら、インスタンス作成する時に、引数を指定できることに気づきました・・・。思い込みって恐ろしい・・・。

[コンストラクタでデータベースに接続できない]
 コンストラクタで、データベースに接続できないかやってみたのですが、無理ですね・・・。結局、データベースに接続する処理は、コンストラクタの外に出しました。こんな感じです。コンストラクタって、変数を定義ぐらいしかできませんでしたっけ?



<?php

class getDB {
//プライベート変数定義
private $setDb; //データベース名
private $setHost; //ホスト名
private $setChar; //文字コード
private $setUser; //ユーザ名
private $setPass; //パスワード
private $setPara; //接続条件を編集する

//パブリック変数定義
public $getDbConnect;

public function __construct(string $selectDb,string $selectHost,string $selectChar,string $selectUser,string $selectPass) {
//取得した変数を変数として再定義する
$this->setDb = $selectDb; //データベース名
$this->setHost = $selectHost; //ホスト名
$this->setChar = $selectChar; //文字コード
$this->setUser = $selectUser; //ユーザー名
$this->setPass = $selectPass; //パスワード


//接続条件を編集する
$this->setPara = "mysql:dbname=".$this->setDb."; host=".$this->setHost."; charset=".$this->setChar.";";
}

//データベースへ接続する
public function connectDb():PDO {
//データベースへ接続する
try {
static $getDbConnect; //接続コネクタ
return $getDbConnect;
} catch (PDOException $e) {
return $e->getMessage();
} finally {
$getDbConnect = null;
}

}
}
?>



 できないと判断したのは、public function connectDb():PDO の「 :PDO 」をコンストラクタに指定するとエラーになります。これを指定しないと、データベースへ接続できませんし・・・。ということで、本日のところは、こんな感じで作ってみました。まだまだ、改良の余地はあるようです。

[分からないことだらけ]
 まず、作ったクラスのメソッドをどう呼ぶんだっけっというところから始まっています。 これは、インターネットで調べればすぐにわかるのですが、次に、メソッド内での変数の定義ができない???確か、変数って スコープ があって、あるメソッドから見える変数が別のメソッドで見ることができないなどあったと思いましたが、メソッドの中に変数定義できませんでしたっけ?いろいろ調べてみると、 private public では定義できませんでしたが、 static global で定義できます。globalっていう識別子ってあったっけ???っと疑問を持ちながら、試行錯誤しています。
 それと、PDOで接続する時MySQLって クローズする必要がない って知っていました???データベース接続時に作成したオブジェクトにnullを設定すれば、それで、データベースがクローズされるようです。ほんまかいな???

[簡単に作るはずが・・・]
 簡単に作るはずが、これだけのプログラムに、2時間以上時間がかかってしまいました。そして、まだ、「独習PHP」を読み終えていないので、多分知らないこと満載なんだと思います。とりあえず、1週間ぐらいかけて、オブジェクト指向のPHPに慣れていきたいと思います。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/22 19:01時点)
感想(1件)



 これから、出かける準備をします!

 では、また!!!

2023年02月21日

EVEシステムの製造を開始します [システム開発研究室]


 こんにちは!
 ナビゲータのEVEです。

 本日は、システム開発の今後の方針について発表します。
 タイトルにもありますが、EVEシステムの製造に入ります。

[EVEシステム製造の理由]
 理由は、以下の条件で製造した場合、新システムを製造するのと、変わりないと分かったからです。

?アプリケーション群のプログラムは変更しない。
?今回新規に追加する部分、特にDBに接続するプログラムはオブジェクト指向で製造する。

以上の2点だけなのですが、そうした場合、システム変更するのは、[フレームワークプログラム(赤色の部分)]になるのですが、システム変更の部分ををオブジェクト指向で作ろうとした場合、どうしても 、[アプリケーション群]を変更しなくてはいけなくなります 。それでは、上記?の条件に反します。
現状と開発後.png
 以上の検討を受けて、新規、特にデータベースの部分をオブジェクト指向のプログラムで作るには、図2の赤の プログラム修正 とオレンジの部分を 新規開発 することになります。赤が、既存のPrototype EVEの[フレームワークプログラム]となり、[アプリケーション群]とのインターフェースのみを行い、実質の処理は、EVEシステムで行うことになります。

[今後の開発予定]
 「 先立つものは金 」ということで、いろいろ活動してきましたが、結果としてフライングする形で、EVEシステムを作ることになりました。このブログをつけながら、EVEシステムを最初っから作ったほうがいいかなとも思ったのですが、JavaのSilverを持っているとはいえ、私の実力は本を読み現場でソースを見たレベルです。そのレベルで、どこまで最適なシステムを作れるか 未知数 です。いろいろな経験を積んでいるので、悪いものを作ることはしないと思いますが、作ってみて、ダメだと思ったら、最初から作り直すことを考えれば、既存のシステムを拡張しながら、開発のノウハウを蓄積したほうがいいかなと思い、以上のような選択をしました。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/21 18:28時点)
感想(1件)



 それと、今回、「独習PHP」のデータベースとオブジェクト指向のプログラムの部分を1行1行読み進めていって気づいたのですが、やはり、 PHP5とPHP8は違う ・・・。最終的には、きちんと「独習PHP」をすべて読み終え、勉強した内容に基づいて製造しなくてはいけないと感じています。
 ただ、それでは、時間ばかりかかり、いつ作り始めるのか、いつ適切なオブジェクト指向のプログラムを作れるのか分かりません。そのため、経験を積む意味でも、今スタートしたほうがいいかなと考えています。そのため、システムを製造してから、何回か手戻り等あるともいます。

[明日以降]
 というようなアドバルーンを打ち上げた後なんですが、 明日からちょっと旅行に行ってきます 。日々忙しく活動しているので、お許しください。来週頭に戻ってきますので、それから、開発開始となります。
 以上の考えは、データベースを中心に考えたアイディアですが、その他いろいろ不具合があるのでしょうね???ぞっとしますが、楽しみでもあります。やっぱり、プログラミングって楽しいものなんですよ!

 では、また!!!

<注目!>
 このブログで使用されているPrototype EVEの図は、YouTube「【 今までしてきたこと】〜今までしてきたこと、今後やること〜[ゼロからはじめるシステム開発] 」で使用されている図になります。ご興味がありましたら、ご覧ください!

■【今までしてきたこと】〜今までしてきたこと、今後やること〜[ゼロからはじめるシステム開発]
https://youtu.be/iJB6lBZRu_0
タグ: php

2023年02月20日

PHPで例外処理を利用する [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/20 18:13時点)
感想(1件)



 本日は、予定通り、例外処理から読み始め、次期システムへどのように例外処理を入れるのか検討をしています。

[例外処理]
 PHPの例外処理の構造ですが、こんな感じだそうです。



Exception
 ┣ErrorException
 ┣ LogicException
┃   ┣ BadFunctionCallException
 ┃ ┃   ┗BadMethodCallException
┃ ┣DomainException
┃ ┣InvalidArgumentException
┃ ┣LengthException
┃ ┗OutOfRangeException
RuntimeException
    ┣OutOfBoundsException
┣OverflowException
┣PDOException
┣RangeException
┣UnderflowException
┗UnexpectedVaueException



 大きく分けると、樹形図の最上位にある、上から2、3番目のLogicExceptionとRuntimeExceptionが例外処理になります。
 通常の運用は以下のようなロジックでいいのですが、 デバックモード (*1)にした場合は、より細かいエラーが欲しいと誰しも考えます。その場合は、 下位のレベルのExceptionを利用する ことが望ましいそうです。
 ここでの作りは、多分、catch (Exception $e)と指定しておいて、例外をキャッチした場合で、システム自体がデバックモードになっていた場合、詳細なエラーを出力するように記述した方がようさそうです。catchの中に複数のExceptionを記述することも可能で、先に記述されたcatchが優先されるらしいです。当該箇所に関係しそうで、より下位のレベルのExceptionを先に記述しておいて、その後に、catch (Exception $e)といった記述にするという方法も考えられます。原則として

より下位の例外を先に、上位の例外クラスは後に記述


と言う原則があるようです。



try {
....任意のコード
} catch (Exception $e) {
....例外処理
}




[throwを利用する]
 catchの順番を変える以外に、 throw を利用する方法があるようです。catch (Exception $e)で取得したエラーの詳細を、デバックモードが有効な場合、throwで詳細なエラーを取るというのはどうでしょう?一度上位のメソッドでcatchしているので、そのあとにthrowしても詳細なエラーがとれるか微妙なところですが、ちょっと試してみたいと思います。
 そして、throwは、PHP7までは、ステートメントとしてしか、利用できなかったのですが、PHP8からは 式として利用 できるようになったそうです。

[スタックトレースを利用する]
スタックトレース は、例外が発生するまで経てきたメソッド(関数)の履歴です。エントリーポイント(開始位置)から、呼び出し順に記録されます。これは、デバックにはかなり有効な機能になりそうです。使用するには、getTrace、getTraceAsStringメソッドを使って取得します。ただ、「独習PHP」には、使用例が載っていません。インターネットで確認するしかないようです。

[独自の例外クラス]
 以外の方法として、独自の例外クラスを用意するという方法があります。インターフェースを用いて、適切な継承で、独自の例外クラスを作る必要があります。1つ スーパークラス を作るという方法があるのですが、問題があるそうです。エラーの内容が、多岐にわたる場合、LogicException、RuntimeExceptionにまたがるような場合です。そのため、 適切に分けることが推奨 されます。
 そして、このとき利用するインターフェースを マーカーインターフェース と言い、クラスを判別しやすくするそうです。
 最後のこれがいいかなってこのブログをつけている現在は、考えています。理由は、例外処理を自分で作成し、それを分かるような形にしておけば、PHP本体の仕様変更にも容易に対応できそうだからです。この辺は作って見ないとわかりませんが・・・・。

[あとがき]
 今日、今後のことを書こうとしたのですが、結局例外処理に時間が取られてしまいました。ただ、明日は、必ず、発表します。
例外処理は、すべての処理の共通の処理になり、かつプログラム総ステップの半分を占めるといっていいでしょう?その事実を踏まえれば、ここに時間をかけ検討することは、非常に重要なことだと考えます。
 っということで、本日は、例外処理を重点的に書かせていただきました!

 では、また!!!

*1)Prototype EVEには、デバックモードというモードがあります。このモードにした場合、画面上へのエラーメッセージの出力、ログファイルへの詳細ログの出力が行われます。

2023年02月19日

システムの本は端から端まで読まないとダメ! [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/19 17:37時点)
感想(1件)



 昨日病院に行った後体調を崩してしまい、結局PHPの本を読むことができませんでした。そのため、開発の方向性はほぼ決まっているのですが、今日も引き続き、「独習PHP」の本を読んでいます。Javaにこんな機能あったっけ?っと思いインターネットで調べるとあるようです。多分、以前勉強した本にもなかったのですが、追加された機能でしょうか?今日は、そんな機能の報告です。

[トレイト]
 Javaでも見たことがない機能・・・。それは、 トレイト ・・・。再利用可能なコードを1箇所にまとめて切り出しておく機能だそうです。そして、トレイトとして切り出したコードは、後から再利用可能だそうで・・・。説明とプログラムを見ただけでは、このトレイトの便利さが分かりません。どんなシーンに使ったらいいのでしょうか?なお、インターネットで「Java トレイト」で検索すると、Javaにも機能としてあるようです。不勉強なのか、最近追加された機能なのか不明です・・・。
 例文は分かりやすくするために短いロジックを使用して説明していますが、本来の使用方法は長々としたロジックをトレイトとして切り出しておいて後で再利用するというのが正解なのではと想像しています。
 基本オブジェクト指向のプログラムは、インとアウトが分かっていれば、中身がどうなっているのかは気にしなくていいというモノなので、使えそうという印象はあります・・・。ただ、開発の途中で、忘れてしまう機能なような気がします・・・。結局プログラム多すぎて、どこに何があるかなんて、分からなくなってしまうから・・・。ただ、次期システムでは、そういったすべての資源を一元管理するつもりです。ただ、量が多くなると、結局システムに埋もれるような・・・。管理の仕方が問題ですね・・・?

[オブジェクトの操作]
 トレイトの後には、オブジェクトの操作があるのですが、 参照渡し 値渡し があります。通常の「イコール(=)」を使った場合は、参照渡しなのですが、値渡しをしたい場合は、 clone宣言 をしないとだめなようです。PHP5までは、こんなコトしなくて良かったのですが???っと、「 PHP5徹底攻略エキスパート編 」という昔の本を見直して驚きました。


この機能PHP5から実装されています。要は、PHP4までは、「イコール(=)」で渡すしか方法がなく、この方法は、値渡し、別名 ディープコピー だったのですが、PHP5からは参照渡し、 シャドーコピーがデフォルト になっていたようです。昔は、自分が必要な部分しか読んでいなかったので、ここは読み飛ばしていたようです・・・。まっ、Prototype EVE自体は動きがおかしいと言うことは無く、問題ないと思うのですが、やはり、本を購入したら、最初から最後まで読まないとだめなようです。

 めんどくさ!

[繰り返し処理]
 繰り返し処理は、PHP3、4までは、for、whileなどを駆使してプログラミングをしていたのですが、PHP8にもなると、いろいろと便利なクラスが出てきてるようです。使ってもいいのですが、先ほどのディープコピーとシャドーコピーじゃありませんが、かなりプログラムの重要な部分で仕様変更があるのは「独習PHP」を読んで複数確認しています。その状況を考えると、 できるだけ他人のクラスは使わず に、従来通り自分で制御するロジックを入れた方がいいかなって感じています。

[本日の感想]
 本日は衝撃的な情報を見てしまいました。近頃は購入した本を端から端まで読むようにしているのですが、以前は必要な部分だけを読んでプログラムを製造していました。やはり、知っているとは思わずに、再度確認する意味でも、最初から最後まで読んだ方が良いようです。
 まっ、データベースもそうなのですが、これから、きちんとしたシステムを造りたいなら、やはり、バージョンアップがあった場合、その差分の部分について調べた方がいいようです。開発元からは当然のように提供されている情報なのですから・・・。ただ、英語って言うのが苦痛なんですけれど・・・。
 では、明日、例外処理で何か目に付くポイントがありましたら、報告させて頂いて、何もなければ、これ以降のシステム開発について発表させて頂きます。

 では、また!

2023年02月18日

新たなアイディアが浮かびました [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

 昨日は、メソッドにfunctionがあるって驚いていましたが、今日は、カプセル化から話をしましょう!

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/18 18:20時点)
感想(1件)




[カプセル化]
カプセル化 の重要性について、「独習PHP」に、書かれています。そのカプセル化したデータにアクセスするには、 アクセッサ− を使用してアクセスするっと言うところは、Javaと同じだなって感じました。
 Javaではないので、記述としてはないのですが、 JavaBeans みたいなこともできそうです。

[オーバーロード]
 オーバーロードの機能も用意されています。オブジェクト指向言語なので、この機能がないと、継承が難しいと思いますが、 オーバーライド はないようです。
 いつも、混同し悩む、オーバーロードと、オーバーライドですが、簡単に言うと、オーバーロードが多重定義で、オーバーライドは上書きでよろしかったでしょうか?そのうちの、上書きという機能はPHPにはないようです。
 PHPの オーバーロード の条件としては、以下のものが上げられていました。

・メソッド
 型が一致していること
・仮引数
 型は一致しているが、より広い型であること。個数は一致していること(名前、規定値は異なってもかまいません)
・戻り値型
 一致しているか、より狭い型であること
・アクセス修飾子
 一致しているか、より緩いこと(親がprotectedであれば、子はpublicで利用可能)
・オーバーライドを禁止するのは、final修飾子を利用する

 Javaでプログラミングしないなら、PHPには、継承時にはオーバーロードがあって、以上の条件で利用できると覚えておけばいいのでは?

[ポリモーフィズム]
ポリモーフィズム を実現する機能として、 抽象クラス と、 インターフェース が用意されています。これについては、PHPにも用意されていて、「独習PHP」では、インターフェースについて詳しく書かれています。
 まず、ポリモーフィズムについて説明すると、ある1つの関数(メソッド)の呼び出しに対し、オブジェクト毎に異なる動作をすることをいいます。実は、 PDO がPHP8で利用できると知るまでは、この機能を使って、MySQL、PostgreSQLにといった、異なったデータベースに接続できるように、システムを作ることを考えていました。だから、データベースへアクセスする時、PDOが使用できると知ったときは、一つやることが省けたと思ったわけです。

[明日以降に思うこと]
 本日は、まだ「独習PHP」を読んでいないのですが、なんとなくブログをつけていて明日以降どんなことをするか、したいか、 アイディアが浮かんできました! まだ、オブジェクト指向言語としてPHPを利用したことがないので、何とも言えないのですが、読んだ感触では、いけそうです。

 久しぶりにオブジェクト指向の本を読んで思ったのは、やっぱり、作っていないと感が鈍るなって感じです。本を読んで、久しぶりにコーディングしてみて、初めて新しいアイディアが浮かびました。これからは、プログラムを作る期間がなくても、何かしらのプログラムは作っていたいと思いました。

 では、また!

2023年02月17日

Prototype EVEでオブジェクト指向の考え方を取り入れる [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/17 17:59時点)
感想(1件)



 本日は、PHPでのオブジェクト指向開発について検討をしました。「独習PHP」には、どんな事が書かれているのか見てみましょう。

[PHPのオブジェクト指向言語でデータを利用する]
 Java同様にアクセス修飾子を利用できます。しかも、今までPHPでは、ほとんど意識したことがない 型も宣言することができます 。カプセル化とか利用する場合等において、アクセス修飾子を利用しなければならないのは理解できるのですが、型をわざわざ指定するのは、意外性を感じています。実は、型を意識しないことにより生産性がJavaよりよいことに喜んでいたからです。今後、オーバーライドの時には、必要になるケースがありますが・・・?そのためだけに、作ります・・・?型・・・・?

<利用できるアクセス修飾子>
・public
・protected
・private

<利用できるデータ型> 
・string
・文字リテラル
・bool
・int
・float
・array
・object
・callable ← これ何?
・resource ← これ何?
・null

 全く見たことないデータ型がでてきて、めんどくささ爆発です。

[PHPのオブジェクト指向言語でメソッドを利用する]
 メソッドは、Javaと似ているかな?っといった印象です。ただ、後で動的にインスタンスにメソッドを追加できるとは???この機能、Javaにあったっけ?っと言うことで現在調べています。その他、新しい考え方がでてきていて、クラス、メソッドについては、もう一度読まないといけないようです。
 全く、Javaと違うのは、 コンストラクター の指定方法・・・。Javaはクラス名と同じメソッド名を指定していましたが、PHPでは、コンストラクター名はどのクラスでも同じモノを利用します。「 __construct 」なのですが、まっ、この辺は、どっちでもかまわないって感じではないでしょうか?ただ、引数は返してはいけないと記述されていました。Javaはどうだっけ?
 それと、 デストラクター を指定することができます。デストラクターとは、オブジェクト破棄時に実行される処理で、メソッド自体は、publicにすることが必須です。そして、戻り値は指定しないそうです。これは、Javaにはない機能なのですが、C++には実装されています。PHPのプログラム内でDBクローズをした記憶がないのですが、DBのクラスでここに、closeを指定すれば、明示的にDBをクローズができそうです。なお、PHP5までは、オブジェクト廃棄時に自動でDBクローズするため、その必要はありませんでした。PHP8ではどうなっているのか分からないので、ここにクローズ処理を実装しましょう!
 そして、気になったのが、メソッドに、 function 定義がある・・・。他の言語では、オブジェクト指向の記述と、普通のプログラムを区別するときに、function定義をするかしないかでしていたような気がしたので、ちょっと、違和感を感じます。

 っといった感じで、「独習PHP」を読みすすめています。本日は、抽象クラス、インターフェースまで読み終えて、後、重要なところは、例外処理の所かな?っと言ったところです。本日は、残りの部分を書く時間がないので、今日はこの辺にします。

 続きは、また明日!

 では、また!!!


2023年02月16日

独習PHP〜データベースの章を読み終えて〜 [プログラム研究室]>

 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/15 18:17時点)
感想(1件)



 1日遅れましたが、「 独習PHP 」のデータベースの章を読み終えました。これで、プログラムができるかな?っというとそういうわけではなく、オブジェクト指向の部分も読まなければならないようです。
Java については、Silverまでの資格があり、そのときにオブジェクト指向に関する部分を勉強したのですが、同じオブジェクト指向のプログラムでも、JavaとPHPとはちょっと違うようです。それを、今日オブジェクト指向構文という章を見て、そう感じました。そうです。私は、PHPでオブジェクト指向のプログラムを作ったことはないのです。しかも、Javaについても、他人のソースを見たことはありますが、仕様書をもらって作ったことはありません。ということで、明日、明後日とPHPのオブジェクト指向について勉強する時間をください。何かやろうとすると、いろいろと時間がかかるものなのです・・・。
 そういえば、転職の面接のとき、Javaのプロジェクトを担当してくれと言われ、では、仕事をしながらでもいいから、1カ月時間をくださいといったら、そんなに時間がかかるのかっといった感じで反応されたことがありました。Javaだけごりごり作っているプログラマならいざ知らず、プログラムにかかわるのは久しぶりな人間なら、そのぐらいの時間はほしいはずです。以前覚えたことを思い出して、以前覚えたところと最新の言語仕様を比較してなんてやっていたら、1カ月なんてあっという間です。
 ただ、明日、明後日時間をくださいと言っている今は、1週間ぐらいでよかったかなとか思っています。

[独習PHPの評価]
 非常にいい本です。ただ、この本、以前に、別なプログラムでもいいから、何かしらのプログラム言語を経験した人が読んで、理解できるレベルの本だと思いました。ようは、 初心者が読んで理解するのは難しい ・・・。
 言語仕様をまとめながら読んでいったのですが、まとめるような基本的なところから書いていない・・・。まだ、データベースの所しか読んでいないのですが、基本的な話をしたなっと思ったら、別なところにとんでしまっています。結局、データベースのところには、検索と、データ追加に関する記述しかありませんでした。まっ、現在は、インターネットがあり、調べれば分かるのですが、書くんだったら、 網羅的に書いてほしい と思いました。
 ただ、別のサイトから、Update、Deleteに関するやり方を探しまとめてみましたが、Select、Insertさえ知っていれば、すぐにできるレベルです。
 本の意図するところは、っということでしょうか?

[データベースの章を読み終えて]
 PDOを使用すると、データ自体もオブジェクトとして取得できます。以前、mysql_connectを使用しているとき、PHP5を使用しているときは、自分のプログラム内で取得した データをオブジェクト形式 に変換していました。
 ようは、2次元のデータを、3次元変換していました。理由は、画面等への編集のしやすさです。実は、業務で利用していたデータベースは、Oracleだったのですが、当然データの返却値もオブジェクト形式になっており、取得したデータを、画面へ加工・編集するのが非常に簡単でした。ただ、mysqlは違う・・・。っということで、今まで業務で使用していたデータベース同様にプログラムしたいということで、以上のようなことをしていたのです。
 ただ、PDOによりオブジェクトとしてデータを取得できるようになった今回も、フレームワークから、各アプリケーションへデータを引き渡すためには、やはり、3次元としてデータを取得したとしても、再編集しなければいけないことが判明しました。ただ、以前よりは簡単にできそうです。ということはスピードも早くなるわけで・・・。
 Prototype EVEのプログラムソースを見て、実はこうしたい、ああしたい、というのは多々あるのですが、各アプリケーションとの整合性により、いじれないことに、歯がゆさを感じています。我慢して、EVEシステムでの実現を目指します。

 では、また!
タグ: php Java

2023年02月15日

DBの修正方針が決まって・・・ [プログラム研究室研究室]


 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/15 18:17時点)
感想(1件)



 本日も、「独習PHP」を見ながら、Prototype EVEの検証を進めているのですが、 PDO で問題ないようです。加えて、Prototype EVEにも適合しそうだというところまで検証が終わり、現在DBへ接続する関数がどこでどう使われているのか検証中です。
 単純に検索ソフトで、当該関数を検索すると、 164 箇所あります。いくつかパターンがあるので、そのパターンを調べて仕様を最終的に決定し、修正となりそうです。これは、DBへ接続するだけの関数の話で、それから、select、insert、delete、update等のロジックを修正しなければいけません。気が遠くなりそうです。
 DBに関連した修正だけならいいのですが、そうじゃないのでしょうね?
 とりあえず、Prototype EVEへログインまでできれば、どこが、どう動いていないのか検証できるので、ログインできるところまで、早急に対応したいと考えています。

[「/etc/php/8.1/cli/php.ini」「/etc/php/8.1/apache2/php.ini」どっちが本物?]
 昨日、 php.iniが2ファイルある という話をしましたが、どっちを利用するのかまでは分かりませんでした。
 本日は、ちょうど、PDOをPrototype EVEで利用できるかどうか、実際にコーディングをしようとしてたのですが、どこでどんなエラーになっているのか分かりません。そんな検証作業のため、デバックを有効にすることにしました。
 PHP5のときは、デバックを有効にする場合は、 php.ini で設定するのですが、PHP8ではどうでしょうか?
 調べてみると、PHP5と同じように設定すればいいようです。修正する点は、php.iniの503行目の、 display_errors = Offを、Onに変更すれば、いいはずです。
 ただ、どっちのphp.iniに設定するのか分かりません???そこで、まず、「/etc/php/8.1/cli/php.ini」でデバックを有効にしてみました。ただ、デバックが有効にならない・・・。じゃ、次は、「/etc/php/8.1/apache2/php.ini」で試してみました。その結果、うまくいきました!!!正常に動いているプログラムに、バグを仕込んだのですが、バグを仕込んだ箇所でエラーが発生していますと、画面上にエラーメッセージが表示されています。 っということで、「/etc/php/8.1/apache2/php.ini」が正規のphp.iniらしいということが分かりました。ところで、「/etc/php/8.1/cli/php.ini」は、なんのためにあるのでしょうか?

[検証を終えて]
 明日から、引き続き仕様変更方法について検討を進めていくのですが、今回追加するロジックは、 オブジェクト指向 で記述していきます。ただ、従来のプログラムは、オブジェクト指向では、記述しておらず、ベタ打ちです。昔は、オブジェクト指向の考方はありませんでしたからね・・・。この場合どうなのでしょうか?今のところ、 function の中に、オブジェクト指向のロジックを記述しても問題ないようですが、作り終えた段階で、動かなかったというのが一番悲しいです。もし、このような混在するような環境で問題があったという人がいましたら教えていただければうれしいです!
 ただ、修正する関数は、すべてオブジェクト指向で記述しなおす予定です。functionで定義したプログラムを呼び出している呼び出し元は、関数で処理を実施する、もしくは関数から返却値を取得するだけなので、多分問題ないと思います。

 という現在の検討状況です。
 検討は、未定なので、変更する予定があるかもしれません。この変更は予定なく行われ、報告しない可能性がありますので、このブログの内容を参考としようとする人がいましたら、ご了解ください。

 では、また!

2023年02月14日

Prototype EVEでのデータベースの接続方法を検討する [ソフトウェア研究室]


 こんにちは!
 ナビゲータのEVEです。

独習PHP 第4版 [ 山田 祥寛 ]

価格: 3,740円
(2023/2/14 19:20時点)
感想(1件)



 本日は、「独習PHP」を読みながら、開発環境について調べました。読んでみての感想は、何とかなりそうって言う感じです。

[PHPの接続コネクタ]
 昨日も話しましたが、PHPのコネクタは、PHP5までは、mysql_connectが利用できたのですが、PHP7から利用できなくなりました。その代わりに出てきたのが、MySQLiとPDOなのですが、「独習PHP」では、 PDO を推奨しています。
 このPDOを推奨する理由は、従来は、データベースを変えた場合、今の私のようにデータベースへの記述を変更しなくてはいけないのですが、PDOを導入すれば、今後そのようなことはなくなるというのです。PDOは、多くのデータベースへ統一的な接続を提供しており、もし、データベースを変更することになったとしても、記述を変更することがないというのです。その機能を、 データベースの抽象化 といい、PDOを データベースの抽象化レイヤー と表現しています。
 そりゃ便利ですね?実は、次期システム、EVEシステムは、 PostgreSQL を利用しようとしています。理由は、MySQLの独立性がOracleの買収により失われたこと・・・。やはり、データベースの販売を目的としている所に買収されると、独立性が失われます。などなど、総合的に考え、会社として独立してかつ、無償でデータベースを提供しているPostgreSQLにしようと考えたわけです。
 ただ、読みすすめていくと、接続時のデータベースに渡す引数はデータベースを変えるたびに、変更しなくてはいけないようなので、その部分は汎用的に作らなくてはいけません。
 このPDOが出てこなければ、PHPでインターフェースを作って、いろいろなデータベースへ汎用的に接続できるようにしようとしていたのですが、1つ余計な仕事が省けました。

[環境調査]
 PDOを利用すると決まったので、同関数が動作する環境になっているかどうかまず最初に調べました。php.iniの記述を修正し、PDOを利用できるようにすると「独習PHP」に書かれていたので、php.iniを見ようとしたのですが、Fedraとは同じ位置にありません。Fedraは、/etc配下にあったのですが・・・?そのため、findコマンドで探してみました。そうすると、ディレクトリを分けて、2つ見つかりました。[/etc/php/8.1/cli/php.ini] 、[/etc/php/8.1/apache2/php.ini]配下です。
 何が違うんだろうと見てみたのですが、違う点は、記述的には、2箇所・・・。400行目と430行目です。MySQLに関連する所ではなさそうです。
【400行目】
[Apache配下]
expose_php = Off
[cli配下]
expose_php = On

【430行目】
[Apache配下]
memory_limit = 128M
[cli配下]
memory_limit = -1

 じゃ、MySQLの記述の部分を探したところ、2箇所見つかりました。

【/etc/php/8.1/cli/php.ini /etc/php/8.1/apache2/php.ini共通】
936行目 ;extension=pdo_mysql
 ・
 ・
 ・
1057行目 [Pdo_mysql]
1058行目 ; Default socket name for local MySQL connects. If empty, uses the built-in
1059行目 ; MySQL defaults.
1060行目 pdo_mysql.default_socket=

 昨日の調査では、PDOは利用可能だということは分かっているのですが、この記述であっているのでしょうか?いじって、PDOが利用できなくなるのはいやなので、調査のみで本日は終了しました。

[独習PHP]
 昨日作成したプログラムは、あるサイトのプログラムをほぼコピーし作成したものなのですが、本日は、独習PHPの方法で試しています。


[DB接続関数]
<php
function getDb():PDO {
$dns = "mysql:dbname= DBName ; host=127.0.0.1; charset=utf8;";
$user=" UserID ";
$password= " Password ";
$db = new PDO($dns ,$user,$password);
return $db;
}
?>



[呼び出し元プログラム]
<?php
require "getDataBase.php"; //初期設定関数

//DBへ接続します
$db = getDb();
//プリペアドステートメントの定義
$stmt = $db->prepare("select * from TableName ");

//SQLを実行する
$stmt->execute();

//取得データ終了まで以下の処理を実行する
foreach ($stmt as $row) {
//テーブルの内容を表示します
echo $row[' ColumnName ']."<BR>";
}
?>




現在、 https://www.pro2grammer.com/wordpress/ へ勉強した情報をまとめています。調べた内容をできるだけ分かりやすくまとめていますので、よろしければ御利用ください。公開は、明後日以降になります。

 では、また!
タグ: 独習PHP PDO MySQL

2023年02月13日

Prototype EVEのPHP8への適合状況について調査しました [ソフトウェア研究室]


 こんにちは!
 ナビゲータのEVEです。

 今日から、Prototype EVEのPHP8への 適合状況について調査 に入りました。
 今日の目標は、PHP Version 5.2.6で動作しているPrototype EVEが、PHP Version 8.1.7にどのくらい適合しているのか調べます。

[Prototype EVEのインストール状況]
 先日のブログに書いたとおり、データベースのインストールは完了しています。プログラム関連については、インストールするだけで利用できるようにしているので、当該フォルダにコピーしすべては完了しています。
 データベースは、本当はすべてテーブルをインストールする必要はなかったのですが、製造をはじめてあしかけ 19年目 に入り、どこをどう作ったのかわからない状態です。しかも、1人で作っているので、仕様書はないし・・・。ということで、とりあえず、現状動いているものをすべてインストールし、その上で検証を進めることにしました。

[さて動かしてみよう!]
 アドレスバーへ、Prototype EVEのプライベートIPを入力し動作検証を開始しました。動かない・・・?画面が白くなりますね・・・。管理者画面では、「 このページは現在機能していません 」と表示されます。
 やっぱり、現状のままでは動作しないようです。

 もしかしたら、PHPが認識できていないかもしれないということで、PHPのプログラムファイルを作り、echo test;という1行打ち込んで表示してみました。結果、表示できました。これにより、一応、 Apacheも、PHPも動作している ことが分かります。

 ただ、ここからが大変です。もうすでに出来上がっているプログラムなので、1画面でやっていることは多岐にわたります。次にやったことは、 プログラム全体をコメントアウト して、どこまで動いているかの検証です・・・。
 そこで分かったこと・・・。 mysql_connect を利用しているのですが、データベースの接続ができていない・・・。調べてみると、

「警告 この拡張モジュールはPHP 5.5.0で非推奨になり、PHP7.0.0で削除されました。 MySQLiあるいはPDO_MySQLを使うべきです。詳細な情報はMySQL:APIの選択を参照ください。この関数の代替として、これらが使えます。」

ということだそうです。もう、削除されているものなので、仕方がありません。ただ、現在の環境で、PDO_MySQL、MySQL: APIが使用できるかどうか分からないので、以下のようなプログラムを作り検証しました。



DBName;',
UserId ,
Password ,
[ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]
);


//プリペアドステートメントの定義
$stmt = $pdo->prepare('SELECT * FROM TableName ');

//SQL文を実行
$stmt->execute();

//検索結果終了まで以下の処理を実行する
foreach ($stmt as $row) {
//検索結果を画面に表示する
echo $row[' ColomName '];
}
?>



 この関数、使い慣れていないので、 何回かやり直しましたが、30分もかからずに 接続を確認 できました。
 データベースへの接続は、最初の段階で懸念していたのですが、その懸念が当たってしまいました。

[今後の予定]
PDO_MySQL は利用できそうです。ただ、利用できそうだというレベルで、すべてのプログラムに反映する勇気はありません。そのため、明日、明後日2日間をかけて、PDO_MySQLを深いレベルで調べ、その結果を受けて、Prototype EVEへどう移植するのか検討を進めようと思います。
 基本的に、フレームワークは、mysql_connectをそのまま利用しているので、その個数分修正することになります。アプリケーションプログラムは、フレームワークの接続コネクタを利用しているので、変更はしなくていいと思います。
 基本的に、「 Simple is best! 」というキーワードで製造しているので、1パターンで変更可能だと思うんですが・・・。もう 約20年前 のプログラムなので、どうなっているのか分かりません・・・。
 まっ、結果については、今週中に報告できそうです。

 では、また!

タグ: php EVE MySQL

2023年02月09日

国策としての発電について [Coffee Time]


 こんにちは!
 ナビゲータのEVEです。

 昨日は、新型コロナを例に、非常事態における強権力の発動の重要性について話しましたが、それに沿った話として、1つ提案をしたいと思います。
 それは、 一部電力の国有化 です。

[東北地方太平洋沖地震]
 2011年3月11日(金)14時46分18.1秒に日本において、 東北地方太平洋沖地震 が発生しました。地震により、家が破壊されたのと同時に、多くの人命が失われました。その影響は、地震があった当日のみならずそれ以降の日々の生活に、大きな後遺症を残しました。
 特に、福島原発がこの地震により大きな被害を受けたことにより、首都圏は 計画停電 を余儀なくされ、その影響は、家庭はもとより、工場、店舗など、日本の経済を直撃しました。
 多くの人々は、このとき、日々の生活において、電気が大変重要なモノだと改めて再認識しました。

[ロシアvsウクライナ戦争と電力]
 以上の体験は、日本の首都圏の人々の実体験なのですが、現在でも、テレビでその重要性を確認することができます。それは、 ロシアvsウクライナ戦争 です。
 ロシアは、戦争犯罪を覚悟で、ウクライナの 発電設備を攻撃 し、ウクライナの人々の戦争への意欲を削ごうとしています。結果として、裏目に出ているようですが、夜、暗く寒い中、ウクライナの人々は、その重要性を認識しているだろうと言うことを、テレビ画面から感じることができます。
 以上のような重要性から、電力も、新型コロナ同様に国が大きく関わるべき案件だと感じています。

[日本の現状分析]
 そんな電力ですが、現状日本はどうしているのでしょうか?
 日本は、火力(石炭、LNG、石油など)、原子力、水力、太陽光、風力、バイオマス、地熱と多種多様の発電能力を有していますが、プラント施設等で一極集中で管理、運用されているようです。多種多様であると言うことでリスクヘッジできているようですが、このようなシステム構成では、天災または戦争等で施設を失ったら、東北地方太平洋沖地震の二の舞になりそうです。

[沖縄電力の取り組み]
 以上のような問題を解決する1つの方法を、沖縄電力の取り組みから、見つけることができます。
 現在、沖縄電力では、「 かりーふーる 」というサービスを提供し、太陽光発電を推し進めています。
 どういうサービスかというと、沖縄電力は、太陽光パネルと蓄電池を貸し出すから、各家庭、工場等の屋根に太陽光パネルを置かせて欲しいというのです。これにより、沖縄電力は、土地を改めて用意することなく、安価に発電できるようになりました。そのメリットは、沖縄電力だけでなく、太陽光パネルや蓄電池をおいた各家庭にもあります。現在ホームページから確認できる情報として、年間 5万円のメリット があるようです。もしかしたら、この時期だと他県と比較するともっとあるかもしれません。

[国策としての発電・蓄電]
 以上の沖縄電力の取り組みを、国が中心でできたらと考えています。その理由として、重要な電力を強権力をもって、重要な必要な施設に分配できるからです。それに加え、各家庭といった単位で発電されるため、 リスクヘッジ が可能です。
 東北地方太平洋沖地震、ロシアvsウクライナ戦争などを通して、危機は身近にあると感じています。その身近な危機を回避する手段として非常に有効な方法だと考えます。

[類似発電]
 このような類似の取り組みとして、水素自動車による発電技術があります。水素自動車が普及していない現在、眉唾的な物になっていますが、普及した場合、各家庭の水素自動車で発電した電力を1箇所に一度集め、集めた電力を本当に必要な施設に再分配しようというモノです。それを スマートグリッド という言い方をしていますが、このような考え方は以前からありました。

[最後に]
 結論として、電力は重要で、国策で何とかしなくてはいけないモノなのでは?っと書きたかったのですが、論述が苦しくなってしまいました。ただ、言いたいことは理解いただけたと思います。あなたは、どう思いますか?

 では、また!


■かりーるーふ(沖縄電力)
https://www.kare-roof.jp/

■【2023年最新】日本における発電の割合は?再エネ発電普及のポイントを解説(アスエネメディア)
https://earthene.com/media/156

■スマートグリッドとは何か?知っておきたい次世代電力ネットワークの基本【2分間Q&A(62)】(ビジネス+IT)
https://www.sbbit.jp/article/cont1/20638

2023年02月08日

新型コロナの政策について振り返る [Coffee Time]


 こんにちは!
 ナビゲータのEVEです。

 今週いっぱいは、月末のスケジュール調整のため、開発、YouTubeの製造については、できないので、時事ネタ等が多くなります。
 本日は、 新型コロナ対策 を振り返ってその政策について話をしましょう。

[新型コロナの日本政府の対応]
 話は新型コロナ真っ盛り当時の話なのですが、新型コロナにおける政府の対応についてどう感じましたか?
 日本における新型コロナの政策は、他国と違って、こんなことしてほしいな〜っと言った政策が多かったように感じます。ようは、 強権力をもって政策を実行した例がありません でした。
 その一方で、他国は、強制力を伴い、 罰金は当然 として、 暴力が伴う ことさえありました。そのときの、日本の政府の説明は、 日本の国になじまない という発言がありました。確かにそうなのですが、他国ではその国になじむからやった政策なのでしょうか?麻雀をしている最中に、政府役人に麻雀台を破壊されている所を見て、確かに中国なら当然だななんて思った人は多分いないと思います。

[他国の政策を見て日本の対応について思うこと]
 新型コロナの流行は、人命に関わる事案であり、その事案は、国の全体を揺るがすモノでした。そういう事案に対して、他国は、国を預かる者の責任として、強権力を発動したのです。
 そのような他国の動きを見て、コロナにおける日本の対応の印象は、とどのつまり、 強権力を発動することによる、あらゆる問題の責任はとりたくないし、問題が発生した場合は、自己責任だとその責任を国民に押しつけていたように感じます

[なんでそう感じる?]
 以上に考える理由として、平時において、日本の政策はどちらかというと、政府関係者の責任において実行される政策が多いと感じているからです。
 その前に、権力と責任の関係について触れる必要があるでしょう?
 力を持った場合、 権利と責任はイコール でなければならないとされています。ようは、 力、権力を持つ者は、責任が伴う と言うことです。
 今回の新型コロナの政策は、 平時なら力は欲しいし、それに伴う責任を背負うのは問題ないが、新型コロナのような、異常事態では、嫌だ というように感じてしまいます。

[これでいいのか日本]
 以上のような政策になったのは、結果としてなったものなのかもしれないということを、 日銀の量的緩和 を見ていると感じています。どこの国もしていないことを永遠と続け、目標を達成後の出口戦略をどうするんだと心配する人が多い中、強い意志を持って続けています。
 そんな、政策を見ていると、新型コロナでの政策は、最善な方法だったかもしれないと感じてしまいます。ただ、その違いは、働いている 組織 により生まれているだけかもしれませんが・・・?
 新型コロナ流行真っ盛りの政策は、政府関係者にはやさしい政策であり、結果としてうまくいったのですが、今後もこれでいいのでしょうか?
 毎回新型コロナのような政策でうまくいくと思わない方が良いかもしれません。そんなことを考えると、重責にみあった政策を立案、実行して欲しいと感じています。

 では、また!

2023年02月07日

YouTuberの収入が激減した? [YouTubeの稼ぎ方研究室]


 こんにちは!
 ナビゲータのEVEです。

 そろそろ、YouTubeを更新しようかな?っと動画を集めているのですが、編集まで至りません。物理的な時間がないのです。っかといって、睡眠時間を減らすと、記憶力に影響して、覚えなければいけないことが覚えられないし・・・。

[YouTuberの収入激減]
 そんなこんなで、YouTubeを見ていたら、チャンネル登録者が多い YouTuberが収入が激減 したと話しているのに目が留まりました。
 そのような話をしている人の数は多くないのですが、聞いた内容から、チャンネル登録者数が多いYouTuberの方々が、収入が激減したというのです。

[なんでYouTuberの収入が激減したの?]
 聞いて最初に思いついた原因は、 YouTuber数が増えた ということです。昔は、YouTuberと言われる個人がYouTubeという媒体から動画を流していましたが、現在は、一般の企業だけでなく、テレビ放送局もYouTubeに参戦しています。
 本日のブログの最初に、物理的な時間が足りないという話をしましたが、YouTubeを見る人の時間も有限で、みな同じ時間しかありません。その有限の時間をいろいろな番組が競い奪い合っている状態です。
 その競争が、今回のYouTuberの収益に影響を与えたのでは?っと思っていました。

[Googleでレイオフ]
 今回のYouTuberの収入激減の事情を以上の内容で想像していたのですが、2023年2月1日ですが、 Googleの社員が、1万2,000人レイオフ されるという報道がありました。今まで、Googleはそんな話の蚊帳の外だと思っていたので、非常に驚きました。
 そのニュースを見てからは、YouTuberの収入が激減した理由ですが、これが主因かなっと思っています。
 YouTuberの収入は、Googleの広告収入があればこそです。YouTuberの収入は、Googleの広告収入の再分配されたモノと言い換えることができます。

[時間をどう使う?]
 チャンネル登録者数が2人という状況なので、以上の話は、全く関係ないのですが、私もできれば、YouTubeから収入がほしいな〜っと思っています。ただ、それには、動画を製造しなくてはいけません。
 現在、時間をどうやりくりしようか、奮闘中です!やりなれていないことを、多数やっているので、時間がかかっているということもあり、慣れてくることにより、短い時間で、できるようになるということもあるので、とりあえず、頑張るしかないといった状況です。質は落とすと後で問題になりそうですし・・・。

 そうそう、今週末予定がはいったと先日話しましたが、今月末の勘違いでした。今月末までは、毎日、ブログを更新しますので、よろしくお願いします。

 では、また!

■グーグルのレイオフ、メンタルヘルスの責任者も対象だった…彼女のチームの多くも解雇された(Yahooニュース)
https://news.yahoo.co.jp/articles/f00bc67c49c07e84fe1d00b5c55ab743782403e5

2023年02月06日

ハッシュ技術とは? [セキュリティ研究室]


 こんにちは!
 ナビゲータのEVEです。

 昨日は、Prototype EVEのパスワードのセキュリティについて話しました。
 Prototype EVEでは、パスワードは ハッシュ 化され格納されているので、管理者でもパスワードを見ることができないとか、ハッシュ化されたパスワードを送受信するときは、パスワードへ乱数を付加しハッシュ化して送受信しユーザを特定しているなどの話をしました。
  以上から、Prototype EVEを支えるセキュリティ技術として、ハッシュという言葉が重要だと理解いただいたと思います。
 本日は、今更ですが、ハッシュ関数とはどんなものなのか、知らない人、または、よく分からない人のために、話をしたいと思います。

[ハッシュ関数とは?]
 ハッシュ関数は、よく暗号化するための関数と間違われます。はっきりいいますが、 ハッシュ関数は暗号化するための関数ではありません
 もし、暗号するための関数なら、暗号化した文字列は、復号できなければなりません。但し、ハッシュ化した文字列は復号はできません。一度ハッシュ関数を通した文字列、一般にはハッシュ値と言いますが、ハッシュ値は復号し元の文字列にすることができません。

 こんな関数を何に利用するの?っという疑問が生じると思います。

 そんなハッシュ関数ですが、一般的には、データの完全性を保証するツールとして利用されています。どうしてこんなことができるかというと、ハッシュ関数の、以下の性質を利用して保証しています。
ハッシュ関数の性質.png
?原像計算困難性
?第2原像計算困難性
?衝突困難性

 ?は、ハッシュ関数によりハッシュ化された値から入力値を見つけることは困難であるという特性があります。一方向性、不可逆的関数と呼ばれます。
 ?は、ハッシュ関数によりハッシュ化された値と全く同じハッシュ値を見つけることは難しいとされています。この説明だけでは、分かりづらいので、もっと説明すると、ハッシュ関数により、ハッシュ化された値、ハッシュ値は、固定長の長さで出力されます。それは、1バイトでも、1kでも、1Mでも同じ長さで出力されます。そのため、どうしても同じハッシュ値が生まれます。それを シノニム と呼んでいるのですが、そのシノニムの発生する可能性が低く、かつ、そのシノニムを見つけるのが難しいという特性があります。
 ?は、ハッシュ間数へ異なる入力データから、同じハッシュ値が計算される(衝突する)可能性が極めて低く、事実上ないとされています。なんとなく、?と似ていますね?この?を衝突困難性は、他に、 衝突計算困難性 強衝突耐性 とかいわれます。

 以上のような性質が、データの完全性を保証し、これを、別の言い方をするとデータの フィンガープリント (指紋)といわれています。なぜかというと、ハッシュ関数により得られた当該データのハッシュ値は、当該データを他のデータと識別し、世界で唯一のものと保証してくれるからです。
 Prototype EVEでは、予めパスワードのフィンガープリントをとってデータベースに格納することにより、画面から入力されるパスワードのフィンガプリントと比較し、ログインするユーザを特定しているというわけです。本人確認が、フィンガープリントを比較するだけなら、データベースへパスワードを保管する必要はありません。
 他の使用方法としては、デジタル署名とか、ソフトウェアの完全性などを保証するときなどに使用されています。

[説明を終えて]
 ハッシュ値、ハッシュ関数を理解していただけましたでしょうか?このサイトではたびたび出てくる用語で、IPAの試験でも出題されています。現代のセキュリティを支える非常に重要な技術なので、しっかりと覚えてください。

 では、また!

■ハッシュ関数(ウィキペディア(Wikipedia))
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96%A2%E6%95%B0

2023年02月05日

パスワードのセキュリティの検討 [システム開発研究室]


 こんにちは!
 ナビゲータのEVEです。

 来週末ちょっと出かける用事ができましたので、スケジュールがあっぷあっぷの状態です。

[Prototype EVEを使ったシステム開発]
 機能設計については、昨日話したような感じで進めていくのですが、 フレームワーク の部分についてどうしようか検討しています。フレームワークは、初期バージョンを 2004年に製造を開始 し、その後セキュリティ機能を強化したバージョンを 2009年にリリース しました。その当時はそれで十分だったのですが、現在では見劣りします。ただ、そのシステムを多くの人に利用してほしいと思っているので、セキュリティについては、強化したいと思います。

[Prototype EVEのセキュリティ]
 Prototype EVEでは、その当時危険と言われていた脅威については対応しています。パスワードについては、 ハシュ化 とか、乱数を付加しての再ハッシュ化するといった方法です。
 パスワードは、DBに格納する時点でハッシュ化されているので、DB管理者でもどんなパスワードを使用しているのか分かりません。そして、サーバーとクライアント間で通信する場合、その乱数を付加して再ハッシュ化しているので、もとのハッシュ値は分からないようにしています。
 ただ、乱数を付加しての再ハッシュ化なのですが、日をまたがないと乱数が更新されないので、1日で成功する攻撃の場合、無力となります。ハッシュ化されたパスワードによる通信でも、ず〜っと同じものを使用していると、 リプレイ攻撃 が成功してしまうのです。ただ、今回は、SSL/TLSを導入したことにより、その可能性はかなり低くなりました。
 ただ、もう一工夫をしたいと思います。私がPrototype EVEへセキュリティを導入したときにあまりいわれていなかったソルト値の導入です。
ソルト値 は、多くのユーザーが使用しているパスワードを保護するのに役立ちます。

 先ほどハッシュ値の話をしましたが、ハッシュ値は、同じ文字列からは同じハッシュ値しか生成できません。つまり、多くのユーザが使用しているパスワード、例えば、「password」とか、「123456789」とかいったパスワードのハッシュ値は、多くの人が知っているのが現状です。そのため、Prototype EVEでは、ハッシュ化されたパスワードへ乱数を付加して再ハッシュ化したのですが、それも乱数は、Prototype EVEを使用している人なら同じ値のため、一人のユーザのパスワードがばれた時点で、多くのユーザのパスワードが露見する可能性があります。
 但し、ソルト値は、ユーザ個人に与えるモノなので、一人のユーザのパスワードが露見した影響は、すべてのユーザへ及ばないというメリットがあります。
 パスワード限定なのですが、現在は、そう、考えています。

[次期システム]
 次期システム、EVEシステムは、もっと、セキュリティが高いモノになる予定です。



・システムはユーザの利益のために
・システムそのものがドキュメント
・全てをシステムで管理する
・1人でシステムを運用する
・すべての操作を一つの手順で

なんて、目標を立てています。今回の検討は、次期システムに活かしたいと思っています。Prototype EVEのシステム構成については、忘れている部分もありますしね(笑)。

 では、また!

*1)<EVEシステムの目標>
■プロローグ〜EVE〜 [YouTubeでの稼ぎ方研究室]
https://fanblogs.jp/bahamuteve/category_1/2

2023年02月04日

機能定義の方針が決定しました [システム開発研究室]


 こんにちは!
 ナビゲータのEVEです。

 現在、EVEプロジェクトでは、以下の環境を保有しています。

Xserver━pro2grammer.com
┗shareholders.com
VMware━開発環境
┗テスト環境

 本日は、開発環境でフレームワークを検証できるように設定を微調整をしていました。なんとか、明日から検証作業ができるようになったようです。確か、PHP5から、PHP7にバージョンアップしようとしたときに、DBの接続方法が変わったといった内容を読んだ記憶がありますが、どうなのでしょうか?今日やろうかなとも思ったのですが、楽しみは明日にとっておきます。
 それでは、昨日の話の続きをします。

[機能設計2]
 昨日は、 5W1H で誰が何をどうしたいのかということを列記するという話をし、その列記した内容の網羅性を 樹形図 、または マトリックス を作り確認してはどうでしょうかと提案しています。
 その作業については、これから順次行うとして、その後は何をするのかお話ししましょう。

 以下の様な樹形図、またはマトリックスを作成後、次に、この機能を実現するために、何をどのようにするのか ブレイクダウン していきます。既に、最初の機能定義でどこでやるのかは明確になっているので、次にやる作業は、 名詞と動詞を用いて 何を、どうするのか記述していきます。
 記述方法としては、最初に定義した機能定義を<レベル1機能定義>とすると、その内容を詳しく列記し、そのレベルを下げて記述していきます。

<レベル1機能定義>  ← 昨日抽出した機能

リアルタイム で、 インターネット を介して、 教師 が、 生徒 に、 プログラム言語 を教える
? ? ? ? ?



<レベル2機能定義>

教師 は、 生徒 へ、 使用する資料を配付する
? ? ?



<レベル3機能定義>

授業で使用する資料 は、 ログイン後のシステムでダウンロードすることができる
? ?
授業で使用する資料は 登録済みのメールアドレスで受信することができる
? ?



(レベルの関係)
<レベル1機能定義>
 ┗<レベル2機能定義>
  ┗<レベル3機能定義>


 以上のような感じで、レベルをブレイクダウンしていき、もう 詳細化することができないところまで実施 します。それで、1つの機能が完成します。
 以上の機能定義により何をどうするのか深いレベルで理解できるようになるので、これ以降の作業は、その機能を システム的にどう実現するのか仕様書に纏めていく という作業になります。これ以降は、どこのプロジェクトでもやっていることと同じになると思います。

[機能定義の方針が決定して]
 システム仕様書を作っていて、最後にもめるのが、「 思ったシステムでない! 」、「 当初考えていた機能が足りない! 」っといた部分になります。確かに作っていてモノができあがってくると、あぁすればよかった、こうすればもっといいのにとかといった意見が出てくるのですが、それをプロジェクトの途中で取りこむのは非常に難しいのが現実です。できれば、2次開発、3次開発といった次の開発で取り込めればいいのですが、資金が潤沢なプロジェクトだけではありません。多くのお客様は、現在の予算の中に入れようとするのですが、入れると デグレード問題 などが発生し大変なことになります。
 今回の機能定義は、そんなプロジェクトの悩みを解決する手法だと思っています。

 なお機能定義をしていて、思ったのですが、網羅性のマトリックスの作成は、レベル1機能定義だけになりそうです。レベル1機能定義だけでも作成するのは大変なのですが、ここにレベル2、レベル3が入ってきたら大変です。最終的にどうなるのか未定なのです。いろいろ、工夫して仕様書を作っていきたいと思います。

 引き続き機能設計をし、終えたのちに、通常の開発に入りたいと思います。なお、設計資料ですが、現時点は、pro2grammer.comを通してどんなことをやっているのか公開しようかなっと思っています。
 実現するか未定ですが・・・。

 では、また!

<レベル1機能定義樹形図>

リアルタイム━ブラウザ━教師━PHP
┃ ┃ ┣JavaScrpt
      ┃ ┃  ┣Java
      ┃ ┃  ・
      ┃ ┃  ・
      ┃ ┃  ・
      ┃  ┃  ・
┃ ┃ ┗HTML
      ┃ ┗生徒━PHP
┃ ┣JavaScrpt
      ┃     ┣Java
      ┃     ・
      ┃     ・
      ┃     ・
      ┃     ・
┃ ┗HTML
┗メール ━教師━PHP
 ┃ ┣JavaScrpt
          ┃   ┣Java
          ┃   ・
          ┃   ・
          ┃  ・
          ┃   ・
┃ ┗HTML
          ┗生徒━PHP
┣JavaScrpt
             ┣Java
             ・
            ・
             ・
             ・
┗HTML
オフライン━ブラウザ━教師━PHP
┃ ┃ ┣JavaScrpt
     ┃ ┃  ┣Java
     ┃ ┃  ・
     ┃ ┃  ・
     ┃ ┃  ・
     ┃  ┃  ・
┃ ┃ ┗HTML
     ┃ ┗生徒━PHP
┃ ┣JavaScrpt
     ┃     ┣Java
     ┃     ・
     ┃     ・
     ┃     ・
     ┃     ・
┃ ┗HTML
┗メール ━教師━PHP
 ┃ ┣JavaScrpt
         ┃   ┣Java
         ┃   ・
         ┃   ・
         ┃  ・
         ┃   ・
┃ ┗HTML
         ┗生徒━PHP
┣JavaScrpt
            ┣Java
            ・
           ・
            ・
            ・
┗HTML

注意!
 今まで頭の中だけで設計していた内容を昇華し、文章にすると以上のような感じになります。普段からこんなことをしているわけではありません(笑)。

タグ: 機能定義

2023年02月03日

機能設計の続き [システム開発研究室]


 こんにちは!
 ナビゲータのEVEです。

 本日は、昨日のリカバリ作業を実施しています。

 1つ目は、昨日、やっと仮想ディスクの拡張を終えて、すべてのインポートを終えたと思ったのですが、インポートファイルとインストール済みテーブルを比較したら、 4つほどテーブルが足りません 。そのため、現在あわてて、不足しているテーブルをインポートしています。
 加えて、2つ目なのですが、ディスク拡張に伴い、 Apacheのリダイレクト検証環境(スナップショット)を削 除したことによる、同環境の再構築を実施しています。
 理由は、ディスク拡張をするに伴い、VMWareのスナップショットを削除しなければならなかったためです。それが VMWareの仕様 なのですが、インストール自体は、そんなに時間がかからないからいいかな?っと軽い感じで削除し本日作業を始めたのですが、本日のインストール作業1時間以上かかりました。以前は、30分ぐらいで終わったのに・・・。前回と今回の違う点は、インストーラのアップデート・・・。前回やったときは、インストーラーをアップデートせずに実施したのですが、今回は、インストールするに際し好奇心に勝てず、インストーラーをアップデートしてしまいました。そのインストーラーのアップデートを作業に組み込んだことにより思った以上に時間がかかってしまいました。後で、どんなプログラム等が増えているのか確認するつもりです。
 なんて、予想外の時間を要してしまいましたが、本日は、久しぶりに開発の話をしたいと思います。

[機能設計]
 前回2023年1月12日に話してから期間があいてしまいました。何を話したのか覚えていないかたもいると思うので、再度お話ししましょう。
 前回は、機能設計の話をしました。
 機能設計をするに際し、 5W1Hを取り入れて、動詞で書きましょう という話をしています。その一例になりますが、以下のような形になります。
 そして、一通り抽出を終えたら、以下の文書を マトリックス かすると網羅的に機能を抽出できるのでは?っと提案しています。
 どういうことかというと、01)を例に見ていきましょう。
 01は、以下の内容で記述しています。


リアルタイム で、 インターネット を介して、 教師 が、 生徒 に、 プログラム言語 を教える
? ? ? ? ?


 私は、今回のシステムを製造するにあたり、リアルタイムで教えようと思いリアルタイムという言葉を用いましたが、それ以外の方法はないでしょうか?それは、後日教えるというシチュエーションが思い浮かびます。適切な言葉が思い浮かばないので、オフラインといったらいいでしょうか?
 次に?インターネットという手段を用いて教えようとしていますが、それ以外はないでしょうか?通信教育を郵送で行う方法が考えられますが、金銭的な負担や労力を考えた場合、難しいと思われます。ここは、インターネットという手段を用いることの代替手段を考えることはせずに、そのインターネットを細分化してみましょう。細分化すると、ブラウザ、メールなどが、あります。そういった手段で分類できそうです。
 次に??「教師が生徒に」という部分ですが、これは、このシステムの根幹になるので、代替はないとも思ったのですが、生徒同士でのディスカッションができれば面白いかもしれませんね?
 そして最後の、プログラム言語とありますが、それ以外に教えるものがあるとしたら、セキュリティ、AIなどが考えられますが、現時点は難しいと思っています。それは、いろいろな目的を持たせることにより、システムの使い勝手が悪くなるといったことが考えられるからです。頭の片隅にはとどめるのですが・・・・。
 プログラムを教えるという部分は現時点は変えないほうがいいと思われます。
 そんな検討をまとめると以下のようになります。

リアルタイム━ブラウザ━教師━PHP
┃ ┃ ┣JavaScrpt
      ┃ ┃  ┣Java
      ┃ ┃  ・
      ┃ ┃  ・
      ┃ ┃  ・
      ┃  ┃  ・
┃ ┃ ┗HTML
      ┃ ┗生徒━PHP
┃ ┣JavaScrpt
      ┃     ┣Java
      ┃     ・
      ┃     ・
      ┃     ・
      ┃     ・
┃ ┗HTML
┗メール ━教師━PHP
 ┃ ┣JavaScrpt
          ┃   ┣Java
          ┃   ・
          ┃   ・
          ┃  ・
          ┃   ・
┃ ┗HTML
          ┗生徒━PHP
┣JavaScrpt
             ┣Java
             ・
            ・
             ・
             ・
┗HTML
オフライン━ブラウザ━教師━PHP
┃ ┃ ┣JavaScrpt
     ┃ ┃  ┣Java
     ┃ ┃  ・
     ┃ ┃  ・
     ┃ ┃  ・
     ┃  ┃  ・
┃ ┃ ┗HTML
     ┃ ┗生徒━PHP
┃ ┣JavaScrpt
     ┃     ┣Java
     ┃     ・
     ┃     ・
     ┃     ・
     ┃     ・
┃ ┗HTML
┗メール ━教師━PHP
 ┃ ┣JavaScrpt
         ┃   ┣Java
         ┃   ・
         ┃   ・
         ┃  ・
         ┃   ・
┃ ┗HTML
         ┗生徒━PHP
┣JavaScrpt
            ┣Java
            ・
           ・
            ・
            ・
┗HTML

 本当は、表で表現できればいいのですが、A8は、テーブルタグをうまく使えないつくりになっています。そのため、以上のような表現になっていますが、一通り設計が終わりましたら、Media Fireにアップロードするかもしれません。反応が薄かったらしない可能性大です(苦笑)。

<5W1Hを取り入れた機能設計 2022年1月12日実施分>
01)リアルタイムで、インターネットを介して、教師が、生徒に、プログラム言語を教える
02)リアルタイムで、インターネットを介して、教師は生徒の作ったプログラムを見ることができる
03)いつでも、教師は、インターネットを介して、授業をスケジュールすることができる
04)いつでも、教師は、インターネットを介して、教材を配布することができる
05)授業中、インターネットを介して、生徒に教師に質問をすることができる
06)授業後、インターネットを介して、生徒は、生徒に教師に質問をすることができ
07)いつでも、生徒は、インターネットを介して、カリキュラムを確認することができる
08)いつでも、生徒は、インターネットを介して、教材をダウンロードすることができる
09)いつでも、生徒は、インターネットを介して、スケジュールを確認することができる
10)いつでも、入会前ユーザは、教師に、カリキュラムについて質問することができる

[説明を終えて]
 以上が今後の進め方になります。ここで、すべて設計するという話をしているのですが、A8のサイトの制約などがあり、難しいことが分かりました。すべては紹介できないかもしれませんが、適時どんなことをしているのかご報告しますので、楽しみにしている方は楽しみにしていてください!(笑)

 では、また!

《前回のブログ》
■システムの開発をはじめました [システム開発研究室](2023年1月12日)
https://fanblogs.jp/bahamuteve/archive/192/0

2023年02月02日

仮想ストレージ拡張の作業を検証する [ソフトウェア研究室]


 こんにちは!
 ナビゲータのEVEです。

 昨日は、インターネットから散逸した情報を集め、理解できていないまま、がんがん作業を進め、その結果としてディスクの拡張に成功しました。
 本日は、昨日やった作業をひとつひとつ検証し、理解し、今後の運用に役立てたいと思います。

[現状分析]
 dfとlsblkを用いて現状を分析します。


# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 295M 1.3M 294M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 98G 93G 0 100% /
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 136M 1.7G 8% /boot
tmpfs 295M 4.0K 295M 1% /run/user/1000



 ここでFilesystemという項目がありますが、それぞれを調べてみると以下の通りとなります。

/dev/vda:準仮想化ストレージ
/dev/sda :完全仮想化ストレージ
tmpfs:テンポラリストレージ
/dev/mapper/ubuntu--vg-ubuntu--lv:?

/dev/mapper/ubuntu--vg-ubuntu--lvをインターネットで調べても、分かりませんでした。ただ、/dev/mapper/ubuntu--vg-ubuntu--lvの使用率が100%となっているので、これが、ターゲットのパーテションだと想像できます。それでは、lsblkでディスク状態を見てみましょう。


# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.2M 1 loop /snap/core20/1623
loop1 7:1 0 63.3M 1 loop /snap/core20/1778
loop2 7:2 0 135.7M 1 loop /snap/lxd/23680
loop3 7:3 0 144.2M 1 loop /snap/lxd/24323
loop4 7:4 0 49.8M 1 loop /snap/snapd/17950
sda 8:0 0 500G 0 disk
┣tqsda1 8:1 0 1M 0 part
┣tqsda2 8:2 0 2G 0 part /boot
┗mqsda3 8:3 0 298G 0 part
┗mqubuntu--vg-ubuntu--lv 253:0 0 100G 0 lvm /
sr0 11:0 1 1.5G 0 rom




 以上の状態から、mqubuntu--vg-ubuntu--lvは完全仮想化されたパーテーションだと分かります。項目名が、NAMEとあるので、これは、パーテション名という事でしょうか?ファイルシステムに同じ名前で表記されていたので、悩んでしまいました。

[パーテションを拡張する]
 次に仮想ストレージを拡張していきたいと思います。流れとしては、partedで論理パーテションを拡張後、使用領域をどのくらい使用するのか指定(lvextend)します。指定後、最終的にそのファイルシステムサイズを変更(resize2fs)します。
 それでは、partedコマンドでパーテションを拡張してみましょう。



# sudo parted /dev/mapper/ubuntu--vg-ubuntu--lv
GNU Parted 3.5
Using /dev/mapper/ubuntu--vg-ubuntu--lv
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p free  ← ストレージの使用状況を確認します
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system Flags
1 0.00B 107GB 107GB ext4

(parted) resizepart 1 → パーテションマイナー番号を指定しパーテションのサイズ変更
をシステムに要求します

Warning: Partition /dev/mapper/ubuntu--vg-ubuntu--lv is being used. Are you sure you want to continue?
Yes/No? Y
End? [107GB]? 300 → ここでは、300Gへ拡張するようにパーテションの終点を指定します

Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Y  → 「パーティションを縮小するとデータが失われる可能性があります。
続行しますか?」っと聞いてきていますが、拡張し通常問題ないそうなので、
続行します


(parted) p free  ← ストレージの使用状況を確認します
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system Flags
1 0.00B 300MB 300MB ext4
300MB 107GB 107GB Free Space   ← 前回p freeで調べた結果から追加されている?
ただ、自分が指定したサイズではないね・・・?


(parted) q  ← partedを終了します

Information: You may need to update /etc/fstab.
↑ このメッセージへの対応をしなくていいいかどうか
調べてみましたが、対応しているサイトを
見つけことができませんでした





 以上の作業を受けて、パーテションと論理ストレージの状態を確認しますが、特に変わっていません。


/# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 295M 1.3M 294M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 98G 93G 21M 100% /
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 136M 1.7G 8% /boot
tmpfs 295M 4.0K 295M 1% /run/user/1000

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 63.2M 1 loop /snap/core20/1623
loop1 7:1 0 63.3M 1 loop /snap/core20/1778
loop2 7:2 0 135.7M 1 loop /snap/lxd/23680
loop3 7:3 0 144.2M 1 loop /snap/lxd/24323
loop4 7:4 0 49.8M 1 loop /snap/snapd/17950
sda 8:0 0 500G 0 disk
┣tqsda1 8:1 0 1M 0 part
┣tqsda2 8:2 0 2G 0 part /boot
┗mqsda3 8:3 0 298G 0 part
┗mqubuntu--vg-ubuntu--lv 253:0 0 100G 0 lvm /
sr0 11:0 1 1.5G 0 rom




 ちょっと、想定した結果とは違いますが、拡張したパーテション領域まで拡張してみましょう!


lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from
       100.00 GiB (25600 extents) to <298.00 GiB (76287 extents).
↑なんとなく300Gまで増えていそう?
Logical volume ubuntu-vg/ubuntu-lv successfully resized.




 ここで、再度dfで確認してみましたが、パーテションの環境は変わっていません。


# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 295M 1.3M 294M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 98G 93G 21M 100% /
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 136M 1.7G 8% /boot
tmpfs 295M 4.0K 295M 1% /run/user/1000



 それでは、ファイルシステムサイズを変更してみましょう。


# sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 13, new_desc_blocks = 38
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 78117888 (4k) blocks long.




 この段階でやっと増えています。


# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 295M 1.3M 294M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 293G 93G 187G 34% /
tmpfs 1.5G 0 1.5G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 136M 1.7G 8% /boot
tmpfs 295M 4.0K 295M 1% /run/user/1000



[最後に]
 ところどころ何でっという部分がありますが、パーテションサイズを変更し、パーテションサイズに併せて、ファイルシステムサイズを変更することにより、システムが認識できるサイズとなるようです。ちなみに、lvextendを実行しなくても、同じ結果になりました。かなり、時間を要してしまいましたが、やっと、明日から開発の話ができそうです。

 では、また!


《参考サイト》
■技術メモメモ
https://tech-mmmm.blogspot.com/2020/06/ubuntu-2004.html

■LVM を空き容量いっぱいまで拡張する(ytyng.com)
https://www.ytyng.com/blog/lvm-partition-extend-full-remain-volume/

■増設ディスクのディスク拡張後のパーティションの拡張:Linux系OSの場合(ニフクラ)
https://pfs.nifcloud.com/guide/cp/login/extend_partition_linux.htm

■Ubuntu:マウントしているディスクの上限までファイルシステムの利用領域を変更する(人生は読めないブログ)
https://torisky.com/ubuntu%EF%BC%9A%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E4%B8%8A%E9%99%90%E3%81%BE%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4/

■Ubuntu 18.04のディスクを拡張する(memo.)
https://www.xenos.jp/~zen/blog2/index.php/2019/09/29/post-3043/

■/ dev / vdaと/ dev / sdaの違いは何ですか
https://www.web-dev-qa-db-ja.com/ja/virtualization/dev-vda%E3%81%A8-dev-sda%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B/960027376/

2023年02月01日

論理ディスクの拡張は成功しましたが・・・? [ソフトウェア研究室]


 こんにちは!
 ナビゲータのEVEです。

 VMWareのディスク拡張及び圧縮をした後、そこにデータをインポートしようとしたところ、ラル大尉から、 Windowsとは違うのだよ、Windowsとは! とおしかりを受けてしまいました。そうです!Linuxは、ファイルシステムに VFS を採用しています。
 そのため、物理的に拡張後、GUI、CUIを用いて、論理的にも拡張しなくてはいけないのですがそれを忘れていました。概要としては理解しているのですが、Ubuntuというディストリビューションではどうしたらいいのか分からないので、調べて見ました。
 ただ、まだ、きちんと理解できていないため、それぞれのコマンドの意味が分かっていない・・・。そこで、とりあえず、インターネットの情報を基に、実行してみることにしました。

[実行した結果]
 使用したコマンドは、

lsblk
df
parted
lvextend
resize2fs

です。スナップショットを取っているので、 がんがんやった結果うまくいった ようです。ただ、最初にも書いたが、何が何だかよく分かりません。一応結果はうまくいきましたが、同じ作業をする、応用をきかした作業をするなどは、無理そうです。
 印象としては、partedで仮想ディスクを拡張し、最終的にresize2fsで反映したと言った印象です。
 ただ、このlvextendも必要なようで・・・。

 これから、実行した結果を詳細に分析し、分析した結果を明日報告します。

 なお、早速、DBのインポート作業は実施します。

 では、また!
タグ: VFS
Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: