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

2024年11月22日

エンティティ参照への対応 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 今日は、252種類の特殊文字の文字表記についてお話ししましょう!
クロスサイトスクリプティング 対策のため、多くのシステムでは、タグを エンティティ参照 または 文字実態参照 という文字表記に変換します。
 昨日は、特殊文字を表現する文字列を、文字表記と言っていましたが、正式には、エンティティ参照または文字実態参照といいます。本日は、正式な名称を用いてまずは、昨日の復習からしていきましょう!

[昨日の復習]
 特殊文字をエンティティ参照に変換するのは、タグやスクリプトを無効化することによって、攻撃者が悪意のあるコードを埋め込んで実行することを防ぎ、自サイトを攻撃用サイトとして利用されないようにする目的があります。
PHP 4.0の場合は、その変換に組込関数を用いて変換するのですが、その関数に問題がありました。以下の例をみてみましょう!以下は、&を&amp;をPHPの組み込み関数で変換したものです。

エンティティ変換前 エンティティ変換後
    &      →   &amp;


エンティティ参照文字表記の特徴として、かならず、最初に&(アンバサンド)がつき、最後に;(セミコロン)がつきます。そして、PHPの組み込み関数 htmlspecialchars は、以下の文字をエンティティ参照文字表記に変換します。

& (アンパサンド) → &amp;
< (小なり) → &lt;
> (大なり) → &gt;
" (ダブルクオート) → &quot;
' (シングルクオート) → &#039; または &apos;


一度だけの変換なら問題ないのですが、その変換が2、3度と続くと以下のようになります。

変換前→&
1回目の変換→&amp;
2回目の変換→&amp;amp;
3回目の変換→&amp;amp;amp;
 ・
 ・
 ・


ただ、PHP5.0から機能が改善され、htmlspecialcharsで変換されたエンティティ参照への変換は1度だけに制限することができるようになりました。ただ、エンティティ参照で文字表記される文字は、昨日までの調べでは、252種類あります。

[252種類のエンティティ参照への対応]
 252種類の文字列のうち、htmlspecialcharsで二重変換されない5種類のエンティティ参照を除いた、247種類の文字列は、システム側でhtmlspecialcharsを用いて変換すると、&が永遠と変換されて、システムで取得した当時の文字とは全く別なものになってしまいます。現行システム、 Prototype EVE でもその対応はしていないのですが、次期システムEVEシステムではその部分まで配慮したいと考え、現在エンティティ参照で表現できる文字を調べて、システムへ登録し、同文字表記は変換されないようにしようとしています。
 現在の調べでは、エンティティ文字表記の元の文字を変換する組込関数はないので、ユーザまたは他システムからエンティティ参照でデータが送られてこない限り、対応は不要なはずなのですが、データベースの登録でhtmlspecialcharsを使ってデータの全てを変換しようと考えています。それは、以前<textarea>からタグを含む文字データを登録しようとしたら、エラーが発生したということがありました。その対応として、エンティティ参照に変換することにより同エラーを回避できたので、それ以降、実施しているのですが、その部分が非常に問題です。

[現在のデータベースの調査]
 データベースへ生のデータを登録しようとしてエラーが発生したという障害はかなり昔のPHP4時代の話です。現在は、どうなのでしょうか? ChatGPT に相談してみました。

 現在のデータベース技術や一般的な設計指針を考えると、データベースに保存するデータをエンティティ参照に変換する必要はほとんどありません。むしろ、エンティティ参照への変換は避けるべきです。以下にその理由と適切な方法を説明します。

?エラーの原因
 過去にデータベース登録時にエラーが発生した理由は、以下のいずれかである可能性が高いです:

・文字コードの不一致
 データベースの文字セット(例: UTF-8)が適切に設定されておらず、特殊文字(例: &, <, >, ', " など)が正しく処理されなかった。

・エスケープ不足
 タグや特殊文字がSQL文にそのまま含まれ、構文エラーやセキュリティ上の問題(SQLインジェクション)を引き起こした。

・データ型や制約の問題
 文字列の長さ制限や特殊なフィールド設定(例: 特定文字の禁止)が原因でエラーが発生。

?現在のデータベース設計とエンティティ参照の必要性
 現在のMySQLや他のモダンなデータベースシステムでは、以下の点を確認・設定すれば、エンティティ参照への変換は不要です:

(1) 文字セットをUTF-8に設定
 データベースやテーブル、カラムの文字セットを utf8mb4 に設定することで、ほとんどの特殊文字(絵文字を含む)を正しく扱えます。

(2) 適切なエスケープ処理
 データベース登録前に特殊文字をエスケープすることで、SQL文の構文エラーやセキュリティ問題を回避できます。たとえば、PHPであれば mysqli_real_escape_string やプリペアドステートメントを使用します:

(3) HTMLエンティティ変換は不要
 データベースは生データをそのまま保存し、必要に応じてアプリケーション層で処理します。エンティティ参照変換は、出力時(HTMLに表示する時)に行うべきです:

?エンティティ参照変換を続ける場合のデメリット
 エンティティ参照に変換して保存すると、次のような問題が発生する可能性があります。

・データの冗長化
 例えば、& が & に変換されると、保存データのサイズが増加します。

・処理の煩雑化
 データを検索や編集する際、変換前後の対応が必要となり、コードが複雑になります。

・不正確なデータ管理
 保存されたデータが「生の文字列」ではなくなるため、データベースに保存された値が本来の値とは異なるものになる。

?おすすめの設計方針
・データベースには生データを保存
 入力されたデータはそのまま保存し、アプリケーション層で表示時に適切に処理します。

・文字セットとエスケープを適切に設定
 文字セットをUTF-8に設定し、SQL文のエスケープを行うことで、特殊文字も安全に保存できます。

・出力時にエンティティ参照を使用
 HTMLやXMLにデータを表示する際に、htmlspecialchars や htmlentities を使い、エンティティ参照へ変換します。

■結論
 現在のデータベース環境では、エンティティ参照への変換は必要ありません。文字セットをUTF-8に設定し、SQLエスケープやプリペアドステートメントを利用すれば、特殊文字を含むデータも安全に保存できます。出力時にエンティティ参照を利用する方針に切り替えることで、効率的でシンプルなデータ処理が可能になります。


以上の回答がありました。確かに、PHP4時代のMySQLでの出来事だから、現在は発生しない可能性が大きいと思います。
 そして、ChatGPTが懸念している状況は、実は、Prototype EVEでは既に発生しており、その発生した問題を解消した上で利用しています。それと、現在は、システムでデータを取得した時に、エンティティ参照への変換をした上で、すべての操作をしているため、個人的な話ではあるのですが、セキュリティ的に安心感があります。ChatGPTの提案を読んで、そういわれても・・・、っていう感じです。

[あとがき]
 現在、Prototype EVEの仕様を引き継ごうと、クラス製造をしています。ただ、以上のChatGPTの助言を読むと、どうしようか悩むところです。ただ、Prototype EVEの Knolegeシステム も既に10年以上たち、その間問題なく運用できている現状を考えると、今すぐ結論を出すことができません。現在製造している関数は後回しにして、熟考したうえで結論を出したいと思います。

 では、また!!!

2024年11月21日

htmlspecialchars 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 昨日まで PHP の仕様について調べてきましたが、正直って、こんなコトするのは珍しいことです。普通は最初覚えた仕様で作っていきます。本日は、そういうことをしていると損をしてしまうという話です。

[htmlspecialchars]
htmlspecialchars は、PHP4.0に追加された関数です。htmlspecialcharsの仕様目的は、PHPの教本などを読んでいると、 クロスサイドスクリプティング 対策としていますが、実は他にもあります。それは、データベースへの登録です。
 現在のバージョンは不明ですが、以前の MySQL などでは、htmlspecialcharsによりエスケープしていない文字列を登録しようとした場合、エラーになることがあります。そのため、ユーザーが入力するデータばかりではなく、実は、データベースに登録するすべてのデータはエスケープしなければなりませんでした。

[Knowlegeシステム]
 以前から、勉強した知識など、 Prototype EVE Knowlege システムへ登録して、知識として残しているという話をしていますが、そのシステムでも、 HTML 画面から入力した情報を、必ず、htmlspecialcharsを使って、 エスケープ しています。ただ、知識として残そうとしているため、入力した情報をいろいろなタグを使用して表示したいというニーズがあります。
 ただ、HTMLをブログで使用しようとした人は知っていると思いますが、HTMLタグを<textarea>から入力したデータは実はきれいに表示することができません。そのため、Knowlegeシステムでは、きれいに表示できるように、独自タグを利用して、強引にきれいに見えるように変換しています。
 ただ、そこで困ったことが出てきます。タグを変換した文字列には、必ず & (アンバサンド)が入るのですが、何回か変換すると、&(アンバサンド)のampがどんどん増えていくのです。以下がその例です。

変換前→&
1回目の変換→&amp;
2回目の変換→&amp;&amp;
3回目の変換→&amp;&amp;&amp;
 ・
 ・
 ・
 ・


バグがあった場合などや、データベースの登録方法などにより、何回もhtmlspecialcharsが使用されると以上のようなことになり、&を表示したいだけなのに、全く違う文字列になってしまうということがあります。

[PHP5.0]

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/21 17:24時点)
感想(0件)



 ただ、今回 独習PHP第4版 を読んで知ったのですが、PHP5.0からhtmlspecialcharsへある引数を設定することにより、特殊文字表記を崩さずに変換できるという機能が追加されました。以下が、構文です。

htmlspecialchars(string $string , int $flags = ENT_COMPAT, ?string $encoding = null, bool $double_encode = true): string


$string (string)
 エスケープしたい文字列を指定します。

$flags (int)
 オプションで、エスケープ処理の方法を指定します。デフォルトは ENT_COMPAT です。ENT_QUOTES や ENT_NOQUOTES など、異なるオプションが指定できます。

$encoding (?string)
 文字エンコーディングを指定します。指定しない場合、PHPのデフォルトエンコーディング(通常は UTF-8)が使用されます。null を渡すことも可能です。

$double_encode (bool)
 デフォルトは true です。true の場合、既にエスケープされた文字(例えば、&)も再エスケープします。false の場合は、再度エスケープしません。



以上の $double_encode にfalseと指定すれば問題ないところを、実は、Knowlegeシステムでは、涙ぐましい努力をしています。独習PHP第4版を読んでいるとき、この機能を知っていれば、もっと楽ができたのにと、しみずみと感じてしまいました。
 但し、htmlspecialcharsで変換される、タグは以下の通りです。

& (アンパサンド) → &amp;
< (小なり) → &lt;
> (大なり) → &gt;
" (ダブルクオート) → &quot;
' (シングルクオート) → &#039; または &apos;(ただし、$flags によって異なる動作をする場合があります)



[あとがき]
 htmlspecialcharsで変換できる特殊文字は、以上5種類だという話をしましたが、実は文字表記としては、今日までの調べでは、 252種類 あります。
 252種類の文字表記すべてに&(アンバサンド)がついており、その対応は実は自分でしなければなりません。本日は、その対応に半日近く使ってしまいました。明日は、今日の続きと言うことでそのことを話しましょう!

 では、また!!!

2024年11月20日

アロー関数 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクトップ.png
 本日は、プログラム研究室から、 PHP 7.4から登場した新たな機能についてお話ししましょう。
 本日は、アロー関数です。

[アロー関数]
アロー関数 は、 無名関数 をより簡潔に書くことができるように導入されたプログラミング手法だと言われています。早速プログラムを見てみましょう!以下は独習PHP第4版に掲載されている例です。

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/20 15:31時点)
感想(0件)




? $keys = ['十','百','千','万','億','兆','京','稿','溝','潤','正','戯','極','恒河沙','那由他','不可思議','無量大数'];
? $data = ['那由他','京','億','無量大数'];

? ?B usort($data, ?@ fn($a, $b) => ?A array_search($a, $keys) ?C <=> array_search($b, $keys));

//結果
['那由他', '京', '億', '無量大数'] ['億', '京', '那由他', '無量大数']


?$keysは、日本の数値の単位を昇順に並べています。一部省略しています。
?$dataは、今回ソートする対象となっています。
?usortは、カスタムな順序で、配列を並べ替える関数で、第2引数に式を記述することができる関数です。ここでは、第1引数にソート対象の引数を指定し、第2引数にアロー関数を定義しています。
 具体的にアロー関数の中身を見ていくと、?@fn($a,$b)という部分は、$a、$bという変数を定義しているぐらいの認識で問題ないようです。ここでは、型指定を省略していますが、型指定もできます。
 そして、?Aarray_search($a, $keys) <=> array_search($b, $keys));という部分は、$keysデータの配列の各要素がどのインデックスに格納されているのか知らべるために実行しています。ただ、この方法は非効率で、なんで、こんなことをするのか疑問です。
 そして、最後に、$keysから取得したインデックスに基づいて、usort内で$dataの要素を並び替えます。
 簡単ですね・・・って、なかなか言い難いロジックです。例も悪いですけれど・・・。
 そして、最後に余談ですが、?Cは宇宙船演算子と言います。
宇宙船演算子 は、の一種で、PHP7から利用できるようになりました。
 これは、比較演算子の一種で、array_search($a, $keys) とarray_search($b, $keys))を比較して、次の3つの結果のいずれかを返します。

左辺が小さい場合: -1
左辺が等しい場合: 0
左辺が大きい場合: 1 


理解できましたか?このアロー関数は本を読む限り積極的に利用したほうがいい方法だそうです。っと言われても、なかなかそう思えないので、アロー関数の概要と、メリット、デメリットをChatGPTに解説をしてもらいましょう。

 アロー関数は、PHP 7.4 で導入された新しい無名関数(クロージャ)の構文です。従来の無名関数(function を使った関数)に比べて、より簡潔で読みやすく書くことができます。特に、変数のキャプチャに関して特長があります。

・fn キーワードを使って関数を定義します。
・引数は丸括弧で囲み、=> で関数本体の式を指定します。
・本体は1行で書く必要があります。複数行の処理を行いたい場合は、従来通りの無名関数を使用する必要があります。

■アロー関数の特徴
?簡潔さ
 アロー関数は、従来の無名関数に比べて非常に簡潔に記述できます。特に引数が1つだけの場合や、簡単な処理を行う場合に有用です。
?変数のキャプチャ
 アロー関数の最大の特徴は、外部の変数を自動的にキャプチャする点です。従来の無名関数では、外部の変数を使う場合に、useを使って明示的にキャプチャする必要がありましたが、アロー関数ではこの手間が省けます。
?戻り値の簡略化
 アロー関数は、戻り値を自動的に返します。関数本体が1行の式であるため、return キーワードを使う必要がありません。

■アロー関数のメリット
?コードの簡潔化
 アロー関数は、無名関数を短いコードで表現できるため、コードが読みやすく、記述量も減ります。特にコールバック関数や配列操作で便利です。
?外部変数のキャプチャが簡単
 use を使わずに外部の変数を直接キャプチャすることができ、コードが簡潔で直感的になります。複雑なクロージャを使用する際の可読性向上につながります。
?戻り値の省略
 アロー関数では、式の結果が自動的に返されるため、return を省略できる点がメリットです。
?無名関数との互換性
 アロー関数は無名関数のシンプルな形式として利用でき、特に簡単なコールバック処理や1行で終わる処理で効果的です。

■アロー関数のデメリット
?1行式に制限される
 アロー関数の本体は1行の式でなければならず、複数行の処理を行いたい場合には使えません。この制約により、複雑なロジックには向いていません。
?キャプチャされる変数の制限
 アロー関数では、自動的に外部変数をキャプチャしますが、従来の無名関数のように変数を明示的に指定してキャプチャすることはできません。このため、意図しない変数がキャプチャされてしまうこともあります。
?可読性の低下
 簡潔に書ける反面、複雑な処理を行う際に使いづらくなる場合もあります。特にチーム開発や、複雑なロジックが必要な場合には、アロー関数が逆に可読性を損なうことがあります。
?戻り値の自動返却に注意
 アロー関数は式の結果を自動的に返すため、期待しない戻り値を返してしまう場合があります。例えば、返すべき値を計算せずに式だけを書いてしまうと予期せぬ挙動をすることがあります。

■結論
 アロー関数は、シンプルで効率的なコードを書くための強力なツールですが、その使用にはいくつかの制限もあります。簡単な処理や1行で終わる処理には最適ですが、複雑なロジックには従来の無名関数や普通の関数の方が適している場合もあります。使用するシーンに応じて、アロー関数と従来の無名関数を使い分けることが重要です。



[あとがき]
 やっと、PHP5以降に使用できるようになった、難解だと思われる機能のほとんどを押さえることができたようです。独習PHP第4版のまだ読んでいない部分は、じっくり読みますが、さらっと読んでも問題ない内容のようです。
 これ以降は、組み込み関数と標準クラスライブラリを毎日少しずつまとめながら、特筆すべき事項がでてきたら、別途同箇所をまとめていくといった作業になりそうです。
 よく知っていると思っていた言語ですが、新しい機能がたくさん出てきたことにより、なんか、新たに言語を取得した気分です。
 現在製造しているシステムは、最新のプログラム事情を知らなくても、プログラミングはできるわけなのですが、新たに製造するクラスなどもあり、より最新なプログラミングに近づけるため、独習PHP第4版の読破を優先していました。ただ、この時間以降は、クラス製造をメインにやっていきたいと思います。

 では、また!

2024年11月19日

無名関数 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 つい最近ですが、今までの疑問が1つ解決されました。それは、無名関数・・・。
 実は、以前 Google Map を自サイトに取り込んでいる最中に、Googleから提供されているAPIを解析したのですが、その中に、 無名関数 がありました。ただ、古いエンジニアってプログラムでこんなことができるなんて知りません。なんで、関数を変数に挿入したり、引数として設定しているのかが分かりません。
 1つ分からないことがあると、私の場合は混乱し、それ以降解析ができなくなります。現在なら、 AI があるので、解析は容易なのですが、その当時はありませんから・・・。
 そんな、今まで疑問だった、無名関数を今回の PHP の再学習で知ることができました。

[無名関数]
 無名関数は、名前は不要で、特定の機能だけを定義したいという場合に、利用することで、スクリプトがより読みやすくなります。
 以下がその例です。


function myArrayWalk(array $array, callable $func): void
{
// 配列$arrayの内容を順に処理
foreach ($array as $key => $value) {
$func($value, $key);
}
}

$data = ['杉山', '長田', '杉沼', '和田', '土井'];

myArrayWalk($data, function($value, $key) {
print "{$key}:{$value}
";
});



 以上のプログラムでは、myArrayWalk関数に、引数として、配列$dataと無名関数を設定し呼び出しています。
 以上のプログラムの実行結果は以下の通りです。


0:杉山<br/>
1:長田<br/>
2:杉沼<br/>
3:和田<br/>
4:土井<br/>



無名関数を利用するシーンなのですが、プログラムの可読性を上げる以外に、関数って普通、頻繁に利用する機能を定義します。ただ、他のプログラム、クラスでの再利用性がなく、かつメソッド内といった狭義の範囲で再利用される場合などに定義されると認識していますが合っていますでしょうか?その認識が正しいかどうか ChatGPT に聞いてみましょう!

 無名関数(クロージャ)を利用する利点には以下の点が挙げられます。

?簡潔なコード
 無名関数は、関数を定義して使用するために、関数名をつける必要がないため、コードが簡潔になります。特に、一時的な処理や短い処理を行いたい場合に非常に便利です。
 例えば、array_walk や array_map といった関数に無名関数を渡す場合、わざわざ別の関数を定義せずに、必要な処理をその場で書くことができます。

?コードの可読性の向上
 無名関数は、処理が行われるコンテキスト内で即座に定義され、どの部分で使われているのかが明確です。これにより、関数の定義が必要ない場合に冗長なコードを避け、より直感的に理解できるようになります。

?クロージャによる変数のスコープ管理
 無名関数(クロージャ)は、定義されたスコープの変数を「キャプチャ」することができます。つまり、外部の変数を無名関数内で使用できるという特徴があります。この機能により、関数外で設定された変数を簡単に利用することができ、特定の処理を外部環境に依存させた関数を定義できます。

?一時的な処理を分離
 無名関数を使うことで、他の関数に依存する一時的な処理を分離できます。これにより、コードがモジュール化され、再利用性や保守性が向上します。
 例えば、特定の配列操作を行いたい場合に、無名関数をその場で渡すことができ、他の部分には影響を与えません。


ちょっと、違いましたか?ただ、これ以降、無名関数が出てきても驚くことはなくなりそうです。

[あとがき]
 無名関数は、PHP5.3とかなり以前から利用することができ、 Prototype EVE でも利用可能だったということが分かりました。
 かなり以前から利用可能だった分けですが、プログラムとして見たのは、 Google から提供されているプログラムが初めてで、正直いって、他のプログラムで見たことはありません。そして、これから作る自分のプログラムで使うシーンも思い浮かびません。わざわざ作ろうと思いませんしね・・・。まっ、これから、徐々に慣れていきたいと思います。
 それと、今回勉強した中に、 可変関数 というのがあるのですが、それと似たような機能がJavaScriptにもあって、そっちも、これから勉強しようと考えています。

高水準言語 としてのそれぞれのプログラム言語に、いろいろな機能を追加しても結局 機械語 に翻訳されて同じようなコードに変換されるのだから、あまり、難しいことをしてほしくないと思っているのは私だけでしょうか?可読性があがるとChatGPTはいうけれど、あんまり、そんな気はしないのですが・・・。慣れですかね?とりあえず、当初のプログラムは、できるだけ、新たな機能を利用しようと考えていますが、無理せず製造したいと思います。

 では、また!!!

2024年11月17日

サイバー・フィジカル・セキュリティ対策フレームワーク(CPSF) 〜セキュリティ研究室


 こんにちは!
 ナビゲータのEVEです。
Society.jpg
 本日は、日曜日ということで、ゼロからはじめるシステム開発から、セキュリティに関するお話です。
 前回は、サイバーセキュリティ経営ガイドラインの図から、セキュリティに関連しそうな話をしようと、 コーポレートガバナンス・コード について取り上げましたが、セキュリティとはちょっと、違う話になってしまいました。
 セキュリティに関連する資料の中の用語で、全く知らなかったので、勉強という意味で取り上げたのですが、目的と違うのでは意味がありません。
 ということで、今回は、過去に 情報処理安全確保支援士 研修で利用した資料の中から、取り上げて再学習したいと思います。

[サイバー・フィジカル・セキュリティ対策フレームワーク(CPSF)]
 今回は、2022年研修資料、私が受講したのは2023年だったのですが、その中から、 サイバー・フィジカル・セキュリティ対策フレームワーク (以降「 CPSF 」という)を取りあげたいと思います。
 CPFSは IPA の試験でもたびたび取りあげられている用語で、「 Society5.0 」におけるセキュリティ対策の全体像を整理しまとめられた資料で、以前勉強した、 サイバーセキュリティ経営ガイドライン を実現するフレームワークとして位置づけられています。

[Society5.0とは?]
 Society5.0とはどのような社会なのでしょうか?本日も、まずは、Society5.0に至るまでの社会のの変遷について ChatGPT に解説をしてもらいましょう!

?Society 1.0 - 狩猟社会
 人々は狩猟や採集により生活を支え、自然と共存していました。

?Society 2.0 - 農耕社会
 農業が発展し、定住生活が一般化。社会構造が組織化されました。

?Society 3.0 - 工業社会
 産業革命により工業生産が進み、都市化と分業体制が進展。

?Society 4.0 - 情報社会
 コンピューターやインターネットが普及し、大量の情報を扱う社会に移行。

?Society 5.0 - 超スマート社会
 AI(人工知能)、IoT(モノのインターネット)、ビッグデータなどの技術を駆使して、物理空間と仮想空間を高度に融合させる社会。人々の多様なニーズに応じた快適で持続可能な社会を目指します。


 現在は、Society4.0の情報社会からSociety5.0の超スマート社会へ変遷している過渡期だといえるでしょう?では、具体的に、Society5.0とはどのような社会なのでしょうか?引き続きChatGPTに解説してもらいます。

 Society 5.0は、日本政府が提唱する未来社会のビジョンで、「超スマート社会(Super Smart Society)」とも呼ばれます。この概念は、第四次産業革命による技術革新を活用し、経済成長と社会課題の解決を同時に実現することを目的としています。Society 5.0は、単なる技術革新の推進にとどまらず、人間中心の社会構築を目指した新しい社会の形を示しています。

■Society 5.0の目的と意義
?人間中心の社会(ヒューマン・セントリック)
 技術革新は人間の生活を豊かにする手段として位置づけられます。
 すべての人々が社会の恩恵を享受し、特に高齢者や障害者など社会的弱者にも配慮した仕組みを目指します。

?社会課題の解決
 少子高齢化、地方の過疎化、労働力不足、環境問題など、現代社会が抱える課題を解決します。

?経済発展と持続可能性の両立
 技術革新による効率化や新しいビジネスの創出を通じて経済成長を図りつつ、持続可能な社会の構築を目指します。

?多様性と包摂性の実現
 性別、年齢、地域、国籍に関係なく、すべての人が活躍できる社会を推進します。


■Society 5.0の中核技術
?IoT(Internet of Things)
 すべてのモノがインターネットにつながり、データを収集・活用。

?AI(人工知能)
 膨大なデータを分析し、人間が抱える課題に対して効率的な解決策を提示。

?ビッグデータ
 様々な分野から収集されたデータを統合・解析し、社会システムの最適化を図る。

?ロボティクス
 自動化や人間の代替ではなく、人間を補助・支援する技術の実現。

?スマートインフラ
 交通、エネルギー、医療などの社会基盤を高度に最適化するシステム。


■具体的な活用事例
?医療分野
・遠隔医療やAI診断の導入により、地方や高齢者が適切な医療を受けられる環境を整備。
・個人の健康データを基にした予防医療やカスタマイズされた治療の実現。

?モビリティ(交通・移動)
・自動運転車やMaaS(Mobility as a Service)を活用した移動の効率化。
・交通事故の削減や渋滞緩和への貢献。

?農業・漁業分野
・ドローンやセンサーを活用したスマート農業で生産性向上。
・水産資源の持続的利用を目指したデータ活用。

?スマートシティ
・都市のエネルギー消費を最適化し、CO2排出量を削減。
・災害時の早期警戒システムの構築。

?教育分野
・遠隔教育やAIによる個別指導で教育格差を縮小。
・生涯学習を支援するためのプラットフォーム提供。


■Society 5.0における課題
?技術格差
 新しい技術にアクセスできる人々とそうでない人々の間で格差が生まれる可能性。

?プライバシーとセキュリティ
 データの膨大な利用に伴い、個人情報の保護とサイバーセキュリティの強化が必要。

?法律・規制の整備
 技術の進展に追いつく形で、法制度や規制の見直しが必要。

?社会的合意の形成
 技術の導入による生活の変化について、国民全体での理解と合意が重要。


■国際的な位置づけ
 Society 5.0は、日本独自の社会構想でありながら、国際的にも注目されています。SDGs(持続可能な開発目標)との親和性が高く、グローバルな課題解決にも貢献できる可能性を秘めています。また、他国のスマート社会構想と比較して「人間中心」という点が強調されていることが特徴です。
 Society 5.0は、日本が直面する課題解決だけでなく、グローバルなモデルとしても期待されるビジョンです。テクノロジーと人間の調和を実現するために、政府、企業、学術界、そして個人が一体となって進めていく必要があります。



[サイバーセキュリティ経営ガイドライン]
 CPFSは、「Society5.0」におけるセキュリティ対策の全体像を整理し、産業界が自らの対策に活用できるセキュリティ対策例をまとめたフレームワークであるのと同時に、サイバーセキュリティ経営ガイドラインの支援ツールして、組織のガバナンスの確保に有効に活用できるとしています。それでは、CPFSの具体的な内容に入る前に、サイバーセキュリティ経営ガイドラインについて、復習をしておきましょう!
 サイバーセキュリティ経営ガイドラインは、3つの柱と、重要10項目から構成されています。

【3つの原則】
?経営者は、サイバーセキュリティリスクが自社のリスクマネジメントにおける重要課題であることを認識し、自らのリーダーシップのもとで対策を進めることが必要
?サイバーセキュリティ確保に関する責務を全うするには、自社のみならず、国内外の拠点、ビジネスパートナーや委託先等、サプライチェーン全体にわたるサイバーセキュリティ対策への目配りが必要
?平時及び緊急時のいずれにおいても、効果的なサイバーセキュリティ対策を実施するためには、関係者との積極的なコミュニケーションが必要

【重要10項目】
【原則1:リーダーシップの発揮】
指示1:サイバーセキュリティリスクの認識、組織全体での対応方針の策定
指示2:サイバーセキュリティリスク管理体制の構築
指示3:サイバーセキュリティ対策のための資源(予算、人材等)確保
指示4:サイバーセキュリティリスクの把握とリスク対応に関する計画の策定
指示5:サイバーセキュリティリスクに効果的に対応する仕組みの構築
指示6:PDCAサイクルによるサイバーセキュリティ対策の継続的改善
指示7:インシデント発生時の緊急対応体制の整備
指示8:インシデントによる被害に備えた事業継続・ 復旧体制の整備
【原則2:サプライチェーンセキュリティの強化】
指示9:ビジネスパートナーや委託先等を含めたサプライチェーン全体の状況把握及び対策
【原則3:関係者との積極的なコミュニケーション】
指示10:サイバーセキュリティに関する情報の収集、共有及び開示の促進



[あとがき]
 CPFSは、Society5.0を支える重要なフレームワークという位置づけで今まで覚えていました。ただ、今回このような形でまとめるにあたり、今まで知らなかった多くのことを知ることができそうです。次回はその具体的な内容に入っていきます。

 では、また!

追伸。
 来週は家族のイベントがあるため、セキュリティ研究室からの報告はお休みとさせていただきます。

2024年11月15日

名前付き引数 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日も、 PHP から引数に関する情報です。
 PHP8になってから、 JIT (Just-In-Time)をはじめとして、かなりいろいろな機能が追加されたようです。その中から本日は、名前付き引数について御紹介しましょう。

[名前付き引数]
 PHP8.0から、 名前付き引数 が利用できるようになりました。どういうことかというと、呼び出し元で、どの変数にどの値を引数として渡すのか明示できるようになりました。以下がその例です。


function createUser($name,
$age,
$isAdmin = false) :false|string
{
// 処理
}

// 名前付き引数を使って引数の順番に関係なく渡せる
createUser(age: 25,
name: "Alice",
isAdmin: true , );



以上は、createUser関数を定義し、その定義した関数を呼び出しているという2つのプログラムを例示しています。そこで注目して欲しいのは、呼び出し元の記述です。なんか、普通の呼び出し方ではありませんよね?

関数名(変数名1:実引数,
変数名2:実引数,
変数名3:実引数 ,
);


変数名の後にコロンを記述し、その変数というか呼び出される側からすると、引数と言うことになるのですが、その後に実数を記述することができるようになりました。これにより、引数が多く、どの引数に何を渡したのかわかりにくいという問題が解消されました。気をつけなければならないのは、変数名に$をつけてはいけないということです。
 当プロジェクトの場合、引数が多くなったら、同引数は配列で渡すことにしているので、あまり関係ないのですが、それは1人で作っている場合限定です。多分、人数が多くなってきたら、助かる機能となるでしょう?
 名前付き引数は利用しなくても、記述できるのですが、これは、規約に追記し義務とした方がいいでしょう?

[引数の最後のカンマ]
 トリビア的な話なのですが、呼び出し元の最後に余計なカンマがあるって思いました?赤くマーキングしているので、気づいたと思いますが、これ、 トレーリングカンマ と言われるモノです。
 この機能、PHP7.2から追加されました。以上のサンプルプログラムは、予め引数の個数が分かっているので、トレーリングカンマを利用するメリットをあまり感じられませんが、プログラムの中で、配列を生成する場合など、その中の要素が、事前にいくつか分かっていない場合があります。その場合、従来は最終の要素を検出し、その最後の要素にはカンマを付けないといった配慮が必要だったのですが、その必要がなくなりました。その前の要素と同様に最終の要素にもカンマをつけることができるのです。
 今、関数の引数と、配列について話しましたが、どんな場面で利用できるのか、 ChatGPT にすべて列挙してもらいましょう!

?配列リテラル(PHP7.2〜)
?配列の展開(スプレット文)(PHP7.4〜)
?関数の呼び出し(PHP7.3〜)
?関数定義(PHP7.3〜)
?use宣言(クロージャー)(PHP7.3〜)
?名前付き引数(PHP8.0〜)
?クラス継承リスト(PHP8.0〜)



[あとがき]
 以上の機能は、当プロジェクトで採用し、以降作るプログラムは適応対象となります。但し、トレーリングカンマですが、現時点は配列のみ適用しようと考えています。当プロジェクトで作るプログラムにおいて、それ以外のものは、プログラム内でゴリゴリ作ることがないと思われるからです。
 規約等が出来上がりましたら、pro2grammer.comに掲示していきますので、ご確認ください。

 では、また!!!

2024年11月14日

PHPで利用する変数・定数 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
システム設計.jpg
 今日は、 PHP で利用する、変数・定数について書きたいと思います。
 2024年10月17日に、 クラス メソッド で使用する変数の公式名称がよく分からないという話をしましたが、やっと、 独習PHP第4版 で該当ページに到着しました。

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/14 17:26時点)
感想(0件)



 よく知っている言語として、PHPを選択しシステムを開発してきましたが、所々知らない所があり、知らない部分を資料に纏めていたため、遅れてしまいました。ブログを読み返すと、独習PHP第4版を読み始めたのは、10月18日からだったのですね・・・。時間かけ過ぎです・・・。ただ、クラスの開発の期限は守りたいと思っています。

[グローバル変数・ローカル変数]
 一番わかり安い グローバル変数 ローカル変数 について、見ていきましょう。
 グローバル変数とは、スクリプト内全体で利用できる変数を指します。クラスという概念の外にある変数です。
 ローカル変数とは、関数またはメソッド内でのみ利用可能な変数になります。

[クラス変数とメンバ変数]
クラス変数 ですが、後述しますが、静的プロパティ、staticプロパティと同じ機能の変数です。
 そして、 メンバ変数 は、クラス内で、「$this->」というキーワードで操作できる変数となります。

[定数]
 定数には、 グローバル定数 と、 クラス(メンバ)定数 があり、グローバル定数は、スクリプト全体で利用できる定数で、クラスの概念の外にある定数です。
 そして、 クラス(メンバ)定数 は、固定の値で、インスタンス間で共有され、変更不可能な定数となります。
 なお、PHPにおいて、メソッド内では定数という概念はありません。無理に使用したい場合、メソッド内で、defineを使用して定義できますが、それを、メソッド定数とは言わないようです。

[static変数、静的(static)プロパティ]
 変数、定数とは違う使われ方をするのが、 static変数 と、 静的プロパティ です。
 static変数は、メソッド内でのみ有効なのですが、そこで初回取得した値は、スレッド終了まで保持され、閲覧も変更も可能です。
 静的プロパティは、クラスに属し、同プロパティの値は、インスタンス間で共有し、閲覧・変更することができます。

[あとがき]
 PHPの解説など読むとき、以上の用語を知らないと、理解に苦しむ点が多々あります。10月17日の時点では、かなり複雑なモノのように感じましたが、纏めてみるとすっきりし、それほど難しくないような気さえしてきます。
 用語の意味を間違えて覚えていると、解説書の内容を勘違いして理解してしまうことがあるので、用語の意味をきちんと整理し読破したいと思います。

 では、また!!!

■静的メソッド・静的プロパティ 〜プログラム研究室〜
https://fanblogs.jp/bahamuteve/archive/506/0?1731564172

2024年11月13日

HTML&CSS3 ~プログラミング研究室~

 こんにちは!
 ナビゲータのEVEです。
図書館.jpg
 図書館から、4冊本を借りてきました。「HTML/CSSの絵本」、「Webデザインの基本 きちんと入門」、「HTML&CSSとWebデザイン」、そして「HTML5&CSS3デザイン」です。
 最初、簡単なところから読もうと、「HTML/CSSの絵本」から読み始めましたが、1つ気づいたことがありました。
HTML5 において、意味もなさそうなタグ、セマンティクス(コンテンツの意味)が出てきたのですが、 W3C などでは、HTMLのコンテンツの意味を明確にするために同タグの使用を推奨しているらしいということ・・・。
 まっ、タグとして追加されたのだから、意味がないということはないと思うのですが、なぜ、W3Cの意図を知らずに現在に至ったのでしょうか?そこで、10年以上前に購入した本を読み返してみました。

HTML5&CSS3辞典第2版 [ アンク ]

価格: 2640円
(2024/11/13 14:46時点)
感想(2件)




[HTML5&CSS3辞典]
 「HTML5&CSS3辞典」という本なのですが、その中で、コンテンツに意味を持たせることを強く推奨していません。タグの意味は書いてあるんですけれどね・・・。まっ、辞書って書いてあるから仕方がないのかもしれませんが、ちょっと不満です。
 本の記述の書き方としては、タイトルに「・・・・したい」と記述されていて、そのやりたい内容をどうすればできるのかと言うことが記述されています。
 その中に、 セマンティクスタグ の仕様が記述されているのですが、内容を読むと画面を表示するという意味では、全く意味がありません。そんな意味ないコトって普通やりたくないですよね?作業も増えますし、 PHP でゴリゴリ作り込む部分もあるので、できれば余計な事はしたくありません。まっ、セマンティクスタグが、新たなタグとして追加されていたのは知っていたのですが、無視していたというのが本当のところです。
 ただ、図書館から借りてきた本を読んでみると、それが、現在の主流となっていて、W3Cでも推奨しているとのこと・・・。知ったからには今後システムに取りいれていきます。

[セマンティクスタグ]
 セマンティクスタグのサンプルを見ていて思うのは、 検索エンジン などに同サイトの正確な意味などを伝えるために使用するのかな?っていう印象なのですが、正確なところはどうなのでしょうか?本日も、 ChatGPT に聞いてみましょう。

 HTML5では、ウェブのコンテンツをより意味的に構造化するために、新たにセマンティックタグ(セマンティック要素)が導入されました。その背景には、ウェブの進化とともに、コンテンツの構造が複雑化し、より意味を持つHTMLコードが求められるようになったことがあります。以下に、その経緯と目的を詳しく説明します。

?HTMLの初期段階と構造の不明確さ
 初期のHTMLでは、文書の構造や意味を示すために、主に視覚的なスタイルやレイアウトに関するタグ(例えば、<div> や vspan>)が多く使用されていました。これらはプレゼンテーションを主に目的としており、コンテンツの意味(セマンティクス)を示すものではありませんでした。
 例えば、ページ内のメニューやナビゲーション部分、記事、サイドバーなどを区別するために、<:div>タグが多く使われ、その中にクラス名やIDで意味を持たせるのが一般的でした。しかし、こうした構造は文書の意味や役割を明確にするものではなく、検索エンジンや支援技術(スクリーンリーダーなど)がコンテンツの内容を理解しづらくなる原因となっていました。

?ウェブの進化と要請
 ウェブの技術やコンテンツが進化する中で、以下のようなニーズが強くなりました:

・コンテンツの意味付け
 複雑なウェブサイトやアプリケーションにおいて、ページ内でどの部分がメインのコンテンツなのか、どこにナビゲーションがあるのかなどを、HTML構造自体で明示的に示したいという要望が高まりました。
・検索エンジン最適化(SEO)
 コンテンツの意味が明確であれば、検索エンジンがウェブページをより正確にインデックスし、ランキングの向上に繋がるという考えが広がりました。
・アクセシビリティの向上
 スクリーンリーダーなどを使う視覚障害者が増えている中で、コンテンツの意味がHTML自体に含まれていることが、ウェブのアクセシビリティを高めるために重要とされました。

?HTML5の登場とセマンティックタグ
 こうした要請に応える形で、HTML5ではセマンティックタグが導入されました。具体的には、以下のような新しいタグが加わり、ウェブページの意味をより明確に表現できるようになりました:

<header>ページまたはセクションの見出し部分を示す。
<footer>ページまたはセクションのフッター部分を示す。
<article>独立したコンテンツブロック(例えば、ニュース記事やブログ投稿)を示す。
<section> 複数のコンテンツをグループ化し、テーマやトピックごとに区分けする。
<nav> ナビゲーションリンクを囲むための要素。
<aside> 主にメインコンテンツから外れる補足的なコンテンツを示す。
これらのタグは、単に視覚的なレイアウトのために使われるのではなく、文書の意味や構造を反映するために使われます。

?セマンティックタグのメリット
 セマンティックタグの導入には、以下のようなメリットがあります:

・SEOの向上
 検索エンジンがページのコンテンツをより正確に理解しやすくなり、ランキングが向上する可能性があります。
・アクセシビリティの向上
 スクリーンリーダーや支援技術が文書の構造を理解しやすくなり、視覚障害者のウェブ利用が向上します。
・コードの可読性と保守性の向上
 セマンティックな要素を使用することで、HTMLのコードがより論理的に構造化され、他の開発者にとって理解しやすくなります。
・ウェブの標準化
 セマンティックタグを使用することで、ウェブコンテンツの構造が標準化され、異なるプラットフォームやデバイスでも一貫した体験を提供できます。

?セマンティックタグが求められる背景
 セマンティックタグは、単に検索エンジンやアクセシビリティを改善するためだけでなく、ウェブの構造がより明確で理解しやすくなることを目指して導入されました。HTML5は、"意味を持ったウェブ"を作るための重要なステップとして位置づけられており、単なる視覚的な表現を超えて、コンテンツ自体の意味と役割を伝えることが重視されました。

■結論
 HTML5から導入されたセマンティックタグは、ウェブページの意味的な構造を明確にし、検索エンジン最適化(SEO)やアクセシビリティを改善するために重要な役割を果たしています。これらのタグは、単なる視覚的な表示のためではなく、コンテンツの意味や役割をウェブ全体に伝えるために採用されました。


予想通り、検索エンジン対応ということもありますが、それだけではないようです。その内容は、ビジネスとして自分でサイトを作ろうとしているなら、必須のタグだといえます。そして、ChatGPTからの解答を見て気づきましたが、当プロジェクトで利用するHTML規約の中に、使用することが明記されていました。なんでセマンティックタグを利用するのか理解していなかったので、つい先ほどまで気づきませんでした。

[あとがき]
 CSSの規約を作ろうと借りてきた本だったのですが、CSSの規約のためだけでなく、HTMLの再学習のために利用することになりそうです。やはり、この手の本は複数読まなければ本当の意味を理解できないのかもしれません。

 では、また!













■HTML 〜プログラミング研究室〜
https://fanblogs.jp/bahamuteve/archive/425/0?1731478587

2024年11月12日

引数&返却値の型指定 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
独習PHP 第4版を13日ぐらいで読破しようと考えていましたが、まだ読み終えていません。 Studying の資料整理に時間を取られたということもあるのですが、思った以上に知らないことが多い・・・。

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/12 16:35時点)
感想(0件)



 昔は、変数の型の管理はゆるかったのですが、それが厳しくなり、 構造化プログラミング から本格的な オブジェクト指向言語 となりと大きく変わってきました。その大きく変わってきた部分に対応してきたつもりなのですが、まだ、足りていないようです。
 その足りていないと思われる知識について、 Prototype EVE Knowlege システムへ情報として整理しています。読むだけなら、もうちょっと早く読み終えることができそうなのですが、知識として定着させるために、じっくり読むことにしました。
PHP 8から出てきた、 match についてご紹介しましたが、今後もこの場でご紹介していきたいと思います。
 では、今回は、PHP7から機能として追加された、引数、返却値の型指定について見ていきましょう!

[引数と返却値の型指定のなぜ?]
 PHP7から、引数と返却値の型指定ができるようになりました。理由を考えると、Prototype EVEのロジックから推測することができます。Prototype EVEは、PHP5.3で製造しているのですが、作った関数の頭で、引数の型を指定というか変換しています。これは、作った関数の多くは、PHPから提供されている組み込み関数を利用しているのですが、受け取った引数が組み込み関数で指定されている型なのかどうか、あやしいところがあったのです。それは、長い期間に、多くのプログラムを作ってきたのが理由なのですが、多分、以上のことはPHPを製造をしているプロジェクトメンバも認識していたのではと想像しています。

[引数と返却値の指定方法]
 引数と返却値の型指定は、実際にどうやっているのかみていきましょう。


public function testStr ( ? int|string $arg1,
? ?float $arg2,
? array $arg3= []): ? ?array
{




}



以上が例なのですが、???が引数とその型で、?が返却値の型です。
?から見て行きましょう。?では、$arg1という引数を指定していますが、その引数の型は、int型またはstring型だと明示しています。「|」は論理和を表現しています。返却値ではこのような指定ができるということは想像できるのですが、引数は想像できませんでした。
?では、float型に?が指定されています。これは、$arg2は、引数として指定されているときは、float型なのだが、指定されない可能性もあり、その場合はnull型として扱われます。トリビア的な知識ですが、PHPでは、double型は利用できますが、float型として扱われます。Javaで利用するdoubleのつもりでプログラミングしていると、バグを作りこむことになるので、注意が必要です。
 ?では、array型の引数が指定されています。しかし、「= []」としていますが、これは、$arg3に呼び出し元で何も設定していない場合、配列に初期化されるという記述になります。
 ここでは、配列で例示しましたが、他の型でも同様なことができます。
 ?では、返却値の型を指定しています。ここでは、arrayを指定していますが、「?」がついています。これは、引数同様に、返却値に配列が指定されていなかった場合、nullを返却します。
 なお、ここでも論理和を利用することができますが、その場合は、「?」は利用できません。

[あとがき]
 意外と奥が深いと思いません? ChatGPT との対話のとき知った機能だったのですが、その時はここまでの機能だとは思っていませんでした。なお、プログラム内で利用できる型は引数としても利用できるようです。
 以上は、PHPの構造的な部分について書いていますが、同時並行的に、組み込み関数についても、Knowlegeシステムへまとめています。自分が以前から知っている関数であるにもかかわらず、ChatGPTでデバックすると、機能として知らないものが多くあります。進化したのか、知らなかっただけなのか、そこまで調べていないのですが、その知識整理のためにやっています。そちらの方は、全体のスケジュールには影響しません。
 なお、調べている途中で、いいサイトを見つけました。PHPの開発チームが作ったリファレンスサイトです。以下にURLを載せておくので、参考としてください。

 では、また!

■PHP マニュアル(公式サイト)
https://www.php.net/manual/ja/

2024年11月11日

GNドライブ 〜先端技術研究室〜


 こんにちは!
 ナビゲータのEVEです。
木星.jpg
 日本の 総理大臣指名投票 が現在進行中です。いろいろ問題はありましたが、 衆議院議員選挙 では、 自民党 が負け過ぎず、みんなの予想では、自民党が政権与党になる見込みです。
 「システムエンジニアから見た世界」の中でも書きましたが、これでいいのでしょうか?国民が以前から望んだ種類の人間が国会議員になっていないような気がするのですが???

[世界の澱み]
政治資金規正法違反 の細かい部分は分からないのですが、 ChatGPT との対話、そしてテレビをはじめとするマスメディアからの報道から、 収支報告書に記載されていないものは、政治資金ではない という印象を受けます。政治資金ではないのだから、所得となると思われるのですが、それについては 追徴課税 を払わなければなりません。ただ、多くの人とは違い、自民党員は、追徴課税を払うこともなく、政治的責任もとることもなく、選挙に当選した人さえいるぐらいです。
袴田事件 不正輸出をめぐるえん罪事件 など犯人でもない人を必死に犯罪者にしようとしている 警察 の今回の対応ですが、今回の件は不問です。犯罪かどうかは私には分かりませんが、明らかにおかしいのは確かです。不問ということはないと思っているのは私だけでしょうか?
 そんな日本の海の向こうでは、国の指導者になったら、自分の罪を免責するなんていっている政治家もいます。世の中なんかおかしな方向に向かっているような気がします。
 その最たる例が、 ロシアによるウクライナ進行 であり、 中東戦争 です。民間施設や、民間人を標的としていると思われる攻撃が毎日のように行われています。そんな現状を見ていると、日本や海の向こうの出来事はどうでもいいようにさえ感じます。

[機動戦士ガンダム00]
 そんな気分の毎日を送っていますが、そんなとき、 バンダイチャンネル で、 機動戦士ガンダム00 を見たくなりました。そうです。このアニメのテーマは、 戦争根絶 です。まっ、できもしない題材ではありますが、このアニメを見ることにより、気分が晴れます。
 そんなアニメを見ていて、ちょっと、気になることがありました。それは、 GNドライブ です。GNドライブ(太陽炉)とは、特殊な反応でエネルギーを生成する架空の動力源です。架空の話ではあるのですが、このドライブに興味を持ちました。
 まず、200年間という歳月と木星という特殊な環境でないと作れないという点です。架空な話だとしても、なんで、こんな設定にしたのだろうと疑問を持ちました。今回もChatGPTに聞いてみました。まずは、ChatGPT的にはGNドライブとはどのようなモノだと認識しているでしょうか?

 『機動戦士ガンダム00』に登場するGNドライブ(太陽炉)は、特殊な反応でエネルギーを生成する架空の動力源です。この技術は、シリーズの中でも地球連邦軍やその敵対勢力が求める希少で画期的な技術として描かれています。

■GNドライブの基本的な仕組み
 GNドライブは、陽子と反陽子の衝突反応を利用して「GN粒子」という特殊な粒子を生成し、その放出によって機体の駆動力や武器のエネルギー源を供給しています。このGN粒子は以下のような特性を持っています:

?エネルギー供給
 GNドライブは、自己持続型でエネルギーを生み出すことができるため、無限に近い稼働時間を持つのが特徴です。エネルギー補給の必要がなく、長時間の戦闘行動が可能になります。
?GN粒子の放出と効果
 放出されるGN粒子には電波やレーダーを妨害する効果があり、これにより機体のステルス性能が向上します。また、GN粒子は周囲の重力を軽減させ、機体の機動性を高める効果もあります。GN粒子を利用したビーム兵器や防御フィールド(GNフィールド)も存在します。
?ツインドライブシステム
 『ガンダム00』の2ndシーズンで登場する「ツインドライブシステム」は、GNドライブを2基搭載することで、粒子生成効率を高めてさらに強力なパワーを得る仕組みです。これは単純にドライブを増やすだけではなく、2つのGNドライブを高いシンクロ率で動作させることが求められるため、高度な技術が必要とされます。

■GNドライブと擬似GNドライブの違い
 GNドライブと対比して「擬似GNドライブ」も登場しますが、こちらはオリジナルのGNドライブとは異なり、持続的なエネルギー供給ができないため、定期的な補給が必要です。また、擬似GNドライブが生成するGN粒子には有害性があるため、周囲に悪影響を与えることも特徴の一つです。
 このように、GNドライブは『機動戦士ガンダム00』において高性能かつ重要な技術として描かれており、戦略的価値が非常に高い設定になっています。


正直言ってここまで正確と思える回答をいただけるとは思いませんでした。それでは、今回疑問を持った核心について聞いてみましょう!

 『機動戦士ガンダム00』に登場するGNドライブが木星で製造され、完成までに数百年という長い時間がかかった理由は、GNドライブの原理と製造に必要な特殊な環境とプロセスに関係しています。

?木星の特殊な環境
・GNドライブは陽子と反陽子の反応でGN粒子を生成するため、反物質の取り扱いが非常に難しい技術を要します。反物質を生成・保持するためには、強力な磁場や高エネルギーの条件が必要であり、地球近辺の環境ではこのようなプロセスを安全かつ安定的に行うことが困難です。
・木星は巨大な重力圏と強力な磁場を持つため、これがGNドライブの製造に適した環境とされています。反物質の生成や安定化に木星の自然環境が役立つと考えられています。

?GNドライブの「縮退炉」生成プロセス
・GNドライブの設計には「縮退炉」と呼ばれる特殊な構造が含まれており、これがGN粒子を継続的に生成する原理となっています。この構造を作り出すプロセスには膨大な時間がかかり、さらにそのプロセスを維持しながらエネルギーを放出させる技術が必要とされます。
・縮退炉を安定して稼働させるには、極めて長期間にわたって粒子反応を安定させる必要があり、その工程自体が数百年に及ぶプロジェクトとなっています。

?技術的な高度さと準備期間
 GNドライブは極めて先進的かつ複雑な技術で、連続的に安定して稼働するための微細な調整が求められます。そのため、試行錯誤や工程の見直しを含む長期的な研究・開発期間が避けられません。
・また、太陽炉の安定稼働を目指す「天文観測をしつつ適正環境を見つける」「必要な素材を揃える」など、多数の複雑な要素が絡み合っており、それが長い準備期間の原因ともなっています。

?未来の人類に向けた計画
・作中の設定では、GNドライブは長期的な視点で人類の平和や進化を目指す「ソレスタルビーイング」によって製造されました。そのため、数百年先の未来を見据えても安定稼働できることが重視され、短期間での製造よりも、安定性と持続性が優先されています。

 このように、GNドライブの製造には木星の環境、安定した縮退炉の生成、そして極めて高い技術水準が必要であり、これが数百年という長期間を要した主な理由です。


すごくないですか?なんか、将来的には実現可能な技術をアニメ化したようなレポートです。それでは、将来的に実現可能な技術かどうか聞いてみましょう!

 GNドライブのような技術は、実際にはフィクションの産物であり、『機動戦士ガンダム00』の世界観の中で構築された架空の技術です。リアルな科学研究に基づくレポートは存在せず、GNドライブが生成する「GN粒子」や「縮退炉」といった要素も現代科学の法則からは大きく逸脱したものです。しかし、いくつかの現実の物理学の概念が設定に取り入れられているため、将来実現し得る技術かどうかについて興味深い要素も含まれています。

■現実世界の技術と比較できる要素
 GNドライブはフィクションですが、作中でのいくつかの設定には現実の科学技術のアイデアや概念が基になっているものがあります。

?反物質:
・GNドライブでは「陽子と反陽子の反応」によってエネルギーを生成します。現実でも、陽子と反陽子(反物質)の対消滅反応は高エネルギーを生成することが知られています。しかし、反物質の生成・保存は現在の技術では極めて難しく、また非常にコストがかかるため、大規模なエネルギー源として利用するのは難しいです。
・CERNなどで反物質の生成は研究されていますが、短時間のみしか保持できず、現在の技術で実用化するには長い道のりがあります。

?縮退炉と量子縮退:
・縮退炉(ディジェネレート・リアクター)という言葉は、フィクションで独自に作られた用語ですが、物理学には「縮退物質」(例えば白色矮星や中性子星に見られる超高密度の物質)という概念があります。これは、極端な圧力により原子が極度に圧縮されている状態で、理論上は非常に高エネルギーを持つとされています。
・ただし、この縮退物質を利用して安定的にエネルギーを取り出す技術は現代の科学では存在せず、実用化には大きな課題があると考えられます。

?核融合と自己持続型エネルギー:
・自己持続型エネルギー源という点でGNドライブは核融合に似ています。核融合は、比較的クリーンで持続可能なエネルギーを提供するため、将来的に有望なエネルギー源とされています。特に、持続可能な核融合炉を開発することで、GNドライブのような「長期間安定してエネルギーを生産する装置」に近いものが実現できる可能性があります。

■実現の可能性と課題
 現代科学の範囲では、GNドライブの実現は極めて困難であり、特に次の点が課題です

・反物質の生成と保持
 反物質は生成コストが非常に高く、生成できたとしても安定的に保存する技術がまだ確立されていません。持続的にエネルギーを供給する反物質エネルギー装置の実用化には、多くの技術的な壁があります。
・自己持続型エネルギー源
 核融合エネルギーが実用化されれば、クリーンで長寿命のエネルギー源が実現する可能性が高まりますが、GNドライブのように全く補給が不要な自己持続型の反応装置はまだ夢の段階です。
・重力と磁場の操作技術
 木星のような環境でのみ可能とされる設定ですが、地球上で重力や磁場を操作してエネルギーを生成する技術は今のところ開発の兆しがありません。

■結論
 GNドライブのような技術は、現代科学では非現実的であると言わざるを得ません。しかし、反物質や核融合、エネルギー生成に関する基礎研究は進展しています。『ガンダム00』のようなフィクションは、未来の技術に対するインスピレーションを提供するものであり、現在の技術では到底達成できないとしても、エネルギー技術の未来に向けたヒントとして興味深いテーマです。



[あとがき]
 最後の結論がちょっと残念でしたが、GNドライブの構想は、未来の技術者に向けたメッセージなのかもしれません。このメッセージを受け取った技術者の誰かが、GNドライブを実現するのでしょう!
 私も、幼き日のアニメからシステムエンジニアになろうと考えましたから・・・。

 では、また!

■機動戦士ガンダム00 ファーストシーズン(バンダイチャンネル)
https://www.b-ch.com/titles/1084/001

■自民党総裁選の憂鬱(2024年9月11日 システムエンジニアからみた社会より)
https://fanblogs.jp/socialsystem/archive/22/0


2024年11月10日

コーポレートガバナンス・コード 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
証券取引所.jpg
 本日は、日曜日と言うことで、 ゼロからはじめるシステム開発 から セキュリティ の情報を提供します。
 試験で出題されそうな所を書こうと思ったのですが、 中小企業診断士 試験において、 DX のようなセキュリティに関連の出題はありませんでした。
サイバーセキュリティ経営ガイドライン.png
 以上の理由により、前々回にレポートで使用した サイバーセキュリティ経営ガイドライン の図から今回は調査し報告したいと思います。
 それでは、本日は、 コーポレートガバナンス・コード について調べたいと思います。

[コーポレートガバナンス・コードとは?]
 コーポレートガバナンス・コードとは、どのようなモノなのでしょうか?本日も、 ChatGPT に解説をしてもらいましょう!

 コーポレートガバナンスコード(Corporate Governance Code)とは、企業の経営の透明性や健全性を高めるために、上場企業が遵守すべき経営のルールや指針を示したガイドラインです。このコードは、株主やステークホルダーの利益を守り、企業の持続的成長を促進することを目的としています。
 日本におけるコーポレートガバナンスコードは、2015年に日本取引所グループ(JPX)により策定され、上場企業に向けて示されています。このコードは、企業がどのようにガバナンス(企業統治)を行うべきかについて、具体的な指針を提供しており、以下のような主要なテーマが含まれています:

?取締役会の構成と運営
 取締役会は企業の戦略的意思決定を行い、経営陣の監督をする役割を担います。取締役会の多様性や独立性が求められます。

?株主との対話
 企業は株主との適切な対話を行い、株主の意見や利益を尊重する必要があります。

?リスク管理と内部統制
 企業の経営陣はリスク管理体制を強化し、内部統制システムを適切に運用しなければなりません。

?企業の社会的責任
 環境や社会に対する責任を果たし、持続可能な経営を目指すことが強調されています。

 このコードは「コンプライ・オア・エクスプレイン(従うか、または従わない理由を説明する)」という原則に基づいており、企業が指針に従わない場合には、その理由を開示することが求められます。


日本取引所グループ が主体となって作成し、 金融庁 は、アドバイザーまたはオブザーバーとして参加して作成されたモノだといわれています。ようは、上場企業を含む金融業界全般に影響はあるが、公的なモノではありません。ただ、 経済産業省 作成の、上記図からサイバーセキュリティ経営ガイドラインに影響を与える文書だと伺い知ることができます。

[コーポレートガバナンス・コードが作成された背景]
 内容を読むと、2024年現在なら一般的なことが書かれているのですが、なんでこんな一般的なことを、役所ではなく、日本取引所グループが作ることになったのでしょうか?引き続きChatGPTに聞いてみました。

 コーポレートガバナンスコードが作成されることになった背景には、いくつかの重要なトリガーがあります。主に、日本の企業ガバナンスの強化と、国際的な競争力を高める必要性がその要因です。以下に主要なトリガーを挙げます:

?企業ガバナンスの課題
 1990年代から2000年代にかけて、日本の企業ガバナンス(企業統治)に対する批判が高まりました。特に、株主の利益を十分に反映しない経営が行われていたり、経営陣が過度に権限を集中させていたりする問題が指摘されていました。これにより、経営の透明性や監視機能が不十分とされ、投資家からの信頼が低下していたのです。

?経営改革への国際的な圧力
 世界的に、企業ガバナンスの強化が重要な課題として注目されていました。特に、アメリカのサーベンス・オクスリー法(SOX法)や、ヨーロッパのコーポレートガバナンス原則など、国際的な企業ガバナンス規制が整備されていく中で、日本もその流れに対応する必要性が高まりました。特に、グローバル投資家からの期待や要求が強まり、日本企業も国際的なスタンダードに追いつくことが求められたのです。

?日本経済の構造改革と持続的成長
 日本経済は、1990年代後半からの経済低迷期を受けて、構造改革が急務となっていました。その一環として、企業の経営体制を見直し、より透明で効率的なガバナンスを確立することが、経済成長を支える重要な要素と考えられました。コーポレートガバナンスの強化は、企業の健全な成長を促進し、投資家の信頼を取り戻すために不可欠とされました。

?株主重視の経営へのシフト
 従来、日本の企業は「家族経営」や「終身雇用」など、株主以外のステークホルダー(従業員や取引先)を重視する経営が行われていましたが、グローバル化が進む中で、株主重視の経営への転換が求められるようになりました。特に、外国人投資家からは、株主利益の最大化を図る経営が期待されていたため、コーポレートガバナンスコードがその指針となることが決定的なトリガーとなりました。

?東日本大震災後の社会的・経済的な影響
 2011年の東日本大震災後、企業の社会的責任や経営の透明性への関心が高まりました。企業のリスク管理体制やステークホルダーへの配慮が強調され、より信頼できるガバナンス体制が求められるようになったのも、コーポレートガバナンスコードの策定を後押しした要因となりました。

?安倍政権下での「アベノミクス」
 2012年に安倍晋三政権が発足し、経済政策「アベノミクス」が打ち出されると、その一環として、日本企業のガバナンス改革も重要なテーマとなりました。特に、企業の競争力向上や投資家の信頼を回復するために、コーポレートガバナンスコードの策定が急務とされました。

■結果としてのコーポレートガバナンスコード策定
 これらの背景を受け、2014年に日本取引所グループ(JPX)が中心となり、コーポレートガバナンスコードが策定され、2015年に正式に導入されました。これにより、日本の上場企業は、株主や投資家の利益を最優先に考え、透明性の高い経営を行うことが求められるようになりました。


社会的な問題、外部圧力、時代の流れなどの、社会的要求に基づき作成されたのが、分かります。

[コーポレートガバナンス・コードの目的]
 コーポレートガバナンス・コードにどのようなことが書かれていて、なんで作成されたのか分かりました。それでは、最後にその目的について改めて聞いてみましょう!

 コーポレートガバナンスコードが作成された目的は、主に以下のような点に集約されます。

?企業ガバナンスの透明性と効率性の向上
 日本の企業において、経営の透明性や効率性を高めることが主な目的です。特に、企業の意思決定プロセスにおける透明性を確保し、経営陣が株主やステークホルダーに対して説明責任を果たすことを促進します。これにより、企業の経営がより公平かつ効率的に行われ、企業の持続的な成長が期待されます。

?株主の利益の保護と強化
 コーポレートガバナンスコードの中心的な目的は、株主の利益を最大化することです。これまでの日本の企業は、株主だけでなく、従業員や取引先、地域社会などのステークホルダーに対する配慮が強調されてきましたが、グローバル化が進む中で、株主重視の経営が求められるようになりました。株主の利益を優先することで、企業の競争力を高め、投資家からの信頼を獲得することを目指します。

?企業の監督機能の強化
 企業の経営陣に対する監督機能を強化し、経営者が自己利益を優先することなく、企業全体の利益を考えて行動できるようにすることが目的です。取締役会の構成や独立性を高めることで、経営の監視を強化し、企業のリスク管理や内部統制が機能するようにします。

?グローバル競争力の強化
 国際的な投資家や企業との競争において、日本企業が信頼され、選ばれるためには、国際基準に適合した企業ガバナンスを構築する必要があります。コーポレートガバナンスコードは、グローバル市場における企業の競争力を高めるため、企業統治の水準を引き上げることを目指しています。特に、外国人投資家からの期待や要求に応えることが重要視されました。

?企業の社会的責任の強化
 企業は、株主だけでなく、広範な社会的責任を負うことが求められています。コーポレートガバナンスコードには、企業が環境や社会に対して積極的に責任を果たすべきだという観点が含まれています。企業の持続可能な成長を促すために、リスク管理や倫理的な経営が重視されています。

?企業の成長と持続的発展の促進
 コーポレートガバナンスの強化を通じて、企業の長期的な成長と持続可能な発展を促進することが目的です。健全なガバナンス体制が構築されることで、企業が不正行為や経営陣の誤った判断から守られ、安定した経営が実現しやすくなります。これにより、企業は社会的信頼を得るとともに、持続的な利益を上げることができるようになります。

?日本企業に対する投資家の信頼回復
 日本企業が過去に抱えていたガバナンスに対する懸念を払拭し、投資家の信頼を回復することが目的の一つです。特に、過去に経営陣の透明性の欠如や不正行為が問題となった事例があり、これらを防止するためにコーポレートガバナンスコードが導入されました。

■まとめ
 コーポレートガバナンスコードの作成目的は、企業ガバナンスの透明性、株主の利益保護、経営監督機能の強化、グローバル競争力の向上、社会的責任の強化、企業の持続的成長の促進など、企業が健全に発展するための多岐にわたる目的を達成するために策定されました。これにより、投資家や社会の信頼を得るとともに、日本企業の競争力を国際的に高めることを目指しています。



[あとがき]
 サイバーセキュリティ経営ガイドラインは、政府関連機関から作成された文書だけでなく、日本の主要な機関で作られたガイドラインも取り入れて作られているということを本日知りました。ただ、以上の内容を読んで、サイバーセキュリティという観点では、同ガイドラインを見ることはできませんでした。ということで、セキュリティという観点から同ガイドラインを見た場合、どのようなことが書かれているのか、最後の最後にChatGPTに聞いてみました。

 コーポレートガバナンス・コードにおいて、サイバーセキュリティに直接的に言及されている部分は、一般的に企業のリスク管理や内部統制に関連する部分に含まれています。具体的な内容として、サイバーセキュリティは企業のリスクの一環として取り上げられており、企業が十分なセキュリティ体制を整備することが求められています。
 コーポレートガバナンス・コードにおけるサイバーセキュリティ関連の部分
主に以下のような形で関連する部分が記載されています:

?リスク管理の強化
 コーポレートガバナンス・コードの中で、企業はリスク管理体制の強化を求められています。サイバーリスクは現代の経営において重要なリスクの一つとされており、以下のような観点で言及されています。

・リスク管理体制の整備
 企業はサイバーセキュリティのリスクを含む、さまざまなリスクに対して適切な管理体制を確立し、経営陣はその実効性を監督しなければならない。

・内部統制の強化
 サイバー攻撃や情報漏洩などのリスクが企業経営に与える影響を最小化するため、適切な内部統制システムの整備が求められています。

?取締役会の役割
 取締役会は、企業の戦略的なリスク管理の監督を担う役割があり、サイバーセキュリティもその一環として取り上げられます。特に、取締役会は次のような対応を求められます

・サイバーセキュリティ戦略の策定
 サイバーセキュリティに関する基本的な方針や戦略を策定し、取締役会でその実施状況を定期的に確認する。

・専任の役員の設置:
 サイバーセキュリティ対策の重要性が高まる中で、情報セキュリティ担当の取締役や専任の責任者を設置し、責任を明確にすることが推奨されています。

?情報開示の充実
 企業は、サイバーセキュリティを含むリスクに関する情報を投資家やその他のステークホルダーに対して適切に開示することが求められています。具体的には:

・サイバー攻撃への対応状況の開示: サイバーセキュリティに関するポリシーや実施状況、万一のサイバー攻撃発生時の対応策などを開示することが、ガバナンスの一環として求められることがあります。

■まとめ
コーポレートガバナンス・コードにおけるサイバーセキュリティに関連する部分は、主にリスク管理、取締役会の監督、情報開示の観点で言及されています。サイバーリスクは経営にとって重要なリスク要素であり、企業は適切な対策を講じ、その進捗状況を監督機関やステークホルダーに報告することが求められています。


以上の部分は他のガイドライン等にも書かれている内容です。だから、 IPA の試験などでも、コーポレートガバナンス・コードの出題がないのかもしれません(調べた範囲では出題実績を見つけることができませんでした)。同じガバナンス・コードなら、 デジタルガバナンス・コード を勉強した方がいいようです。

 では、また!

2024年11月08日

継承 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 10月末から調子がのりません。 独習PHP の中に、 vue.js の記事を見つけて、図書館で借りてきましたが、本日返却しました。何かいろいろやろうとしている上、調子が悪かったので、調査まで踏み込むことができませんでした。
 さわりの部分だけ読んだのですが、vue.jsは、シングルページアプリケーション(SPA)やインタラクティブなWebアプリケーションを作成するためのオープンソースのJavaScriptフレームワークらしいです。 日経225リアルタイムチャートCME SGX というサイトがありますが、そんなサイトを作ることができそうだという印象です。

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/8 18:13時点)
感想(0件)



フレームワーク 製造後ということになりますが、株式というか企業を評価するためのシステムを製造しようと考えています。そのときに、各企業の業績情報を表示するときに、vue.jsと同じようなフレームワークを製造しようかなって考えています。トータルコーディネートという観点で言うと、できるだけ、自分の手でシステムを作った方がいいということは言うまでもありません。
 昨日になりますが、vue.jsを諦めた代わりに、 Webデザイン や、 CSS の本を図書館へ予約しました。理由は画面設計をするに際し、CSSを使用しようとしているのですが、CSSの知識をきちんと身に着けていないから・・・。
クラス 製造の見通しが立ったので、その先の準備をしようと考えてのことです。一般的には、CSSファイル、 スタイルシート などと言いますが、その定義の最適な方法が分かりません。簡単なものは今までもいくつか作っているのですが、これから作ろうとしているシステムは本格的なモノになります。 PHP JavaScript HTML と本格的な規約を用意し、それに準じたシステムを作っているので、CSSもそれに準じて本格的なモノにしたいと考えています。

[継承]
 以前、エラーメッセージクラスを、他の製造したクラスに 継承 させるという話をしましたが、継承して作らなければならないものが他にあることに気づきました。それは、日付クラス、時間クラスとかファイルクラスとか、同じような系統のクラスが複数あります。そのクラスについては、各クラスで当該クラスをインポートして、インスタンス化したうえで利用しようと考えていましたが、その必要がないことにエラーメッセージクラスを各クラスに継承させるときに気づきました。
 同じ系統の親となるクラスを決めて、その親から子を継承させて行けばいいのです。

[単一継承]
 PHPも Java もそうですが、 単一継承 です。ようは、クラスは1つのクラスしか継承できません。現在、エラーメッセージクラスをすべてのクラスでインポートしています。その場合、もう継承できないことになります。
 それが脳裏に浮かんだ時、同じ系統でまとめるのは無理かなとか思いましたが、よく考えたらできることに気づきました。それは、最上位の親クラスだけが、エラークラスを継承すればいいのです。親が継承したクラスのメソッドは子や孫でも利用できます。これで、系統ごとにクラスをまとめるということができそうです。

[あとがき]
 今後の予定ですが、このまま最後まで個別にクラスを作っていきます。作った後に、各クラスの依存関係を再調査し、再調査した結果から、親、子、孫と順位をつけてまとめていきます。
 昨日までは、1月のログインシステムの製造に余裕で入れるという印象でしたが、ちょっと、厳しくなりました。仕事のやり方をいろいろ工夫して、なるべく生産効率を上げて間に合わせたいと思います。

 では、また!

2024年11月07日

HTMLコーディング規約 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
HTML.jpg
 経験曲線効果により、クラス製造にめどがたち、画面設計が視野にはいってきました。そんなことを考えながら、こちらも何かしらの規約がほしいな〜、っなんて考えています。
 今日は、そんな画面で使用する、HTMLの規約にどのようなモノがあるのか調査します。

[HTML規約]
 どんな規約があるのか、本日もChatGPTに聞いてみました。

?W3Cのガイドライン
 World Wide Web Consortium (W3C)は、HTMLとCSSの標準を策定している組織です。W3Cは、HTMLの正しい使い方や文書構造についてのガイドラインを提供しています。

・HTML仕様
 W3Cの公式仕様を参考にすることで、最新のHTML標準を理解し、正しいマークアップを行うことができます。

?GoogleのHTML/CSSスタイルガイド
 Googleは、HTMLおよびCSSのコーディングスタイルに関するガイドラインを公開しています。このガイドラインでは、可読性、構造、アクセシビリティ、パフォーマンスなどに関する推奨事項が含まれています。

?AirbnbのJavaScriptスタイルガイド
 AirbnbはJavaScriptに特化したスタイルガイドを公開していますが、HTMLの書き方にも適用可能なルールが含まれています。特に、テンプレートエンジンを使用する場合には、HTMLマークアップのベストプラクティスが記載されています。

?CSS-Tricksのガイドライン
 CSS-Tricksは、HTMLやCSSのベストプラクティスに関する多くのリソースを提供しています。特に、セマンティックなマークアップやアクセシビリティの考慮に関する情報が豊富です。

■まとめ
 HTMLにはPHPのPSRのような公式な標準規約は存在しないものの、W3Cのガイドラインやさまざまなスタイルガイドを参照することで、品質の高いHTMLを記述するための指針を得ることができます。また、チームやプロジェクトごとにコーディングスタイルガイドを策定し、統一したスタイルで開発を進めることが重要です。


内容を吟味はしていないのですが、JavaScriptでGoogleの規約を採用しているので、画面を操作をするJavaScriptと整合性をとるため、Google HTML/CSS Style Guideを採用したいと思います。

[EVEプロジェクトのHTML規約]
 早速、Googleから、当プロジェクトのHTML規約を作成しました。


?一般コーディング規約
1)HTMLで使用するタグは、すべて小文字とする。
2)インデントは、2バイトとする。
3)head、bodyの中の要素は、インデントする


?基本構造
 当プロジェクトHTML文書は、基本に以下のような構造とします。



<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="cache-control" content="no-store">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="0">
<title> タイトル </title>
<link rel="stylesheet" href="styles.css">
<script src="script.js" defer></script>
</head>
<body>
<h1> コンテンツの見出し </h1>
<p> ここにコンテンツが入ります。 </p>
</body>
</html>





?セマンティックなマークアップ
 セマンティックなマークアップで記述します。

・header
 ページやセクションのヘッダーを表します。

・nav
 ナビゲーションリンクの集まりを示します。

・main
 ページの主要なコンテンツ部分を示します。

・article
 独立したコンテンツ(ブログ記事やニュース記事など)を示します。

・section
 セクションを表し、関連するコンテンツをまとめるときに使用します。

・footer
 ページやセクションのフッターを表します。

・h
 見出しレベルを表すために使用され、コンテンツの階層構造や要点を視覚的に示します。

・figure
 画像、図表、コードスニペットなど、説明の必要がある内容を示す場合に使い、キャプションを付けることができます。

・figcaption
 画像、図表、コードスニペットなど、説明の必要がある内容を示す場合に使い、キャプションを付けることができます。

・src
 画像の説明の必要がある内容を示す場合に使い、キャプションを付けることができます。

・time
 日時を示し、検索エンジンやブラウザに日時情報であることを明示します。

・address
 連絡先情報を示します。一般的に企業や個人の住所、メールアドレス、電話番号を表します。


?属性の使用
 属性値は必ずシングルクォートで囲みます。但し、必要に応じてダブルコーテーションを利用することを許容します。


?アクセシビリティ
 アクセシビリティを考慮したマークアップを利用します。

・代替テキストの設定: 画像には必ずalt属性を設定します。

・見出しの階層構造: 正しい見出しタグを使用して、コンテンツの階層を明確にします。
 例)h1→h2→h3・・・

?インデントとフォーマット
 文書は適切にインデントし、見やすくします。
・ul、olタグなどを使用する。


?HTMLエスケープ
 特殊文字は、HTMLエスケープを使用して表示します。例えば、<は&lt;、>は&gt;として記述します。


以上です。なんか足りないような気もするのですが、以外については、画面を作りながら、追加していきたいと思います。

[あとがき]
 あと、規約として用意しなければならないのは、CSSだけでしょうか?CSSは本格的に作ったことがないので、規約を作りながら勉強することになるかもしれません。早ければ明日、遅くても12月末日までに調査し、準備したいと思います。

 では、また!

■Web Content Accessibility Guidelines (WCAG) 2.1
https://waic.jp/translations/WCAG21/

■Google HTML/CSS Style Guide
https://google.github.io/styleguide/htmlcssguide.html

■Airbnb JavaScriptスタイルガイド
https://mitsuruog.github.io/javascript-style-guide/

■CSS-Tricks
https://css-tricks.com/

続きを読みたい方はこちらへ==>>

2024年11月06日

match 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 昨日は、 アメリカ大統領選挙 でした。本日開票速報を見ているのですが、がっかりです。 民主主義 を守るという意味から、民主党の ハリス さんを応援していたのですが、現時点の経過情報を見ると負けそうです。
 私自身の意見ですが、この結果日本に大きく影響しそうです。昔は、「アメリカがゴホンと咳をすれば、日本が風邪をひく」なんて言われていましたが、病弱な現在はもっと影響を受けそうです。
 この結果日本の衆議院選よりも影響がでかいと思っています。それは、日本の政治家は選挙活動のときはいろいろ言いますが、結局できない場合が多いことや、変わっても元に戻ってしまうなどということが普通にあるからです。だから、 衆議院選挙 結果がどうなっても、日本は変わらないと思っています。
 故安倍首相がトランプさんがいっている政策を聞いて、リップサービスだと話していましたが、日本の政治家はそのレベルだから仕方がありません。
 では、本日も、PHPの気になった情報を紹介しましょう!

[match]
PHP8 から、 match という関数が追加されました。どんな機能かというと、プログラム言語を1つでも知っている方はご存じかもしれませんが、 switch の強化版です。
 では、実際にどんな機能なのか、独習PHP第4版の抜粋を見てみましょう!

独習PHP/山田祥寛【3000円以上送料無料】

価格: 3740円
(2024/11/6 17:00時点)
感想(0件)




 いわゆる「値を返せるswitch」です。

★構文


match(式){
値1=>式1,
値2=>式2,
値3=>式3 ,
default=>式N
}


・与えられた式と値が1、2...Nが一致する場合に、対応する式1、2...Nを返すわけです。defaultは特別な値で、すべての値にマッチしない場合に帰す値を示します。
・caseの判定式は、等価演算子ではなく、厳密等価演算子で判定される。厳格に判定したい場合は、等価演算子で判定するswitch文ではなく、match文を利用すべき。
・break文は不要
・=>の右辺には単一の式
・=>の左辺には任意の式を指定できる。メソッド、関数を指定することができます。



[目から鱗]
 ここで実は目から鱗なのは、switch文の判定結果は、if文で利用するイコールが2つで、比較する 等価演算子 と同様の機能なのだが、matchでは、イコール3で判定する 厳密等価演算子 と同じだというのです。正直言うと、switchが等価演算子だということを知りませんでした。
 それでは、等価演算子と厳密等価演算子について ChatGPT に解説をしてもらいましょう!

■== (等価演算子)(イコールが2つで判定する場合)
 == は、等価演算子として動作し、値が等しいかどうかを比較します。データ型は考慮せずに、値だけを比較します。そのため、比較する2つの値が異なるデータ型であっても、PHPが型を自動的に変換してから比較します。



$a = 5;
$b = "5";

if ($a == $b) {
echo "等しいです"; // このコードは実行される
} else {
echo "等しくありません";
}



■=== (厳密等価演算子)(イコールを3つで判定する場合)
 === は、厳密等価演算子として動作し、値とデータ型の両方が等しいかどうかを比較します。型変換を行わず、データ型が異なる場合は「等しくない」と判断されます。


$a = 5;
$b = "5";

if ($a === $b) {
echo "厳密に等しいです";
} else {
echo "厳密に等しくありません"; // このコードが実行される
}



PSR に対応している現在は、等価演算子なのか厳密等価演算子なのかということは非常に重要です。ただ、以前のバージョンのPHPは、型の扱いが非常にゆるく、引数や返却値などの型指定もできなかったりして、指定することにより逆に不具合があるかと思うところはありましたが、PHP8でプログラムを作るまたは書き換えるなら、厳密等価演算子ですべて判定すべきでしょう!

[あとがき]
 他人の国の選挙結果でやる気をなくしてしまいましたが、いいこともあります。 トランプ さんが大統領になると、株価が上がり、景気が良くなりそうだということです。ただ、 インフレ 率が上昇し、 ドル高・円安 になるのじゃないかと心配しています。
 以前、ブログで書きましたが、アメリカは金利20%の時代もあったそうです。その時の FRB は、以下のようなことをいっていました。

 労働者の需要が供給を大幅に上回っており、それにより生じる高インフレの重荷は、それを負担する能力が最も低い人々に最も重くのしかかる。

 インフレはそれ自体を餌にしている。だから、より安定した、より生産的な経済への回帰の仕事の一部は、インフレ期待の支配を解くことでなければならない。


 では、また!

■2023年8月25日 ジャクソンホール会議を受けてのパウエル議長講演
https://fanblogs.jp/socialsystem/archive/25/0

2024年11月05日

三項演算子 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 本日は、私が以前苦手だと話していた、 三項演算子 についてお話をします。苦手というか、今回のプロジェクトから利用しようとしているので、慣れていないだけなのかもしれませんが・・・。

[三項演算子]
 三項演算子とはなんでしょうか? ChatGPT に解説をしてもらいましょう!

三項演算子(または三項条件演算子)とは、条件に基づいて値を選択するための演算子で、3つのオペランドを持つことから「三項」と呼ばれています。PHPを含む多くのプログラミング言語で利用されます。

 三項演算子の基本的な構文は以下の通りです:

?(condition) ?? value_if_true :? value_if_false;


?condition: 真偽値を評価する式。
?value_if_true: 条件が true の場合に返される値。
?value_if_false: 条件が false の場合に返される値。


以上を読んでなんだ簡単だって思いました?確かに以上の文書を読むとそうなのですが、実際に使うとそうでもありません。普通conditionには式が入り、その結果により返却値が真または偽と評価されるのですが、その結果を区別するのに、最初苦労しました。ChatGPTに聴いたところ、値を真なのか偽なのか区別するための基準があるようなので、解説してもらいましょう!

1)Boolean:
 true: 明示的に真を示す値。

2)整数:
 1 以上の整数: 例えば、1, 2, 100 など。

3)浮動小数点数:
 正の0より大きいの浮動小数点。

4)文字列:
 非空の文字列: 例えば、'Hello', '0.0', 'false' など、内容がある文字列は真と評価されます。

5)配列:
 非空の配列: 例えば、[1], ['a', 'b'], [1, 2, 3] など、要素を持つ配列は真と評価されます。

6)オブジェクト:
 PHPでは、多くのオブジェクトは、真と評価されます。


 続けて偽について見てみましょう!

1)Boolean:
 false: 明示的に偽を示す値。

2)Null:
 null: 値が存在しないことを示します。

3)整数:
 0: ゼロは偽とみなされます。

4)浮動小数点数:
 ゼロ、負の浮動小数点。

5)空の文字列:
 '': 空文字列は偽です。

6)文字列 '0':
 '0': 文字列のゼロも偽と判断されます。

7)空の配列:
 []: 要素を持たない配列は偽とみなされます。

8)オブジェクト:
 オブジェクトの状態: PHPでは、オブジェクト自体は常に真と評価されますが、オブジェクトのプロパティやメソッドが偽と評価される場合、そのオブジェクトが特定の条件を満たさない限り、偽として扱われることがあります。


初心者は、評価する式から得られた結果が、真か偽かという時点で戸惑ってしまい、プログラミングの手が留まってしまいます。ただ、以上のように整理し、見ながらだったらプログラミングができそうです。

[評価する式の値をそのまま返す]
 conditionには、評価する式が入ると話しましたが、判定するのは評価する式から得られた結果です。その結果が以上の分類により真なのか偽なのか判断します。その判定した結果が真ならvalue_if_trueが返却され、偽ならvalue_if_falseが返却されます。ただ、そのvalue_if_true、value_if_falseに値を設定しなくても、三項演算子を利用することができます。それは、評価する式が真で、value_if_trueに何も設定されていない場合は、評価する式の返却値がそのまま返却されます。以前、メソッドの返却値を三項演算子で記述すれば短くなり、便利だと話した記憶がありますが、それが理由です。

[null合体演算子]
 三項演算子を使った特殊な方法があります。それが、 null合体演算子 と言われるものです。では、null合体演算子とは何なのか、ChatGPTに解説してもらいましょう!

 null合体演算子(Null Coalescing Operator)は、PHP 7以降で導入された便利な演算子です。この演算子は、特に変数が null かどうかをチェックする際に使われます。以下に詳しく説明します。

 $result = $value1 ?? $value2;


この例では、$value1 が null でない場合、その値が $result に代入されます。もし $value1 が null であれば、$value2 の値が $result に代入されます。

null合体演算子は、nullに特化した三項演算子なので、使用するシーンが明確に思い浮かびます。ただ、当プロジェクトは基本、クラス、メソッドの変数は、その頭で初期化してから利用するので、あまり出番がないかもしれません。

[あとがき]
 近頃、プログラミングする場合、できるだけシンプルに行数を少なく記述しようと考えています。三項演算子は、その目的にあった方法で、利用できるところは、三項演算子を利用しようとしています。ただ、三項演算子を1つの式に、多重で利用するのはやめようと考えています。パット見た目シンプルなのですが、よくよく見ると複雑で見て悩むということが考えられるからです。その場合、バグを作りこむ機会となるうえ、作業効率を下げそうです。
 PHPは複雑にプログラミングしようとすれば、かなり複雑にすることができます。当プロジェクトでは、できるだけシンプルに作るのですが、他のプロジェクトではどうなのでしょうか?プログラムを受注することを考えると、ちょっと、ドキドキしてきます。まっ、みんなやっていることですからね。がんばります。

 では、また!

2024年11月03日

情報セキュリティガバナンス 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
文書.jpg
ゼロからはじめるシステム開発 では、日曜日は セキュリティの日 です。ということで、本日は情報セキュリティガバナンスについてお話をしましょう!
情報セキュリティガバナンス の話しを始める前に、前回のおさらいと、なんで情報セキュリティガバナンスの話しをするのか経緯について説明します。

[前回のおさらい]
 前回は、 サイバーセキュリティ経営ガイドライン3.0 についてお話をしました。
 サイバーセキュリティ経営ガイドラインは、 3つの原則と、同3原則を実現するための重要10項目で構成されている という話しをしました。以下が、経済産業省から提供されている3原則です。

?経営者は、サイバーセキュリティリスクが自社のリスクマネジメントにおける重要課題であることを認識し、自らのリーダーシップのもとで対策を進めることが必要
?サイバーセキュリティ確保に関する責務を全うするには、自社のみならず、国内外の拠点、ビジネスパートナーや委託先等、サプライチェーン全体にわたるサイバーセキュリティ対策への目配りが必要
?平時及び緊急時のいずれにおいても、効果的なサイバーセキュリティ対策を実施するためには、関係者との積極的なコミュニケーションが必要


以上の内容を簡単にまとめているものとして、 LRM株式会社 から以下のような形で紹介されているという話しをしています。。

?リーダーシップの発揮
?サプライチェーンセキュリティの強化
?関係者との積極的なコミュニケーション


そして、以上のようなことが言われている背景について、当サイトの筆者の憶測ではありますが話しをし、?では、リーダーシップの発揮の中で情報セキュリティガバナンスについて触れています。そのときに、情報セキュリティガバナンスの話ができなかったので、今回取り上げさせていただきます。

[情報セキュリティガバナンスとは?]
 情報セキュリティガバナンスとは何なのか、 ChatGPT に聞いてみましょう!

 情報セキュリティガバナンスは、組織が情報セキュリティに関する方針、目標、監視、管理を確立し、維持するための仕組みやフレームワークを指します。企業や組織のビジネス目標と整合性を保ちながら、情報資産を保護し、リスク管理を行うことを目的としています。

?情報セキュリティガバナンスの目的
 情報セキュリティガバナンスの主な目的は、組織の情報資産を保護し、情報セキュリティに関わるリスクを管理することです。また、経営陣やステークホルダーに対して組織の安全性を保証し、サイバー攻撃や情報漏洩などの脅威から組織を守るために以下の点が重視されます。

・リスクの特定と管理
 セキュリティリスクを洗い出し、管理・監視することで、事前に対応策を講じられるようにします。
・説明責任
 情報セキュリティにおける責任を明確にし、経営層が主体的にリーダーシップを発揮できるようにします。
・コンプライアンスの確保
 法律や規制、業界標準に準拠し、組織が適切に管理されていることを保証します。
・持続可能なセキュリティ体制の構築
 長期的に情報資産を保護し、セキュリティ体制を継続的に改善します。

?情報セキュリティガバナンスの構成要素
 情報セキュリティガバナンスを効果的に機能させるためには、以下の構成要素が重要です。

・セキュリティ方針
 組織全体の情報セキュリティの基本方針を明確にし、管理体制や遵守すべき基準を定めます。
・リスク管理
 情報セキュリティリスクの特定、評価、対応策の実施を通じて、組織が直面する潜在的なリスクを最小限に抑えます。
・役割と責任の明確化
 情報セキュリティに関する役割と責任を組織内で定義し、経営層や従業員に対して責任を明確にします。
・モニタリングとレビュー
 定期的に情報セキュリティ体制を評価し、リスクの変化や新たな脅威に対応するために体制を改善します。
・教育と訓練
 組織の全メンバーが情報セキュリティの重要性を理解し、適切に対応できるよう、継続的な教育や訓練を行います。

?情報セキュリティガバナンスのプロセス
 情報セキュリティガバナンスの実践には、以下のようなプロセスが含まれます。

・現状の把握と評価
 既存のセキュリティ対策の有効性を評価し、改善の余地を確認します。
・リスク評価と対応策の策定
 情報資産ごとのリスクを評価し、脅威や脆弱性に対する具体的な対策を策定します。
・方針と規則の制定
 情報セキュリティに関する方針や手順を策定し、全社的に適用します。
・パフォーマンスのモニタリング
 情報セキュリティの実施状況やリスクの変動を監視し、必要に応じて方針や対策を見直します。
・定期的な改善
 PDCAサイクル(計画→実行→評価→改善)を通じて、セキュリティ体制を継続的に向上させます。

?情報セキュリティガバナンスの重要性
 情報セキュリティガバナンスが重要である理由には以下の点が挙げられます。

・ビジネスの信頼性向上
 情報漏洩やサイバー攻撃から顧客情報や業務データを守ることにより、顧客や取引先からの信頼を向上させます。
・法的リスクの回避
 データ保護法や業界規制に準拠することで、法的な罰則や信用の低下を防ぎます。
・組織の継続的な発展
 セキュリティリスクから組織を守ることで、持続可能な成長や新たな事業展開の基盤を構築します。

?情報セキュリティガバナンスの国際的な基準
 国際的な基準としては、以下のようなフレームワークがあり、組織が効果的に情報セキュリティガバナンスを構築するための指針を提供しています。

・ISO/IEC 27001
 情報セキュリティ管理の国際規格であり、リスク管理やセキュリティ対策のフレームワークを提供します。
・NISTサイバーセキュリティフレームワーク
 アメリカ国立標準技術研究所(NIST)によって策定された、リスク管理のベストプラクティスを示すフレームワークです。
・COBIT
 情報技術(IT)の管理とガバナンスに関するフレームワークで、ITガバナンスと情報セキュリティの統合に役立ちます。
情報セキュリティガバナンスは、組織が情報資産の保護とリスク管理を行い、法令や規制を遵守するための重要な仕組みです。適切にガバナンスを行うことで、サイバー脅威に対しても柔軟に対応し、組織全体のリスクを低減することが可能です。



[情報セキュリティガバナンス誕生の経緯]
 情報セキュリティガバナンスは、 経済産業省 が中心となって取りまとめています。以下がChatGPTから聞いた経緯となります。

 情報セキュリティガバナンスは、技術の進化とともに大きく変遷してきました。以下にその主な変遷を時系列に沿って解説します。

?1990年代:情報セキュリティの黎明期
・背景
 インターネットの普及とともに、企業活動がデジタル化し、情報セキュリティの重要性が増してきました。この時代はまだコンピュータウイルスや不正アクセスへの防御が主な目的でした。
・特徴
 当初は、企業内でIT担当者が主にシステムの保護やウイルス対策を行う技術的な対応が中心でした。ガバナンスとしての考え方は十分には浸透しておらず、各部門や個々の担当者にセキュリティの責任が集中していました。

?2000年代:組織的なセキュリティ管理の導入
・背景
 インターネットを介したビジネスが一般化し、セキュリティ事故のリスクが増大しました。特に、情報漏洩やハッキング事件が増え、経営リスクとしての認識が高まりました。
・主な進展
 国際標準化機構(ISO)から、情報セキュリティ管理システムの国際規格 ISO/IEC 27001 が登場し、組織全体での情報セキュリティガバナンスが求められるようになりました。
・特徴
 情報セキュリティの取り組みが組織全体の戦略に組み込まれるようになり、経営陣の関与が重視されました。また、外部監査を通じた認証制度も浸透し、企業としての信頼性向上にもつながりました。

?2010年代:リスク管理と規制対応の強化
・背景
 スマートフォンやクラウドサービスが普及し、業務におけるIT依存が高まりました。その一方で、サイバー攻撃や内部不正が増加し、情報セキュリティが経営課題として認識されるようになりました。
・日本国内の動向
 2015年に、経済産業省が 「サイバーセキュリティ経営ガイドライン」 を策定し、経営者が情報セキュリティリスクに対して責任を持つべきであるという指針が示されました。
・特徴
 情報セキュリティガバナンスがリスク管理の一環として、コンプライアンスやサイバーリスク管理と強く結びつきました。国際的には、GDPR(一般データ保護規則)の施行により、データ保護の規制が強化され、プライバシー保護の観点からも情報セキュリティが重視されました。

?2020年代:ゼロトラストとデジタルトランスフォーメーション(DX)の時代
・背景
 COVID-19の影響でリモートワークが急速に普及し、従来の境界型防御(ネットワークの外周を守る手法)から「ゼロトラスト」モデルへの移行が進みました。加えて、企業がデジタルトランスフォーメーション(DX)を推進する中で、新たなリスクに対応する必要性が高まりました。
・特徴
 ゼロトラストモデルでは、「すべてのアクセスを検証する」考え方に基づき、内部のユーザーやデバイスも潜在的な脅威として扱い、信頼性の検証を行います。これにより、リモート環境やクラウド環境でも情報セキュリティを維持しやすくなりました。
・日本国内の動向: 経済産業省や総務省が中心となり、DXの推進に伴うセキュリティガ バナンスの重要性を強調する取り組みが行われています。特に、デジタル庁の設立後は、官民一体となったサイバーセキュリティ強化が図られています。

?今後の展望
・AI・IoTの普及に伴う課題
 AI技術の進化やIoT機器の増加により、より多くのデータがネットワーク上でやりとりされるようになりました。情報セキュリティガバナンスは、これら新しい技術のリスクを管理しつつ、データの保護とプライバシーの確保を担う必要があります。
・量子コンピュータによる暗号リスク
 将来的には量子コンピュータの普及により、従来の暗号技術が破られるリスクも予想されています。情報セキュリティガバナンスには、これに対応した新たな暗号技術や対策の導入が求められるでしょう。

■まとめ
 情報セキュリティガバナンスは、単なる技術的なセキュリティ対策ではなく、経営戦略やリスク管理、コンプライアンスと連携した包括的な体制を築くものとして進化しています。デジタル環境が拡大し続ける中で、経営陣のリーダーシップと持続的な改善が必要とされる領域です。


以上が情報セキュリティガバナンスの流れなのですが、その中で、情報セキュリティガバナンスを中心的に推進してきたといわれる経済産業省はどのような形で主導してきたのでしょうか?引き続きChatGPTに聞いてみました。

 経済産業省は、日本の情報セキュリティガバナンスの推進において重要な役割を果たしてきました。以下は、時代の流れに沿って経済産業省がどのように関わってきたかの詳細です。

?2000年代初頭:情報セキュリティの基盤づくり
・主な活動
 インターネットの普及に伴い、経済産業省は日本の情報セキュリティ基盤の整備を支援しました。具体的には、企業の情報資産を保護するための規格やガイドラインの整備が進められました。
・具体例
 経済産業省は、ISO/IEC 27001などの国際標準規格の普及を支援し、企業が情報セキュリティ管理システムを導入するための指針を提供しました。これにより、企業は情報管理の重要性を理解し、組織全体でセキュリティ体制を構築する基盤が整えられました。

?2015年:サイバーセキュリティ経営ガイドラインの策定
・背景
 2010年代に入り、サイバー攻撃が複雑化・高度化する一方で、情報漏洩リスクが経営リスクとして認識されるようになりました。これに対応し、経済産業省は企業の経営層向けにサイバーセキュリティの指針を示す必要性を感じました。
・「サイバーセキュリティ経営ガイドライン」の策定
 2015年に経済産業省は、サイバー攻撃に対応できる企業体制の整備を目的として、「サイバーセキュリティ経営ガイドライン」を策定しました。このガイドラインでは、経営者が直接情報セキュリティに関与し、リスク管理やインシデント対応の責任を担うべきことが明示されました。
・企業への影響
 このガイドラインの普及により、経営者は情報セキュリティの責任を理解し、経営戦略の一環としてセキュリティ強化が推進されるようになりました。

?2018年:サイバーセキュリティ経営ガイドライン改訂版の発表
・背景
 デジタルトランスフォーメーション(DX)の進展やクラウド利用の増加に伴い、セキュリティリスクの範囲が拡大し、対応がより複雑になってきました。これを受けて、経済産業省はガイドラインを改訂し、最新のリスク環境に適応できるようにしました。
・主な改訂内容
 改訂版では、「ゼロトラスト」など新しいセキュリティ概念を取り入れ、リモートワークやクラウドサービス利用時のセキュリティ対策についても明確にしました。また、企業のサプライチェーン全体のセキュリティリスクに対応するための指針も追加されました。
・企業への影響
 これにより、企業は自社内のみならず、外部パートナーやサプライチェーン全体のセキュリティリスクに対応することが求められるようになり、より広範なセキュリティガバナンス体制の構築が推進されました。
?2020年代:DX時代のセキュリティガバナンス推進
・背景
 デジタル庁の設立やDX推進が加速し、クラウド、IoT、AIなどの先端技術の活用が進む中で、情報セキュリティの確保がますます重要となっています。
・「DX推進におけるセキュリティガイドライン」の策定
 経済産業省はDX時代に適応したセキュリティガバナンス強化を目指し、2020年に新しいセキュリティガイドラインを発表しました。このガイドラインでは、経営者がDX推進に伴うリスクを管理し、情報セキュリティを経営戦略の一部として位置づけることが推奨されています。
・ゼロトラストモデルの推進
 経済産業省は、ゼロトラストモデルを取り入れた新しいガバナンス体制を推奨しており、内部・外部の境界を意識せずにアクセスを管理するアプローチを奨励しています。
企業への影響: これにより、企業はDXに伴うリスクを管理する体制を強化し、情報セキュリティを「攻めのDX戦略」として活用する動きが見られています。

?今後の展望:経済産業省のさらなる取り組み
・AI・量子コンピュータ時代への備え
 経済産業省は、今後も新しいテクノロジーに対応するためのセキュリティガイドラインや支援策の策定を予定しています。AIの活用によるリスクや、量子コンピュータの登場により従来の暗号が破られる可能性に備え、企業のセキュリティガバナンス強化を支援する予定です。
・デジタル庁と連携したサイバーセキュリティ強化
 経済産業省はデジタル庁と連携し、国内のサイバーセキュリティガバナンスをより強化するための方針を掲げており、官民一体でのガバナンス体制を整える取り組みを続けるでしょう。

■まとめ
 経済産業省は、情報セキュリティガバナンスの策定から普及までの中心的な役割を果たしてきました。時代の進展に応じて、企業の経営層への教育や最新技術対応のガイドライン提供を行い、セキュリティ対策を企業の経営戦略の一環として定着させています。これにより、経済産業省は日本の情報セキュリティの水準向上と信頼性向上に大きく寄与しています。


以上の流れを文書を中心に整理すると以下の通りになります。

2000年 年経済産業省情報セキュリティ対策基準
2001年 電子商取引のための情報セキュリティ指針
2002年 情報セキュリティ管理基準(METI管理基準)
2003年 企業の情報セキュリティ対策ガイドライン
2004年 情報セキュリティガイドライン
2005年 情報セキュリティのための基準
2010年 サイバーセキュリティ戦略」
2015年 サイバーセキュリティ経営ガイドライン(初版)
2018年 サイバーセキュリティ経営ガイドライン(改定版)
2020年 デジタルガバナンスコード
    セキュリティ・ガバナンスのマニュアル
    サイバーセキュリティ経営ガイドラインの改訂
2021年 サイバーセキュリティ基本法の改正
2022年 サイバーセキュリティ経営ガイドラインの改訂



[あとがき]
 調べる前までは、「情報セキュリティガバナンス」といった文書がズバリあると思っていたのですが、そうでないことが分かりました。
 情報セキュリティガバナンスとは、いろいろな活動により実現する企業活動と言えるでしょう?
 経済産業省はどのような形で主導してきた流れを見てふと思い浮かんだのが、 情報処理安全確保支援士 のWeb研修で サイバーセキュリティ経営ガイドライン が取り上げられてなかったこと・・・。前年まで取り上げられていたのに、今年は目立った形で取り上げられていませんでした。それは、既にその役目を終えてからとか思ってしまいましたが、そうではないようです。現在も生きており、情報セキュリティガバナンスの実現のために役立っているようです。
 今回の調査で1つ知識が増えました。

 では、セキュリティについては、また来週!!!

■サイバーセキュリティ経営ガイドラインとは?その内容を徹底解説(LRM株式会社)
https://www.lrm.jp/security_magazine/cybersecurity_guideline/

■サイバーセキュリティ経営ガイドラインver3.0(経済産業省)
https://www.meti.go.jp/policy/netsecurity/downloadfiles/guide_v3.0.pdf

2024年11月02日

ChatGPTによるデバック 〜プログラム開発〜


 こんにちは!
 ナビゲータのEVEです。
タイピング.jpg
トラックボール がうまく動作しません。以前からなのですが、むかついています。その場合は、仕方がないので、 マウス を出して急場をしのいでいます。
原因は多分電力不足 だと考えています。電源から得られる電力量には限りがあります。しかし、電気を供給する電源タップは3つあるのですが、すべての電気製品でうまっています。その中の1つに USBハブ がささっているのですが、そのUSBハブの口は12口あり、そのほとんどにUSB機器がささっていました。以上の状態では快適な開発ができないと思い、USBハブにささっていた USBハードディスク などを取り外したのですが、やはり、ときどき発症します。
 マウスを利用してもいいのですが、トラックボールになれた腕はマウスを使用すると悲鳴をあげます。マウスを使っていると指と肩が痛くなるのです。
 今後は、電気製品の整理を考えないといけないかもしれません。

[開発状況]
 今日から ChatGPT による デバック クラス製造 に入っています。午前中デバックで、午後が開発って感じで本日は作業をしました。以前からお話ししていますが、当プロジェクトでは、 ビックバンデバック を考えており今現在は、ChatGPTと目検によりデバックをしています。それは、言い訳なのですが、昨日提示したプログラムをChatGPTにデバックしたところ、いくつか問題がありましたので御報告します。

[返却値の型指定]
 以下は昨日提示したプログラムと修正後のプログラムになります。


■昨日提示したプログラム仕様
public function meuImplode(string $sepa): //区切り文字
false|string
{
}

■ChatGPTのデバック後の仕様
public function meuImplode(string $sepa): false|string
{
}



どうも引数直後のコロン(:)と引数の型指定の間にコメントを入れることができないようです。以前そんなことは言っていなかったような気がしますが、多分いろいろな人が利用することにより賢くなったのだと思います。仕方がないので、製造済みクラスの引数のコメントは削除し、返却値の型はメソッドシグネイチャと同じ行に書き換えました。意外と作業量多いです・・・。

[デストラクタ]
 PHPはJavaと違い デストラクタ を書くことができるのですが、その中でクラスで利用したメンバ変数を初期化しています。初期化の仕方で''を利用していたのですが、それでは、やはり、配列として利用した変数ではエラーになるらしく、配列は[]を使用する事をChatGPTから勧められました。ただ、私の意図していたことは インスタンス が消滅したときに、そのタイミングで明示的にメンバ変数も初期化することでした。まっ、明示的に指定しなくても、自動的に ガベージコレクション によりきれいにされるらしいのですが、システムを停止することなく動かし続けるとシステムの動作が遅くなることがあります。そのような状態から明示的にした方が良いかなと思いしたのですが、''では用はなさないようです。そこで、いろいろ調べたのですが、この目的にあう初期化方法として、各変数にnullを設定するのがいいようです。以下はChatGPTからの回答です。

 PHPにおけるデストラクタは、オブジェクトがガベージコレクションされるときやスコープを外れたときに自動的に呼び出される特別なメソッドです。デストラクタを定義することで、オブジェクトが破棄される際に特定の処理を実行することができます。nullをデストラクタ内で指定する場合、以下のような状況が考えられます。

?オブジェクトのクリーンアップ
 デストラクタは、オブジェクトがメモリから解放される前に、そのリソースを適切にクリーンアップするために使用されます。例えば、ファイルポインタを閉じたり、データベース接続を切断したりする場合にnullを使用することができます。

?リソースの解放
 デストラクタ内で変数をnullに設定することで、その変数が参照しているリソースを解放することができます。これは特に、大きなデータや外部リソースを扱う場合に有効です。

?自動的な呼び出し
 デストラクタは、オブジェクトがスコープを外れるか、nullが明示的に設定されたときに自動的に呼び出されます。これにより、リソース管理やオブジェクトのクリーンアップを自動化することができます。

?デストラクタ内でのnullの指定
 デストラクタ内でnullを指定することで、特定の変数の状態を明示的に示すことができますが、デストラクタが呼ばれる際には、オブジェクトのプロパティがnullに設定されていても、すでにオブジェクトが破棄されているため、外部からその値にアクセスすることはできません。デストラクタ内でのnullの使用は、主にリソース解放のために意味を持ちます。



[あとがき]
 まっ、以上のChatGPTからの回答を見て思うのは、確かにそうかもしれないということ・・・。それと、なんで''で初期化しようとしたのだろうか・・・。忙しさのあまり、あまり考えていなかったのが、あからさまに分かってしまいます。ただ、時間は有限だということは変わらないので、今後もガンガン開発するとして、少しでも疑問がでてきたらChatGPTに相談しようと思います。
 そんなことを考えながら、デストラクタもすべて書き換えました。
 ときどきプログラムソースを見ておかしい点があるかもしれませんが、まだ動かしていないプログラムだということをご理解いただき温かい目で見ていただければありがたいです・・・。

 では、また!!!

2024年11月01日

PSR対応 〜プログラム研究室〜


 お久しぶりです!
 ナビゲータのEVEです。
セキュリティ.jpg
中小企業診断士 の資料を整理するのに時間を取られ、ブログの更新まで手が回りませんでした。しかも、システム開発では、昨日終了予定だった PSR 対応にも影響が及び、つい先ほど完了し、これから、 クラス 開発に入れる状態です。ただ、ブログアップロード後は、同じく遅れている、 独習PHP の情報整理の方が先になると思います。
 そんなシステム開発ですが、本日時間が取られたPSR対応についてお話ししたいと思います。

[PSR-4]
 PSRについて以前御紹介しましたが、PSR-1からPSR-11まで分かれており、その中にPSR-4があるのですが、その対応に時間が取られました。PSRを要約すると以下の通りとなります。以下は、 ChatGPT の解説です。

 PSR-4は、PHPのオートローディング標準を定義するもので、クラスや名前空間の自動読み込みを容易にするための規則を提供します。これにより、クラスファイルの管理がシンプルになり、特に大規模なアプリケーションやライブラリの開発において、依存性管理やコードの可読性が向上します。

■PSR-4の主な要点
?名前空間とディレクトリ構造
 クラスは名前空間を使用して構造化され、各名前空間はディレクトリにマッピングされます。例えば、Acme\Book というクラスは、Acme/Book.php というパスに配置されます。

?ベースディレクトリ
 PSR-4では、オートローダーはベースディレクトリを指定する必要があります。このベースディレクトリは、名前空間のプレフィックスに関連付けられ、オートローダーはこのベースディレクトリを基準にしてクラスを探します。

?プレフィックス
 名前空間のプレフィックスは、特定のディレクトリにマッピングされる必要があります。たとえば、Acme\ という名前空間が src/ ディレクトリにマッピングされている場合、クラス Acme\Book は src/Book.php に位置します。

?ファイル名
 クラス名とファイル名は大文字と小文字を区別し、正確に一致させる必要があります。たとえば、Acme\Book というクラスは Book.php というファイルに保存されます。

?複数のベースディレクトリ
 一つのオートローダーで複数の名前空間プレフィックスを使用し、それぞれ異なるベースディレクトリを設定することも可能です。これにより、さまざまなライブラリやパッケージを容易に統合できます。


名前空間とは、使用することでクラスの名前の衝突を防ぎ、コードの組織化を図ることができます。 Apache のディレクトリ構造には依存せず、いろいろなプロジェクトがクラスを容易に管理できる仕組みです。では、このPSR-4の主題となるオートローダーについて解説をしましょう!

[オートローダーを使用したプログラム]
 説明する前にどんなモノなのか、ソースを見てみましょう!


<?php
/**
* Function Name : ?オートローダー
* Author : EVE
* Creation Date : 2024年11月1日
* Last Updated Date:
* Release Date :
* System Version :
* Overview : オートローダーの機能を提供する
*/

// オートローダー関数
function myAutoloader( $class ) {
// クラス名に基づいてファイルパスを決定
$file = $class . '.php';

//ファイルが存在するかどうか判定する
if (file_exists($file)) {
// ファイルを読み込む
require_once $file;
} else {
// ファイルが読み込めない場合
throw new Exception('File not found: ' . $file);
}
}

// ?オートローダーを登録
spl_autoload_register('myAutoloader');
?>


<?php
// オートローダーをインポート
?require_once 'myAutoloader.php';

/**
* Function Name : 配列クラス
* Author : EVE
* Creation Date : 2023年12月16日
* Last Updated Date:
* Release Date :
* System Version :
* Overview : 配列の基本的な操作を行う
*/

class ArrayClass ?extends ErrorMessageClass
{
public function __construct(array $arrayObject) // 編集対象配列
{







}

/**
* Function Name : 配列→文字列変換メソッド
* Parameters : sepa 種別
* Return Value
*┣ On Success : 編集後文字列
*┗ On Failure : false
* Author : EVE
* Creation Date : 2024年1月11日
* Last Updated Date:
* Release Date :
* Program Version :
* Overview : 配列から文字列に変換する
*/

public function meuImplode( stirng $sepa ):
false|string
{





}




/**
* Function Name : デストラクタ
* Parameters : なし
* Return Value
*┣ On Success : なし
*┗ On Failure : なし
* Author : EVE
* Creation Date : 2023年12月16日
* Last Updated Date:
* Release Date :
* Program Version :
* Overview : オブジェクトが消滅する場合の処理を定義する
*/

public function __destruct() :
void

{
//エラーメッセージクラスのデストラクタを実行する
?parent::__destruct(); //エラーデストラクタ





}
}
?>



以上を見ていただくと分かりますが、オートローダーと配列クラスの2つのプログラムが記述されています。

[?オートローダー]
 オートローダーは、上記のPSR-4の解説でご紹介したものです。各クラスの頭に定義し、 インスタンス 作成時に当該クラスを呼び出すために利用します。
 機能は、呼び出されたときに、使用するクラスを探し出し、探し出したクラス名は、$classの引数に設定されます。そして、設定された引数を使って、当該クラスをインポートします。
 なお、ここでは require_once を利用していますが、通常は Composer を使用するため、 require 、require_onceなどの記述は不要です。但し、Composerを利用しない場合は、ファイルが何度も読み込まれるリスクがあるため、require_onceを使用することが望ましいでしょう。
 EVEシステムでComposerを利用していませんが、その理由は、バージョンによって仕様が変わる可能性を考慮しているからです。過去の経験から、できるだけ外部ツールには依存しない方向で開発を行っています。

[?継承]
 このプログラムでは、エラーメッセージクラスを配列クラスが 継承 しています。エラーメッセージクラスが親で、配列クラスが子となります。
 よく継承の解説を読むと、親子の関係は「動物(親)>哺乳類(子)>犬(孫)」みたいな解説となっており、配列クラスの親がエラーメッセージクラスというのは違和感を感じます。そのため、最初エラーメッセージクラスの機能を各クラスに定義していたぐらいです。ただそれも製造していくうちにうざったくなり、外に出したのですが、その時でさえ、エラーメッセージクラスをインポートしようと考えていました。ただ、ChatGPTにこの問題を相談しているうちに、継承するという方法にたどりつきました。確かにできるのは分かるのですが、やはりピンときません。そういえば、 Java のプログラミングでエラーのクラスを継承していましたね・・・。今まで忘れていました。

[?デストラクタのオーバーロード]
 最後に親クラス、ここでは、エラーメッセージクラスのデストラクタを呼び出しています。 デストラクタ は、エラーメッセージクラス、配列クラス双方に定義されており、配列クラスをインスタンス化したときに、エラーメッセージクラスのデストラクタは、配列クラスのデストラクタに オーバーロード されます。そのため、ここではあえて、親クラス、エラーメッセージクラスのデストラクタを呼び出しています。

[あとがき]
 本日は、今日一番時間がかかった、オートローダーについてご紹介しました。この機能つい最近追加されたものかと思ったら、ver5.1の時には利用できたようです。ただ、沢山プログラムがある中、全てのプログラムを変更するのは難しそうです。ただ、オートローダーを作りさえすれば、修正箇所は、3箇所だけなので、知っていればできたかもしれません。やはり、新しいバージョンが出現するたびに、どんな機能ができたのか調べたほうがよさそうです。

 では、また!!!
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: