アフィリエイト広告を利用しています
検索
<< 2025年01月 >>
      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 31  
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2025年01月03日

ブログ引越しのお知らせ!

 A8のファンブログ終了に伴い、Bloggerへ引っ越しをします。今後ともよろしくお願いします。今後ともよろしくお願いします。

■ゼロからはじめるシステム開発
http://evezerodevelopment.blogspot.com/

■システムエンジニアが目指す中小企業診断士
https://smeconsultantcertification.blogspot.com/

■システムエンジニアから見た社会
https://societybyse.blogspot.com/

なお、A8ブログ終了は、2025年4月22日ですが、このブログは、それ以前に停止する可能性がございます。ご了承ください。

2024年12月30日

A8ブログサービス終了のお知らせ 〜ブログ引越しします〜 [Coffee Time]


 こんにちは!
 ナビゲータのEVEです。
ブログ.jpg
 ちょっと、生活のリズムを崩しています。
 昨日報告しましたが、A8のブログがなくなります。来年4月22日なので、まだ先なのですが、私を含めて、ブログを引っ越そうとしている人は大変です。そこで本日は、新ブログサイトの検討をします。

[新ブログサイトの検討]
 新サイトをどこにしようか以下の順番で検討をしました。


@Knowlegeシステム更新し、ブログシステムを移動する。
Apro2grammer.comへWordPressを導入する。
B新サイトを探す。


 @は期間的に間に合わないという判断になりました。まだ、明確にEVEシステム開発のスケジュールは決めていないのですが、まずは、アクセスユーザー分析をするためのシステムを製造後、ログインシステムの開発に入る予定です。
 ユーザーを分析するシステムですが、αシステムレベルで、2週間・・・。β版システムで1ヵ月ぐらいかかると想定しています。そこから製品レベルまで昇華しようとした場合、1ヵ月、最終的に2ヵ月ぐらいかかりそうだと見込んでいます。同時並行的にログインシステムを製造していくのですが、ログインシステムも最終的に、ユーザー分析システムの1.5倍ぐらいはかかりそうです。まっ、見込みなので、伸びる可能性もあり、それを考慮すると、@はかなり難しいと言わざるを得ないでしょう?
 Aなのですが、以前、WordPressを利用して、私が利用するのは難しいという判断になりました。それは、自分が意図しないタグが入るというのが原因です。そのため、WordPressの利用をやめ、従来通りKnowlegeシステムで情報を管理するという判断になりました。
 最後のBなのですが、1ついいサイトを見つけました。これから他にも探しますが、多分、そのサイトになりそうです。使っていないので、何とも言えないのですが、1管理画面からA8同様に複数のサイトを運用できるという点が気に入りました。あとは、思ったような編集ができるかどうかなのですが、これから調べます。まっ、思った編集ができなくても、最終的にKnowlegeシステムへ移行する予定なので、暫定的なサイトとしては問題ないでしょう?

[移行方法]
 以前、Amebaから、FC2に引っ越したことがありましたが、そのときは、ボタンをワンクリックするだけで、済んだのですが今回は、そうはいかないようです。1日、25日分のブログをパソコンへ移動する作業をすると仮定した場合、計算では3月初めぐらいには、移動できそうです。
 そこから、新サイトへの移植作業となりそうです。まず、広告を全部取り外し、広告を付ける場合は、すべて新しく作り直しになります。ブログは今まで通りできるだけ、毎日更新しますが、旧ブログの移植作業は気分が向いたらということになりそうです。

[あとがき]
 収益はほぼない状態でしたが、アクセスユニークユーザーは、1日800人ぐらいになり、A8のインターネット・ソフトウェア というカテゴリで2位、総合でも30位ぐらいまでいったようです。それが毎日続いていたという分けではないのですが、ちょっと、このサイトを失うのは残念です。
 新ブログサイトは、2025年1月1日に開設し、A8ブログは、2025年4月22日まで放置し、A8側の削除を待ちたいと思います。
 来年1月1日からは、EVEシステムフレームワークの製造にはいり、ブログは、その製造状況を書く予定としています。もし、よろしければ、引き続きよろしく御願いします。

 では、また!!!

2024年12月29日

CSF 〜組織プロファイル〜 [セキュリティ研究室]


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 本日は、日曜日ということで、セキュリティの日です。
 先週までは、CSFについて、調査し、CSFには、CSFコアCSF組織プロファイルCSFティアという3つの要素により構成されていることをお話しし、そのうち先週は、CSFコアについて詳細に調べました。
 本日は、CSF組織プロファイルについて調査したいと思います。

[CSF組織プロファイル]
 では、早速、CSF組織プロファイルについてChatGPTに解説をしてもらいましょう。

■CSF 組織プロファイルとは
 組織プロファイル(Organizational Profile)は、NIST CSFを導入する際に、組織特有の特徴や状況を詳細に分析・記述するプロセスです。CSFの6つの機能(Identify, Protect, Detect, Respond, Recover, Govern)をカスタマイズして適用するための基盤となります。 
 組織プロファイルを通じて、以下が可能になります:

・組織の現在地(現状のセキュリティ体制とリスク)を明確化
・CSFの適用範囲を特定
・リスクマネジメント活動の方向性を策定

■CSF 組織プロファイルの構成要素
 CSF 2.0における組織プロファイルでは、特に「Govern」の新機能を反映した以下の要素が重要です。

❶ビジネス環境(Business Environment)
・組織の目的、目標、戦略的方向性
・提供する製品やサービス、ターゲット顧客
・競争環境や市場動向
・ビジネスプロセスとそれに関連するサイバーリスク

❷リスクガバナンス(Governance and Risk Management)
・経営層やガバナンス構造(CEO, CISO, セキュリティ委員会など)
・サイバーセキュリティに関する意思決定プロセス
・組織文化とセキュリティ意識
・法的・規制的要求事項(例: GDPR, NIS指令)

❸システムと資産の概要(Systems and Assets Overview)
・組織が管理する重要な情報資産やITインフラ
・クラウド、オンプレミス、ハイブリッド環境の利用状況
・サードパーティやサプライチェーンの依存関係

❹リスク管理のアプローチ(Risk Management Approach)
・リスク特定、評価、軽減、監視の方法
・リスク許容度の定義
・主要なリスク要因(例: サイバー攻撃、内部不正、自然災害)

❺サイバーセキュリティ成熟度(Cybersecurity Maturity)
・現在のセキュリティ対策の状態(技術、プロセス、組織構造)
・過去のインシデント対応の記録と教訓
・ギャップ分析結果と優先すべき改善項目

❻法令遵守と業界基準(Compliance and Standards)
・準拠すべき法規制(例: GDPR、HIPAA)
・業界標準(例: ISO/IEC 27001、SOC 2)

❼将来のセキュリティ目標(Future Goals and Objectives)
・組織が目指すセキュリティのビジョン
・必要なリソース(人員、予算、ツール)とその計画

■組織プロファイルの重要性
❶戦略的セキュリティ計画の基盤
 組織プロファイルは、リスクアセスメントやセキュリティ戦略立案の基礎を形成します。

❷トップダウンアプローチの促進
 「Govern」機能により、経営層を巻き込みながら組織全体でセキュリティを推進可能。

❸リスクベースの意思決定
 プロファイルを通じて、最も重要なリスクに集中し、リソースを効率的に配分します。

❹規制遵守と監査対応
 プロファイルに法的・規制的要求事項を含めることで、監査やコンプライアンス要件への対応を支援します。

■CSF 組織プロファイル作成の手順
★ステップ 1: 準備と情報収集
・組織の関係者(経営層、IT部門、セキュリティチーム)と連携。
・業界標準、規制、ビジネス目標に関する情報を収集。

★ステップ 2: 組織プロファイルの記述
 以下のように情報をドキュメント化します:

・組織のビジネス環境
・リスクガバナンス構造
・現在のセキュリティ対策の状態
・規制遵守状況と目標

★ステップ 3: レビューと承認
 プロファイルを経営層やセキュリティリーダーに提示し、フィードバックを得て承認を受けます。

★ステップ 4: 定期的な更新
 組織や技術環境が変化した場合にプロファイルを更新します(例: 新規事業の開始、技術スタックの変更)。

■組織プロファイルの活用例
❶リスクアセスメント
 プロファイルに基づいて、最も重要な資産や脅威を特定します。

❷セキュリティ対策の優先順位付け
 現在のギャップと目標を比較し、最も効果的な投資分野を決定。

❸セキュリティプログラムの設計
 組織プロファイルを元に、CSFの6つの機能を実行する計画を作成。

CSF 2.0の組織プロファイルは、従来のCSF 1.1よりも「統治(Govern)」の視点が強化され、組織の全体的なセキュリティ態勢を戦略的に改善するための重要なツールとなっています。このプロファイルを活用して、より効果的で効率的なセキュリティ対策を実現してください。



[あとがき]
 最後に書かれている通り、CSF1.1と比較するとCSF2.0は統治の視点が強化され、経営者の責任を明確にしたという点が特筆すべき点です。
 なお、今回も、ChatGPTに本件を聞いたところ最初に、CSF1.1に関する解説がありました。理由を聞いたところ、CSF2.0は昨年リリースされたもので、今現在もCSF1.1を適応しているところが多く、そのため、まず最初にCSF1.1について解説をしたという弁明がありました。
 その弁明を聞いて思うのは、社会とは常に変化するものであり、その変化する社会に合わせてこのようなフレームワークが変更されていきます。しかも、このフレームワークに書かれている内容は、策定している時の社会に対応して策定したもので、リリース当時には既に陳腐化しているかもしれません。
 そのような状況を考慮すると、もし、CSF1.1で対応している組織があるとしたら、今すぐにも変更した方がいいかもしれません。
 その一方で、外部に影響されるのではなく、自分たちの考えをしっかりともち、3、5、10年先を見据えて組織を作っていれば、このようなバージョンが上がることに振り回されないのかもしれません。
 何が正解なのか、明確な解答をすることはできませんが、言えることは、自組織を十二分に理解し、理解したうえで、自分たちに最適なセキュリティを適応していくということが必要なのだと思います。
 あなたは、どう思いますか?

 では、また!

2024年12月24日

ホモドーロ・テクニックで使用するタイマーをChatGPTとともに作る [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。
JavaScript.png
 昨日、ChatGPTでまっさらな状態からプログラムを作る話をしましたが、その話を具体的にしましょう。

[ストーリーを考える]
 まず、プログラムを作るためには、ストーリを考えなければならないようです。言葉で、説明するより、その流れを列記した方がChatGPTは理解しやすく、プログラムを作りやすいようです。
 先日は、ホモロード・テクニックで利用するための、タイマーを作ったのですが、そのタイマーを作るためには、ホモロード・テクニックというモノを知らないといけません。では、早速、ホモドーロテクニックについて、ChatGPTに解説をしてもらいましょう!
 
 ポモドーロ・テクニック(Pomodoro Technique)は、時間管理の手法の一つで、特に集中力を高めるために設計されたものです。このテクニックは、イタリアのフランチェスコ・シリロ(Francesco Cirillo)によって1980年代に提唱されました。「ポモドーロ」はイタリア語で「トマト」を意味し、シリロがトマト型のキッチンタイマーを使って作業時間を管理したことに由来しています。

■基本的な仕組み
 ポモドーロ・テクニックの基本的な流れは以下の通りです。

❶作業時間の設定
 25分間、ひとつの作業に集中します。この25分を「ポモドーロ」と呼びます。

❷集中して作業
 25分間は中断せず、ひとつのタスクに集中します。この間、電話やSNSなどの distractions を避けることが重要です。

❸休憩時間
 25分が経過したら、5分間の休憩を取ります。この休憩は、軽いストレッチやリフレッシュをするのに良い時間です。

❹サイクルの繰り返し
 上記の作業時間(ポモドーロ)と休憩を繰り返します。通常、4回ポモドーロを終えた後は、長めの休憩(15〜30分)を取ります。

■ポモドーロ・テクニックの利点
・集中力の向上
 25分間という短い時間に集中することで、ダラダラ作業を防ぎ、効率的に仕事を進められます。

・疲労感の軽減
 定期的に休憩を取ることで、長時間の作業でも疲れにくく、集中力を持続できます。

・時間の可視化
 作業と休憩の時間がタイマーで管理されるため、自分の時間の使い方を意識的に把握できるようになります。

・達成感の促進
 作業が25分単位で区切られるため、小さな目標を達成しやすく、モチベーションが維持されます。

■注意点
 ポモドーロ・テクニックは一部の人々には非常に有効ですが、すべての状況に適しているわけではありません。長時間集中を要するクリエイティブな仕事や、深く思考を必要とするタスクには不向きな場合もあります。適切に使い分けることが大切です。
 ポモドーロ・テクニックは、シンプルで実行しやすいため、日々の作業に取り入れると効果的です。


以上です。なんとなく分かりましたか?25分集中して作業をして、5分休憩するタイマーをブラウザに表示するプログラムを製造します。
 何サイクルやるか時間や気分の問題があるので、今回は、5分休憩した後に、「ホモドーロを続けますか?」という質問を、システムからするように、window.confirmを使って実現しています。そして、途中でやめたい場合のresetボタンは必須でしょう!
 以上の流れを列記すると以下の通りになります。

1)スタートボタンをクリックする。
2)画面に25分から始まるタイマーを実行する
3)タイマーが00:00になったら、音楽を鳴動する。音声ファイルはJavaScriptと同じディレクトリに、sound.mp3というファイル名で配置する。
4)音楽が鳴動する時間帯は、5分間で、その間音声ファイルを繰り返しリピートする。
5)音声ファイルの鳴動時間終了後、window.confirmを利用して、利用者に次のサイクルを実行するかどうか確認する。
6)[はい]が押下された場合、2)〜5)まで繰り返す。
7)[いいえ]が押下された場合、すべての処理を終了する。


こんな感じで流れを作り、以上の流れをJavaScriptでプログラミングして!っとChatGPTにお願いすると、それっぽいものを作ってくれます。ただ、完璧じゃないんですよね・・・。どこか抜けていて、これ足りないから追加してっていうと、追加してくれるんだけれど、他の処理が抜けたりして・・・。

[クライアント処理は難しい]
 なんとなく自分がほしいプログラムをChatGPTに作ってもらった後、理想形に近づけようと何回かお願いしたのですが、現時点のChatGPTには無理だということを悟り、自力でプログラミングすることにしました。
 断念した後は、ChatGPTには、タイマーに関する断片的な質問に終始しています。
 現時点は、ver1.0ということで、想定通りの動きをしています。ただ、完成には躓きがありました。それは、コンピュータに負荷を与えると、window.confirmにより表示されるはずの、メッセージボックスが表示されません。最初理由が分からず、バグだと思い、Chromeで試したり、Internet Edgeで試したりといろいろしてそんな結論になりました。
 昔ほどひどくはないにしても、ブラウザにより動きが違うなど、クライアントのプログラムは毎回その難しさを痛感しています。だから、自分で製造するプログラムは、クライアント側は入力データチェックなど最低限の製造ですますのですが、今後はクライアントプログラムも作っていきたいと考えています。

[あとがき]
 まだ、他にもいろいろ機能を追加し、来年αサイトを製造するのと同時ぐらいに、pro2grammer.comにアップロードする予定です。もし、よろしければご利用ください。
 ログインシステム製造後は、個人ごとに学習時間を管理できるようにしようかな?っとか考えています。
 まっ、他に先に作らなければならないシステムがあるので、どうなるか分かりませんが・・・。

 では、また!!!

2024年12月23日

モノからコトへ 〜仕事を受注する〜 [システム開発研究室]


 こんにちは!
 ナビゲータのEVEです。
ビジネス.jpg
 諸事情により、資金を得るため仕事を受注しようと、複数のサイトに登録しました。そのことについては、以前お話しした通りなのですが、また仕事の依頼がきました。
 仕事のボリュームは定かではないのですが、仕事の内容は今まで経験し、費用的にも適切かもしれないと思い応募しました。
 ただ、その応募までに時間がかかりました。
 理由は、サラリーマン時代の暗い記憶があったから・・・。

[何を売っているか分からない店は繁盛しない]
 カーネーションというNHK朝ドラ知っています?現在、BS14K1で朝7:15分から放送している、NHKの朝ドラです。初回放送は、2012年なのですが、その番組をまた見ています。実は、初回の放送は見ていなかったのですが・・・。
 昔と違い、朝ドラをいろいろな放送局で見ることができます。私は、BS12で2021年にみました。まだ3年もたっていないのですが、面白く、ついつい見てしまいます。その番組の中で、主人公の糸子がぼそりとつぶやいた一言が気になります。

「何を売っているか分からない店は繁盛しない」


糸子の実家は、呉服屋だったのですが、明治維新を経て、日本の食生活が西洋化される中で、すたれていきます。そのすたれていく中でいろいろな商売に手を出していくシーンでの一言です。
 この一言、企業経営理論運営管理を勉強しながら、確かにそうだなって感じています。実は、そんなことを、自分は、サラリーマン時代にやっていました。まっ、一つの会社に居続けるならいいのですが、転職には不利です。ただ、転職先でも同じようなことをしていました。だから、システムを最初から最後まででき、かつ運用までできるというスキルはあるのですが、転職の経歴としては、難しいようです。

[ドメインの設定をする]
 以上の反省をもとに、現在は、ドメインを設定しています。
 ビジネスの種類として、1つだけでは、なかなかビジネス規模という意味では難しいと思われるので、3つ作りました。
 1つはセキュリティに関するコンサルティング。2つ目は、プログラミング。3つ目は、動画製造・・・。3つめの動画製造は、1、2つ目とちょっと、領域が違うと思われるかもしれませんが、今回仕事を受注する上で、自分のビジネスを紹介するPR動画を作りそれを公開しているというところで、理解を得やすいと思い、自分のビジネスとしようとしています。
 ただ、今回応募した仕事はそのドメインの範疇外です・・・。だから、今回フリーランスとして仕事をするにあたり、反省したことと違うことをしようとしていることで、悩みました。

[モノからコトへ]
 RIZAPっていう会社知っています?スポーツジムを始めたと思ったら、フランス料理、ゴルフなど多岐なビジネスに手を出しています。ただ、この会社いろいろなビジネスを手広くやっているのですが、ひとつのキーワードでつながっています。それは、 

「結果をコミットする!」


です。この一言で、全く関係のない、RIZAPの複数のビジネスが1つにつながります。1人で仕事をしていて、現時点は難しいかもしれませんが、お金には換算できないものを得るために、RIZAPのようなビジネスを目指せたらと応募しながら思いました。

[あとがき]
 人それぞれだと思うのですが、私の場合、悩んでいるときって、何も手がつきません。悶々と悩んでいたのですが、その間1つ成果がありました。それは、ホモドーロ対応タイマーの開発・・・。
 X(旧ツイッター)でつぶやきましたが、ホモドーロという勉強法を、YouTubeで知り、もしかしたら、集中できるかもしれないと思い、始めたのですが、意外といけそうです。そこで、それようのタイマーを作りました。
 開発言語は、JavaScriptなのですが、タイマー機能を使ったプログラムって、普通のプログラムとちょっと違います。そこで、とっかかりの部分をChatGPTに教えてもらって作りました。本当は、全部作らせようとしたのですが、現在のバージョンでは、難しいようです。ただ、以前のように、いろいろな情報をググってかき集めるよりはかなり楽になりました。
 やっと、心理的にも落ち着き、仕事の方向性も決まったので、システム開発、勉強にと頑張りたいと思います。

 では、また!!!

2024年12月22日

CSF 〜CSFコア〜 [セキュリティ研究室]


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 本日は、日曜日ということで、セキュリティの日です。
 先週は、CSFについて、調べているうちに、OMB文書FIPS、そしてSPシリーズに目が留まり、同文書の概要について調べ報告をしました。
 今週は、本題のCSFについて調べ報告したいと思います。
 現在、CSF文書について調査中なのですが、当初の想像と違いました。それは、参考書的な位置づけで記述されているということです。IPAから提供されている資料には中核的な位置づけで書かれているような気がしたのですが・・・・?
 まっ、読み手によりその受け取り方はまちまちだと思うので、以上は私の文章の捉え方だと思ってください。

[CSFの概要]
 IPAから提供されている資料には、CSFコアの5つの機能に関する部分を中心に書かれていましたが、実は3つの要素により構成されています。
 以下は、NISTの翻訳本に書かれている内容を、ChatGPTに簡潔にまとめてもらったものです。

@CSFコア(Core)
 セキュリティ活動を整理し、共通の言語を提供するものです。
 5つの機能と23のカテゴリ、さらに細分化された108のサブカテゴリで構成されています。

・5つの機能:識別 (Identify)、防御 (Protect)、検知 (Detect)、対応 (Respond)、復旧 (Recover)。
・カテゴリ:具体的なセキュリティ目標や管理分野(例: アクセスマネジメント、データ保護など)。
・サブカテゴリ:具体的な実施事項(例: リスクを特定し文書化する)。

A CSF組織プロファイル(Profile)
・各組織が現在のセキュリティ状況(Current Profile)と目標状況(Target Profile)を定義し、差異を明らかにするためのツール。
・プロファイルを活用することで、組織固有の目標に合ったセキュリティ対策をカスタマイズできます。

B CSFティア(Tiers)
 セキュリティリスク管理の成熟度を評価する基準。4段階のティア(Tier 1〜4)で構成されます。
・Tier 1: 部分的(Partial)
・Tier 2: リスク重視(Risk Informed)
・Tier 3: 確立された(Repeatable)
・Tier 4: 適応的(Adaptive)
 ティアは必須基準ではなく、各組織が自らの状況を理解し改善するための指針です。



[CSFコアの5つの構成要素は実は6つ]
 以前のブログには、CSFの5つの構成要素として、以下の内容で記述しています。IPAから提供された資料と若干違っているのですが、単語の意味の捉え方により多少は違うと思われるので、そのまま利用させていただいています。

1)Identify (特定):
 資産、リスク、脆弱性、法的義務などを特定し、組織のセキュリティ基盤を構築。
例: 資産管理、リスク管理戦略。

2)Protect (保護):
 システムやデータを保護するための対策を実装。
例: アクセス制御、データセキュリティ、トレーニング。

3)Detect (検知):
 サイバーセキュリティイベントを迅速に検知。
例: 異常検知、継続的監視。

4)Respond (対応):
 サイバーセキュリティイベントに対する適切な対応を計画・実行。
例: インシデント対応計画、コミュニケーション。

5)Recover (復旧):
インシデント後の回復力を強化し、通常業務に戻る。
例: 復旧計画、改善活動。


IPAの資料では、以上の項目を以下の内容で記述しています。

1)Identify (特定): → 識別
2)Protect (保護): → 防御
3)Detect (検知):  → 検知
4)Respond (対応): → 対応
5)Recover (復旧): → 復旧


 解説もほぼ同じですし、言葉がちょっと違うといった所でしょうか?

[CSF2.0]
 以上の5つの機能と言われていたのは、2018年4月16日にリリースされたCSF1.1の内容です。現在は、2024年2月26日に更新された、CSF2.0が使用されています。その内容は以下の通りです。

❶統治(Govern)
・目的: サイバーセキュリティリスク管理の全体的な方針と方向性を確立し、それを継続的に維持する。
・概要:
┣経営層やリーダーシップが、リスク管理の責任を担い、戦略やポリシーを明確にします。
┣組織全体でリスクに対する共通の理解を形成し、リソースを適切に割り当てる。
┗サイバーセキュリティ文化の醸成を支援し、規制遵守と業務目標を両立させる。

❷識別(Identify)
・目的: サイバーセキュリティリスクを把握し、管理するための基盤を構築する。
・概要:
┣組織が持つ資産、データ、システム、および関連するリスクを特定。
┣ビジネス目標とリスク管理の連携を図る。
┗サプライチェーンや外部依存関係のリスクも識別。

❸防御(Protect)
・目的: 脅威を防ぎ、システムやデータの安全性を維持する。
・概要:
┣不正アクセスや攻撃に対する予防的な制御を確立。
┗データ暗号化、アクセス制御、教育・訓練を通じて、リスク軽減策を実施。

❹検知(Detect)
・目的: サイバーセキュリティイベントや脅威を迅速に特定する。
・概要:
┣不審な活動やインシデントを監視する仕組みを整備。
┣通知・アラートのプロセスを構築し、早期発見を目指す。
┗継続的な監視とログ分析の導入。

❺対応(Respond)
・目的: サイバーセキュリティインシデントの影響を最小限に抑える。
・概要:
┣インシデント発生時に適切な対応手順を実施。
┣影響の評価、被害の封じ込め、ステークホルダーとの情報共有を行う。
┗対応プロセスを見直し、改善を図る。

❻復旧(Recover)
・目的: サイバーセキュリティインシデントから迅速に回復し、業務を継続する。
・概要:
┣インシデントの影響を最小限にし、業務プロセスを再構築。
┣回復計画の実行、学習、プロセス改善を行う。
┗経営層への報告とステークホルダーへの信頼回復。


CSF1.1までは、セキュリティ対策が中心に書かれていましたが、2.0になると、対策を実現するための体制などにも触れている点が注目されます。
 加えて、サイバーセキュリティの責任の所在が経営者にあることが明確にされたという点は、注目すべきでしょう!
 日本では、サイバーセキュリティ経営ガイドライン重要3項目の一番最初に出てきています。

[CSFの適応]
 CSFの適応なのですが、業務ごとの適応ではなく、インシデント毎になります。例えば、ランサムウェア対策といった内容です。
 従って、予め、どんなインシデントがあるのか想定し、想定したインシデントごとにCSFコアを策定していきます。その策定内容は、BCP(Business Continuity Plan)と似ています。

[あとがき]
 IPAから提供されている資料には、CSFを土台にCPSFを作ったという記述があったのですが、CPSFの方がより具体的な内容が書かれているように感じました。但し、先週ご紹介した、FIPS、SPシリーズなどを補足資料として使用することを考えると、IPAから提供されている文書の通りなのかもしれません。
 来週も、CSFに関する調査を進め、可能ならば、FIPS、SPシリーズまで踏み込んで調べたいと思います。
 では、また!!!

2024年12月18日

エラー処理について考える 〜開発環境も決定しました〜 [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 今日はまったりと過ごしてしまいました。
 っということで、今から活動するという感じなのですが、まったりした時間の中で、いろいろ決めたことがありますので、御報告します。

[エラー処理]
 エラー処理で、try〜catchの利用する場面ですが、システム的なエラーで発生するときに使用するというアバウトな感じで導入します。
 昨日あれから、プログラムを見直してみたのですが、try〜catchを使用するタイミングとそうで無いプログラムの境目を付けることができませんでした。まっ、検討前とあまり変わらないって言う感じなのですが・・・。ただ、try〜catchを利用する上で、どのExceptionを利用するのか決めました。

★Exception
用途
 一般的な例外のベースクラスとして使用。
具体的な使用例
 特定の目的で独自例外クラスを定義せず、汎用的なエラーを表す場合。

★RuntimeException
用途
 実行時のロジックエラーを表す。
具体的な使用例
 実行中の状態が不正な場合(例: 設定ファイルが読み込まれていない場合)。

★InvalidArgumentException
用途
 メソッドや関数の引数が期待される形式や値ではない場合に使用。
具体的な使用例
 引数が null であってはならない場合、または数値の範囲外の値が渡された場合。

★OutOfRangeException
用途
 値が期待される範囲外である場合に使用。
具体的な使用例
 配列のインデックスやパラメータが想定の範囲外である場合。

★OverflowException
用途
 演算によって許容範囲を超えた場合に使用。
具体的な使用例
 計算結果がシステムやアルゴリズムの上限を超えた場合(例: 値が INT_MAX を超えた)。

★UnderflowException
用途
 演算が許容範囲の下限を超えた場合に使用。
具体的な使用例
 スタックから値を取得しようとしたが空だった場合。

★BadMethodCallException
用途
 不正または存在しないメソッドを呼び出した場合に使用。
具体的な使用例
 クラスのメソッドが存在しない場合(例: 直接呼び出せないマジックメソッドを使用しようとした)。

★UnexpectedValueException
用途
 値が期待に反して不正である場合に使用。
具体的な使用例
 関数の戻り値が想定と異なる場合(例: ファイルの読み込みで数値を期待していたが文字列が返された)。
★TypeError
用途
 データ型が期待と異なる場合に使用。
具体的な使用例
 引数や戻り値の型が指定された型と一致しない場合(例: int 型を期待したが string が渡された)。

★DivisionByZeroError
用途
 数値をゼロで割った場合に使用。
具体的な使用例
 除算演算でゼロ除算が発生した場合。

★Error
用途
 プログラムの致命的なエラーを表す。
具体的な使用例
 メモリ不足やシステムエラーなど、回復不能なエラー。


現在は、とりあえず、Exceptionエラーで済ませていますが、今後は、以上のExceptionを使い分けて製造していきたいと思います。多分ですが、それ以外は使わないと思っています。

[Exceptionを使い分ける理由]
 実は、今までは、使い分けなくても困らなかったのですが、PHP開発プロジェクトでは、なぜ使い分けているのでしょうか?理由についてChatGPTに聞いてみました。

❶エラーの特定と管理が容易になる
 例外の種類ごとに意味が明確であるため、エラーの原因を特定しやすくなります。
たとえば:
 InvalidArgumentException をキャッチした場合、「引数が無効」という明確な意味があり、エラーの原因を迅速に理解できます。
 DivisionByZeroError をキャッチした場合、「ゼロ除算が原因」という情報がすぐにわかります。
 これにより、デバッグやログ解析が効率的になります。

❷エラーハンドリングを柔軟にできる
 特定の例外だけをキャッチして処理を分岐させることが可能です。

❸コードの意図を明確にする
 適切な例外クラスを使用することで、コードの意図を明確に伝えることができます。
たとえば、LogicException 系の例外はプログラムのロジックミスを示し、開発者がコードを修正する必要があることを示唆します。一方、RuntimeException 系の例外は、実行時に予期せぬ状態が発生したことを示します。
 こうした区別により、コードを読む他の開発者もエラーの背景を理解しやすくなります。

❹フレームワークやライブラリとの互換性
 多くのPHPフレームワークやライブラリでは、例外の種類ごとに異なるエラーハンドリングを実装していることがあります。適切な例外を使用することで、これらのフレームワークやライブラリとの連携がスムーズになります。

■まとめ
 例外の種類を適切に使い分けることで:

・エラーの特定とデバッグが簡単になる
・エラーハンドリングが柔軟になる
・コードの意図を明確に伝えられる
・フレームワークやライブラリとの互換性が向上する

これらのメリットにより、コードの品質やメンテナンス性が向上します。


これを読むと使い分けるしかないって感じですね(笑)。

[Throwableインターフェース]
 昨日のブログで、try〜catchがPHP5.0で実装され、ThrowableインターフェースがPHP7.0から実装されたっていう記事なんか違和感感じませんでした?Throwableインターフェースって、Exceptionより上位にあるのに、Exceptionは、try〜catchが利用できた、PHP5.0から利用できたということを意味するからです。子が先に生まれ、親が後から生まれたって感じになっているのです。
 理由をChatGPTに確認したところ、PHPの開発プロジェクトでは、開発を進めていく過程で、Exceptionだけでは、機能不足だと感じたらしいです。Errorもできれば、利用できるようにしたい・・・。っということで、Exceptionの上位に、Throwableインターフェースを持ってきて、ExceptionとErrorを利用できるようにしたというのが理由らしいです。そういえば、PHPって、ver6ありませんもね・・・。この時期いろいろな検討が行われる中で、そう決まったのだと思います。

[あとがき]
 なんてことを考えながら、開発環境も決めました。ECLIPSEです。実は、ECLIPSEより、Visual Studioの方が利用を開始したのは先なのですが、開発体制と言ったらいいでしょうか?自分の現在の開発体制と同じような境遇を感じるので、ECLIPSEを利用することにしました。私と一緒にされても困ると思いますが、共感したってことです。
 使用方法は、秀丸であらあら製造したものを、ChatGPTでデバックし、ECLIPSEの環境に移して、移したモノを再デバックするというイメージになると思います。
 ECLIPSEを使用してみたのですが、さくさく動くって感じじゃないですね?サクサクと作るなら、やはり秀丸は最高です!
 まだ、PHPでECLIPSEを開発したことがないので、現在自分の頭の中でイメージした通りになるかどうか分かりませんが、これから、ECLIPSEの使い方を勉強しながら、動画を作り、自分のモノにしていきたいと思っています。

 では、また!

2024年12月17日

エラー処理の検討 〜Throwableインターフェース〜 [プログラミング研究室]


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 昨日は、継承について考えましたが、本日は、その継承問題のきっかけになった、エラーメッセージ処理というか、エラー処理について考えてみたいと思います。

[try〜catch]
 PHPの話なのですが、オブジェクト指向言語として製造しようとしたとき、try〜catchを利用しようかどうか悩みます。以前は、直前のエラーをerrnoで取得し、エラーとしていたのですが、それが、PHP5.0から、try〜catchが実装されたため、オブジェクト指向言語で製造する場合は、try〜catchを利用することが多くなりました。ただ、今現在も、errnoは利用でき、オブジェクト指向言語でなくても、try〜catchを利用することは可能です。
 っということで、エラーが発生した場合のロジックは、プログラムをどう作るのかということになります。
 っで、今自分のプログラムを見直してみると、規則性がなく、try〜catchを利用する場合と利用しない場合があります。まっ、さすがに、errnoは利用はしていませんが・・・。但し、errnoは廃止される予定はございません。という現状で、エラーメッセージの仕様を考えるにあたり、頭を悩ませています。
 ただ、もうすでに、クラスの80%製造済みなんですけれど・・・。今更悩むなって感じですか?

[Throwableインターフェース]
 まずどうするのかと考える前に、PHP5.0に実装されたThrowableインターフェースとはどんなインターフェースなのか調べてみました。
 以下が、Throwableインターフェースの構造です。

Throwable
┣Exception
┃┣LogicException
┃┃┣BadFunctionCallException
┃┃┃┗BadMethodCallException
┃┃┣DomainException
┃┃┣InvalidArgumentException
┃┃┣LengthException
┃┃┗OutOfRangeException
┃┣RuntimeException
┃┃┣OutOfBoundsException
┃┃┣OverflowException
┃┃┣UnderflowException
┃┃┗UnexpectedValueException
┗Error
 ┣ArithmeticError
 ┃┗DivisionByZeroError
 ┣AssertionError
 ┣ParseError
 ┣TypeError
 ┗ValueError


以上のクラス群について、ChatGPTに解説をしてもらいましょう!
 なお、PHP 7以降に導入された Throwable は、例外 (Exception) とエラー (Error) の共通の親インターフェース だそうです。抽象クラスだと思っていました(苦笑)

★Exception
用途
 一般的な例外のベースクラスとして使用。
具体的な使用例
 特定の目的で独自例外クラスを定義せず、汎用的なエラーを表す場合。
★RuntimeException
用途
 実行時のロジックエラーを表す。
具体的な使用例
 実行中の状態が不正な場合(例: 設定ファイルが読み込まれていない場合)。
★InvalidArgumentException
用途
 メソッドや関数の引数が期待される形式や値ではない場合に使用。
具体的な使用例
 引数が null であってはならない場合、または数値の範囲外の値が渡された場合。
★DomainException
用途
 値が定義されたドメイン(範囲)に適合しない場合に使用。
具体的な使用例
 引数が設定された業務上のルールに合わない場合(例: 日付が未来でなければならない)。
★LogicException
用途
 プログラムのロジックに誤りがある場合に使用。
具体的な使用例
 クラスの使用方法が設計上間違っている場合(例: 未初期化の状態でメソッドが呼び出された)。
★OutOfRangeException
用途
 値が期待される範囲外である場合に使用。
具体的な使用例
 配列のインデックスやパラメータが想定の範囲外である場合。
★OverflowException
用途
 演算によって許容範囲を超えた場合に使用。
具体的な使用例
 計算結果がシステムやアルゴリズムの上限を超えた場合(例: 値が INT_MAX を超えた)。
★UnderflowException
用途
 演算が許容範囲の下限を超えた場合に使用。
具体的な使用例
 スタックから値を取得しようとしたが空だった場合。
★LengthException
用途
 長さが不適切な場合に使用。
具体的な使用例
 文字列や配列の長さが指定された制約を満たさない場合(例: パスワードが短すぎる)。
★OutOfBoundsException
用途
 無効なインデックスやキーが使用された場合に使用。
具体的な使用例
 配列やコレクションに存在しないインデックスやキーを参照しようとした場合。
★BadFunctionCallException
用途
 不正または存在しない関数を呼び出した場合に使用。
具体的な使用例
 必要なコールバック関数が存在しない場合。
★BadMethodCallException
用途
 不正または存在しないメソッドを呼び出した場合に使用。
具体的な使用例
 クラスのメソッドが存在しない場合(例: 直接呼び出せないマジックメソッドを使用しようとした)。
★UnexpectedValueException
用途
 値が期待に反して不正である場合に使用。
具体的な使用例
 関数の戻り値が想定と異なる場合(例: ファイルの読み込みで数値を期待していたが文字列が返された)。
★TypeError
用途
 データ型が期待と異なる場合に使用。
具体的な使用例
 引数や戻り値の型が指定された型と一致しない場合(例: int 型を期待したが string が渡された)。
★DivisionByZeroError
用途
 数値をゼロで割った場合に使用。
具体的な使用例
 除算演算でゼロ除算が発生した場合。
★ParseError
用途
 コードの構文エラーが発生した場合に使用(コンパイル時エラー)。
具体的な使用例
 PHPスクリプトの文法が間違っている場合。
★Error
用途
 プログラムの致命的なエラーを表す。
具体的な使用例
 メモリ不足やシステムエラーなど、回復不能なエラー。
★Throwable
用途
 すべての例外とエラーのベースインターフェース。
具体的な使用例
 独自のエラーハンドリングを実装するための基底インターフェース。



[あとがき]
 来年1月に仕様統一できているかどうか分かりませんが、思い立ったが吉日ということで、調査し、検討し、決めた内容については、少しずつ仕様として取り入れていきたいと考えています。
 XPプログラミングとかでは、よくある話だとは聞いています。まっ、最終的に出来上がったモノがいいものであればいいのです。ただ、最初もっとよく考え、作れば良かったなとは思います。その一方で、初めてのオブジェクト指向言語の製造で、完ぺきな検討を終えてから作り出すのは無理かなとも考えています。
 アメリカの経営者から聞いた話ですが、100%検討してから物事を開始するのは遅すぎる。ただ、検討しないのも問題はある。80%の検討を終えたら、取り掛かるのが最適だという話を聞いた記憶があります。
 その言葉を念頭に振り返ると、まっ、ちょうどよかったかなって思っています。

 では、また!

2024年12月16日

クラス継承 〜クラスを親子に分離する意義ある?〜 [プログラム研究室]

 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 12月も半ばになり、クラス製造も佳境に入ってきました。スケジュール的にかなりやばいって感じです。
 開発するにあたり、今までの開発方針と考えが変わったので、その点についてご報告します。
[機能によりクラスを分ける]
 エラーメッセージクラスを製造し、そのエラーメッセージクラスを各クラスでextendsするにあたり、すべてのクラスを基本機能と複雑な機能といった分類で、親と子に分けて、管理しようと考えてきましたが、やめることにしました。理由は、エラーメッセージクラスでログを出力するように仕様を変更することを検討を始めてからでした。

[ログへ出力する]
 PSR-3では、ログに関する規約が用意されているのですが、今現時点は、対応していません。理由は、ログの出力は、業務に関連することに限定しようと考えているからです。
 現在製造しているのは、クラス、メソッドでそこで発生したエラーをいちいちログに出力するのは、エラーを残す目的とはなりえないと考えたからです。
 そのため、現在各クラスでインポートしているエラーメッセージクラスでは、ログを出力していません。しかも、エラーメッセージだしね・・・。名前からもログを出力するというイメージないしね・・・。
 ただ、そろそろ、画面設計をして、どの国からアクセスしてくるのかとか、ユーザーのことを考え始めてから、ログのことを考え始めました。
[ログへ出力するタイミング]
 そんなログの出力するタイミングですが、やはり、エラーメッセージクラスあたりで出力したいですよね?ただ、現在のクラスの仕様を変更しようとすると、いろいろなクラスへ影響がでてきます。そこで、考えられるのが、エラーメッセージクラスの継承です。そうなんですよね???こういう時に、クラスを継承すべきなんじゃないかなって思ったわけです。その考えを思いついたとき、今まで文字クラスを基本的な文字操作のものとその基本的な操作を利用する複雑な文字列操作に分けて親と子にしようとか考えましたが、ちょっと違うかなって思うようになりました。意外と親の機能を子が使うケースってないしね・・・。PHP組込関数豊富だしね・・・。ただ、もし文字列クラスを親と子で分離しないと、文字列クラスの場合、5,000ステップ近くあるので、システムパフォーマンスへの影響を心配しています。
 っという心配は現時点もあるのですが、PHPもJITが機能として追加され、ハードもここ数年かなり良くなっているので、忘れることにしました。

[あとがき]
 文字列クラスは基本機能と複雑な文字列操作のものとに既に分けたのですが、近日中に統合します。そして、これからは、文字列、数値、ファイルとか言った単位で何も考えずに作っていきます。迷っちゃうと手が止まってしまうんですよね?しばらくは悩まず製造できそうです。そして、子クラスを作るタイミングは、エラーメッセージクラスへログの機能を追加しなければならないといったタイミングで、作らなければならない時に作ることにしました。

 PSR-3の規約の取り込みというかログの出力の部分については、1月から始めることにしました。PSR-3を読んでみると分かるのですが、統一的にログとして出力することができそうです。ただ、ファイルに出力するのか、データベースに出力するのかといった問題をまだ考えていません。PSR-3自体にはどこに出力するのか定義はなく、自由度が高いのはいいのですが、その辺をきちんと考えてから製造しないと運用してから困ったことになりそうです。また、その辺の考えをまとめ、ブログという形で残すことがありましたら、御意見等いただければうれしいです。

 では、また!

2024年12月15日

CSF 〜他のNIST文書との関係〜 [セキュリティ研究室]


 こんにちは!
 ナビゲータのEVEです。
サイバーセキュリティ.jpg
 本日は、日曜日ということで、セキュリティの日です。っということで、先週の続きでCSFについて調べようと先週紹介したリンクをたどってみました。

■セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html



[興味深い文書がいっぱい]
 IPAのサイトで、CSFについてズバリ書いたのがあると思い、ページの頭から当該文書をダウンロードを始めたのですが途中で、手が止まりました。それは、同ページでリンクされている文書量が半端ではないのです。内容をみると、これからシステムを作る上で関係しそうな文書ばかりなので、どんなタイトルがあるのかちょっと、調べてみました。

[セキュリティ関連NIST文書についての概要]
 IPAの「セキュリティ関連NIST文書について」というページの内容を一望すると、以下の文書構成になっています。

OMB文書
FIPS
SP


そして、先週紹介したCSFはその他の文書という扱いです。しかも、当該文書群の一番下・・・。
 FIPSは、情報処理の試験ではおなじみのセキュリティに関する文書です。ちょっと、興味が出てきたので、どのような文書なのかChatGPTに聞いてみました。

[OMB文書]
 まずは、OMB文書から聞いてみました。

 OMB(Office of Management and Budget, 米国管理予算局)の文書は、米国連邦政府の予算編成や行政運営に関するポリシーを定めたものです。OMBは、連邦政府全体のリソース管理を行い、政策や計画を実行する上での基準を提供する役割を担っています。

■OMB文書の特徴
❶ポリシーガイドライン
・OMB文書は、連邦機関が政策やプログラムを計画、実行、監査する際に従うべき指針を提供します。

・特に、情報技術やセキュリティの分野では、NISTの文書(SPシリーズ)と連携して使用されることが多いです。

❷行政管理の標準化
・連邦政府全体で一貫した運用を行うために、財務管理、セキュリティ管理、情報公開などの基準が含まれています。

❸連邦情報セキュリティ管理法(FISMA)との関係
・OMB文書は、FISMAの実施を支援する重要な役割を果たしており、各機関がNIST SPシリーズをどのように適用すべきかを補足します。

■代表的なOMB文書
 以下は、OMB文書の中でもよく知られているものや重要なものです。

@OMB Circular A-130
・正式名称: Managing Information as a Strategic Resource
・概要:
┣情報資源管理(IRM)のポリシーを定めています。
┣情報技術(IT)の管理、セキュリティ、プライバシー、記録管理に関する連邦政府全体の基準。
┗NIST SPシリーズ(例: SP 800-53)の適用における基本方針を規定。

AOMB Memoranda(覚書)
 OMBは特定の課題や新しい政策に対応するために、メモランダム(Memos)を発行します。以下がその例です:
┣M-22-09: Moving the U.S. Government Towards Zero Trust Cybersecurity Principles
┃┗ゼロトラストアーキテクチャ(ZTA)の導入に関する指針。
┗M-17-25: Reporting Guidance for FISMA Metrics
 ┗FISMAのセキュリティメトリクス報告に関する詳細指針。

BOMB Circular A-11
・概要:
1)予算編成およびパフォーマンス管理に関する指針。
2)政府機関が予算提案を行う際の基準を提供。

COMB Circular A-76
・概要:
 政府業務を民間委託するかどうかの基準を定めた文書。

■OMB文書とNIST文書の関係
・OMB文書は政策の枠組みや政府全体の運用基準を定め、連邦機関が従うべき方針を指示します。
・NIST文書(例: SP 800シリーズ)は、具体的な技術的実践ガイドラインを提供します。
 ┗例えば、OMB Circular A-130で定められたセキュリティ管理基準を実現するために、NIST SP 800-53を参照することが求められます。

■OMB文書の活用方法
・連邦政府機関: OMBの指針に基づき、予算管理やセキュリティポリシーの実行計画を立てます。

・民間企業: 連邦機関と契約する際、OMB文書で求められる基準(特にITやセキュリティ)を理解し、準拠する必要があります。


 OMB文書は、米国連邦政府の予算編成や行政運営に関するポリシーを定めたモノなのですが、その中の「OMB M-04-04連邦政府機関向けの電子認証にかかわるガイダンス」という文書を紹介したく、このページに持ってきたようです。

[FIPS]
 続きましては、情報処理試験を受ける人にはおなじみの、FIPSに関して、ChatGPTに解説をしてもらいましょう!

 FIPS(Federal Information Processing Standards, 連邦情報処理規格)は、米国連邦政府が情報技術やデータセキュリティの分野で利用するために制定した標準規格です。FIPSは、連邦政府機関とその契約業者に義務付けられており、情報システムやセキュリティ製品の調達や使用において重要な役割を果たします。

■FIPSの目的
❶連邦政府内の統一性の確保
 各機関が異なるセキュリティ基準を使用するのではなく、統一された規格に基づく運用を実現。

❷セキュリティの確保
 データの機密性、完全性、可用性を保護し、サイバーセキュリティリスクを軽減。

❸相互運用性の向上
 システム間での安全なデータ交換を可能にする。

■FIPSの法的根拠
 FIPSは、情報技術管理改革法(ITMRA)や、連邦情報セキュリティ管理法(FISMA)に基づき、NIST(National Institute of Standards and Technology, 米国国立標準技術研究所)が作成・維持しています。

■主要なFIPS規格
 以下は、広く採用されている重要なFIPS規格の例です:

@FIPS 140シリーズ: 暗号モジュールのセキュリティ要件
・FIPS 140-2(現行標準)
┣暗号モジュール(例: 暗号化ライブラリ、ハードウェアセキュリティモジュール)のセキュリティ基準。
┗セキュリティレベル: レベル1(最低限の保護)〜レベル4(最高レベルの物理的セキュリティ)。

・FIPS 140-3(次世代標準)
┗国際規格ISO/IEC 19790に基づいて更新され、より厳密なセキュリティ基準を規定。

AFIPS 199: 情報と情報システムのセキュリティ分類
 情報とシステムを、機密性・完全性・可用性の観点から「低(Low)」「中(Moderate)」「高(High)」に分類。

BFIPS 200: 最低限のセキュリティ要件
・FISMAに基づき、連邦政府情報システムが満たすべき最低限のセキュリティ要件を規定。
・セキュリティ管理策の詳細は、NIST SP 800-53で補完されています。

CFIPS 201: 個人認証のための標準
・連邦職員や契約業者の身分証明書の標準化(PIVカード: Personal Identity Verification)。
・生体認証、スマートカード技術を使用して、物理的および論理的アクセス制御を実現。

DFIPS 197: 高度暗号化標準(AES: Advanced Encryption Standard)
・データ暗号化のための標準アルゴリズムとして、対称鍵暗号方式AESを規定。
・米国連邦機関だけでなく、世界中の産業界や政府機関で使用されている。

EFIPS 180シリーズ: セキュアハッシュアルゴリズム(SHA)
・データのハッシュ化に使用されるアルゴリズムを規定。
 例: SHA-1、SHA-256、SHA-512。

■FIPSの適用範囲
・連邦政府機関
 FIPS準拠は連邦機関に必須であり、調達・運用において適用されます。

・政府契約業者
 政府と契約する民間企業も、システムや製品がFIPSに準拠している必要があります。

・国際的利用
 一部のFIPS規格(特にAESやSHA)は、米国以外でも広く採用されています。

■FIPS準拠の確認方法
・製品がFIPSに準拠しているかどうかは、NISTが管理するCMVP(Cryptographic Module Validation Program)で認証されたモジュールを使用しているかで判断されます。
・NISTのウェブサイトで認証済みモジュールや製品を確認可能です。

■FIPSの最新動向
・FIPS 140-3の導入
 140-3は国際規格に整合した内容となり、暗号モジュールの要件がさらに厳密化されています。2021年9月からFIPS 140-3が有効になりました。

・クラウドサービスでのFIPS準拠
 FedRAMP認証において、クラウドプロバイダは暗号化にFIPS 140準拠のモジュールを使用する必要があります。


以上です。なお、私が試験のために勉強したときは、FIPS 140-2の暗号モジュールのセキュリティ要件について出題されていたと記憶していますが、そのバージョンも2021年に1つ上がり、現在はFIPS 140-3となっているようです。
 これからIPAの試験を受験する人は気を付けた方がいいかもしれません。

[SPシリーズ]
 そして、最後にSPシリーズについてChatGPTに調べてもらいました。

 NIST(アメリカ国立標準技術研究所)の文書の中で「SP」で始まる文書群は、Special Publication (特別刊行物) シリーズを指します。このシリーズは、情報技術、特にセキュリティやプライバシーに関するガイドライン、フレームワーク、標準を提供する文書群として広く知られています。

■主な特徴と役割
❶セキュリティおよびプライバシーのガイドライン
 NIST SPシリーズは、主に情報セキュリティおよびプライバシーに関連するベストプラクティスやフレームワークを提供します。特に政府機関や民間企業が安全なシステムを構築し、運用するための指針として利用されています。

❷特定の用途やテーマごとの詳細
 各SP文書は特定のテーマや課題に特化しており、詳細な技術ガイドラインや推奨事項が含まれています。

❸米国連邦政府の基準としての役割
 米国政府機関が情報システムのセキュリティを管理する際に、FISMA(連邦情報セキュリティ管理法)の下でこれらのガイドラインを適用することが義務付けられています。ただし、民間企業や他国の組織でも参考にすることが多いです。

■主なカテゴリ
 以下に、NIST SPシリーズの代表的なカテゴリとその概要を示します。

@NIST SP 800シリーズ
・対象: 情報セキュリティに関するガイドライン
・例:
┣SP 800-53: セキュリティおよびプライバシー管理策のカタログ
┣SP 800-171: 非機密連邦情報の保護(CUI)に関する要件
┣SP 800-61: セキュリティインシデント対応ガイドライン
┗SP 800-63: デジタルIDガイドライン

ANIST SP 500シリーズ
・対象: 情報技術の標準化とベンチマーク
・特徴: 研究や技術実験の結果に基づいた文書が多い。

BNIST SP 1800シリーズ
・対象: 実践的なセキュリティ実装に関するプレイブック
・特徴: サイバーセキュリティフレームワーク(CSF)の応用を具体的な事例を通じて示します。

■NIST SPシリーズの利用方法
・政府機関: セキュリティフレームワークを構築・運用する際の基準として使用。
・民間企業: ベストプラクティスを取り入れて、業務のセキュリティを強化。
・教育機関: 情報セキュリティ教育の教材として活用。
・研究者: 新しいセキュリティ技術や実践方法の研究材料として参照。



[あとがき]
 本日は、CSFを調べようと思ったのですが、これからシステムを製造するにあたり、興味をそそるタイトルが複数あったため、ちょっと寄り道して、興味をそそられる文書群について調べてみました。以上の文書は50前後あり、ダウンロードしたモノの中には数百ページあるものもあります。関係しそうもないものもあるので、開発していく過程で、必要に応じて読んでいきたいと思います。
 なお、以上の文書と、CSFとの関係について、ChatGPTは以下のように回答しています。

 CSFは、FIPSやNIST SPシリーズなどの標準と深い関係を持ち、それらを基盤として設計された柔軟で包括的なフレームワークです。これらの文書群はCSFの導入や運用を具体的にサポートし、セキュリティ成熟度の向上を実現します。CSF導入時には、それぞれの文書がどの機能に対応するかを把握し、適切に参照することが重要です。


CSFの導入を検討するにあたり、特にFIPSやSPシリーズは具体的な導入検討に役立ちそうです。これから、分析を進めていきますが、必須の知識なのかもしれません。

 では、また!

2024年12月08日

サイバーセキュリティフレームワーク(CSF) [セキュリティ研究室]


 こんにちは!
 ナビゲータのEVEです。
スーパーコンピュータ.jpg
 本日は、日曜日ということで、セキュリティについてのお話です。
 前回のブログでは、サイバー・フィジカル・セキュリティ対策フレームワーク(CPSF)の概要について学びました。そして、本日は、経済産業省から出ているCPSFを細部まで読み、気づいたことなどをご報告する予定でしたが、まだ読めていない状況です。ちょっと、手が回らなかったというのが正直なところです。本宿題につきましたは、忘れず少しずつ読み、ご報告すべき内容がございましたら、ご報告させていただきます。

[サイバーセキュリティフレームワーク(CSF)]
 前回のセキュリティの勉強において、CPSFは、「Society5.0」におけるセキュリティ対策の全体像を整理し、産業界が自らの対策に活用できるセキュリティ対策例をまとめたフレームワークであるのと同時に、サイバーセキュリティ経営ガイドラインの支援ツールとして、組織のガバナンスの確保に有効に活用できると話してきました。そして、サイバーセキュリティ経営ガイドラインにおいてCPSFのその役割は、経営層と現場の架け橋として、セキュリティに関する経営上の視点と現場レベルの実装指針を結びつける役割を果たします。
 その状況は、サイバーセキュリティ経営ガイドラインは、企業のセキュリティの強化が行えるよう、経営者がリーダーシップを発揮し、サプライチェーンを含めた全社のセキュリティの強化をステークホルダと対話しながら率先して実施するといった企業経営の観点からまとめられたものでした。そして、CPSFは、サイバーセキュリティ経営ガイドラインのフレームワークとして機能するように、産業全体像を捉え、社会環境の変化に伴うサイバー攻撃の脅威の増大に対応出来るようにまとめられたモノで、それは、産業構造の観点からまとめられたモノといえます。
 そして、機能的な側面からまとめられた資料として、IPAでは、米国国立標準研究所(NIST)「サイバーセキュリティフレームワーク(以降「CSF」という)」を推奨しています。
 では、今回は、NISTが策定した、組織のサイバーセキュリティリスク管理と対策を支援するための包括的なフレームワークについて見て行きたいと思います。
 なお、このフレームワークは、特に重要インフラ事業者を対象に設計されていますが、業種や規模を問わず、幅広い組織で利用可能です。

[CSFとは?]
 では、早速CSFとはどのようなものなのか、ChatGPTに解説をしてもらいましょう。

 NISTサイバーセキュリティフレームワーク (NIST Cybersecurity Framework, CSF) は、米国国立標準技術研究所 (National Institute of Standards and Technology, NIST) によって策定されたサイバーセキュリティのためのガイドラインです。特に、企業や組織が直面するサイバーリスクを管理し、情報システムのセキュリティを強化するためのベストプラクティスを提供します。

❶フレームワークの目的
・サイバーセキュリティの標準化されたアプローチを提供。
・企業のリスク管理能力の向上を支援。
・様々な業種や規模の組織が自らのニーズに応じて柔軟に採用可能。
・公的および民間組織間での共通言語を提供。

❷フレームワークの構成
 NIST CSFは以下の3つの主要構成要素で成り立っています:

@フレームワークコア (Framework Core)
セキュリティ対策を包括的に捉えるための5つの機能とカテゴリから構成されます。

1)Identify (特定):
 資産、リスク、脆弱性、法的義務などを特定し、組織のセキュリティ基盤を構築。
例: 資産管理、リスク管理戦略。

2)Protect (保護):
 システムやデータを保護するための対策を実装。
例: アクセス制御、データセキュリティ、トレーニング。

3)Detect (検知):
 サイバーセキュリティイベントを迅速に検知。
例: 異常検知、継続的監視。

4)Respond (対応):
 サイバーセキュリティイベントに対する適切な対応を計画・実行。
例: インシデント対応計画、コミュニケーション。

5)Recover (復旧):
インシデント後の回復力を強化し、通常業務に戻る。
例: 復旧計画、改善活動。

Aフレームワークプロファイル (Framework Profile)
 組織の現状や目標に基づいて、フレームワークコアをカスタマイズしたものです。

・現状プロファイル: 現在のセキュリティ状況。
・目標プロファイル: 目指すべきセキュリティレベル。

B実施レベル (Implementation Tiers)
 組織のセキュリティリスクに対する対応成熟度を示す4段階のレベル。

Tier 1: 部分的(Partial)
Tier 2: リスクに基づく(Risk-Informed)
Tier 3: 確立済み(Repeatable)
Tier 4: 適応的(Adaptive)

❸適用分野
 NIST CSFは、特に以下の分野で利用されています:

・エネルギー、金融、ヘルスケアなどの重要インフラ
・中小企業から大企業まで、規模に関係なく適用可能。
・国際的なセキュリティフレームワークとの互換性を持つため、グローバル展開も可能。

❹導入のメリット
・セキュリティ対策のギャップを明確化。
・業界標準に準拠したリスク管理が可能。
・サイバーインシデントへの迅速な対応力の向上。
・ステークホルダーとの信頼関係の強化。

❺日本での活用
 日本でも、NIST CSFを参考にしたセキュリティガイドラインやフレームワークが策定されています。

例:サイバーセキュリティ経営ガイドライン
日本企業がNIST CSFの理念を活用し、経営層がセキュリティに積極的に関与できるよう支援。

■まとめ
 NIST CSFは、サイバーセキュリティにおける効果的なリスク管理を実現するための基本的な枠組みを提供します。特に、柔軟性と普遍性を持ち、組織の規模や業種を問わず適用可能であるため、セキュリティ戦略の中心として活用されています。



[あとがき]
 本件の内容は、以前IPAのWeb講義で勉強した内容をまとめたものです。その講義では、CSFの内容として「@フレームワークコア (Framework Core)」を中心に書かれています。なお、本件を日本語にまとめた文書がIPAから出ています。一度読んでいただき、今後のセキュリティ対策の参考としてください。
サイバーセキュリティ経営ガイドライン>CPSF>CFS.png
 今回、勉強して、初めて知ったのは、CSFが全ての始まりだということです。今までは、ピラミッドの図を書くとしたら、サイバーセキュリティ経営ガイドラインが頂点にあり、その下に、CPSF、そして最下位にCSFが位置するというイメージがあり、その状況から一番最後にCSFが策定されたなんて思っていたぐらいなのですが(笑)。まっ、それは、ないですか?
 では、来週は、CSFを深掘りしていきたいと思います。

 では、また!!!

■セキュリティ関連NIST文書について
https://www.ipa.go.jp/security/reports/oversea/nist/about.html

■サイバー・フィジカル・セキュリティ対策フレームワーク(経済産業省))
https://www.meti.go.jp/policy/netsecurity/wg1/CPSF_ver1.0.pdf

2024年12月05日

システム評価 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
デザイン.jpg
 二日間をかけて、HTML&CSSの規約の扱いについて考えてきました。その結果、まず、画面のワイヤーフレームまたはプロトタイプがないと、規約を作るのが難しいことが分かりました。
 そして、ワイヤーフレームまたはプロトタイプを作るためには、❶レイアウト、❷配色、❸写真・絵、❹書体などが決まっていないと、これもまた難しいという結論になりました。
 その結果どうするのか検討を進めた結果、αサイトを製造し、その製造したαサイトの検証を進める中で、いろいろな人の意見を聞くなどして、ワイヤーフレームまたはプロトタイプを製造し、HTML&CSSの規約を作り込んでいくことにしました。結局、現時点は、つい最近作った、規約に基づき製造するということになりましたが、作ったモノに対して、効果がある、ないという判断はどうしたらいいのでしょうか?
 本日は、その判断基準について検討したいと思います。

[αサイトでの指数]
 昨日直帰率の話をしましたが、それも1つの判断基準です。では、それ以外にあるのでしょうか?

■中小企業診断士試験の問題から
インプレッション
・直帰率
・エンゲージメント
・離脱率
・再訪問率
・ユニークユーザー数
・ページビュー

■ChatGPTからの提案
・セッション時間(Average Session Duration)
・クリック率(CTR: Click-Through Rate)
・スクロール率(Scroll Depth)
・イベントトリガー率(Event Trigger Rate)


ChatGPTからの提案は、システム的にどう作ろうか悩むところがありますが、以上の指数を用い、デザインまたは作ったシステムの検証をすることができそうです。

[EVEシステム・本番システム]
 以上については、αサイトだけでなく、EVEシステムでも利用できます。しかし、本格的なサービスを提供しようとした場合、もっと多くの指数に基づき分析しなければいけないようです。以下が、EVEシステム・本番システムで分析した方がいいと思われる指数です。

■中小企業診断士試験の問題から
・コンバーション率(CVR)
・チェーン率
・CPA
・リーチ率
・フリークエンシー

■Webデザインの基本
・KPIツリー
 ┣KGI
 ┣KSF
 ┣AP
 ┗KPI

■ChatGPTからの提案
★顧客体験に関する指標
・NPS(Net Promoter Score):
 顧客がサービスを他者に推奨する意向を数値化する。満足度を超えて、ブランドロイヤルティを評価できる。

・ユーザー満足度(CSAT: Customer Satisfaction Score):
 サイトの使いやすさやコンテンツの満足度をアンケートで測定。

★サイトの技術的パフォーマンス
・サイト速度(Page Load Time):
 ページが表示されるまでの時間を測定し、ユーザー体験に与える影響を評価。

・エラーレート:
 サーバーエラーやフォーム送信エラーの発生率を追跡。

★マーケティングの成果測定
・CTR(Click-Through Rate):
 広告やメールのクリック率を測定し、訴求力を評価。

・ROAS(Return on Ad Spend):
 広告費用に対する売上の割合を測定。

★SEO関連
・オーガニックトラフィック:
 検索エンジンからの訪問者数を測定し、SEOの効果を評価。

・検索順位:
 主要キーワードのGoogle検索順位を追跡。


いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ]

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




思った以上に多いですね?以上の指数から、デザイン、機能を見直すことになりそうです。

[あとがき]
 以上の調査は、中小企業診断士経営情報システムの問題を解いていて思いつきました。もし、中小企業診断士の勉強をしていなかったら、作ろうと考えなかったかもしれません。何かを勉強しようという意欲って大切だなって感じます。なお、IPAの試験では出題された記憶がありません。なぜですかね?

 以上のことは、Prototype EVEでもやったことがありませんし、今まで業務でもやったことがありません。どうしたらいいのか、具体的なことについては、これから調べシステム化していくことになります。求めた指数の分析結果を有効に利用し、より多くの人に利用していただけるシステムを製造していきたいと思います。

 では、また!!!

2024年12月04日

HTML&CSSの規約を考える −昨日の続き− ~デザイン研究室~


 こんにちは!
 ナビゲータのEVEです。
デザイン.jpg
 一昨日から、HTMLCSSの規約の策定に入ったのですが、完成の形が決まっていないと、規約を作るといっても漠然としたものになるということが分かりました。11月7日のレベルでもいいのですが、プロジェクトの規約と言い難く、ワイヤーフレームプロトタイプを作り、そのうえで規約を策定しようと決意したのが昨日です。
 そして、昨日は、今後の流れを検討し、作業項目を抽出し、その抽出したイベントでどんなことをするのか確認しました。
 それが以下の内容となり、昨日は❶レイアウト、❷配色まで検討しました。本日は、❸の写真・絵から検討に入りたいと思います。

[❸写真・絵]
 www.pro2grammer.com構築後ということになりますが、直帰率を如何に下げるかという課題があります。
 このブログを見てくれていて、私のやっていることに興味を持っているユーザーの場合、ポータル画面を見た後、いろいろなページを見たいと思うかもしれません。ただ検索エンジンとかで来訪したユーザーは、検索し、興味があるかもしれないページを見、数十秒もしないうちに別のサイトへ移動してしまうという可能性があると考えています。それを直帰率というのですが、その直帰率を如何に下げるのかというのが運用後の課題です。
 その課題を、ダイレクトというわけではないのですが、1つの手段として考えられるのが、写真とか絵とかになります。
 文字は読まなければ、興味をもつことはありませんが、写真とか絵は直感的に興味を持っていただく可能性があります。そのため、直帰率を下げる効果的な手段となりえるのです。
 その効果を最大限上げるためには、以下の点に注意を払う必要があります。

@色調
Aサイトとの融和性
B解像度、ピクセル


 @の色調は、昨日の話につながります。使用する写真にも色があり、その色がサイト全体にいろいろな印象を与えます。
 Aのサイトとの融和性は、例えば、技術情報を発信するページを作るとしたら、パソコンに向かってプログラミングをしている人を採用するなど、そのテーマにあった写真や絵を使用すべきです。
 そして、Bでは、そのテーマにあった写真が、シャープのイメージを与えるなら最高の解像度で飾るということが考えられます。また、そのテーマのバックボーンとなるものだったら、ぼかして背景のように使用するなどの方法が考えられます。

 写真により、どんなサイトなのか、直感的に来訪者に伝え、伝えたその内容が来訪者が興味を持つ内容だったら、いろいろなページを見ていただける可能性が生まれます。

[フォント]
 フォントも、サイトの印象を与える手段となります。例えば、明朝体なら、フォーマルさ、伝統的、知的さなどを与え、ゴシック体なら、モダンさ、親しみやすさなどをユーザーに与えます。他にもフォントは沢山あり、 CSSのfont-familyにより複数のフォントを指定することができます。その場合JavaScriptを使用し、ユーザーにより変更する必要があります。できることは分かったのですが、それを実施するかどうか現時点未定です。労力をかけただけの効果が見込まれるならやりますが、ないならやらないといった所でしょうか?

[あとがき]
 いろいろ本を読みながら今後のサイトの方向性を考えたのですが、当初、αサイトを構築しようと考えています。αサイトとは、中小企業診断士試験で知った言葉なのですが、最初のプロトタイプや試験段階のサイトになります。同サイトは、機能の動作確認やデザインの評価を目的としています。その中で、いろいろためし、試したその中で色々決めていこうかなって今は考えています。決まった内容は、都度規約として整理するという流れにしようと考えています。
 そのため、この二日間で検討した内容を決定する必要はないかなっていう考えに至りました。
 そして、決まった内容を、βサイトに反映し、そこで、最終的な仕様を確定するという流れで製造していく予定です。
 以上の流れの中で、御意見をいただき、私が考える方向性と合致していれば、取り入れさせていただきます。そして、セキュリティ、機能、デザイン等で気に入っていただけた場合、製造したシステムの全てまたは一部を有料で提供させていただく予定です。ご興味がある方は、引き続きよろしくお願いします。

 では、また!!!

■HTMLコーディング規約 〜プログラム研究室〜
https://fanblogs.jp/bahamuteve/archive/517/0

■JavaScriptコーディング規約 〜プログラム研究室〜
https://fanblogs.jp/bahamuteve/archive/504/0

HTML/CSSの絵本 Webコンテンツ作りの基本がわかる新しい9つの扉 [ 株式会社アンク ]

価格:2178円
(2024/11/13 14:34時点)
感想(0件)




いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ]

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




1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] [ Mana ]

価格:2585円
(2024/11/13 14:31時点)
感想(1件)




いちばんよくわかるHTML5&CSS3デザインきちんと入門【電子書籍】[ 狩野 祐東 ]

価格:2728円
(2024/11/13 14:36時点)
感想(1件)



2024年12月03日

HTML&CSS規約について考える 〜デザイン研究室〜


 こんにちは!
 ナビゲータのEVEです。
Webデザイン.jpg
 本日から、HTMLCSSに関する規約の策定に入っています。ただ、規約を作ろうと考えても、何を完成とするのか、決まっていないと、規約が作れないことに気づきました。前回、HTMLに関する規約の一部を公開しましたが、漠然としていましたよね?まっ、あれはあれでいいのですが、プロジェクトの規約にはならないと判断しました。そこで、まずは、画面のワイヤーフレームを決定し、プロトタイプを作ってから、規約の作成に入った方がいいようです。

[やるべきこと]
 まだ、ワイヤーフレームも、プロトタイプも作っていないのですが、最終製品を作るまでの流れを、事前に抑えておこうと思います。
 前回紹介した本を借りなおして現在読み進めていますが、作業的には以下の流れで決定し、そして、前回紹介したHTML&CSSの規約、JavaScriptの規約を再定義することになりそうです。

❶レイアウトの決定
┣ターゲット
┗情報
❷配色
❸写真・絵
❹書体
❺HTML&CSS
❻JavaScript



[❶レイアウトの決定]
 まずは、レイアウトを決定します。そのレイアウトを決める場合、誰をターゲットとし、どんな情報を掲載するのかといった要素がレイアウトの決定要因となります。
 視点としては、デバイス目線ユーザー目線があります。
 デバイス目線とは、どんなデバイスを使用するユーザーをターゲットにするかにより、レイアウトが変わってきます。考えられるのは、パソコンタブレットスマートフォンなどです。マルチスタイルという方法もあるようですが、今回のプロジェクトでは、まずはパソコンをターゲットにします。マルチスタイルは、すべてのデバイスに対応可能という面で、生産性の向上に寄与しますが、操作性という意味でもしかしたら、いずれかのデバイスに偏る可能性がありますし、使用するユーザーを絞るのが難しくなる可能性もあります。
 そして、パソコン以外の画面は、パソコンのレベルから見ると、作り手からすると簡単です。少し変更すれば、タブレット、スマートフォン画面に対応出来る可能性もあり、まずは、パソコンをターゲットとした方がいいと考えます。
 ユーザー目線とは、どんなユーザーに使用してもらうかということです。まずは、システム管理者向けのシステムを製造するので、管理者目線ということになりでしょうか?

[❷配色 色の三原色]
 レイアウト、ターゲットと掲載情報が決まったら、次は、配色を考えます。前回製造したシステムは何も考えずに、ワインレッド、ダークレッドを選択しましたが今回は、ターゲットなどを考慮し色を後から決めていきたいと思います。
 令和6年の中小企業診断士経営情報システムで出題されましたが、色には、三原色というものがあります。シアン (Cyan)、マゼンタ (Magenta)、黄 (Yellow)なのですが、この3つの色があれば、すべての色を表現できると言われています。小学生の時、絵具を混ぜていろいろな色を作った記憶があると思いますが、その行為に相当します。
なお、色の三原色以外に、光の三原色があります。それは、青、赤、緑で、色と光で三原色は違うという点について注意しなければなりません。

[色があたえる印象の違い]
 そんな色なのですが、色により相手に与える印象が大きく違います。以下の情報は、「Webデザインの基本」からです。

・赤
 情熱、興奮、注意
 ユーザに強い印象を与えます。 

・黄
 楽しい、元気、好奇心
 黒と組み合わせて、警告を促す色として使われることがあります。

・緑
 自然、安心、平和
 リラックス効果を生む

・青
 清潔、冷静、誠実
 安心感を与える

・ピンク
 可憐、好意、幸福
 女性らしさ

・黒
 高貴、洗練、不安
 内容を明るく見せる効果

・白
 清潔、洗練、献身
 他の色を引き立てる


ちなみに、管理者が利用する画面には何を基調にしたらいいのかChatGPTに聞いたところ、信頼感を与えるブルー、視認性を重視したグレーなどの提案がありました。

[あとがき]
 何気に作ってきたシステムですが、機能だけでなく、それを利用するユーザーのことを考えた場合、考えることは多岐にわたるということが分かります。時間たりないかな???
 次の作業に移りたいので、本日はこの辺で!

 では、また!!!

■HTMLコーディング規約 〜プログラム研究室〜
https://fanblogs.jp/bahamuteve/archive/517/0

■JavaScriptコーディング規約 〜プログラム研究室〜
https://fanblogs.jp/bahamuteve/archive/504/0

HTML/CSSの絵本 Webコンテンツ作りの基本がわかる新しい9つの扉 [ 株式会社アンク ]

価格:2178円
(2024/11/13 14:34時点)
感想(0件)




いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ]

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




1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] [ Mana ]

価格:2585円
(2024/11/13 14:31時点)
感想(1件)




いちばんよくわかるHTML5&CSS3デザインきちんと入門【電子書籍】[ 狩野 祐東 ]

価格:2728円
(2024/11/13 14:36時点)
感想(1件)


2024年12月02日

2024年12月の予定 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
寺.jpg
 今朝外が騒がしく5自前に起きてから、眠いんだけれど、寝れないという状況になり、今日は一日ボ〜っと過ごしてしまいました。
 つい最近福島でさんざん寝たから、寝だめはできているとは思うんだけれど・・・。

[期限があるもの]
 先月末から、昨日まで、実はシステム開発の進捗はほぼない状況でした。理由は、11月に福島に行くということは事前に決まっていたから・・・。そのため、複数のタスクで何を優先するかというと、必然的に自分で期限をずらすことができないタスクが優先されることになってしまいます。それは、中小企業診断士に関する勉強・・・。
 中小企業診断士一次試験は、来年は、8月2、3日に実施されると想定しています。まっ、一通り勉強済みなので、直前に頑張るというのもアリだと思うのですが、今後どんなタスクが入ってくるのか不明なので、バランスよくすべてのタスクを進めたいと考えました。

[システム開発]
 システム開発も、スケジュール通りに進めたいと思います。多分時間がかかるのは、規約等の製造方針を決めるところで、一度決まれば、自分の頭の中にあるシステム仕様を、規約等に従って、ガンガン作っていくだけなので、今月が山場かなって感じです。
 今月は、HTMLCSS等の規約づくりと、クラス製造、そしてXServer上の環境構築をメインに進めたいと考えています。
 HTML、CSS等の規約作りは、本日から再開します。
 クラス製造は、製造済みのクラスのデバックの多くを完了し、今週中には完了予定です。後新規に製造する部分は、残りの期間でできそうだと見込んでいます。決められた時間に起き、気分さえのれば、期間内に製造できるでしょう!
 XServerの環境構築なのですが、以前ブログに書いた通り、セキュリティの問題で現在中止しています。ブログでは、一日30分仕様調査の時間をとり自分が想定しているセキュリティを施そうと考えていましたが、結局、rootのユーザーパスワードを変更し、XServerの技術者に原因の調査をお願いしました。その返答はあったのですが、ちょっと、納得いかない回答だったので、ほぉっておいた状況です。
 さんざん調査し分からなかったのに、依頼した内容の回答が、ssh_configに当該情報を記述してくださいですもんね・・・。さんざんその作業をしましたって・・・。何かいじってくれたのでしょうか?
 XServerはあらゆる業者の中で私のニーズに一番近い業者だったのは確かなのですが、セキュリティの部分では何点か不満を持っています。
 近日中に、サーバーを初期化し、再度セキュリティを施してみたいと思います。

[のり]
 1人で製造している場合は、気分の乗りの部分が重要です。仕事となるとプロジェクトに迷惑を掛けてはいけないという義務があるので否応なく作業を進めるのですが、自分のシステムを1人で作っていると、一度休むと数時間、開発の手を止めてしまうなどということがあります。それは、中小企業診断士試験のように、強制的な期限がないため、気分が作業に多分に影響を与えてしまうのです。
 いろいろと切羽詰まってきているはずなのですが・・・。

[あとがき]
 このブログって、基本技術的な情報をまとめ、どの時期に、どんなことをしているのか備忘録的にまとめているのですが、本日は、今年いっぱいの予定を書かせていただきました。先ほども書きましたが、やる気を起こさせるトリガーが必要なのですが、何かないかなって考えた結果、このブログに予定を書くということが、そのトリガーになるのではと考えました。
 まっ、誰が見ているのか全く知らないのですが、一日平均すると100人以上の人がこのブログを読んでいる?見ている?らしいです。毎日そのアクセスしてくれいる人の人数を見ながら、やらなきゃなって思えるんじゃないかなって考えています。
 出来上がったシステムは、誰かに役立ち、より多くの人に利用してもらおうと思っています。

 では、また!!!




2024年12月01日

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


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 本日は、日曜日ということで、セキュリティに関するお話しです。
 前回、11月17日では、サイバー・フィジカルセキュリティ対策フレームワーク(以降「CPSF」という)は、「Society5.0」におけるセキュリティ対策の全体像を整理しまとめられた資料で、サイバーセキュリティ経営ガイドラインを実現するフレームワークとして紹介し、その前提条件となる、サイバーセキュリティ経営ガイドラインの復習をしたところで終えました。本日は、CPSFの核心に入っていきたいと思います。

[CPSFとは?]
 では、本日も、早速CPSFについて、ChatGPTに解説をしてもらいましょう!

 サイバー・フィジカルセキュリティ対策フレームワーク(Cyber Physical Security Framework, CPSF)は、サイバー空間(情報システムやネットワーク)とフィジカル空間(製造設備や社会インフラ)を統合したシステムにおけるセキュリティ対策の指針を提供するフレームワークです。特に、製造業や社会インフラなどの重要な産業分野で、サイバー攻撃による被害を未然に防ぎ、安全性と信頼性を確保することを目的としています。
 以下に、CPSFの主な特徴と構成要素を解説します:

■背景と目的
❶背景
・IoTやデジタル化の進展により、サイバー空間とフィジカル空間が密接に結びついています。
・サイバー攻撃による被害が物理的な安全性にも影響を及ぼすようになり、従来のITセキュリティ対策だけでは不十分になっています。

❷目的
・サイバー攻撃のリスクを評価し、物理的な影響を最小限に抑える。
・サイバーとフィジカルの両面で安全性を確保し、社会全体の信頼性を高める。


■CPSFの主な構成
 CPSFは、以下のような主要な要素で構成されています。
❶ガバナンス(Governance)
・ポリシーの策定:組織全体でのセキュリティポリシーの明確化。
・責任の明確化:経営層や現場担当者の役割と責任を定義。

❷リスクアセスメント(Risk Assessment)
・サイバーおよびフィジカル両面でのリスク評価を行い、リスクに基づく優先順位付けを実施。

❸対策の実施(Mitigation Measures)
・技術的対策:ネットワークセキュリティ、認証システム、監視システムの導入。
・人的対策:従業員のセキュリティ意識向上やトレーニング。
・組織的対策:異常検知のプロセスやインシデント対応計画の整備。

❹継続的改善(Continuous Improvement)
・定期的な監査と評価により、セキュリティ対策の効果を検証し改善する。

❺サプライチェーン対策(Supply Chain Security)
・サプライチェーン全体のセキュリティリスクを管理し、関係者と連携して脅威を軽減。


■CPSF導入のメリット
❶統合的なセキュリティ
 サイバーとフィジカルの両面を同時に考慮することで、包括的な対策が可能。

❷リスク軽減
 重要なシステムや設備に対する攻撃の影響を最小限に抑えられる。

❸コンプライアンス対応
 国際規格や法令に適合した運用が可能。


■関連する国内外の取り組み
・国内:経済産業省が提唱する「サイバー・フィジカルセキュリティフレームワーク(CPSF)」。
・海外:アメリカ国立標準技術研究所(NIST)が提案する「Cybersecurity Framework」など。


■実践へのステップ
1)現状のセキュリティ対策の棚卸し。
2)リスクアセスメントを通じて優先順位を決定。
3)必要な技術的・人的対策を計画・実施。
4)定期的な監査とトレーニングを通じた継続的改善。

 CPSFは、技術的なセキュリティだけでなく、組織の運営全体を視野に入れた包括的なフレームワークとして、今後さらに重要性が増すと考えられます。


サイバーセキュリティ経営ガイドラインでは、

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


以上の3つの原則を上げ、その原則を実現をするために重要な10項目を上げましたが、その10項目を実現するために、CPSFというフレームワークが提供されていそうだというのは分かりますが、その関係が以上の説明から分かりずらいので、その関係についてズバリChatGPTに聞いてみました。

❶両者の関係性
 サイバーセキュリティ経営ガイドラインとCPSFは、異なる目的を持ちながらも補完的な関係にあります。以下のような相互作用があります:

@経営戦略と技術戦略の連携
・ガイドラインの役割
 経営層がサイバーセキュリティを経営課題として捉えるための方向性を示し、対策にリソースを割り当てるなどの意思決定を支援します。

・CPSFの役割
 経営層の意思決定に基づき、具体的に現場で実行する技術的・運用的対策を提供します。

例)経営者が「重要インフラのサイバーセキュリティを強化する」と決定した場合、その具体的な技術フレームワークとしてCPSFが活用される。

A目標設定と実行手段の統合
・ガイドラインが提示する「3原則」と「10項目」は、企業全体での目標設定や方向性を定める指針を提供します。

・CPSFはその目標を達成するために、セキュリティ対策の優先順位や実行計画を具体化します。

例)PDCAサイクルを用いた継続的改善を行う際、CPSFは具体的な実行手段を提供します(例えば、ネットワークセグメンテーションの方法やインシデント対応手順)。

B 組織的視点と技術的視点の統合
・ガイドラインは「組織全体でのリスク対応」を強調していますが、CPSFはその中で特に「サイバー空間とフィジカル空間のリスク」を統合的に管理する方法論を補完します。

例)サプライチェーン全体のリスク把握(ガイドライン第2原則)は、CPSFのリスク評価手法を活用することで実現可能です。

❷実践的な活用の流れ
(1) 経営層がガイドラインに基づいてリスクを認識し、方針を策定
 例)重要インフラ保護の必要性を認識し、リスク評価を実施することを決定。

(2)具体的な対策の実行にCPSFを適用
 例)リスク評価結果を元に、CPSFで示されるベストプラクティスを参照し、対策を実施。

(3)PDCAサイクルによる継続的改善
 例)CPSFの「診断ツール」を利用して現状を評価し、改善を図る。

❸まとめ
 「サイバーセキュリティ経営ガイドライン」は企業の経営層がサイバーセキュリティに取り組むための方向性を示し、「CPSF」はその実行手段を具体的にサポートするフレームワークです。両者を統合的に活用することで、組織は経営戦略から現場の技術的対策までを一貫して進められます。この連携により、サイバーセキュリティリスクを効果的に管理し、企業価値や信頼性を向上させることが可能です。



[あとがき]
 以上の解説で、もしかしたら、CPSFがサイバーセキュリティ経営ガイドラインのフレームワークとなりうるのか、ピンとこない方もいらっしゃるかもしれませんが、CPSF本文は、262ページあり、対応要件などが表となっていて、かなり詳しくまとめられています。その内容は、フレームワークと呼んで問題ない内容となっています。
 但し、その全てが自社で利用できるというものではありません。産業ごとにも違いますし、会社によってもいろいろな面で違ってきます。セキュリティやシステムエンジニアと相談し、必要と思われるところを選択し利用することをお勧めします。加えて、不足している部分もあると思われます。その部分については追加しご利用ください。
 なんて、偉そうなことを言っていますが、262ページの文書量も多いのですが、その中身もかなり細かい字でびっしり書かれていて、私も全部読めていない状況です。本文の熟読については、宿題としてすべて読み、気づいたことがありましたら、来週報告させていただきます。

 では、また!!!

■サイバー・フィジカル・セキュリティ対策フレームワーク(経済産業省))
https://www.meti.go.jp/policy/netsecurity/wg1/CPSF_ver1.0.pdf

■サイバー・フィジカル・セキュリティ対策フレームワーク(CPSF) 〜セキュリティ研究室(2024年11月17日)
https://fanblogs.jp/bahamuteve/archive/525/0

2024年11月22日

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


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

[昨日の復習]
 特殊文字をエンティティ参照に変換するのは、タグやスクリプトを無効化することによって、攻撃者が悪意のあるコードを埋め込んで実行することを防ぎ、自サイトを攻撃用サイトとして利用されないようにする目的があります。
 PHP4.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 EVEKnowlegeシステムへ登録して、知識として残しているという話をしていますが、そのシステムでも、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
 本日は、プログラム研究室から、PHP7.4から登場した新たな機能についてお話ししましょう。
 本日は、アロー関数です。

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

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

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




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

Busort($data, @fn($a, $b) => Aarray_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」という)を取りあげたいと思います。
 CPSFは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は、日本が直面する課題解決だけでなく、グローバルなモデルとしても期待されるビジョンです。テクノロジーと人間の調和を実現するために、政府、企業、学術界、そして個人が一体となって進めていく必要があります。



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

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

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



[あとがき]
 CPSFは、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/CSSの絵本 Webコンテンツ作りの基本がわかる新しい9つの扉 [ 株式会社アンク ]

価格:2178円
(2024/11/13 14:34時点)
感想(0件)




いちばんよくわかるWebデザインの基本きちんと入門[第2版] レイアウト/配色/写真/タイポグラフィ/最新テクニック [ 伊藤 庄平 ]

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




1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] [ Mana ]

価格:2585円
(2024/11/13 14:31時点)
感想(1件)




いちばんよくわかるHTML5&CSS3デザインきちんと入門【電子書籍】[ 狩野 祐東 ]

価格:2728円
(2024/11/13 14:36時点)
感想(1件)




■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 EVEKnowlegeシステムへ情報として整理しています。読むだけなら、もうちょっと早く読み終えることができそうなのですが、知識として定着させるために、じっくり読むことにしました。
 PHP8から出てきた、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ファイル、スタイルシートなどと言いますが、その定義の最適な方法が分かりません。簡単なものは今までもいくつか作っているのですが、これから作ろうとしているシステムは本格的なモノになります。PHPJavaScriptHTMLと本格的な規約を用意し、それに準じたシステムを作っているので、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箇所だけなので、知っていればできたかもしれません。やはり、新しいバージョンが出現するたびに、どんな機能ができたのか調べたほうがよさそうです。

 では、また!!!

2024年10月23日

サイバーセキュリティ経営ガイドライン 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
ハッカー.jpg
 午後に入りコンピュータの調子が悪いです。ちょっと、コンピュータを休ませた後、再起動しUSBにつながっている機器を再構成してやっと、ワイアレスのキーボードとトラックボールを利用することができました。本体附属のキーボートと、タッチパッドで操作は可能なのですが、それでも、バックグラウンドで何かをしているようで、不便さを感じています。
 ESETスマートセキュリティのバージョンが新しくなってから何かと検索をしたがるようになりました。特に、起動時に、リアルタイムスキャンを永遠と言っていいぐらいしています。起動時にリアルタイムにスキャンしなければならないファイルとは、何なのでしょうか?スキャンしたファイルが多すぎてログを見る気にもなりません。古いパソコンには不釣り合いなセキュリティソフトになりつつあるのかもしれません。
 ときどきあるこのようなコンピュータ操作の不便さは、ESETスマートセキュリティのせいだと考えています。タスクマネージャーを見ても、CPUメモリともそんなに使用していないのですが???初期化するのも面倒くさいし、ちょっと、思案中です。
 では、本日は、サイバーセキュリティ経営ガイドラインをもっと踏み込んで読んでいきたいと思います。

[勘違い]
 昨日気づきましたが、3原則の最後の項目は、ステークホルダではなく、IPAJPCERT/CCといった、セキュリティ関係者との対話について書いてありました。DXのステークホルダと混同してしまいました。サイバーセキュリティ経営ガイドラインで想定している関係者とは以下の人達を指します。

《社内》
・CISO
・セキュリティ担当者

《社外》
・IPA
・JPCER/CC など


などを想定しています。最新のセキュリティを実現するために必要不可欠な関係者をさしていました。

[重要10項目の詳細]
 今まで抑えていた内容だけでは、勘違い等がありそうなので、重要10項目についても深掘りしていきましょう!重要10項目として以下の項目を紹介しています。

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


 サイバーセキュリティ経営ガイドラインの詳細な内容としては、どんなことをするのかそのアクションを記載し、それを怠った場合のリスクを紹介し、その対策例を挙げています。
 この冊子への全般の不満ですが、どんなことをしたらいいのか具体的なことが記載されていない点です。
 どんなプロセスを踏んで、どんなものを作り、どんな人達に、どのようなことをするかまで書けていれば、完璧だと思います。これだと、作成者が作っただけのモノになっているような気がしますが、どうなのでしょうか?
 なお、その代わりになるかどうか分かりませんが、サイバーセキュリティ経営ガイドラインの巻末に、サイバーセキュリティ経営チェックシート、サイバーセキュリティ対策に関する参考情報があります。

[あとがき]

サイバーセキュリティ経営ガイドライン.png
 今回、文章を読みながら、まとめていきましたが、時間の都合上、最後まで読んでいなかったため、不正確な情報をブログに書いてしまいました。すみなせん。近頃ブログを休む日もあるのですが、なるべく毎日書こうとして、ちょっと無理をしていたかもしれません。今後ですが、毎日書くことを目標とするのではなく、正確な情報を提供することを目標に、情報をきちんと整理してからブログを書こうかなとしみじみと感じました(苦笑)。
 なお、サイバーセキュリティ経営ガイドラインver3.0には右記のような図があります。サイバーセキュリティ経営ガイドラインは、いろいろなフレームワーク規則規範ガイドライン準則等と関係があるという話を先日しましたが、この図からも分かります。正直いうとこの当たり深い知識がありません。そのせいだと思うのですが、中小企業診断士試験経営情報システムに2年連続落ちました(苦笑)。まっ、この試験の場合、それ以外にも苦手なところがあるのですが、他の科目を優先すると、経営情報システムまで手が回りません。ただね・・・。令和5年までの過去問は、60点以上とれているのですが、そこが不思議です・・・。
 その苦手な知識なのですが、今後ブログを書くことにより補足し、仕事に試験に役立ててゆきたいと思います。

 では、また!!!

2024年10月22日

サイバーセキュリティ経営ガイドライン −重要10項目− 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
開発.jpg
 昨日のやっと新システムのボリュームがなんとなくですが、分かるレベルになりました。10月いっぱいは、製造済みのクラスを、PSRの規約へ準拠させ、11月からは、残りのクラスを作るということになりそうです。そして、翌年から、セキュリティクラスを作りながら、それに合わせて、ログイン画面を作っていくということになります。システムを作るに際し、どうやって作っていき、どの辺を気を付けなければならないのか解説をしていく予定ですので、興味がある方は楽しみに待っていてください。内容としては、情報処理安全確保支援士で勉強した内容となります。それ以上は話せないということはご理解ください。
 では、早速、昨日の続きで、サイバーセキュリティ経営ガイドラインの話しをしましょう!

[昨日は?]
 サイバーセキュリティ経営ガイドラインには、サイバーリスクを経営者が経営課題と認識し、適切な対策を講じることで、事業の継続性や信頼性を確保し、そのために守らなければならない3原則と、会社として実装すべき重要10項目があるという話しをしました。昨日は、3原則の話しをしましたので、本日は、昨日の続きで、重要10項目の話しをしましょう。

[重要10項目]
 重要10項目ですが早速その内容を見ていきましょう。以下は、「サイバーセキュリティ経営ガイドラインver3.0」からの抜粋です。

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


見ていただくとわかりますが、以上の重要10項目は、3原則と対応がとれています。
 まず、原則1では、サイバーリスクを経営者が経営課題と認識し、適切な対策を講じることで、事業の継続性や信頼性を確保するために、経営者がCISOに対して指示する内容が指示1から指示8に記載されています。
 原則2、3では、事業の継続性や信頼性を確保することにあり、その事業継続性や信頼性を維持するために、指示9、10をCISOに指示するということになります。
 なお、CISOに指示する内容としていますが、以上の10項目の実装は、CSIRTがいいと考えます。今回、情報セキュリティに関する話題として、サイバーセキュリティ経営ガイドラインを紹介したのも、CSIRTを組織化するための知識を得るためでした。
 なお、昨日原則3について、開示することへのリスクを中心に書きましたが、重要10項目をみると、情報の収集や共有なども、関係者との積極的なコミュニケーションに含まれています。この活動自体は、CSIRTの活動に合致した部分になります。

[CSIRT]
 昨日から、CSIRTについて、書いていますが、どのような組織なのでしょうか?今回もChatGPTに解説をしてもらいましょう!

 CSIRT(Computer Security Incident Response Team、コンピュータセキュリティインシデント対応チーム)は、組織内で発生するセキュリティインシデント(サイバー攻撃やシステム障害など)に迅速に対応し、影響を最小限に抑えるための専門チームです。CSIRTは、インシデントの予防、検知、対応、復旧までの一連の活動を行い、組織の情報セキュリティ体制を強化します。


■CSIRTの役割
❶インシデント対応
 CSIRTの主な役割は、セキュリティインシデントが発生した際に速やかに対応し、被害の拡大を防ぐことです。これには、インシデントの特定、原因の分析、影響範囲の評価、再発防止策の実施が含まれます。

❷セキュリティ監視
 システムやネットワークの監視を通じて、異常な活動や潜在的なセキュリティインシデントを早期に検知する役割も担います。ログの監視や脅威インテリジェンスを利用して、サイバー攻撃の兆候を発見します。

❸インシデント予防
 インシデントを未然に防ぐために、脆弱性管理やセキュリティ教育、セキュリティポリシーの策定・改善を支援します。これにより、組織全体のリスクを低減します。

❹インシデント後の復旧と改善
 インシデント発生後には、システムの復旧や再発防止のための対策を講じます。また、対応の過程で得た教訓を基にセキュリティ対策の改善やポリシーの見直しを行います。


■CSIRTの構築方法
 CSIRTは、各組織の規模や業種に応じて構築されます。一般的には、次のステップで設置されます。

・体制の決定: 専任チーム、兼任チーム、または外部の専門機関に委託する形式が考えられます。
・メンバーの選定: セキュリティエンジニア、ネットワーク管理者、法務担当者など、さまざまな専門家がチームに含まれます。
・運用方針の策定: インシデント対応フローや報告体制、対応の優先順位などを事前に定めます。
・トレーニングと演習: チームが迅速に対応できるよう、定期的な訓練や模擬インシデントを実施します。


■CSIRTと関連する組織
・CERT(Computer Emergency Response Team)
 CERTは、CSIRTと同様にインシデント対応を行う組織ですが、特に大規模な国や地域を対象にしたインシデント対応を行う組織を指すことが多いです。例えば、JPCERT/CCは日本の国際的なインシデント対応機関です。

・SOC(Security Operation Center)
 SOCは、ネットワークやシステムのセキュリティ状況を常に監視し、インシデントの検出と通知を行うチームです。CSIRTがインシデント対応を専門とするのに対し、SOCは監視業務に特化しています。

■まとめ
 CSIRTは、セキュリティインシデントに対して迅速かつ効果的に対応し、組織の情報資産を守るための重要な役割を果たします。組織の規模や業種に応じた適切なチーム体制を構築し、定期的な訓練やセキュリティポリシーの改善を通じて、インシデント対応能力を向上させることが重要です。



[あとがき]
 多くの場合、推定で文章を書いているのですが、本日は、断定的に書かせていただきました。なお、断定的には書いているのですが、本当のところ、行間を自分の知識でうめて記載しているので、正確なところは分かりません。自分で作ったモノではないからです。ですので、もし、疑問がありましたら、経済産業省に問い合わせてください。今回のこの資料は、こんな考え方もあるんだなぐらいで見ていただければありがたいです。

 Windowsについて、断定的に解説をしている人がいますが、ときどき、本当か?って疑うタイミングが多々あります。自分で作ったモノでもないのに、よくそんなに断定的にしゃべれるなって・・・。Windowsってブラックボックス化され、かつ、複雑で、しかも、バージョンによりかなり違うという印象があるからです。そんな経験をすると、自分が作ったシステム以外は、どうしても推定で話してしまいます。サイバーセキュリティ経営ガイドラインも実は、システムとして捉えるとそんな感じになるのです。

 では、また!

2024年10月21日

サイバーセキュリティ経営ガイドライン3.0 ー3原則ー 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
サイバーセキュリティ.jpg
 昨日は、久しぶりに東京にいるにも関わらず、10時間以上寝てしまい、ブログの更新をすることができませんでした。ただ、そんな1日を過ごしてみて、1週間に1日ぐらいはそんな日が必要かなって感じています。今後、日曜日から月曜日に10時間ぐらい寝れる日をつくろうかなって思っています。土、日曜日は中小企業診断士の試験があるので、その日に休むのはリズム的にあまりよくないから、月曜日にします。
 では、そんな、日の翌日のブログですが、昨日書く予定だった、セキュリティに関するお話しをしましょう!

[サイバーセキュリティ経営ガイドライン]
 2022年の情報処理安全確保支援士のWeb研修で頻繁に出てきたキーワードに、「サイバーセキュリティ経営ガイドライン」があります。2023年度の研修はあまり出てこなかったのですが、多分、サイバーセキュリティ経営ガイドラインよりは、DXの方が知名度が上がり、理解されやすくなったからかもしれません。ただ、その重要性は失われたわけではなく、2015年12月28日に初版が出稿されてから、ver3.0は、2023年3月にリリースされ、今なお企業におけるセキュリティに重要な役割を果たしていると思われます。
 起業に際し、CSIRTを導入しようと考えています。そのCSIRTを実践しようとした場合、非常に重要なガイドラインです。そのため、このブログでサイバーセキュリティ経営ガイドラインを勉強するのと同時に、知識を共有したく今回紹介することにしました。

[サイバーセキュリティ経営ガイドラインとは?]
 サイバーセキュリティ経営ガイドラインの対象は、日本国内のすべての企業です。そして、その中でも、タイトルからも分かるように、経営者をターゲットにして策定されました。
 その内容は、サイバーリスクを経営者が経営課題と認識し、適切な対策を講じることで、事業の継続性や信頼性を確保することにあります。具体的には、「3原則」、及び経営者が情報セキュリティ対策を実施する上での責任者となる担当幹部(CISO等)に指示すべき「重要10項目」がまとめられています。

[サイバーセキュリティ経営ガイドラインの3原則]
 サイバーセキュリティ経営ガイドラインの3原則は、企業経営リスクへの対策を検討、議論するにあたり、考慮すべき原則が記載されています。以下は、経済産業省から出ている、サイバーセキュリティ経営ガイドラインからの抜粋です。

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


LRM株式会社のサイトには、以下のような形で要約されています。

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


 ❶のリーダーシップンの発揮は、情報セキュリティガバナンスで記載されている通り、情報セキュリティ対策の透明性を向上しその責任が経営層にあると定義しています。その定義されたその内容を主導権を持って実施するということを意味しているのだと思われます。
 ❷は、あまり世間一般には知られていないのですが、親(大)会社が狙われる手口として多いのが、サプライチェーン攻撃だと言われています。どんな攻撃か端的に言うと、子会社から親(大)会社を攻撃するといったものになります。なんで子会社からかというと、親会社は、セキュリティについても十分に費用をかけ、社員教育も十分し、攻撃するには、かなりハードルが高くなっています。しかし、子会社は、資金的にも、時間的にも親(大)企業ほどかけることができず、攻撃者からすると攻撃しやすいのです。そんな親と子の間のネットワークは通常つながっています。そのため、子会社から親(大)会社への攻撃が成立してしまうのです。その攻撃名が、サプライチェーン攻撃と言われています。その攻撃を念頭に入れた1原則だと思われます。
 ❸は、ステークホルダ及び社会への姿勢だと思います。これなのですが、その内容によっては、攻撃のトリガーになる可能性があります。そのため、「ISO 27001」や「NISTフレームワーク」などのセキュリティ基準に準拠しているなど、準拠している基準や、会社の体制にとどめるべきだと思われます。
 ❸は、最新のセキュリティを実装するために必要不可欠な、関係者を指します。それは、CISOのみならず、社内のセキュリティ関係者、外部では、IPA、JPCERT/CCを指します。その関係者の人たちと、緊密なコミュニケーションをとることを求めています。

[あとがき]
 情報セキュリティガバナンス、ISO 27001、NISTフレームワークなど、いろいろな規約、ガイドラインなどがからみあっていて、非常に説明しにくいのですが、その部分については、後日解説をします。ここでは、いろいろなフレームワーク、基準、規約、ガイドラインがあり、いろいろ関連しあっているとぐらいの理解でいいと思います。調べていくうちに、目から鱗なんてことがあるかもしれません。
 情報処理安全確保支援士の試験でも出題されるのですが、フレームワーク、基準、規約、ガイドラインなどの識別がむずかしく、どれにどんなことが書かれているのか覚えるのに非常に苦労した記憶があります。情報処理安全確保支援士の試験では、概要とその違いぐらいしか覚えていませんでしたが、この場をかりて、深い知識にできればと考えています。

 では、また!!!

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

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

2024年10月19日

独習PHP第4版 〜プログラム研究室〜

 こんにちは!
 ナビゲータのEVEです。
プログラマ.jpg
 今日も、独習PHP第4版について目を通しています。前回この本を読んだときは、必要な所だけ目を通したので、641頁ある本のほとんど読んでいなかったようです。4,000円近く支払って購入したのに、もったいないモノです。

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

価格:3740円
(2024/10/19 14:31時点)
感想(2件)



 独習PHP第4版ですが、毎日PDFでのページ数で、50頁読むことにしました。それ以上だと他の作業への負担が増しますし、その範囲内だと集中して読むことができそうだからです。PDFの頁数で、671頁あるので、14日ぐらいで読めそうです。そのぐらいだと、起業の検討も終わり、会社が設立されている可能性があるので、ちょうどよいかもしれません。
 そんな独習PHP第4版ですが、やはり、目新しい情報がいくつかありましたので、報告させて頂きます。

[Just-In-Time]
 Just-In-Time(以降JIT)って知っています?トヨタカンバン方式で利用されているものではありません。これ、PHP8からあらたに加わった機能です。
 PHPはインタプリタ言語だと多くの人が知っていますが、PHP8からは、インタプリタ言語とは言えなくなるような機能が追加されました。それが、JITです。
 インタプリタ言語は、毎回1行ずつ翻訳しますが、JITは内部的に一括翻訳します。一括翻訳されたコードはメモリ上に保存して再利用されるので、実行効率が大幅に向上します。その向上した性能は、以前の3倍という計測もあるぐらいです。もし、PHP8以前で運用しているグループがあるのでしたら、PHP8へバージョンアップすべきでしょう!

[BOM]
 以前のブログで、PHPのコーディング規約を紹介しましたが、その中で、「文字エンコーディング:ファイルはUTF-8 without BOMを使用すること。」という記述があります。それは、PSRの規約を踏襲したモノなのですが、どのようなものなのでしょうか?ChatGPTに聞いてみました。

 Byte Order Mark (BOM) とは、テキストファイルの先頭に置かれる特別なバイトシーケンスで、ファイルのエンコーディングやバイト順序を示すために使用されます。BOMは主に UTF-8, UTF-16, および UTF-32 のエンコーディングで利用されます。

■BOMの主な目的
❶エンコーディングの識別:
 BOMは、テキストファイルがどのエンコーディングで保存されているかを示すために使われます。たとえば、UTF-8では EF BB BF の3バイトがBOMとして使われます。

❷バイト順序の指定:
 UTF-16やUTF-32では、BOMがバイト順序を指定します。例えば、UTF-16では、リトルエンディアン(LE)の場合は FF FE、ビッグエンディアン(BE)の場合は FE FF となります。

■代表的なBOMのシーケンス
・UTF-8: EF BB BF
・UTF-16 LE: FF FE
・UTF-16 BE: FE FF
・UTF-32 LE: FF FE 00 00
・UTF-32 BE: 00 00 FE FF

■使用上の注意
 BOMがあることで、ファイルのエンコーディングを自動的に識別できるため、特に異なるエンコーディングのファイルを扱う際に便利ですが、いくつかの注意点があります。
 一部のプログラムやシステムは、BOMを正しく処理できない場合があり、表示や処理に問題を引き起こすことがあります。
 BOMが含まれるファイルを処理する場合、余分なバイトが出力されたり、ファイルの先頭に不必要な文字が現れることがあります。

■まとめ
 BOMは、エンコーディングの識別やバイト順序の指定に役立つ特殊なバイトシーケンスです。テキストファイルの互換性や正しい解釈を確保するために、BOMの存在とその影響を理解しておくことが重要です。


一部のプログラムやシステムでは正しく処理されないという記述がありますが、PHPもその中に含まれます。PHPプログラムをBOMありで保存すると、以下のような誤動作が発生します。

1)プログラムエラー
2)文字化け
3)セッションやクッキーの障害
4)ファイルの互換性の問題
5)パフォーマンス


以上も、ChatGPTから聞いた内容なのですが、BOMをつけてPHPプログラムを保存すると大きな問題が発生しそうです。なお、私が愛用している、秀丸ですが、デフォルトBOMは付けない設定です。そのため、今までこのようなことで困ったことはありません。

[あとがき]
 この間、静的メソッドの話をし、その関連情報として、静的プロパティについて話しましたが、それ以外に静的変数というのもあるようです。その部分に関して言うと、かなり混乱しています。現在のペースで読み続けていくと、今日から5日後に当該頁に達し、そのときに詳細な報告ができると思います。

 機能が違うものに名称を付けるとき、明らかに違う名前で付けてもらえるとありがたいと思ったのは私だけでしょうか?

 では、また!!!

2024年10月18日

EVEシステムの開発 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 今日のシステム開発はお休みです。
 午前中、PHPの本を50頁ほど読み、収穫としては、Vue.jsという技術について知ったこと・・・。
 Vue.jsとは、Vue.jsダウンロード後、サーバーからデータをダウンロードして、クライアント側で画面を生成するというフレームワークになるそうです。そのような技術のため、HTML(Vue.js含む)自体は1度きりダウンロードし、それ以降は、画面を構成するデータのみのダウンロードなので、通信速度が速いというメリットがあります。PHPと直接関係ないのですが、興味を引かれました。最初のリリースは、今から10年前の2014年で、最新版は、2020年9月18日にリリースされた、ver3.0になるそうです。本日早速図書館へ予約し、読んで自分のサイトで利用できそうなら研究対象としたいと考えています。なお、担当研究室は、プログラム研究室です。

[案件検索中]
 PHPの開発としては、本日、本を読んだだけで終えてしまいましたが、一応、今年の12月で、現在製造しているAPIを完成させたいと考えています。それ以降は、実際にフレームワークの製造に入ります。そんな、プロジェクトの進行状況なのですが、そのプロジェクトを前に進めるために、資金源を確保するための準備を進めています。インターネットで仕事を紹介しているサイトが複数あるのですが、そのサイト案件を受註し、資金を得ようと考えています。

[インターネットからの受註]
 本日登録したのは、クラウド・ワークス・・・。マーケティングを兼ねて登録しようとしたのですが、会社の登記の番号と言ったらいいのでしょうか?それと社印がないと、法人として登録できないようです。どの形態で会社設立しようか、現在検討中で、登録予定も現時点未定です。だから、マーケティングがてら、個人名で最初登録してどんな感じか感触を得てからとも現在考えています。
 システム開発だと、めんどくさそ〜っなことがたくさん出てくるのですが、プログラム開発ならそんなにめんどうなことはないかなとは思っているのですが、どうでしょうか?何があるか分かりませんからね・・・。

[サラリーマン時代の記憶]
 サラリーマンで経験した最後の方のプロジェクトは、かなり厳しい状況でした。新入社員の時のような、まっさらなプロジェクトはほとんどなく、資金が足りず、システムも作り直した方が早いかもしれないといったプロジェクトがほとんどでした。一般的にそれを火消しというのですが、そんなプロジェクトで工夫してできる事は限られており、やることはほぼ決まっています。ただ、やるべきコトをやっていなかったプロジェクトが多いような気がしましたが、気のせいでしょうか?
 そんなプロジェクトばかりではないと思うのですが、今年だったか、去年だったと思いますが、聞いた情報だと、現在、プロジェクト成功率は3割だというのです。確か、私がいたときは5割だったような気もするのですが・・・。そんな状況を聞くにやはり、二の足を踏んでしまいます。

[あとがき]
 以上のような状況で、正式なシステムへの登録はちょっと待とうかと思います。無限責任のまま仕事をする勇気はありません。よくある話なのですが、責任を取るのが責任者のはずですが、その責任を、外注とか、外部に押しつけるといったことがあります。そんな不誠実な組織ばかりではないのは知っていますが・・・。
 心配性な自分の性格がうらめしくもありますが、もうしばらく辛抱したいと思います。

 では、また!!!

2024年10月17日

静的メソッド・静的プロパティ 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
作業.jpg
 ブログを書く方法として、大きく分けて2つあります。
 1つは、前調べをきちんとしてから目的をもって、ブログを書く方法・・・。
 もう一つは、なんか、疑問があり、その疑問を解決するために、調べながらブログを書く方法・・・。
 どちらも、知識を整理し、後で見返すことができるというメリットがあります。前者は、結論を予め決めて書き出すのですが、後者は、最初どんな結末になるのか全く分かりません。そんな後者ですが、普段だったら、深掘りするのは面倒くさいようなものまで、詳細に調べることができるというメリットがあります。だから、このブログでは、後者の書き方を多用します。ただ、2024年10月15日の「システムエンジニアが目指す中小企業診断士」は、おかしな内容になってしまいました。
 まっ、そんなこともあるのですが、本日も後者の方法で、PHPプログラミングについて書きます。

[独習PHP第4版]
 本日は、PHPのクラスメソッドについてまず最初にかきましょう!Javaは自分が整理した資料を読み直してみましたが、それにより思い出すことができました。しかし、PHPは、オブジェクト指向言語としてプログラミングするのは初めてですし、その中でクラスメソッド、静的メソッドがあるなんてことも、つい先日知りました。多分、Javaと同じじゃないかなとは思うのですが、想像でプログラミングするわけにはいけないので、以前購入した、「独習PHP第4版」から同記述を探したいと思います。

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

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



 よく考えたら、最初必要な所だけ斜め読みしてから忘れていましたが、頁を開くのは久しぶりです。なぜそのようなことになっているかというと、ほぼ理解できているということもありますが、AIの力が大きいでしょう!ただ、AIもときどきおかしい回答をすることもあり、総合的な言語知識は必要不可欠だと思われます。これを、機会にまた本を読み直したいと思います。
 この本ページ総数641頁です。全部読んでからプログラミングするのは時間がかかるので、必要なところだけ斜め読みしてシステムを開発したのですが、ここにきて、本の重要性を再認識しています。

[クラスメソッド]
 では、早速例を見て行きましょう!以下は、ChatGPTに御願いして作ってもらったClassです。


class MyClass {
public static $staticVar = 'Hello, World!';

public static function staticMethod() {
return 'This is a static method.';
}
}

echo MyClass::$staticVar; // 'Hello, World!'と出力
echo MyClass::staticMethod(); // 'This is a static method.'と出力



ここで背筋に凍るようなものを感じたのは、静的プロパティ・・・。これ、オブジェクト指向言語で書き始めた頃、多用していましたね・・・。理由は、変数の意味を明確にしたかったから・・・。そのため、メソッド内で定義した変数はstaticをつけて定義をしていました。それが実は、静的プロパティとして利用しようとしていたとは・・・。
 変数は、クラス内で自由に参照するのはいいのですが、それ以外から閲覧するのは正直問題ありと考えています。そのため、メンバー変数は私が作るプログラムではすべてprivateです。Javaだとpublic static void main()なんて記述でよく見ますが、現在すべての言語非常に似ていると言うことを再認識しないといけないようです。
 現在は、すべて書き換えているのですが、無知とは怖いモノです。
 ちなみに、今まで、メンバー変数クラス変数と言った言い方をしましたが、Javaだと、クラス変数とは静的プロパティを指します。PHPでは、クラス変数=静的プロパティではないらしいですが、以降は、メンバー変数という言い方をします。ただ、クラス定数という言葉もあり、これは、Java、PHPとも同じ意味で使用され、メンバー変数とともに記述される定数です。JavaScriptと同様に、const で宣言します。そろそろ、頭が混乱してきました(笑)。
 なお、以上の例ですが、使い方は、Javaとあまり変わりがないようです。

[あとがき]
 調べ始めて思いましたが、やはり、きちんと本を読み直した方が良いようです。「独習PHP第4版」は最後まで読めていないので、初めて読む章もあります。まず、最初ざっと読み、知識として不足してそうなところを深掘りするスタイルで学習を進めたいと思います。
 AIをサポーターとして利用するのはいいのですが、AI主体で作るプログラミングの危険性を近頃感じています。お互い気をつけましょう!

 では、また!!!

2024年10月14日

静的メソッドって? 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
ビジネス.jpg
 本日、奥様と一緒に司法書士の方にあってきました。面談理由は、どの組織形態で起業したらいいのかという相談です。この場で何回か起業について書いてきました。その時の内容としては、LLP(有限責任事業組合)について興味があり、それで起業したいという話をしていたのですが、本日司法書士の方と話したところ、ちょっと、心動いています。
 LLP(有限責任事業組合)は、ず〜っと、組織変更しない場合は利益があるのですが、組織変更を念頭にいれると、魅力が薄れます。もし、最終組織形態が、株主会社なら設立当初から、株主会社にした方がメリットが大きいようです。ただ、株主会社になった場合の収益を考えたら、そのメリットとは雀の涙ぐらいのような気がするのですが・・・?捕らぬ狸の皮算用をしていますが、事務手続きの苦労などをも含め一ヶ月ぐらいをめどに結論を出したいと思います。
 それでは、今日は、プログラム研究室から、静的メソッドインスタンスメソッドの違いについて書かせて頂きます。

[今まで忘れていた静的メソッド?]
 静的メソッドって知っている人います?忘れていたのですかね?ChatGPTとプログラムをデバックをしていて、初めて聞いたような気がします。以前Javaの試験で使用した資料に目を通していますが、ないようです。本当になかったかどうか微妙なのですが・・・?
 では、静的メソッドとはどのようなモノでしょうか?ChatGPTに聞いてみます。

■静的メソッド(static method)
★定義
 静的メソッドは、クラスに直接属するメソッドで、インスタンスを作成せずに使用できるメソッドです。クラスそのものに関連する機能を提供します。

★特徴
 クラス名を使って呼び出します(インスタンスを必要としない)。
 通常、static キーワードで定義されます(言語によって異なりますが、例えばPHPやJava、C++ではstaticを使用)。
 静的メソッドの中では、インスタンス変数(オブジェクト固有の変数)を参照できず、静的変数(クラス共通の変数)のみを操作できます。


 はっきり言って、静的メソッドでの製造は、従来の構造化プログラミングなどプログラムと同じような感じです。だったら、なんで、インスタンスメソッドなんかあるのだろうという疑問が浮かび、それについて、ChatGPTに聞いてみました。

 インスタンスメソッドが存在する理由は、オブジェクト指向プログラミング(OOP)の核心となる「状態管理」や「柔軟性」にあります。以下、インスタンスメソッドが必要とされる理由について詳しく説明します。

❶オブジェクトごとの状態を管理するため
 インスタンスメソッドは各オブジェクトの固有の状態(プロパティ)にアクセスして操作するために存在します。オブジェクト指向の基本的な考え方は、実世界の物体や概念をプログラム内でモデル化することにあります。例えば、異なる「車」オブジェクトを扱う場合、各車にはそれぞれの状態(色、速度、燃料量など)が異なるため、インスタンスごとにこれらの状態を管理しなければなりません。

❷カプセル化とデータの隠蔽
 オブジェクト指向では「カプセル化」という概念が重要で、これはデータ(プロパティ)を隠し、直接アクセスさせないようにするための仕組みです。インスタンスメソッドは、オブジェクトの内部状態を安全に管理・操作し、外部からの直接操作を防ぎます。このように、データにアクセスするための専用メソッド(getterやsetter)を提供することで、セキュリティやデータの整合性が保たれます。

❸柔軟性と拡張性
 インスタンスメソッドは多態性(ポリモーフィズム)を活かして、同じメソッド名でも異なる動作を持たせることができます。これにより、各オブジェクトのクラスに応じて異なる振る舞いを実現できます。静的メソッドではこの柔軟性が制限され、特定の動作に依存した設計になりがちです。

❹オブジェクト同士の相互作用を実現するため
 インスタンスメソッドは、複数のオブジェクトが相互にやり取りしながら状態を変化させるような複雑な動作を実現するために必要です。オブジェクト同士の関係を持ち、個々のオブジェクトが他のオブジェクトと連携するシステムを構築する際、インスタンスメソッドが役立ちます。

■まとめ
・インスタンスメソッドの必要性は、プログラムにおけるオブジェクトごとの状態管理や、複雑な相互作用を柔軟に実現するためです。特に、オブジェクト指向の基本的な概念である「カプセル化」や「多態性(ポリモーフィズム)」を活用する際に重要です。
・静的メソッドは便利である一方、柔軟性や個別の状態管理が必要なケースではインスタンスメソッドが不可欠です。


以上について、意訳すると、いろいろな人がプロジェクトに参加することを考える場合、従来のプログラム手法(静的メソッドのような開発手法)より、オブジェクト指向言語での開発が効率的、拡張的だということだと思います。

[あとがき]
 Javaの資格は、2016年にBronze、2017年にSilverを取得し、そのまま放置していました。まっ、インターネットから仕事をしてもよかったのですが、実務を経験したことがないということがためらいの原因となりました。だったら、PHPJavaScriptHTMLなどなどいろいろあったのですが、昔ながらのプログラマとしては、自分のプログラム開発手法を自分のシステムに適用するのは問題ないのですが、他のシステムに適用していいのかどうか悩みました。そんな悩みを解消してくれたのが、ChatGPTです。自分が作ったプログラムを元に、最新のソースに変換してくれるのです。自分の名誉のために言うと、そんなに大きくは違いません。但し、ChatGPTから提供されたロジックは、目から鱗な点が多々あります。そんなAIの力を利用できるのと同時に、新型コロナ感染症の数年を通して、リモートワークが普通になったという点も大きいでしょう。
 今まで、SNSや、とかもやってきましたが、エフェクチュエーション的な考え方で言うと自分でコントロールできないことはビジネスにならないということは、この数年身をもって知りました。
 そんな状況で、私が考える環境が揃い、かつ、ブログを通して個人的な悩みを話してきましたが、それも、このブログを多くの人に見て頂いたことにより解消しつつあるような気がします。
 今まで、引きこもりのような生活だったのですが、これから、一歩前に出ます。

 では、また!

追伸・・・。
このブログを書き終えて、もしかして、静的メソッドには、別な言い方があるのでは?っということで探したところありました。クラスメソッドです。クラスメソッドで資格を取得した時の本を調べてみると、ありました・・・。勉強していたのですね・・・。忘れていただけでした・・・。ここ1、2年オブジェクト指向でプログラミングしていますが、脳裏にさえ出てきませんでした。来年JavaGoldの試験を受けますが、Bronze、Silverでの勉強の復習をしたいと思います。

■起業のリスクヘッジについて考える 〜システム開発研究室〜(2024年10月1日)
https://fanblogs.jp/bahamuteve/archive/496/0

■LLPとは? 〜システム開発研究室〜(2024年10月2日)
https://fanblogs.jp/bahamuteve/archive/497/0


2024年10月12日

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


 こんにちは!
 ナビゲータのEVEです。
ログ.jpg
 昨日は、PHPコーディング規約について紹介しましたが、本日は、JavaScriptのコーディング規約について紹介したいと思います。
 ただ、先ほどまで全く考えていなかったので、まずは、ChatGPTに、Google JavaScript コーディング規約を調べてもらおうと思います。

[Google JavaScriptコーディング規約]
 2024年9月12日に、EVE VProjectのJavaScriptコーディング規約を、どこのコーディング規約に揃えるかという話しをしました。その検討の結果、Googleになったのですが、決まったことだけを報告しどのようなコーディング規約にするのか検討・報告していませんでした。まっ、この検討をしている時には既に、既存のJavaScriptをすべてクラス変換した後だったので、今までは検討する必然性がなかったからなのですが・・・。ただ、昨日PHPのコーディング規約を決めた結果を、ChatGPTに評価してもらったところ、PHP、JavaScript双方に関連する変更点が出てきたため、今回、JavaScriptの検討をすることにしました。
 それでは、早速Googleのコーディング規約について、ChatGPTに聞いてみましょう!

 GoogleのJavaScriptコーディング規約は、コードの可読性と一貫性を高め、チームでの共同作業をスムーズに進めるためのルールセットです。以下に、主要なポイントを詳細に説明します。

❶スタイルとインデント
1)インデント: 2スペースを使用します。タブは使用しません。
2)行の長さ: 1行の長さは最大80文字までに制限します。ただし、例外として長いコメントや長い文字列がある場合は、最大120文字まで許容されます。

❷変数の宣言
1)constとletの使用:
2)可能な限りconstを使用し、再代入する必要がある場合のみletを使用します。
3)varは使わず、ES6で導入されたconstやletを推奨します。
4)スコープ: 変数は可能な限り宣言のスコープを限定します。グローバル変数は避け、ブロックや関数スコープ内で定義します。

❸命名規則
1)変数名や関数名: キャメルケース(例: camelCase)を使用します。
2)クラス名: パスカルケース(例: PascalCase)を使用します。
3)定数: 定数は全て大文字でアンダースコアで単語を区切ります(例: MAX_COUNT)。

❹関数のスタイル
1)矢印関数: 短い関数は、ES6の矢印関数(=>)を使って簡潔に記述します。
2)関数の宣言と式: 宣言形式(function foo() {})と関数式(const foo = function() {})の両方が使用されますが、必要に応じて使い分けます。矢印関数は短く、thisをバインドする必要がない場合に推奨されます。

❺オブジェクトと配列のリテラル
1)オブジェクト: オブジェクトリテラルは短縮プロパティ名やメソッドの略記法を使用します。
2)配列: 配列リテラル([])を使用します。new Array()は使いません。


❻コメント
1)ブロックコメント: 複数行の説明が必要な場合は、/* */を使ってブロックコメントを書きます。
2)行コメント: 1行コメントは//を使用します。
3)JSDoc: 関数やクラスにはJSDoc形式でドキュメントコメントを追加し、パラメータや戻り値を記述します。

❼クラスとメソッド
1)クラス名はパスカルケースで記述します。
2)プライベートメソッドやフィールドには、ES2020で導入された#記号を使います(例: #privateField)。
3)コンストラクタでクラスのフィールドを初期化します。

❽エラーハンドリング
エラーハンドリングにはtry-catchを使用し、エラーオブジェクトに詳細な情報を含めます。

❾セミコロンの使用
1)JavaScriptは自動セミコロン挿入(ASI)機能を持っていますが、明示的にセミコロンを付けることが推奨されます。

❿イミュータブル性
1)可能な限りオブジェクトや配列はイミュータブルに保ち、Object.freeze()やスプレッド演算子(...)を使ってコピーを作成します。

⓫テンプレート文字列
文字列の結合には+ではなく、バックティック(`)を使ったテンプレートリテラルを使用します。

⓬ES6+ 機能の使用
1)ES6以降で導入された機能(例: const, let, アロー関数、テンプレートリテラル、classなど)を使用します。
2)importとexportを使ってモジュールを分割し、コードをモジュール化します。


意味不明な記述もあるのですが、この規約を、昨日作ったPHP規約とマージします。

[Google JavaScriptコーディング規約とEVE VProjectPHPコーディング規約のマージ]
 以下が、Google JavaScriptコーディング規約とPSRをもとにして作成した、EVE VProjectのJavaScriptのコーディング規約です。やはり、Google JavaScriptコーディング規約とPSRは、似ているといった印象です。JavaScriptもPHPもどちらも、秀丸で製造しているので、間違えてしまいそうです。
 まだ、明確に理解していない点が多々あるため、暫定的な規約だとご承知ください。

【クラス】
★Class機能概要
・1ファイル1クラスで記述する
・1要素、1インスタンスで処理をする。
→処理対象の要素1つに対して、1インスタンスで操作する。

★クラス命名規約
・パスカルケースで記述する。
・クラス名の最後にClassとつける
・ファイル名と同一名とする。

★クラス記述規約
・クラスの開始ブレース({)は、クラス名の次の行 に配置します。
・クラスのプロパティとメソッド間には、1行の空行を挿入します。
・引数は1行ずつ記述し、70バイト目にその名称を記述する。

★クラス変数
・コンストラクタでクラスのフィールドを初期化します。


【コンストラクタ】
★コンストラクタ機能
・引数は必ず入力データチェックを行う。
・引数として取得した値は、クラスの変数として設定する。
・Classの特性をよく理解し、取得した引数のプロパティ情報を取得し、クラス変数として管理する。


【メソッド】
★メソッド機能
・引数は必ず入力データチェックを行う。
・正常時には目的の値を返却するが、異常の場合は、必ずfalseを値として返却する。
・異常時の詳細な情報は、クラス変数として管理し、必要に応じて内容を確認できるように製造する。
・異常時の場合は、処理の途中で中断できるが、正常な場合は、メソッドの最終行で値を返却する。
・返却値としてメソッド内で共通の変数を利用した場合、rtnとする。

★メソッドの記述
・引数は1行ずつ記述し、70バイト目にその名称を記述する。
・メソッド内使用変数はメソッドの先頭にすべて記述する。
・変数名は、変数名のみを記述し、場合によって、初期化する。
・メソッドの開始ブレース({)は、メソッド名の次の行 に配置します。
・メソッドの引数リストが長い場合、複数行に分けることができます。この場合、各引数は新しい行に配置し、カンマで区切ります。
・返却値の型は引数と行を別にする。
・返却値の型はメソッドの{と同じ列に記述する。

★メソッド命名規約
・キャメルケースで記述します。
・privateメソッドの場合先頭に、#をつける。


【関数】
・HTML内JavaScriptは、function関数で製造します。
・矢印関数: 短い関数は、ES6の矢印関数(=>)を使って簡潔に記述します。
・関数宣言は矢印関数を推奨します。特にコールバックや匿名関数には矢印関数を使います。
・名前のある関数には function キーワードを使うこともありますが、通常は const を使い、矢印関数を利用します。


【プロパティ】
・キャメルケースで記述します。

★クラス変数機能
・クラス変数の設定は、同一クラス外から設定する場合、setメソッドを製造する。
・クラス変数の取得は、同一クラス外から取得する場合、getメソッドを製造する。

★クラス変数命名規約
・privateプロパティの頭に#をつける

★定数
・定数名:定数名はすべて大文字で、単語の区切りにアンダースコア(_)を使用します。

★メソッド内変数
・メソッド内の処理結果を格納する変数は、何も制約がない場合ansにする。
・Boolean変数には is、has、should などのプレフィックスを付けて、真偽値を表していることが明確になるようにします。
・プライベートプロパティには先頭に#をつけて、他のコードから直接アクセスしない意図を示します
*プライベートプロパティとは、PHP、Javaでいうprivate変数を指します。
・var は使わず、const または let を使う。const は再代入されない変数に使い、let は再代入が必要な変数に使います。


【文字列】
・文字列は必ずシングルクォート(')を使用します。テンプレートリテラル(バッククォート)は、変数を含める場合に使用します。


【コメント】
・JSDoc: 関数やクラスにはJSDoc形式でドキュメントコメントを追加し、パラメータや戻り値を記述します。
/**
* This method sets the error message.
*
* @param string $errMsg Error message to set
* @return bool True on success, False on failure
*/
・クラス、メソッドのヘッダには、以下の内容を記述する。
┣ Class Name(クラス名)
┣ Function Name(メソッド名)
┣ Parameters(引数)
┣ Return Value(返却値)
┃┣ On Success(正常時)
┃┗ On Failure(異常時)
┣ Author(製造者)
┣ Creation Date(製造年月日)
┣ Update Date(更新年月日)
┣ Release Date(リリース日)
┣ Version(バージョン)
┣ Summary(概要)
┣ Remarks(備考)
┗ Notes(注意)概要 ← 必要に応じて
・コメントを1行で記述する場合は、同コメントは次行のプログラムを機能を説明するものでなければならない。
・コメントは、70バイト目から記述する
┗70バイト目から記述するコメントは、変数等の名称でなければならない。
・コメントの内容とプログラムが矛盾がないように記述する。
・コメントを//で記述する場合、//の後に1バイトスペースを挿入する。


【オブジェクト・配列】
★配列の記述
・配列は ショート配列構文 ([]) を使用します。
・配列が複数行にまたがる場合、各要素は新しい行に配置し、インデントします。
・配列は複数形の名前を使うことが推奨されています。これは配列に複数の要素が含まれることを意味するためです。

★配列処理
・forEach, map, filter, reduce など、組み込みの配列メソッドを積極的に使用します。
・可能な限りオブジェクトや配列はイミュータブルに保ち、Object.freeze()やスプレッド演算子(...)を使ってコピーを作成します。

★オブジェクトと配列
・オブジェクトリテラルや配列リテラルを使用する。
・オブジェクトプロパティや配列要素は適切なインデントで記述します。
*人の体と言ったら、頭、手といった形で変数を作るのではなく、配列で表現するという意味らしい?


【例外処理】
★例外処理
・例外処理は、try〜catchで記述し、エラーの場合は処理を終了する。

★例外処理の記述
・try、catch 句の開始ブレースは、同じ行に配置します。
・catch 句は、前の try ブロックと同じインデントレベルで記述します。

【デストラクタ】
・クラス変数をすべて初期化する。



【共通記述方式】
・=(イコール)の位置は、できるだけ、コンストラクタ内、メソッド内で先頭から同じ位置に記述する。
・if文で判定する場合、判定条件は1行ずつに記述し分かりやすく記述する。
・ファイルの終了行
┗ファイルの最後には必ず 空行を1行 入れます。
・キーワードや制御構造のスタイル
┣キーワード (if、else、while、switch など)の後には、スペース を入れます。
┣制御構造の条件式の前後にはスペースを入れます。
┣開始ブレース({)は同じ行に配置します。
┗switch 文の case と default は、インデントされませんが、その内部のコードはインデントされます。break ステートメントは case 内でインデントします。
・常に文の終わりにセミコロンを付けます。
・ブロック内の文は必ず {} で囲みます。複数行の if や else の条件式には適切なインデントを使用します。
・ES6(ECMAScript 2015)以降の新機能を積極的に利用します。特に、const や let、arrow functions、class、template literals、destructuring などを使います。
javascript
・最大80バイトとするが、80バイトを越える場合120バイトまで許容する。
・120バイトを越える場合改行して記述する。


【インデント】
・1インデント、2バイトとする。



[あとがき]
 昨日、ChatGPTに指摘された部分を、JavaScriptに取り入れました。クラスヘッダ、メソッドヘッダの部分なのですが、PHPもJavaScriptも同じ記述方法なので、ここは揃えるまでもなく、既に製造した、EVEシステムを変更すべきでしょう?JavaScriptを1クラスこの仕様に基づいて作り変えた見たのですが、文字列置換だけで何とかなりそうです。
 ブログをアップロード後、ちょっと休んでから、ChatGPTでのデバックをしながら、修正したいと思います。その前に、昨日公開したPHPのコーディング規約を修正する方が先ですか?

 では、また!!!

■JavaScriptの世界標準規約 〜プログラム研究室〜2024年9月12日)
https://fanblogs.jp/bahamuteve/archive/488/0

2024年10月11日

プログラム改修 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 毎日、午前中小企業診断士の勉強をした後、午後ブログとプログラム製造をしています。
 プログラム製造は、新規でクラスを作ることは少なく、ChatGPTにデバックしてもらったプログラムを修正しながら、PSRに準拠した、新プログラム規約へ適合させる作業を実施しています。

[ChatGPTでのデバック]
 今までは、プログラムの製造中心にやってきましたが、ここへきて、作ったプログラムをChatGPTにデバックしてもらっています。理由は、JavaScriptのデバックで分かりましたが、クラス全体が完成していなくても、メソッド単体でデバックできることが分かったからです。それと、ChatGPTは、デバックするプログラムの長さに制約があります。短いクラスならいいのですが、長いステップのものだとデバックはできません。デバックしたい部分に関連しないプロパティ、メソッドを削除してからデバックしようとも考えましたが、めんどくさいのでデバックは二の足を踏んでいました。
 ただ、メソッド単体でデバックする場合、同一クラスで利用する、プロパティ、メソッドは省略した状態なので、結果が正確なものなのかどうかデバック後のプログラムは詳細にチェックしなければいけないでしょう?

[PSRに準じたプログラム修正]
 以上のようなデバックをしながら、PSRにプログラムを準拠するようにプログラムを製造しています。デバックをしてプログラムを修正するのですから、そのタイミングで規約に揃えてしまうのは自然な流れといえます。ただ、PSRをそのまま利用しているのではなく、以下のような規約を作りプログラム修正をしています。

【ディレクトリ構成】
・システムを分割するフォルダは、3桁
・各業務システムを分割するフォルダは、4桁(2桁+2桁)


【ファイルの基本構造】
・PHPタグ:ファイルは常に <?php または <?= のタグで始め、ショートタグ(<?)を使用してはいけません。
・文字エンコーディング:ファイルはUTF-8 without BOMを使用すること。


【クラス】
★Class機能概要
・1要素、1インスタンスで処理をする。
→処理対象の要素1つに対して、1インスタンスで操作する。

★クラス命名規約
・パスカルケースで記述する。
・クラス名の最後にClassとつける
・ファイル名と同一名とする。

★クラス記述規約
・クラスの開始ブレース({)は、クラス名の次の行 に配置します。
・クラスのプロパティとメソッド間には、1行の空行を挿入します。
・引数は1行ずつ記述し、70バイト目にその名称を記述する。


【コンストラクタ】
★コンストラクタ機能
・引数は必ず入力データチェックを行う。
・引数は、できるだけ型指定を行う。
・try〜catchで記述し、エラーの場合は処理を終了する。
・引数として取得した値は、クラスの変数として設定する。
・Classの特性をよく理解し、取得した引数のプロパティ情報を取得し、クラス変数として管理する。


【メソッド】
★メソッド機能
・引数は必ず入力データチェックを行う。
・引数は、できるだけ型指定を行う。。
・正常時には目的の値を返却するが、異常の場合は、必ずfalseを値として返却する。
・異常時の詳細な情報は、クラス変数として管理し、必要に応じて内容を確認できるように製造する。
・異常時の場合は、処理の途中で中断できるが、正常な場合は、メソッドの最終行で値を返却する。
・返却値としてメソッド内で共通の変数を利用した場合、rtnとする。
・返却値の型指定を必ずします。

★メソッドの記述
・引数は1行ずつ記述し、70バイト目にその名称を記述する。
・メソッド内使用変数はメソッドの先頭にすべて記述する。
・変数名は、変数名のみを記述し、場合によって、初期化する。
・メソッドの開始ブレース({)は、メソッド名の次の行 に配置します。
・メソッドの引数リストが長い場合、複数行に分けることができます。この場合、各引数は新しい行に配置し、カンマで区切ります。

★メソッド命名規約
・キャメルケースで記述します。
・メソッド名の頭にmeをつける
┣publicメソッドの場合
┃ meの直後に、uをつける。
┗privateメソッドの場合
  meの直後に、rをつける。


【プロパティ】
 キャメルケースで記述します。
★クラス変数機能
・クラス変数の設定は、setメソッドを製造する。
・クラス変数を取得する場合は、getメソッドを製造する。

★クラス変数命名規約
・private
 privateプロパティの頭にpriをつける
・public
 publicプロパティの頭にpubをつける

★プロパティ共通
・定数名:定数名はすべて大文字で、単語の区切りにアンダースコア(_)を使用します。
・メソッド内の処理結果を格納する変数は、何も制約がない場合ansにする。

【コメント】
・クラス、メソッドのヘッダには、以下の内容を記述する。
┣機能名
┣引数
┣返却値
┃┣正常時
┃┗異常時
┣製造者
┣製造年月日
┣更新年月日
┣リリース日
┣バージョン
┣概要
┗注意 ← 必要に応じて
・コメントを1行で記述する場合は、同コメントは次行のプログラムを機能を説明するものでなければならない。
・コメントは、70バイト目から記述する
┣70バイト目から記述するコメントは、変数等の名称でなければならない。
┗90バイトを越える場合改行して記述する。
・コメントの内容とプログラムが矛盾がないように記述する。


【配列】
★配列の記述
・配列は ショート配列構文 ([]) を使用します。
・配列が複数行にまたがる場合、各要素は新しい行に配置し、インデントします。


【例外処理】
★例外処理の記述
・try、catch 句の開始ブレースは、同じ行に配置します。
・catch 句は、前の try ブロックと同じインデントレベルで記述します。


【デストラクタ】
・クラス変数をすべて初期化する。


【共通記述方式】
・=(イコール)の位置は、できるだけ、コンストラクタ内、メソッド内で先頭から同じ位置に記述する。
・if文で判定する場合、判定条件は1行ずつに記述し分かりやすく記述する。
・ファイルの終了行
┗ファイルの最後には必ず 空行を1行 入れる必要があります。
 *ファイルの最終行でコードが終わると、ファイルを他のツールで処理する際に予期しない問題を引き起こすことがあるためです。
・キーワードや制御構造のスタイル
┣キーワード (if、else、while、switch など)の後には、スペース を入れます。
┣制御構造の条件式の前後にはスペースを入れます。
┣開始ブレース({)は同じ行に配置します。
┗switch 文の case と default は、インデントされませんが、その内部のコードはインデントされます。break ステートメントは case 内でインデントします。


【インデント】
・1インデント、4半角スペースとする。


【ファイル】
★インポート
 ファイルのインポートは、オートローダーで記述をする。

★名前空間と use ステートメント
┣namespace 宣言の後、1行の空行を入れる必要があります。
┣use ステートメントの後も 1行の空行を入れます。
┗同じ名前空間の複数のクラスをuse する場合は、個別に記述します。


以上の内容は、ChatGPTから教えてもらったPSRを基に作ったのですが、作ったものをChatGPTに評価したもらった方がいいことに気づきました。以下が、以上の規約のChatGPTの評価です。

■ChatGPTからの指摘
 全体的に非常に詳細に規定されていますが、いくつかの改善点や補足を提案します。
❶ディレクトリ構成
改善点: PSR-4に準拠する場合、ディレクトリ構成についても、クラスの名前空間がディレクトリ構造と一致することを明示しておくと良いでしょう。
例: App\Controller\HomeController は app/Controller/HomeController.php に対応する。

❷クラス
不足点: クラスの可視性についての記述がないため、public、private、protectedの適切な使用方法を追加するとよいです。
例: 「クラスは原則 public で宣言し、必要に応じて final または abstract を使用する」など。

❸コンストラクタ
改善点: エラーハンドリングの詳細が少ないので、エラー時の処理方法(例外を投げる、ログに記録するなど)を規定するのも良いでしょう。

❹メソッド
不足点: メソッドの可視性(public、private、protected)に関する規定を追加するとより詳細な設計となります。
例: 「メソッドの可視性は必要最低限とし、デフォルトでは private を使用し、外部からのアクセスが必要な場合にのみ public を使用する」

❺プロパティ
改善点: プロパティの初期化についての規定を追加すると良いです。PSR的にはクラスのプロパティは定義時に初期化しておくことが推奨されます。
例: 「プロパティはクラス内で必ず初期化する。特にnullableなプロパティは初期値をnullに設定する」

❻コメント
改善点: コメントの書き方は非常に詳細ですが、PSR-5(PHPDocスタイル)に準拠する形で規定しても良いでしょう。
例: PHPDocの形式で記述し、引数、返却値、例外を詳細に説明する。
php
コードをコピーする
/**
* This method sets the error message.
*
* @param string $errMsg Error message to set
* @return bool True on success, False on failure
*/

❼配列
不足点: 配列の宣言時の可視性や型について、強く型付けする規定を設けると良いです。
例: 「配列にはできるだけ型を指定する。特に配列の型宣言はPHP 7.4以降の型指定を利用する」
php
private array $items = [];

❽例外処理
不足点: 例外処理の仕組みに関して、finallyブロックの使用や、カスタム例外クラスをどう扱うかについて規定を追加できます。
例: 「例外が発生した場合、業務ロジックに応じて適切に例外処理を行い、必要に応じてfinallyブロックでリソース解放などの処理を行う」

❾デストラクタ
不足点: クラス変数を初期化するだけでなく、リソース解放の必要がある場合などの記述があっても良いです。
例: 「デストラクタでは、クラス変数を初期化するだけでなく、リソース(DB接続やファイルハンドルなど)の解放を行う」

❿ファイル
不足点: ファイルの命名規則や、どのファイルにどのクラスや関数を置くべきかを明示すると良いです。
例: 「クラス名とファイル名は一致させる。1つのファイルには1つのクラスのみを定義する」

⓫名前空間
不足点: 名前空間の命名規則(例えば、アプリケーションやモジュールごとの名前空間の付け方)を詳細に規定しても良いです。
例: 「アプリケーションの名前空間はプロジェクト名に基づき、ルートの名前空間に設定する」


 名前空間、ファイルインポート、ログ出力の部分の指摘は承知しています。実は、それを使うイメージができなかったことと、まだ当該規約に関連するプログラムを製造していなかったので、今まで規約に含めていませんでした。これ以降、プログラム製造時に考え、追記したいと思います。
 それ以外の項目については、規約に含めるかどうか検討します。後日結果について報告するかもしれません。

[あとがき]
 ChatGPTに聞いたところ、デバックできる文字数は、大体20,000〜40,000文字以内で、有料だろうが、無料だろうがステップ数は変わらないそうです。変わるのは解析能力とか、レスポンスの早さになるそうです。解析能力の向上とは、今まで以上に品質のよいプログラムを製造できるということでしょうか?非常に興味があります。毎日利用させていただいているので、ビジネス開始してからは有料で利用させていただきたいです。
 このブログ更新後、プログラムのデバック及びPSRへのプログラム適用をします。

 では、また!!!

2024年10月09日

ssh_config最終検討 ~ソフトウェア研究室~


 こんにちは!
 ナビゲータのEVEです。
ノートパソコン.jpg
 昨日まで、ssh接続時のセキュリティ向上案の内容を検討し、AllowUsersまで終えました。本日は、MaxAuthTriesからです。

# パスワード認証を無効にする
PasswordAuthentication no

# 公開鍵認証を有効にする
PubkeyAuthentication yes

# チャレンジレスポンス認証を無効にする
ChallengeResponseAuthentication no

# PAMを有効にする(多要素認証などのため)
UsePAM yes

# ルートログインを無効にする
PermitRootLogin prohibit-password:

# 特定のユーザーのみログインを許可(必要に応じて)
AllowUsers user1


# 最大認証試行回数を制限
MaxAuthTries 5

# 詳細なログを有効化
LogLevel VERBOSE

# X11フォワーディングを無効化
X11Forwarding no

# SSHのポート番号を変更(デフォルトの22を避ける)
Port 2222 # 任意のポート番号に変更



[MaxAuthTries]
 MaxAuthTriesについて、ChatGPTに解説をしてもらいましょう!

 MaxAuthTriesは、SSH(Secure Shell)プロトコルにおいて、特定の接続に対する最大認証試行回数を設定するためのディレクティブです。この設定は、SSHサーバーのsshd_configファイルで管理されます。以下にMaxAuthTriesの機能とその重要性について詳しく解説します。

❶認証試行回数の制限
 MaxAuthTriesは、SSHクライアントが接続中に認証を試みる回数の上限を指定します。例えば、MaxAuthTries 5と設定されている場合、クライアントは5回までの認証試行が許可されます。

❷セキュリティの向上
 この設定により、ブルートフォース攻撃からの防御が強化されます。ブルートフォース攻撃とは、攻撃者がパスワードや鍵を総当たりで試みて不正アクセスを試みる手法です。MaxAuthTriesが設定されていると、一定回数内に正しい認証情報を入力できなければ、接続が切断されます。

❸サーバー負荷の軽減
 認証試行回数を制限することで、不正な試行が続くことを防ぎ、サーバーへの負荷を軽減します。特に、多数のクライアントが同時に接続を試みている場合、無駄なリソース消費を抑えることができます。

❹ユーザーの誤操作防止
 ユーザーが誤って間違ったパスワードや鍵を使用して何度もログインを試みることを防ぎ、無駄な試行を減少させます。これにより、ユーザー体験が向上します。

❺ログインの監視と管理
 MaxAuthTriesの設定により、過剰な認証試行を行うユーザーを識別しやすくなり、セキュリティポリシーに従った管理が容易になります。特に異常な試行が検出された場合には、管理者が迅速に対応できるようになります。

■まとめ
 MaxAuthTriesは、SSHサーバーのセキュリティと効率性を向上させる重要な設定項目です。適切な値に設定することで、不正アクセスを防ぎつつ、サーバーの健全性を保つことができます。デフォルト値を理解し、必要に応じてカスタマイズすることが推奨されます。


 以上の通り、MaxAuthTriesは、パスワード認証などの場合、最大認証試行回数を指定します。公開鍵認証方式のため不要だと思ったのですが、公開鍵認証方式を採用した場合でも、公開鍵パスフレーズを用いるログイン方法があります。その場合、ブルートフォース攻撃などにより、無制限にログインを試行されるケースが考えられます。その攻撃により、システムに負荷がかかります。公開鍵がないとログインができないので、セキュリティ的にリスクはないと考えられますが、システム負荷という問題で試行回数を指定します。本番環境へ設定する場合は、この設定を有効にする目的から、1回でいいかもしれません。

[LogLevel]
 続きまして、LogLevelについて、解説をしてもらいましょう!

 LogLevelは、SSH(Secure Shell)サーバーの設定で使用されるディレクティブの一つで、ログの詳細度を指定します。この設定は、SSHサーバーが生成するログメッセージの量や重要性を制御します。LogLevelの機能について詳しく説明します。

❶ログの詳細度の設定
 LogLevelは、SSHサーバーが記録するログメッセージのレベルを設定します。利用可能なレベルは以下の通りです:

・QUIET: ログメッセージを最小限に抑え、エラーや重要なメッセージのみを記録します。
・FATAL: 致命的なエラーのみを記録します。
・ERROR: エラーに関するメッセージのみを記録します。
・INFO: 一般的な情報メッセージを記録します。デフォルト設定です。
・VERBOSE: より詳細な情報メッセージを記録します。接続や認証の詳細などが含まれます。
・DEBUG: デバッグ情報を記録します。トラブルシューティングに役立ちますが、非常に詳細で大量のログが生成されます。
・DEBUG1, DEBUG2, DEBUG3: デバッグレベルをさらに詳細に制御できます。数字が大きいほど、詳細な情報が記録されます。

❷セキュリティの向上
 より詳細なログを記録することで、不正アクセスや異常な動作を特定しやすくなります。例えば、VERBOSEやDEBUGレベルを設定すると、接続試行や認証の詳細が記録され、問題解決や監視に役立ちます。

❸トラブルシューティングの支援
 DEBUGレベルのログを有効にすると、SSH接続の問題を診断するために必要な詳細な情報が得られます。これにより、接続が失敗する原因や設定ミスを特定しやすくなります。

❹パフォーマンスへの影響
 LogLevelをDEBUGに設定すると、大量の情報がログに記録されるため、ログファイルのサイズが急増する可能性があります。また、ディスクI/Oの負荷が増加し、サーバーのパフォーマンスに影響を与えることがあります。そのため、通常はINFOまたはVERBOSE程度の設定が推奨されます。

■まとめ
 LogLevelは、SSHサーバーが生成するログの詳細度を制御する重要な設定です。セキュリティの強化やトラブルシューティングに役立つ一方で、設定によってはパフォーマンスに影響を与える可能性があるため、適切なレベルを選択することが重要です。通常は、必要に応じてINFOまたはVERBOSEが推奨されます。


本番環境は、高度なセキュリティでかつ高パフォーマンスを求めているので、LogLevelは、ChatGPTからの提案の通り、VERBOSEでいいでしょう!

[X11Forwarding]
 続きまして、X11Forwardingについて、解説をしてもらいましょう!

 X11Forwardingは、SSH(Secure Shell)プロトコルの設定項目の一つで、リモートサーバー上のGUIアプリケーションをローカルマシンで表示するために使用されます。この機能について詳しく解説します。

❶X11とは
 X11は、Unix系オペレーティングシステムにおけるグラフィカルユーザーインターフェイス(GUI)を提供するためのプロトコルです。X11を使用することで、リモートサーバー上で実行されるアプリケーションのウィンドウを、ローカルマシンに転送し、表示することができます。

❷X11Forwardingの機能
 X11Forwardingを有効にすると、SSHセッション中にリモートサーバーからローカルマシンへのX11アプリケーションの転送が可能になります。これにより、ユーザーはリモートのアプリケーションをローカルのデスクトップ環境で直接操作できます。

❸セキュリティ
 SSHは、デフォルトでX11転送を安全に行うための暗号化を提供します。これにより、リモートアプリケーションの表示やユーザーの入力が暗号化され、セキュアな接続が確保されます。

❹使用例
 X11Forwardingを有効にしたSSH接続を使用して、リモートサーバー上のアプリケーション(例えば、xtermやgeditなど)を実行すると、そのアプリケーションのウィンドウがローカルマシン上に表示され、ユーザーはリモートの環境にアクセスしているかのように操作できます。


サーバー側で普段CUIで利用する場合であっても、この機能を利用することは可能です。但し、その場合、xtermgeditなどのGUIツールがインストールされているということが前提となります。多分XServerはインストールしていないと思われますが、自分が作った環境ではなく、不明な点が多いので、この記述を残し、かつnoと指定しましょう!

[Port ]
 次にPortについて解説をしてもらいましょう!

 ssh_configファイルにおけるPortの設定について解説します。この設定は、SSHクライアントが接続する際のポート番号を指定するために使用されます。

■ssh_configのPort設定について
❶基本概念
 **Port**は、SSHクライアントが接続するサーバーのポート番号を指定します。デフォルトではSSHはポート22を使用しますが、セキュリティや管理の理由から、異なるポート番号を設定することができます。

❷利用シナリオ
1)セキュリティ向上
 サーバーのSSH接続ポートをデフォルトの22から変更することで、自動スクリプトやボットによる攻撃を減少させることができます。
2)複数のSSHサーバー管理
 同一のホスト名でも異なるサービスが異なるポートで動作している場合、ssh_configを利用して、それぞれのポート番号を明示的に指定することで簡単に接続できます。

❸注意点
 サーバー側でポート番号を変更した場合、SSHクライアントの設定にも同じポート番号を指定する必要があります。また、ファイアウォールやセキュリティグループの設定も確認し、新しいポートが開放されていることを確認してください。

■まとめ
 ssh_configファイルのPort設定は、SSHクライアントが特定のポート番号でサーバーに接続するために重要な要素です。セキュリティ向上や複数のSSHサーバーの管理を容易にするために、適切に設定することが求められます。


sshのプログラムポートは、基本22です。デフォルトのままでは、入口を既に教えている状態にあり、攻撃を成功させないまでも、攻撃をさせる機会を与えることになります。そのため、ここでは、本来の22番以外の番号を指定する方がいいでしょう?例では、2222と非常に分かりやすい値をつけていますが、実際に設定する場合は、複雑な番号がいいでしょう!

[あとがき]
 以上で検討を終えます。検討の結果、当初考えていた設定内容で問題ないということになりました。
 明日からになりますが、適切な部分に記述できるように、サーバー調査を開始します。
 
 では、また!!!

2024年10月08日

ssh_configの記述内容の検討 〜ソフトウェア研究室


 こんにちは!
 ナビゲータのEVEです。
コンピュータ.jpg
 昨日は、ssh接続時のセキュリティ向上案について、検討をしました。本日は、その続きでusePAMからになります。

# パスワード認証を無効にする
PasswordAuthentication no

# 公開鍵認証を有効にする
PubkeyAuthentication yes

# チャレンジレスポンス認証を無効にする
ChallengeResponseAuthentication no

# PAMを有効にする(多要素認証などのため)
UsePAM yes

# ルートログインを無効にする
PermitRootLogin prohibit-password:

# 特定のユーザーのみログインを許可(必要に応じて)
AllowUsers user1

# 最大認証試行回数を制限
MaxAuthTries 5

# 詳細なログを有効化
LogLevel VERBOSE

# X11フォワーディングを無効化
X11Forwarding no

# SSHのポート番号を変更(デフォルトの22を避ける)
Port 2222 # 任意のポート番号に変更



[UsePAM]
 では、早速、UsePAMの機能について、ChatGPTに聞いてみました。

 UsePAM は、SSH (Secure Shell) サーバーで PAM (Pluggable Authentication Modules) を利用するかどうかを制御する設定です。UsePAM が有効な場合、SSH サーバーは PAM を使って認証、セッション管理、アカウント管理、パスワード管理などを行います。

■UsePAMの機能
❶PAM (Pluggable Authentication Modules):
・PAMとは
 PAM は、Linux や他の UNIX 系システムで汎用的に使用される認証モジュールのフレームワークです。様々な認証方式やセッション管理の処理を簡単にプラグインのように追加できる仕組みです。システム管理者は PAM を使って、ユーザーの認証やアクセス制御、セッションの設定などを柔軟に構成できます。

❷認証管理:
 UsePAM を yes に設定すると、SSH サーバーは PAM を使ってユーザー認証を行います。これにより、パスワード認証、公開鍵認証、多要素認証 (MFA) など、様々な認証方式を PAM 経由で柔軟に統合できます。
 PAM を使うことで、認証に関する追加のセキュリティ機能(たとえば、ログイン試行回数制限、アカウントのロック機能、パスワード有効期限の管理など)が提供されます。

❸セッション管理:
 PAM はセッション管理にも使用されます。ユーザーが SSH でログインした際に、UsePAM が有効だと PAM によって、ユーザーの環境設定やログイン時に必要な操作(たとえば、ホームディレクトリのマウント、ログの設定など)を行います。

❹アカウント管理:
 PAM はアカウントの状態をチェックするためにも使われます。たとえば、アカウントが期限切れになっているか、パスワードが期限切れか、特定のユーザーにアクセス制限をかける必要があるかどうかを確認できます。これにより、ユーザーのアカウント状態に基づいたアクセス制御が可能になります。

❺パスワード管理:
 PAM を使うと、システムのポリシーに従ったパスワード変更や強制的なパスワードリセットなどの管理が可能です。これにより、パスワードの強度や有効期限、再設定のルールを厳密に管理できます。


■UsePAM の有効化によるメリット
・柔軟な認証方法
 PAM を通じて、パスワード認証、公開鍵認証、多要素認証など複数の認証方式を簡単に設定できます。

・セキュリティの強化
 ログイン試行回数制限や、アカウントロック機能を PAM で設定することができます。また、PAM を使用して、LDAP や RADIUS など他の認証システムと統合することもできます。

・システム全体の一貫性
 SSH の認証だけでなく、システム全体で PAM による認証とセッション管理を統一することで、一貫したセキュリティポリシーを維持できます。


■PAMを無効化するデメリット
 PAMを無効にすると、これらの追加のセキュリティ機能や認証オプションを利用できなくなります。パスワードやアカウントの管理が制限され、単純な認証方式のみを使用することになります。


■まとめ
 UsePAM は SSH の認証とセッション管理に関して、柔軟かつ高度なセキュリティ機能を提供します。これにより、システム管理者は多様な認証方式をサポートし、ユーザーアカウントやパスワード管理を細かく制御できるようになります。PAM の機能を活用することで、SSH のセキュリティが強化されるため、サーバーの安全性を向上させる重要な設定と言えます。


usePAMの機能としては、以上の通りです。以上の内容と色々調べてみて、止めても大丈夫かなとも思う所はあったのですが、いろいろなソフト会社がusePAMを利用していろいろなソフトウェアを提供しているという記述があり、この機能を停止することにより、どんなことが起こるかが分からないという点を踏まえ、止めないほうがいいということで、ここは、yesを設定するという結論になりました。

[PermitRootLogin]
 次は、PermitRootLoginについてです。

 PermitRootLogin は、SSH サーバーの設定で、リモートからの root ユーザーでのログインを許可するかどうかを制御するオプションです。PermitRootLogin の設定によって、root アカウントを利用した SSH 経由でのログインが可能かどうかを決定します。

■PermitRootLogin の機能
 PermitRootLogin オプションは以下の4つの値を指定できます。

❶yes:
 root ユーザーでのリモートログインを許可します。これがデフォルトの設定の場合もありますが、セキュリティ上のリスクが大きい設定です。

❷no:
 root ユーザーでのリモートログインを完全に無効化します。この設定により、root アカウントを使った直接ログインはできません。root 権限が必要な場合は、一般ユーザーとしてログインし、その後 su や sudo を使って root 権限を取得する必要があります。

❸prohibit-password:
 パスワードを使用した root ログインを禁止し、公開鍵認証のみを許可します。この設定により、パスワードによる brute-force 攻撃を防ぎつつ、公開鍵認証を使って root でのログインを可能にします。

❹forced-commands-only: 
 authorized_keys ファイルに制限付きのコマンドが設定されている場合のみ root ログインを許可します。これにより、root での SSH ログインは制限され、特定のタスク(バックアップやスクリプトの実行など)のみ実行可能にできます。

■セキュリティ上のリスク
★root のリモートログインを許可するリスク:
 root アカウントはシステム全体の管理権限を持つため、リモートから直接ログインできるようにすると、悪意のある攻撃者が root アカウントをターゲットにしてシステムに侵入するリスクが高まります。

・パスワード認証が有効であれば、ブルートフォース攻撃(総当たり攻撃)でパスワードが破られるリスクがあります。
・root アカウントが無効化されていない場合、すべてのシステムで root ユーザー名は同じであるため、攻撃者にとって狙いやすいターゲットになります。

★推奨される設定:
 セキュリティを強化するため、PermitRootLogin no を設定し、一般ユーザーでログイン後に必要に応じて sudo を使用して root 権限を取得するのが一般的です。

■まとめ
 PermitRootLogin の設定は、SSH サーバーにおいて root ユーザーのリモートログインを許可するかどうかを決定します。セキュリティ上の観点から、一般的には PermitRootLogin no として root の直接ログインを禁止し、一般ユーザーでログインした後に sudo などを使用して root 権限を取得することが推奨されています。


ここは、rootによるリモートログインを完全に排除したいので、noが適切だと考えます。現在Ubuntuから提供されているインストールファイルは、rootによるログインはデフォルトで禁止されていますが、XServerは、Ubuntuインストール直後からrootでログインすることが可能です。その点を考えると、XServerから提供されている環境では、ssh_configにPermitRootLogin yesと記述されているはずなのですが、その記述がありません。他のファイルをインポートし実行しているのかと思ったのですが、その記述も有効になっていません。不思議です。今後、このセキュリティを実現しようとした場合、ドツボにハマりそうな匂いぷんぷんです。

[AllowUsers]
 次は、AllowUsersについてです。

 AllowUsers は、SSH サーバーでログインできるユーザーを指定するための設定オプションです。この設定を使用すると、特定のユーザーだけに SSH 接続を許可し、他のすべてのユーザーのアクセスをブロックすることができます。

■主な機能
❶特定のユーザーのみログインを許可:
 AllowUsers にリストされたユーザーだけが SSH サーバーにログインできます。この設定を使うことで、不要なユーザーのログインを防ぎ、サーバーのセキュリティを強化します。

❷複数ユーザーの指定:
 複数のユーザーを許可する場合、ユーザー名をスペースで区切って並べることができます。

❸リモートホストの制限:
 ユーザーごとに、特定のホストからのみログインを許可することも可能です。ユーザー名の後に @ 記号でホスト名や IP アドレスを指定できます。

■AllowUsers を使う利点
・セキュリティ強化
 特定のユーザーだけにアクセスを許可することで、サーバーへの不正アクセスのリスクを減らします。

・アクセス制御の強化
 一部のユーザーだけに SSH ログインを許可し、他のユーザーを拒否することで、アクセス管理が厳格になります。

・ホストベースの制限
 特定のユーザーが特定のホストや IP アドレスからしかアクセスできないように制限できるため、セキュリティをさらに高めることができます。


■AllowUsers と DenyUsers
 AllowUsers の逆の設定として、DenyUsers というオプションもあります。これを使うと、特定のユーザーだけが SSH ログインを拒否され、その他のユーザーにはアクセスが許可されます。

■注意点
 AllowUsers が設定されている場合、リストにないユーザーはすべて SSH ログインを拒否されます。
 AllowUsers が空欄の場合、デフォルトですべてのユーザーにアクセスが許可されます(他の設定による制限がない場合)。
 この設定を使用して、サーバーのアクセスを厳格に制御し、セキュリティを高めることができます。


この設定は、ホストベース認証パスワード認証公開鍵認証方式すべて有効です。この設定は有効にすべきでしょう!

[あとがき]
 ChatGPTに最初に教えてもらった設定情報で問題になる点があるのではとも思いましたが、今のところないようです。usePAMのこともあるので、最後まで調べます。明日設定情報が決まると思いますので、それ以降毎日30分だけ、本件をどうやってサーバーへ設定するのか調べたいと思います。
 これに掛かりっ切るとすぐに数時間掛かってしまい、プログラム開発できなくなってしまうので・・・。まっ、実際に調査する前に、いろいろ調べるとは思いますが・・・。

 涼しくなったとはいえ、昼間の熱気が部屋にこもります。そのため夜はエアコンをつけて寝るのですが、寒くて寝ている途中で起きてしまうし、つけないと暑くて寝れません。ちょっと、中途半端な時期になりました。真夏の時よりはましなのですが、睡眠不足の日々が続いています。
 もう少しで涼しくなるようなので、何とか乗り切りたいと思います。

 では、また!!!

2024年10月07日

www.pro2grammer.comのセキュリティを強化する 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
OS起動画面.jpg
 本日は、サーバーの設定をしようとしましたが、XServer側から私の問い合わせに対して、rootのパスワードを教えてほしいという分けの分からないメールが届きました。私の使用している環境は、他のユーザーとほぼ同じはずです。
 それよりも、デフォルトでrootログインできるなど特殊な設定をしているのは、XServer側です。rootのパスワードを知って、何をしようとしているのか分からないので、状況を説明し間接的に無理と伝え、最初お願いしたことへの返信をお願いしました。
 もしかしたら、自力で環境を解読しなければいけなくなるかもしれません。めんどくさ!Ubuntuから提供されたインストールファイルをそのまま利用できれば、いいのだけれど・・・。無理か・・・。
 では、本日は、現在XServerに施そうとしているセキュリティの話をしたいと思います。
 以下が、/etc/ssh/ssh_configに記述しようとしている内容です。

# パスワード認証を無効にする
PasswordAuthentication no

# 公開鍵認証を有効にする
PubkeyAuthentication yes

# チャレンジレスポンス認証を無効にする
ChallengeResponseAuthentication no

# PAMを有効にする(多要素認証などのため)
UsePAM yes

# ルートログインを無効にする
PermitRootLogin no

# 特定のユーザーのみログインを許可(必要に応じて)
AllowUsers user1

# 最大認証試行回数を制限
MaxAuthTries 5

# 詳細なログを有効化
LogLevel VERBOSE

# X11フォワーディングを無効化
X11Forwarding no

# SSHのポート番号を変更(デフォルトの22を避ける)
Port 2222 # 任意のポート番号に変更


ざっくりと以上で何をしようとしているかというと、セキュリティレベルの向上です。公開鍵認証方式を有効にし、公開鍵認証方式以外からのシステムへのログインを拒否しようとしています。加えて、秘密鍵の漏洩等を考慮して、デフォルトでrootからログインができる現状から、一般ユーザー(user1)のみログインできるようにしようとしています。これにより、秘密鍵がダッシュされた場合でも、サイトに甚大な損害の発生を防ぐことができます。
 それでは、その1つ1つでどのようなことをしようとしているのか確認をしたいと思います。

[PasswordAuthentication]
 まずは、PasswordAuthenticationから知らべてみましょう!まずは、ChatGPTにどのような機能を有するのか聞いてみました。

 PasswordAuthentication は、SSHサーバーでパスワード認証を許可するかどうかを設定するオプションです。この設定によって、SSHクライアントがパスワードを使ってリモートサーバーにログインできるかどうかが決まります。

■PasswordAuthentication の機能と設定値
★PasswordAuthentication yes
・パスワードを使った認証を許可します。
・ユーザーは、リモートサーバーにログインする際に、パスワードを入力して認証を受けることができます。
・公開鍵認証と併用することもできますが、パスワード認証が有効であるため、パスワード攻撃(ブルートフォース攻撃)に対して弱くなる可能性があります。

★PasswordAuthentication no
・パスワードを使った認証を無効にします。
・これにより、パスワードを使ったSSHログインはできなくなり、代わりに公開鍵認証やその他の認証方式を使用する必要があります。
・公開鍵認証などのより安全な認証方式に切り替える場合に推奨される設定です。パスワード攻撃のリスクを軽減できます。


■注意点
 パスワード認証を無効にすると、公開鍵認証などの他の認証方法が正しく設定されていない場合、サーバーへのアクセスができなくなる可能性があるので注意が必要です。
 セキュリティ向上のために、公開鍵認証を設定した上で、PasswordAuthentication no を有効にするのが一般的です。


■結論
 PasswordAuthentication は、SSHログインでパスワードを使用するかどうかを決定する重要な設定項目です。セキュリティ強化のため、パスワード認証を無効にし、公開鍵認証などの安全な方法を使用することが推奨されます。


ここでの選択は、noでいいでしょう!

[PubkeyAuthentication]
 次は、PubkeyAuthenticationの機能について見ていきましょう!

 PubkeyAuthentication は、SSHサーバーで 公開鍵認証 を使用するかどうかを設定するオプションです。この設定によって、クライアントが公開鍵を使ってリモートサーバーにログインできるかどうかが決まります。

■公開鍵認証の概要
 公開鍵認証は、SSHクライアントとサーバー間で認証を行うための非常に安全な方法です。この認証方式は、非対称暗号化方式(公開鍵と秘密鍵)を使用します。
・クライアント側が秘密鍵(private key)を持ち、サーバー側が対応する公開鍵(public key)を持っている。
・クライアントがログインを試みると、サーバーは公開鍵に対応する暗号チャレンジを送り、クライアントは秘密鍵を使って応答します。
・サーバーはこの応答を検証し、正しい応答が確認できた場合にログインが許可されます。

■PubkeyAuthentication の設定値
★PubkeyAuthentication yes
・公開鍵認証を有効にします。SSHクライアントが公開鍵認証を使用してログインできるようになります。
・ユーザーは秘密鍵を使用して認証を行い、パスワードを使用する必要がなくなります(ただし、秘密鍵自体にパスフレーズを設定することはできます)。
・公開鍵認証は、パスワード認証に比べてセキュリティが高く、ブルートフォース攻撃やパスワード盗難のリスクを減らせます。

★PubkeyAuthentication no
・公開鍵認証を無効にします。クライアントは公開鍵を使ってログインできなくなり、パスワード認証など他の認証方式に頼る必要があります。
・公開鍵認証を使用しないシステムや特定のセキュリティポリシーに基づいて設定することができますが、一般的にはセキュリティを確保するために公開鍵認証を有効にしておくことが推奨されます。

■公開鍵認証の利点
❶セキュリティが高い:
・パスワードを使わないため、パスワード漏洩のリスクやブルートフォース攻撃を防ぎます。
・公開鍵と秘密鍵はペアになっているため、秘密鍵が盗まれない限り第三者が不正にアクセスすることは困難です。
❷利便性:
・公開鍵認証を設定すると、毎回パスワードを入力する必要がなくなり、利便性が向上します。
・鍵自体にパスフレーズを設定することで、さらにセキュリティを強化できます。

❸自動化に適している:
 公開鍵認証は、スクリプトや自動化されたプロセスでのログインに適しており、パスワードを使わずに安全な接続を確立できます。


■注意点
 公開鍵認証を使用する場合、SSHクライアント側に秘密鍵、SSHサーバー側に公開鍵を適切に配置しておく必要があります。
・サーバー側では、ユーザーのホームディレクトリの .ssh/authorized_keys ファイルに公開鍵を保存します。
・クライアント側は、秘密鍵が安全に保管され、他人がアクセスできないようにすることが重要です。


■結論
 PubkeyAuthentication は、SSH接続における公開鍵認証を制御するオプションです。公開鍵認証は、パスワード認証よりも安全で、特にセキュリティを高めたい場合や自動化が必要なシステムでは推奨されます。


 公開鍵認証方式のみ有効にしたいので、ここは当然yesです。

[ChallengeResponseAuthentication]
 次は、ChallengeResponseAuthenticationの機能について見ていきましょう!

 ChallengeResponseAuthentication は、SSH(Secure Shell)における認証方法の一つで、クライアントとサーバー間での相互認証を行うために使用されます。この認証方式の特徴について以下に説明します。

■ChallengeResponseAuthentication の機能
❶基本的な仕組み:
・サーバーはクライアントに「チャレンジ」と呼ばれるデータを送信します。クライアントはこのデータを受け取り、特定のアルゴリズムを使用して応答(レスポンス)を生成します。
・クライアントの応答は、サーバー側で事前に知っている情報(通常はパスワードやトークン)と照合され、正当なユーザーであるかを判断します。

❷利用する場面:
・パスワード認証: クライアントがパスワードを入力する際、チャレンジレスポンス認証が使用されることがあります。ユーザーが正しいパスワードを入力すると、サーバーはそのパスワードを基に応答を検証します。
・多要素認証 (MFA): チャレンジレスポンス認証は、多要素認証を実現するために使用されることもあります。たとえば、ワンタイムパスワード(OTP)などを用いて、追加のセキュリティ層を提供します。

❸PAMとの関連:
・UsePAMが有効な場合、チャレンジレスポンス認証はPAMを通じて多様な認証方式をサポートすることが可能です。これにより、パスワード以外の認証方法も組み合わせて使用できます。

❹セキュリティの利点
・セキュリティ強化: パスワードが直接送信されず、チャレンジとレスポンスの形式で認証が行われるため、中間者攻撃(Man-in-the-Middle attack)に対する耐性が向上します。
・脆弱性の軽減: 認証情報が外部に漏れにくいため、フィッシングやブルートフォース攻撃に対してより安全です。


■まとめ
 ChallengeResponseAuthentication は、SSHの認証メカニズムとして、クライアントとサーバー間での安全な認証を実現するための手段です。パスワード認証や多要素認証と連携し、より高いセキュリティを提供するために利用されます。具体的には、ユーザーの認証情報を安全に扱うための方法として重要な役割を果たします。


セキュリティを強化する機能なのですが、このチャレンジレスポンスは、パスワード認証ワンタイムパスワード (OTP)、多要素認証 (MFA)などに有効で、公開鍵認証には不要な機能なので、設定値はnoです。

[あとがき]
 ちょっと、長くなりましたので、本日はここまでとします。
 以前は、こんな資料のまとめ方をしていたことを思い出し、ちょっと、懐かしくなりました。初心に戻って、作業を進めます。

 では、また!!!

2024年10月05日

反省会 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
会議.jpg
 昨日ブログ更新後、X(旧ツイッター)から以下のようなコメントを頂きました。

AIに頼る前にまずマニュアル読もうよ案件的な。
※XServerのLinuxディストリビューションってなんだろ。RHEL系だと「usePAM無効化するな」的な注釈もあったように思うんだけど

[angel (as ㌵㌤の猫) @angel_p_57のコメントより


ちょっと、焦りましたね・・・。ChatGPTを信用していましたから・・・。そのコメントを見た瞬間に、いろいろ調べたところ、ご指摘の通りだと言うことが判明しました。

[なぜこのようなことが起きたか?]
 このブログ、システムを開発に必要な項目を、それぞれ研究室として立ち上げています。開設当初は、研究室とつくにふさわしいレベルで調べていたのですが、今年の4月ぐらいからですかね?中小企業診断士の勉強とか、起業とかがはいってきて、ブログに費やす時間が減りました。
 このブログを書く時間を90分に限定しているという話を何回かしていますが、それは、更新する時間です。その前の下調べの時間は含めていません。その時間を含めれば、以前は、数時間掛けていたかもしれません。ただ、近頃は、下調べを含めて、90分ぐらいになってしまったような気がします。今回の問題は、この点が一番大きいと思います。

[指摘事項内容の考察]
 指摘された内容は、「usePAM無効化するな」と言うことなのですが、usePAMとはどのような機能なのでしょうか?ChatGPTGeminiCopilotすべてに聞いてみました。

 usePAM(Pluggable Authentication Module)は、LinuxやUnix系のシステムにおいて認証機能を管理するためのモジュールフレームワークです。usePAMとは、SSHサーバーや他のデーモンが認証にPAM(Pluggable Authentication Modules)を使用するかどうかを指定する設定項目です。具体的には、SSHサーバーの設定ファイル(通常は/etc/ssh/sshd_config)内でUsePAMというオプションを使用します。

❶UsePAMの役割
1)認証の柔軟な管理
 PAMは、認証方法をモジュール化して柔軟に管理できる仕組みです。これにより、パスワード認証や二段階認証、バイオメトリクス認証など、さまざまな認証方式を簡単に追加・変更することが可能です。

2)セッション管理
 認証だけでなく、ユーザーセッションの管理やアカウントの制御、システムリソースへのアクセス管理も行います。

3)セキュリティポリシーの一元化
 複数のアプリケーションがPAMを使用することで、セキュリティポリシーを一元管理でき、同じ認証ポリシーを複数のサービスに適用することが可能です。

❷UsePAMオプションの設定
/etc/ssh/sshd_configファイル内でUsePAMを設定することで、SSHデーモンがPAMを使用するかどうかを制御します。

・UsePAM yes: PAMを使用して認証とアカウント管理を行います。
・UsePAM no: PAMを使用せず、SSH独自の認証方法のみを使用します。

❸PAMを使用した場合の利点
1)多要素認証のサポート
 PAMを使用すると、パスワード認証に加えて多要素認証(MFA)を簡単に設定できます。例えば、Google AuthenticatorやYubiKeyなどを組み合わせた認証が可能です。

2)アカウントロック機能
 アカウントのパスワードが一定回数以上間違えられた場合、自動的にロックする機能など、追加のセキュリティ機能を提供できます。

3)リソース制限
 PAMを使って、各ユーザーごとに使用できるシステムリソースを制限することができます(pam_limitsなど)。

4)ユーザーのアクセス制御
 PAMを使うと、ユーザーごとのログイン制御や特定の条件でのアクセス制御を設定することが可能です(例えば、pam_accessを使った特定IPアドレスからの制限など)。

■注意点
 UsePAMを有効にした場合でも、PasswordAuthenticationやChallengeResponseAuthenticationなど、SSH独自の認証設定と組み合わせて動作するため、他の設定オプションも適切に設定する必要があります。
 PAMの設定ファイルは通常、/etc/pam.d/ディレクトリにあり、各サービスごとの認証ポリシーを設定することができます。


こんな重要な機能を持ったモノだったのですね?ちょっと、冷や汗です。この記事を見たとき、背筋に冷たいものを感じました。angel (as ㌵㌤の猫)さんには本当に感謝です。
 なお、usePAMを停止した場合のリスクについても、3AIに聞いてみました。

❶セキュリティの低下
 PAMを無効にすると、セッション管理や認証の柔軟性が失われ、セキュリティが低下する可能性があります。例えば、パスワードの複雑さチェックや二要素認証などの機能が使えなくなります。

❷認証の互換性の問題
 多くのサービスがPAMを前提としているため、これらのサービスが正常に動作しなくなる可能性があります。特に、SSHログインに影響が出ることが多いです。

❸システム管理の複雑化
 PAMを無効にすると、各サービスごとに個別の認証設定を行う必要があり、管理が複雑になります。

❹サードパーティアプリケーションとの互換性の問題
 多くのサードパーティアプリケーションは、PAM を利用してユーザー認証を行います。usePAM を無効化すると、これらのアプリケーションが正常に動作しなくなる可能性があります。

❺認証方法の変更
 PAM を使用しない場合、認証は /etc/passwd や /etc/shadow ファイルに直接依存するようになります。これにより、パスワードのハッシュ化やその他のセキュリティ機能が制限される可能性があります。



[指摘事項の考察]
 angel (as ㌵㌤の猫)さんからマニュアルを見た方がいいという指摘なのですが、検討した結果、難しいという結論になりました。私が最初Ubuntuを始めたとき読んだ本は、300頁強のなのですが、そこにはこの機能について記述はありませんでした。多分ですが、800、900頁ぐらいある本に書いてあると思います。ただ、購入しても、最後まで読み切ることができない、または、最後まで読んでも忘れていると思います。やはり、従来通りAIとの対話を通して作業を進めたほうがいいと思います。
 じゃ、今回の作業でどこがいけなかったのか考えてみましょう!以下に列記していました。

❶知りもしない機能を勝手に止めてしまった。
❷ChatGPTへの質問が公開鍵認証方式のみを有効にする方法を聞いており、セキュリティについては考慮していなかった。
❸いつもなら、ChatGPT、Gemini、Copilotそれぞれに同じ質問をして確認をするのに、今回はしなかった。


他にもあるかもしれませんが、今パット思いつくのは以上の通りです。ようは、もっと時間をかけて深掘りをしなければいけないということです。
 なお、angel (as ㌵㌤の猫)さんから、RHEL系の話がでていますが、Ubuntuは、Debian系です。

[あとがき]
 今回は、OSの話でしたが、実は、気を抜くとこのようなことはしょっちゅう発生する可能性があります。なぜかと言えば、現在身をおいている業界は、今日生まれた技術は、明日古くなっているかもしれない業界だからです。
 Ubuntuを設定しながら、PHPをプログラミングしながら、MySQLを利用しながらそんなことを感じています。
 angel (as ㌵㌤の猫)さんに今回指摘されたのは、タイミングとして良かったかもしれません。なぜかといえば、本番環境はこれからだからです。今後は、初心に戻って作業を進めたいと思います。
 本日は、公開鍵認証方式の設定方法について書く予定としていましたが、予定を変更し、反省会をさせていただきました。なお、usePAMを有効化したうえで、認証方式を、公開鍵認証方式にのみに限定する方法を昨日見つけました。まだ、設定はしていませんが、ChatGPT、Gemini、CopilotすべてのAIが問題ないといっているので、多分大丈夫でしょう?明日は、セキュリティの日なので、明後日に調査内容について報告させていただきます。もし、また、何かありましたらご指摘いただければありがたいです。

 では、また!!!

2024年10月04日

公開鍵認証方式 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 本日は、XServerへsshでログインする際の認証方式を、公開鍵認証方式にする作業をしました。

[よく考えたら]
 XServerでは、公開鍵認証方式を導入するのに、OSインストール画面で選択する仕様となっています。OSのインストール実行時に、公開鍵秘密鍵を作り、そのうち秘密鍵を1度だけダウンロードするという仕様になっています。ただ、なんか、ここで違和感が・・・。Webサーバーとか作る場合、公開鍵と秘密鍵のペアをクライアント側で作成し、そのうち公開鍵を申請するという流れだった様な気がします。秘密鍵って手元から手放しちゃいけないモノだったのではないでしょうか?
 そんなことを考えながら、今回は、ノートパソコンの仮想環境で公開鍵と秘密鍵を作成し、公開鍵だけをアップロードして設定をしました。
 予め、公開鍵と秘密鍵を作っておいたと言うこともあるのですが、設定自体はすご〜く簡単!公開鍵のリストと、クライアントの公開鍵の2ファイルをアップロードし、同ファイルに所有権とアクセス権を設定すれば、完了!
 後は、所定の方法で、クライアントから正常にアクセスできれば設定完了です。
 っでやってみたところ、TeraTermからもWinSCPからも正常に接続!!!

 ただ、この設定以降は、公開鍵認証方式のみでログインするようにしたいのですが、そこでつまづきました。

[公開鍵認証方式だけを有効にする]
 公開鍵認証方式のみを有効にするには、以下のファイルの設定を変更します。

/etc/ssh/ssh_config


以上のファイルをvi等で表示後、以下の4行を追加します。

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM no



PasswordAuthenticationだけが、コメントアウトされた状態で、PasswordAuthentication noと記述されていましたが、それ以外の設定は、ChatGPTから提供されたテキストをそのまま貼り付けました。
 ただ、ここで問題が・・・。このあと、sshのサービスを再起動すれば、設定が有効になるはずなのですが、有効になりません。どうしてなのかChatGPTに聞いてみたところ、ssh_configファイルの最終行に以上の4行を移動しろとの指示が・・・。移動後、sshのサービスを再起動してみましたが、うまくいかず・・・。ここから、またかなりの時間を使ってしまいました。

[じゃ、どうする?]
 かなりの時間を要しいろいろなことをしたのですが、ほとんど何をしたのか覚えていません。クライアントのキャッシュに何か残っているんじゃないかとか、いろいろ勘ぐっても分からず、最終的に、サーバーを再起動したら、設定が有効になりました。
 この設定は、ユーザー毎の設定ではなく、全てのユーザーに有効になります。したがって、これ以降は、www.pro2grammer.comへは公開鍵認証方式でしかログインができません。これで、安心して作業ができそうです。

[あとがき]
 やはり、初めてやるコトって時間がかかってしまいますね・・・。ただ、現在は、ChatGPTがいるので、気軽に質問でき、以前よりは短時間で作業を完了することができます。イイ世の中になりました。
 では、明日は、具体的にどうするのか、最初から、公開鍵認証方式設定方法を御紹介したいと思います。

 では、また!!!

2024年10月02日

LLPとは? 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
起業.jpg
 本日は、昨日お約束したとおり、LLP有限責任事業組合)について書きましょう!
 実は、このLLPは、中小企業診断士試験の勉強中に学びました。中小企業診断士の経営法務では、いろいろな事業形態が紹介されており、その中にLLPがありました。そのため、本来なら「システムエンジニアが目指す中小企業診断士」で書く内容かもしれませんが、ITに関する起業ということで、こちらで書かせていただきます。

[LLP(有限責任事業組合)の最初の印象]
 最初LLPを見たとき目についたのは、パススルー課税・・・。多くの事業形態は、法人税と所得税両方取られるのですが、実は、LLPは所得税のみが個人に課せられます。実は、株式会社での起業を検討している時には、二重に取られるという認識もなく、このパススルー課税を見たとき、ハットして、そのメリットを感じました。ただ、起業するなら、最初は、LLPかなとも思ったのですが、実は、LLPは設立後、株式会社へ変更できません。合名合資合同会社などは株式会社への変更は可能なのですが、LLPはそれを認められていません。そんな情報を横目に、LLPを作るのは面倒くさいし、個人事業主でいいかなと考えていたのですが、ビジネスプランのリスクのページで、保険等を考えているときに、個人事業主は、合名、合資会社の無限責任社員と同等の扱いだと知り、LLPのメリットを感じました。

[LLP(有限責任事業組合)の責任範囲]
 では、LLPの具体的な責任範囲は、どうなるのでしょうか?ChatGPTに事故が発生した場合の、LLPの責任範囲について聞いてみました。

 LLP(有限責任事業組合)における事故やトラブルが発生した場合、組合員の責任範囲は以下のように定められています。

❶有限責任
 LLPは「有限責任事業組合」という名前の通り、組合員は有限責任を負います。これは、組合が負った債務や損害について、組合員は出資額の範囲内でのみ責任を負うという意味です。つまり、事故等によりLLPが損害を受けたとしても、組合員の個人資産には基本的に影響が及びません。

❷組合財産への責任
 LLPが契約や事故によって負う責任は、まず組合の財産をもって対応します。LLPは法人格を持たないため、組合自体が債務を負うという形にはなりませんが、組合の財産が損害賠償や負債に充てられます。

❸組合契約書の規定
 LLPの組合契約書において、組合員間の責任分担や、組合員個々の業務遂行における責任について詳細に取り決めることができます。事故等が発生した場合、契約書に基づいて組合員間での責任の取り方が決まることが一般的です。

❹故意または重大な過失の場合
 LLPの組合員が故意または重大な過失により事故を引き起こした場合、その組合員は出資額を超える賠償責任を負うことがあります。この場合、有限責任の枠を超えて、個人資産をもって責任を取らなければならない場合があります。

❺外部との責任関係
 LLPは法人格がないため、外部との契約や法的責任は通常、組合名義で行われますが、個別の契約内容や法的な要件により、組合員が個人として責任を負う可能性もあります。特に外部との取引において、組合員個人に対する責任を明確にしない契約がある場合、慎重に対応する必要があります。

 このように、LLPの責任範囲は基本的に出資額に限定されますが、組合員の行為や契約内容によって変わる可能性もあるため、契約書や業務の進め方には注意が必要です。


以上の内容から分かりますが、LLPは法人格はありませんが、契約の主体となることができ、LLP名で契約した内容は有限責任となります。但し、個人名で契約した場合、または、重過失や故意で発生した事故等については、無限責任を負う可能性があります。

[あとがき]
 税金も所得税だけですし、LLP名での契約は、有限責任なので、LLPを作った上での起業は非常にメリットを感じました。そして、費用についても、最小金額で起業しようとしたら、1万円前後といった印象です。
 但し、不慮な事故が発生した場合など、ステークホルダ様に迷惑をできるだけかけたくなければ、保険等に加入するなどの措置が必要かもしれません。ただ、それは、大きく稼いでいる場合、大きな仕事をしていると考えられ、その責任も大きいと考えられますが、稼いでいないときはたいした仕事をしてないと考えられるので、保険等に入らないなどの判断ができるかもしれません。
 ちなみに、ChatGPTから聞いた話では、法人税も所得税も取られる株式会社で設立した場合、メリットになるのは、900万円以上の収入がある時だそうです。保険等を考える段階になった時、株式会社の検討もしたほうがいいかもしれません。

 では、また!!!

2024年10月01日

起業のリスクヘッジについて考える 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
情報処理安全確保支援士登録証.jpg
 本日、情報処理安全確保支援士登録証が届きました。取得してから3年間、オンライン講習を3回、実務講習1回と真面目に受講した結果なのですが、現在コレクション状態です。全く有効活用できていません。
 そんな、2024年10月1日なのですが、商工会議所に行って作成したビジネスプランについて相談してきました。

[相談内容]
 相談した内容は、企業秘密と言うことで細かくは書けないのですが、以下のようなことを相談しています。

1)プログラム開発
2)セキュリティコンサルティング
3)SNS
4)システム開発

 当サイトの目標は、4)のシステム開発、ようはこのブログで紹介しているEVE VProjectで開発するシステムで需要のあるモノを開発をして起業しようとしています。それは、現在の開発状況を見て頂ければ分かりますが、すぐにできるモノではありません。そのため、1)2)3)の仕事を受託し、つなぎ、またはビジネス規模になったらそのタイミングで起業し、その力で4)を進めようとしています。それについて相談したのですが、目新しい情報はありませんでした。まっ、これも、日々の勉強のたまものっていうことでしょう!
 一言で言われた内容を表現すると、「まっ、がんばって!」って感じです(笑)。
 とりあえず、商工会議所では、セキュリティコンサルティングのお客様を紹介までいかなくても、その手がかりでも手に入ればと思ったのですが、そんな情報さえありませんでした。
 2時間弱の会話から商工会議所ができることを引き出そうとしたのですが、事後的なコトが多かったような印象です。

[リスクヘッジ]
 以上なような状況で、かなり力を入れて臨んだのですが、肩すかしされたような状況でした。ただ、ビジネスプラン作成の過程で1つ思い出したことがありました。それは、LLP有限責任事業組合)です。
 個人事業主は、基本的にした行為について無限に責任を負います。ようは問題が発生した場合、その責任の範囲は限定されておらず、したことに対する責任を無制限においます。現在、多くの人が副業などの形で個人事業主として仕事をしていますが、その点は注意しなければなりません。
 私は、副業というわけではないのですが、個人事業主として活動しています。そのような状況で、EVE VProjectを成功したいばかりに、そんな重い責任を負うのは、現時点許容できません。
 法律だったと思いますが、とある文献を読んでいて、合名、合資会社についての解説を読んだことがありますが、その社員は、無限責任社員というのです。その時非常に驚きました。そんな企業形態は許容できないと・・・。
 ただ、もし、ここで私が起業した場合、個人事業主で、許容できないと感じていた、合名、合資会社の社員と同じ立場になるのです。
 そんなことを考えていたとき、思い出したのが、LLP(有限責任事業組合)でした。

[あとがき]
 ちょっと、長くなってしまったので、LLP(有限責任事業組合)については、明日また書きたいと思います。
 本日ブログで、リスクヘッジ、リスクヘッジと言って、自分がしたことに対して、自信がない、または無責任かのような発言をしていますが、そんなことはありません。自分の力で受注し、自分の仕事の名前で仕事をするわけですから、120%の能力を発揮して仕事に臨みたいのですが、その結果、常に100%満足した結果が得られるとは限りません。もしかしたら、セキュリティコンサルティングしたにもかかわらず、ランサムウェアに感染したなんてコトもあるかもしれません。何万分の1の確率で発生する、そんな不慮な状況に備え対応したいと言っているのです。
 そんなことが発生した場合への対応策を明日書かせて頂きます。

 では、また!!!

2024年09月30日

DX認定制度 −デジタルガバナンス・コード− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティアラート.jpg
 本日は、DX認定制度の続きです。
 前回は、デジタルガバナンス・コードについて調査をしました。その調査の結果、DX認定制度は、デジタルガバナンス・コード推進のために、準備できていることを認定してもらう制度のようだという話をしました。そして、デジタルコード・ガバナンスの全体像を示し、その内容とDX認定制度の申請にはリンクが取れていないという話をしましたが、以前読んだ資料を再度読み直したところ、リンクが取れているということを紹介しているページがありましたので、本日は同内容についてご紹介します。

[デジタルガバナンス・コードとDX認定制度申請書]
DX認定制度の申請書の項目とデジタルガバナンスコード項目の対比.png
 DX認定制度 申請要項(申請のガバナンス)という文書の中で右記のような対比図が用意されていました。以前、目を通した文書だったのですが、デジタルガバナンス・コードを理解していなかったため、見過ごしてしまいました。
 見ていてふと思うのは、DX認定書の申請項目とデジタルガバナンス・コードの項目を分ける必要を感じません。多分、デジタルガバナンス・コードの方が先にできたはずなので、申請書はそちらに合わせて項目を作った方が、理解しやすかったと思うのですが、どうなのでしょうか?

[デジタルガバナンス・コードの進め方]
デジタルガバナンスコードとDX認定制度との関係.png
 ここから、デジタルガバナンス・コードに戻りたいと思います。先日、デジタルガバナンス・コードの全体像で右記の図を示しましたが、本日は、右記の図をもうちょっと、詳細に見ていきたいと思います。
 右記のデジタルガバナンス・コードの中身を簡単に言い換えると、以下の流れになると思われます。

❶ビジョンを作成する。
❷PDCAを回す(過程で組織作り、人材育成、セキュリティの強化を行う)
❸ステークホルダと対話をする。


 以上の流れをちょっと細かくすると、5つの柱に分解できます。
 その細かく分解された、5つの各柱は、「デジタルガバナンスコードにおける各柱」のように構成されているとしています。
 (1)基本的事項には、@柱となる考え方とA認定基準が各柱ごとに記述されています。その内容につきましては、デジタルガバナンス・コード3.0に記載されていますのでご参照ください。
 そして、(2)望まし方向性につきましては、優良事例を選定し、「DX銘柄」や「DXセレクション」の評価・選定基準として、「DXセレクション(中堅・中小企業等のDX優良事例選定)」というページで紹介され、活用されることもあるとのことです。
 そして、基本的事項は、情報処理促進法に基づくものとなっています。この情報処理促進法には、情報処理安全確保支援士に関することも書かれており、私たちは毎年、オンライン講習時に参照するモノとなっています。

[あとがき]
 当サイトは、DXを以下の内容で定義しました。

■当サイトのDXの定義
 「新たな技術から創造されたビジネスが、新たな顧客体験を生みだし、生み出された体験により新たな価値が生み出される。その価値が競争優位となり、確立することにより市場における優位性を生み出す」
(2024年08月26日)


 その内容から考えると、今回のDX推進の内容は隠すまでもないとは思うのですが、進んで紹介するものでもないような気がします。企業が他社より優位となれるのは、模倣困難性希少性がそろった場合になります。「DXセレクション(中堅・中小企業等のDX優良事例選定)」でDXの成功事例として紹介されるということは、競争優位の源泉を少なからず脅威にさらしているような気がします。
 その内容をまだ見ていないので、もしかしたらその内容が誰にでも見せることができる陳腐な内容なのかもしれませんし、経路依存性により、他社には真似はできないといった自信があるのかもしれません。
 その点については、後日資料に目を通したいと思います。

 では、また!

■DX認定制度 申請要項(申請のガバナンス)
https://www.ipa.go.jp/digital/dx-nintei/ug65p90000001jbd-att/000086670.pdf

■DXセレクション(中堅・中小企業等のDX優良事例選定)
https://www.meti.go.jp/policy/it_policy/investment/dx-selection/dx-selection.html

■DX認定制度
https://www.meti.go.jp/policy/it_policy/investment/dx-nintei/dx-nintei.html

2024年09月28日

SSH:公開鍵認証方式でログインする 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
暗号化.jpg
 EVE VProjectで使用するαサイトの準備をしています。現在苦労しているのは、セキュアなSSHの接続方法・・・。できれば、公開鍵認証方式でログインしたいのですが、かなり苦戦しています。

[サーバー側へ公開鍵を設定する]
 公開鍵認証方式は、公開鍵秘密鍵を作成し、作成した、公開鍵をサーバー側に設定し、秘密鍵をクライアント側に設定するモノです。一言で言うと何となく簡単にできそうなのですが、いろいろと困った点が・・・。困った点を列挙すると以下の通りとなります。

1)公開鍵の配置先
2)公開鍵のアクセス権

 1)公開鍵の配置先は、ユーザー毎に設定すると言うことを理解していないことが原因で混乱しました。XServerは、rootによるログインを許可しており、公開鍵の配置先は、<ルート>/root/.sshというディレクトリになるのですが、通常ユーザーは、 <ルート>/home/<ユーザー名>/.sshとなります。自分が使用している環境は、root権限でのログインを無効としているので、このような事態になりました。
 次に2)なのですが、1)の延長線上の話になるのですが、ユーザー毎に設定するという認識がなかったため、アクセス権を設定しているファイルが違っていました。このアクセス権が適切に当該フォルダ及び公開鍵に設定されていないとログインできません。

[クライアント側に秘密鍵を設定する]
 秘密鍵はクライアントのどこに配置しても問題ありません。WinSCPは、RSAファイルをそのまま利用できないため、PuTTY Private Keyに変換しなければなりません。ただ、その変換がうまくいけば、他に苦労することなく当該サーバーにアクセスできます。多分、複数のサイトへ公開鍵認証方式でログインする場合でも問題ないと思います。
 ただ、問題はTeraTerm・・・。まず、ログイン画面からユーザーIDを入力しないとログインできないことを知らなかった・・・。まっ、ログインするのにサイトのIPだけでは無理があります。WinSCPは、ユーザーIDの入力は最初の1度だけで、それ以降入力することがないので、ユーザーIDについて失念をしていました。
 次に、複数のサイトで公開鍵認証方式でログインするのに問題がありそう・・・。TeraTermで複数のサイトへ公開鍵認証方式でログインする場合は、TeraTermマクロを利用するのですが、作成したマクロをTeraTermが認識しない・・・。ChatGPTGeminiCopilotどれに聞いてもうまくいきませんでした。仕方がないですね・・・。これについては、TeraTermについて詳述しているサイトで勉強し自力でマクロを作成します。

[あとがき]
 二日間ブログを書けず大変申し訳ございません。パソコンが調子が悪いなどの問題で更新できませんでした。ただつい最近、Windowsアップデートがあったのですが、その後は調子がいいようです。
 具体的な公開鍵認証方式の設定については、後日このサイトで公開します。ご興味がある方はしばらくお待ち下さい。

 では、また!

2024年09月24日

DX認定制度 −DXとは?− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
データセンター.jpg
 本日は、DXの大まかの概要が分かってきました。現在、DX認定制度について調べているのですが、やはり、DXとは何なのかと言うところを押さえないと説明が難しいので、本日は原点に立ち返り、DXとは何なのかという所から話したいと思います。

[DXとは?]
 いろいろな資料、講習をみてそのベクトルがどっちに向いているのか分からなくなったので、日本がDXを進める上でのその根拠としている資料を探し求めました。
 その結果、デジタルガバナンス・コードがそれらしいということが分かりました。
 その中で重要なのが、5つの柱と3つの視点です。5つの柱なんだか見覚えがありませんか?

1.経営ビジョン・ビジネスモデルの策定
2.DX戦略の策定
3.DX戦略の推進
3−1.組織づくり
3−2.デジタル人材の育成・確保
3−3.ITシステム・サイバーセキュリティ
4.成果指標の設定・DX戦略の見直し
5.ステークホルダーとの対話


そうです。昨日DX認定制度の申請の内容をまとめましたが、その項目がこの5つの柱に相当すると思ったのですが・・・・・。対応はとれていませんでした・・・。
 ただ、調べて分かったのですが、DX認定制度とは、デジタルガバナンス・コードを実施するに当たり、準備ができているかどうかを認定する制度であると、ChatGPTCopilotが解説をしてくれました。DXができたから認定してもらおうというモノではなく、準備ができたことを認定してもらうための認定制度だったようです。

[5つの柱と3つの視点]
デジタル・ガバナンスコードの全体像.png

 5つの柱と3つの視点から構成されるDXの全体像は右記のような構造になっています。見にくいですが、水色の部分が、5つの柱で、ネイビーブルーの部分が3つの視点となります。
 3つの柱は、今まで紹介していなかったので、下記に記します。

DX経営に求められる3つの視点
・経営者が、企業価値の向上につながるDX経営を実行するに当たっては、以下の3つの視点を意識しながら、各柱立ての項目について取り組むことが重要である。
・なお、3つの視点と5つの柱との関連性については、「DX経営に求められる3つの視点・5つの柱」の図を参照されたい。

❶経営ビジョンとDX戦略の連動
・経営環境が急速に変化する中で、持続的に企業価値を向上させるためには、経営ビジョンと表裏一体で、その実現を支えるDX戦略を策定し、実行することが不可欠である。
・DX戦略の検討に当たっては、経営陣が主導し、経営ビジョンとのつながりを意識しながら、重要なデジタル面の課題について、具体的なアクションやKPIを考えることが求められる。

❷As is - To be ギャップの定量把握・見直し
・経営ビジョン実現の障害となるデジタル面の課題を特定した上で、課題ごとにKPIを用いて、目指すべき姿(To be)と現在の姿(As is)とのギャップの把握を定量的に行う必要がある。
・把握した結果を基に、DX戦略が経営ビジョンと連動しているかを判断し、DX戦略を不断に見直していくことが重要である。

❸企業文化への定着
・持続的な企業価値の向上につながる企業文化は、所与のものではなく、DX戦略の実行を通じて変革し、醸成されるものである。そのため、DX戦略を策定する段階から、目指す企業文化を見据えることが重要である。



[あとがき]
 DXを推進にあたってのポイントについて以下のような解説がされています。

デジタルガバナンスコード3.0
 具体的に企業がDXの推進により持続的な企業価値の向上を図っていくためには、以下の4点が重要である。
❶新たな価値創造のために不可欠な経営資源としてデジタル技術を捉え、DX戦略を描くこと

❷デジタルの力を、効率化・省力化を目指したITによる既存ビジネスの改善にとどまらず、新たな収益につながる既存ビジネスの付加価値向上や新規デジタルビジネスの創出に振り向けること

❸ビジネスの持続性確保のため、ITシステムが技術的負債となることを防ぎ、計画的なパフォーマンス向上を図ること

❹必要な変革を行うため、IT部門、DX部門、事業部門、経営企画部門などが組織横断的に取り組むこと


現在読んだ範囲なのですが、デジタルガバナンス・コードに記載されている内容を実施すればDXができるというものではなく、革新的で創造的なビジスを創出する上での、体制づくりとか環境作りなどをするためのモノっぽいと言う印象を持ちました。
 まだ、読んでいない資料もあるので、明日また気づいたことがありましたら、報告します。

 では、また!!!

■DX認定制度
https://www.meti.go.jp/policy/it_policy/investment/dx-nintei/dx-nintei.html

■デジタルガバナンス・コード
https://www.meti.go.jp/policy/it_policy/investment/dgc/dgc.html

2024年09月23日

DX認定制度−申請内容− 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
職場.jpg
 昨日、ブログをアップロードしながら以下のYouTubeの動画を見ていました。何か作業やりながらなのですが、ちょっと違和感が・・・。何かが違う・・・。
 それは、ナビゲータの方と観客とのやり取りでまず一言目が、「DXやったら儲かりますか?」っていう会話から始まるそうです。
 以上の言葉から始まるそのストリーミングの内容は、DXについてブログを書き始めた第1日目に定義した、その内容と大きく乖離がありそうな印象でした。

■当サイトのDXの定義

「新たな技術から創造されたビジネスが、新たな顧客体験を生みだし、生み出された体験により新たな価値が生み出される。その価値が競争優位となり、確立することにより市場における優位性を生み出す」
(2024年08月26日)


実は、セキュリティの話をするときにも「儲かりますか?」と言う話が出るらしいのですが、まずは、そこからなのかなって印象です。ただ、セキュリティよりは、儲かる話ができそうです。

[各資料を読んでみて]
 ストリーミングを見て、「???」といった印象だったのですが、ダウンロードした各資料には、以下のような文言が付記されています。

 DX認定制度(以下、「本制度」という。)とは、情報処理の促進に関する法律第三十一条に基づき、「企業がデジタルによって自らのビジネスを変革するためのビジョン・戦略・体制等が整った」事業者を経済産業大臣が認定する制度である。
(2023年10月 DX認定制度概要 経済産業省)

“企業がビジネス環境の激しい変化に対応し、データとデジタル技術 を活用して、 顧客や社会のニーズを基に、製品やサービス、ビジネスモデルを変革するとともに、業務そのものや、組織、プロセス、企業文化・風土を変革し、競争上の優位性を確立すること”
(令和4年9月『 デジタルガバナンス・コード 2.0 』 より)


なんとなく、最初に当ブログで定義したDXという概念に近いと言った印象です。変革ということばがしっかりと入っており、ここに創造と言う言葉が入れば、中小企業基本法に書かれている内容とほぼ同じになります。中小企業基本法との違いは、システムにより実現するのか、しないのかといったぐらいの違いでしょうか?

[DX認定制度の取得レベル]
 DX認定制度の中身なのですが、すご〜く濃いかと聞かれれば、そうでもないようです。対象が大手ではなく、中小の企業で、現在絶賛人材不足と言っている状況なので仕方がないのかもしれません。取るための認定項目が載っていますので、下記に記します。

《認定項目》
(1) 企業経営の方向性及び情報処理技術の活用の方向性の決定公表媒体(文書等)の名称
┣公表日     年  月  日
┣公表方法・公表場所・記載箇所・ページ
┣記載内容抜粋
┗意思決定機関の決定に基づいていることの説明

(2) 企業経営及び情報処理技術の活用の具体的な方策(戦略)の決定
┣公表媒体(文書等)の名称
┣公表日     年  月  日
┣公表方法・公表場所・記載箇所・ページ
┣記載内容抜粋
┗意思決定機関の決定に基づいていることの説明

 @ 戦略を効果的に進めるための体制の提示
 ┣戦略における記載箇所・ページ
 ┗記載内容抜粋

 A 最新の情報処理技術を活用するための環境整備の具体的方策の提示
 ┣戦略における記載箇所・ページ
 ┗記載内容抜粋

(3) 戦略の達成状況に係る指標の決定
┣公表媒体(文書等)の名称
┣公表日     年  月  日
┣公表方法・公表場所・記載箇所・ページ
┗記載内容抜粋

(4) 実務執行総括責任者による効果的な戦略の推進等を図るために必要な情報発信
┣発信日     年  月  日
┣発信方法
┗発信内容

(5) 実務執行総括責任者が主導的な役割を果たすことによる、事業者が利用する情報処理システムにおける課題の把握
┣実施時期     年  月頃 〜   年  月頃
┗実施内容

(6) サイバーセキュリティに関する対策の的確な策定及び実施
┣実施時期     年  月頃 〜   年  月頃
┗実施内容


以上の内容から分かりますが、申請内容は定性的で、基準以上と認められれば、DX認定事業者として認められそうです。ただ、定性的な基準のレベルが分からないので、合格するかどうかは提出してみないと分からないといった所でしょうか?

[あとがき]
 昨日なぜだか寝苦しかったのですよね・・・。昨日は、休むことなく作業をし、夜を迎え、その夜はクーラーをつかわなくても涼しいといった印象でした。ただ、寝れない・・・。なぜだろう???疲れているし、寝る環境も整っているのに・・・。
 それにも関わらず、本日は定時(7:00)に起きることができ、作業を開始したのですが、やはり眠い・・・。2度仮眠をとりました。10分程度の短い時間でしたが・・・。
 という状況で、あまり、DXについても読み込めていない状況です。ということで、続きは明日とさせてください。

 では、また!!!

■中小規模製造業がDX(デジタルトランスフォーメーション)を推進するために「中小製造業のDXの取り組み事例 〜製造分野におけるDXの疑問点を解消!〜」
https://www.youtube.com/watch?time_continue=1221&v=Qg7G9kd_At8&embeds_referring_euri=https%3A%2F%2Fwww.ipa.go.jp%2F&source_ve_path=MTM5MTE3LDEzOTExNywxMzkxMTcsMjg2NjY

■【支援者向け】「中小規模製造業者の製造分野におけるDX推進ガイド活用」徹底討論セミナー(2021年1月27日開催)
https://www.youtube.com/watch?v=Ospys7lBnfY&embeds_referring_euri=https%3A%2F%2Fwww.ipa.go.jp%2F&source_ve_path=Mjg2NjY

■DX認定制度
https://www.meti.go.jp/policy/it_policy/investment/dx-nintei/dx-nintei.html

2024年09月22日

DX認定制度 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
生産管理.jpg
 今日は、日曜日ということで、セキュリティ関連について書きますといいながら、今日もDXについて書きたいと思います。
 今まで散々DXについて書きましたが、中小企業診断士IPAの試験ではあまり採用されないようなことばかり書いてきたので、ここで、実際に試験に出題された内容について書きたいと思います。

[中小企業診断士 令和5年経営情報システム]
 令和5年の経営情報システムでは、DXについて、第10、11問と二問出題されています。全く手を付けていない分野を2分野も出題されて、受験中本当に頭が痛かったです。知らないその分野が出題されるということは、以前から分かっていて、その弱点を補っていなかった自分がいけないのは十分分かっているのですが、ちょっと腹がたちます。
 勉強を進めると、お客様、特に管理職以上の方と話す場合は、必要不可欠な情報だと言うことが分かります。管理職以上で、技術的に優れいている方もいるのは知っていますが、どちらかというと少数です。やはり、必然的に、社会的なところから徐々にその必要性を説明していかなくてはいけないと考えられます。
 ということで、今回は、今年出題された第10、11問について、どのようなことがとわれているのか見ていきたいと思います。

[DX認定制度]
 第11問は、ちょっと、読まなければいけない文献が多いので、明日以降に回すとして、本日は、第10問のDX認定制度についてどのような制度か報告したいと思います。
 まず、いつも通り、DX認定制度とはどのようなモノなのかChatGPTに聞いてみましょう!

 DX認定制度(デジタルトランスフォーメーション認定制度)は、日本の経済産業省が推進する制度で、企業がデジタル技術を活用して事業や組織全体を変革(デジタルトランスフォーメーション、DX)し、競争力を高めることを目的としています。この制度は、企業のDXに向けた取り組み状況を評価し、一定の基準を満たした企業を「DX認定企業」として認定します。
 具体的には、次のような基準に基づいて企業が評価されます:

❶DXビジョンの設定
 デジタル技術を活用した事業変革のビジョンや戦略が明確に定められているか。
❷ガバナンス体制
 経営層を中心に、DXを推進するための体制やリーダーシップが確立されているか。
❸投資・リソースの配分
 DXに必要な技術や人材への投資が行われ、リソースの最適な配分ができているか。
❹情報セキュリティ対策
 DX推進に伴うリスク(サイバーセキュリティ等)に対する十分な対策が講じられているか。

 この認定制度を通じて、企業はDXに向けた自社の取り組みを対外的にアピールし、信頼性を高めることができます。また、DXをさらに推進するためのガイドラインや支援を受けられる場合もあります。


へぇっ〜って感じなのですが、では、なんで、このようなことを開始したのでしょうか?引き続きChatGPTに解説をしてもらいます。

 経済産業省がDX認定制度を始めた背景には、日本企業全体が直面するデジタル化の遅れと、これに対応するための競争力強化の必要性があります。具体的な理由は以下のような点にあります。

❶デジタル技術の活用による競争力強化の必要性
 世界的にデジタル技術の進展が進み、企業の競争力はその技術をどれだけ効果的に活用できるかにかかっています。日本の企業は、特に既存のビジネスモデルに依存していることが多く、デジタル技術を取り入れるスピードが遅れています。その結果、国際的な競争に後れを取るリスクが高まりました。
 経済産業省は、企業がデジタル技術を活用して新しいビジネスモデルを構築し、国際市場での競争力を高めるために、DXの推進が不可欠と判断しました。

❷産業の変革に対する対応
 世界中で、人工知能(AI)、ビッグデータ、IoT(モノのインターネット)などのデジタル技術を活用した産業構造の変化が進んでいます。製造業、サービス業など、あらゆる業種がデジタル技術を使って新たな価値を創出しています。
 日本の産業がこれらの変化に取り残されないよう、企業が積極的にデジタル技術を取り入れてビジネスモデルを変革できるよう支援する必要があると認識しました。

❸生産性向上と持続的成長の推進
 日本では労働人口の減少が進んでおり、生産性の向上が急務となっています。DXは、業務プロセスの効率化や自動化を進め、生産性を向上させる大きな可能性を持っています。経済産業省は、企業がDXを通じて生産性を高め、持続的な成長を実現できるよう支援するため、DX認定制度を導入しました。

❹中小企業の支援
 DX推進の課題は、大企業だけでなく中小企業にも存在します。中小企業は資源や技術力の制約からDX推進が難しいことが多いですが、DXの推進によって市場での競争力を強化することが可能です。
 経済産業省は、DX認定制度を通じて中小企業にもDX推進の重要性を周知し、これらの企業がデジタル技術を取り入れるための環境整備や支援を行うことで、日本全体の産業構造の変革を目指しています。

❺企業の信頼性向上とイメージ戦略
 DX認定制度によって企業が認定を受けることで、社内外に向けたDX推進の姿勢が明確化され、信頼性が向上します。これにより、取引先や投資家に対してDXに積極的に取り組んでいることをアピールでき、企業のイメージアップや市場での競争力強化につながることが期待されています。

❻国際的な競争環境への適応
 世界ではデジタル化が急速に進んでおり、欧米諸国やアジアの新興企業と競争するためには、日本企業が迅速にデジタル技術を取り入れ、業務やサービスのイノベーションを進める必要があります。経済産業省は、DX認定制度を通じて、企業が国際的な競争環境に適応し、グローバルな市場で成功できるように促進しています。

■まとめ
 経済産業省がDX認定制度を始めた目的は、企業がデジタル技術を活用して持続的な競争力を高め、産業全体の生産性向上と革新を推進するためです。また、中小企業のDX推進を支援し、国内外での競争に打ち勝つための基盤づくりを進めるためでもあります。この制度を通じて、企業の変革と成長が促進され、日本経済全体の強化につながることを目指しています。


 以上のことを読んでいて気になるのは、そもそも企業は常に競争しています。その競争に勝ってこそ市場に残れます。DXと言われるそのものは競争の根源であり、この現代において必要不可欠なものです。なんか、このような形で推奨されなければやらないようなこの雰囲気は何なのでしょうか?
 ただ、DXを推進しなくても、今まで世界で戦ってこれたこの現状は、日本企業がすごいということを意味しているのかもしれません。それは、ないか・・・?

[経済産業省ホームページ]
 以上の内容をChatGPTに聞いた後、原本を見ようと経済産業省のホームページを見たのですが、こちらの方も資料でいっぱいです。もしかしたら、明日解説しようとしていたモノよりも資料が多いようです。
 ななめ読みになるとは思うのですが、すべての文章を読んでから感想を書きたいので、本件につきましては、明日また報告をさせていただきます。

[あとがき]
 現在の日本はどうやって企業間で競争をしているのだろうという疑問は、本日のブログを書き終えても残っているのですが、この資料を読んでいて思うのは、国として、DXを進めるにあたり、共通の認識がほしいのでこのような認定制度を設けていると考えられます。
 認定制度を取得する段階において、現在国が進めようとしているDXとは何なのかを知り、知ることにより、SIベンダーと対等な立場で話すことができるようになります。それと、少なくとも間違った方向へ推進をすることはなくなるでしょう?そんなメリットがあるのだと、思います。

 以前、ASPと言われたものが、知らないうちに、クラウドなんて名称になっていました。それは、ASPにもいろいろな形態があり、ASPという一言で会話ができなくなってしまったため、NISTが共通の認識のプラットフォームとして、クラウドというカテゴリを作って、提供側、そして利用する側、共通の認識で会話できるように策定したと聞いています。
 それと、同じようなことを、経済産業省がしようとしているのだと思います。

 ちょっと、まだ、考えがまとまりませんので、また明日!

 では、また!!!

■DX認定制度
https://www.meti.go.jp/policy/it_policy/investment/dx-nintei/dx-nintei.html

2024年09月14日

DXについて書いた理由 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 つい最近まで、DXについてまとめていましたが、セキュリティについて解説するといいながら、DXについて書いてきました。ただ、その理由について書いていなかったので、その理由について本日は書きましょう!

[セキュリティ・バイ・デザイン]
 現在多くのプロジェクトで、システム設計・製造時に、セキュリティ・バイ・デザインと言われています。セキュリティ・バイ・デザインとはどんなことを指しているのかChatGPTに解説をしてもらいましょう!

 セキュリティバイデザイン(Security by Design)とは、ソフトウェアやシステムを設計する際に、セキュリティを最優先に考慮するアプローチです。セキュリティバイデザインの目的は、開発の初期段階からセキュリティを組み込むことで、システムがリリース後も安全であることを保証することです。
 以下に、セキュリティバイデザインの主要な原則を紹介します。

❶最小権限の原則(Principle of Least Privilege):
 システムやアプリケーションにおいて、ユーザーやプロセスには必要最低限の権限のみを付与する。これにより、万が一攻撃を受けても、被害の範囲を最小限に抑えることができます。

❷防御の層(Defense in Depth):
 システムを複数のセキュリティ層で保護し、ひとつの防御が突破されても他の防御で守るという考え方です。例えば、ファイアウォール、侵入検知システム、データ暗号化などが考えられます。

❸セキュリティの早期実装(Security by Design and Default):
 セキュリティを設計段階から組み込み、デフォルト設定でもセキュリティが確保されている状態にすることです。これにより、ユーザーがセキュリティ設定を変更しない限り、安全が保証されます。

❹脆弱性管理(Vulnerability Management):
 システムの設計段階から脆弱性を特定し、修正することが重要です。これにはコードレビューやセキュリティテストの実施が含まれます。

❺セキュリティの可視化(Security Visibility):
 セキュリティの状態を常に監視し、ログやアラートを使って異常を検出し、対応する仕組みを設けることです。

❻安全なデフォルト設定(Secure Defaults):
 ソフトウェアやシステムが出荷時に安全な設定であることを保証することです。これにより、ユーザーが設定を変更する前に、セキュリティが確保されます。

❼データ保護(Data Protection):
 データを暗号化し、適切に保護することです。データの機密性や整合性を確保するために、データベースや通信経路での暗号化が推奨されます。

❽セキュリティのテストとレビュー(Security Testing and Review):
 開発過程でセキュリティテストを行い、設計や実装におけるセキュリティ上の問題を早期に発見し修正することです。定期的なセキュリティレビューも重要です。
 セキュリティバイデザインを採用することで、セキュリティに関する問題を事前に防ぎ、システムのリリース後も安全を維持するための基盤を築くことができます。


ChatGPTの発言を補足すると、途中からセキュリティを追加することもできるのですが、かなり難しく、かつ費用もかかります。Webシステムの場合、WAFなどの導入などを考えられるのですが、ゼロトラスト的な考え方でいうと、システム自体にセキュリティを実装するのが本来のあり方です。そのため、システムを設計する段階から、セキュリティを考慮に入れて開発したほうがいいのはいうまでもありません。
 私もかつて、Prototype EVEにおいて、2004年にシステムリリース後、システムを停止し2006年〜2009年までセキュリティロジックを追加したという経験があります。その約3年間の改修後感じたのは、最初から作り直したほうがよかったということです。
 その時の経験を踏まえたうえで発言させていただくと、是非セキュリティ・バイ・デザインは実践してほしいです。

[DXとセキュリティ]
 DXを進めるうえで、レガシーシステムが問題になっています。そのため、レガシーシステムを更改することを検討するのですが、その時に機能を踏襲し、更改するのではなく、セキュリティを最初から考慮したうえでシステムを開発しましょうというのが、情報処理安全確保支援士からの提案になります。そのため、今まで長々とDXについて話してきました。余計なことをたくさん書いた気もしますが、現状調査だとご理解ください。

[あとがき]
 以上が、今まで長々とDXについて書いた理由です。すっきりしましたでしょうか?まっ、あまり気にしていないとは思いますが、一度書いたことなので、その理由について書かせてもらいました。
 以前、会社面接において、セキュリティをやりたいと面接官に話したことがありましたが、その時に、セキュリティのどこをやりたいか聞かれたことがありました。その時点では、情報処理安全確保支援士試験に合格しているわけでもなく、情報セキュリティ全体について勉強をしていたので、セキュリティ全般と回答しましたが、ちょっとこの回答に問題があるような気がします。医者を例に考えると分かるのですが、専門分野というのがあります。セキュリティといっても範囲が広く、専門分野を決めていないと、いい加減なコンサルティングになってしまうかもしれません。それを念頭に考えた場合、私の場合は、セキュリティ・バイ・デザインを1つの分野としたいと思います。

 では、また!!!

2024年09月13日

PSR 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
タイピング.jpg
 Javaは、テキストの最初に厳格な規約が記載されていますが、JavaScriptや、PHPはそのような規約は今まで見たことがありませんでした。ただ、いろいろ調べていくうちに、JavaScript、PHPには規約ににたようなものがあることに気づきました。JavaScriptについては、昨日調べ報告したので、本日は、PHPについての報告になります。

[PSR]
 PHPの規約として、PSRという標準規約が存在します。それについては、昨日最後にその概要について触れましたが、改めて、ChatGPTに聞いてみました。

 PSR(PHP Standards Recommendations)は、**PHP-FIG(PHP Framework Interoperability Group)**という組織によって作成されました。PHP-FIGは、PHPのフレームワーク開発者や主要なプロジェクトのリーダーたちが集まり、互換性のあるコードを書くための標準を定めることを目的として結成された団体です。

■PHP-FIGの目的と背景
 PHP-FIGは、異なるフレームワークやライブラリが互いに矛盾することなく、スムーズに連携できるようにするため、コーディング規約やインターフェースを標準化することを目的としています。特に、異なるPHPフレームワーク間の互換性や、開発者が様々なプロジェクト間で一貫したコーディングスタイルを保つためのガイドラインを提供しています。

■PSRの普及状況
 PSRは、PHPの開発者コミュニティで広く受け入れられており、多くのPHPフレームワークやライブラリがこの標準に準拠しています。たとえば、以下のような有名なフレームワークがPSRに基づいて開発されています。

・Laravel
・Symfony
・Zend Framework
・Slim Framework

これらのフレームワークは、PSRのコーディング規約やインターフェース標準に従っているため、開発者は異なるプロジェクトでも一貫した規約に従ったコーディングができ、フレームワーク間の互換性も高くなっています。

■業界での影響力
 PSRは、PHPフレームワークやライブラリだけでなく、商業的なソフトウェア開発やオープンソースプロジェクトでも採用されていることが多いです。PSRに従うことで、コードの可読性や保守性が向上し、開発者間の協力がしやすくなるため、特に大規模な開発プロジェクトで重視されています。

■結論
 PSRは、PHP-FIGによって作成され、現在ではPHPコミュニティ全体で広く普及しています。多くの有名なフレームワークやライブラリがこの標準に従っており、PSRに準拠することで開発の一貫性が向上し、異なるプロジェクト間でもコードの互換性が確保されます。


PSRは着実に普及しており、オープンアーキテクチャなどを構築する場合、有用な標準規約となりそうです。

[PSRの内容]
 調べた当初は、命名規約を中心に調べていたので、気づきませんでしたが、命名規約は、PSR-1に記載されており、それ以外の規約も用意されているようです。以下がPSRに記載されている規約になります。

❶PSR-1: 基本コーディング標準
 PSR-1は、PHPコードの基本的なコーディング規則を定めています。これにより、コードの統一性が高まり、異なる開発者間でも一貫性のあるコードを書くことができます。

・PHPタグ: <?php または <?= タグを使用し、短縮タグは避ける。
・文字エンコーディング: ファイルはBOMなしのUTF-8で保存する。
・クラス命名規則: クラス名はStudlyCaps(単語の先頭を大文字)形式を使う。
・定数: 定数は全て大文字で、単語間はアンダースコアで区切る(例:MAX_COUNT)。
・サイドエフェクトなし: ファイルはクラス、関数、または定数の宣言のみに限定し、それ以外の処理(例:出力)は行わない。

❷PSR-2: コーディングスタイルガイド
 PSR-2は、PSR-1の補足で、詳細なコーディングスタイルに関する規約を定めています。コードのフォーマットを統一し、可読性を向上させることを目的としています。

・インデント: インデントはスペース4つを使用する(タブは使用しない)。
・行の長さ: 1行の最大長は80文字、100文字を超える場合は例外的に許容。
・名前空間とuse宣言: 名前空間宣言の後には1行空行を入れる。use 宣言はブロックでまとめる。
・クラスとメソッド: クラスの中括弧 { は次の行に置く(オープンブレーススタイル)。メソッド名はcamelCaseを使用する。

❸PSR-3: ロギングインターフェース
 PSR-3は、ロギングのためのインターフェース標準です。ログを出力するシステムに対して一貫したインターフェースを提供します。

・主要なメソッド: emergency(), alert(), critical(), error(), warning(), notice(), info(), debug()など、ログの重要度に応じてメソッドが定義されています。
・コンテキストデータ: ログメッセージにはコンテキスト情報を渡すことができ、メッセージの詳細を補足する。

❹PSR-4: 自動ロード規約(オートローディング)
 PSR-4は、PHPクラスの自動ロードに関する規約です。名前空間に基づいてクラスを自動的に読み込むための標準化を提供します。これにより、手動でのrequireやincludeの使用を避け、コードの整理がしやすくなります。

・名前空間とファイルパスのマッピング: 名前空間はディレクトリ構造と一致し、クラス名とファイル名は同じである必要があります(例:App\Controller\UserControllerは/App/Controller/UserController.phpにマップされる)。

❺PSR-12: 拡張コーディングスタイルガイド
 PSR-12は、PSR-2をさらに発展させ、最新のPHPバージョンにも対応するために拡張されたコーディングスタイルガイドです。変数の宣言方法、インラインコード、関数の引数に関するガイドラインが追加されています。

■まとめ
 PSRはPHPの開発において標準的なコーディング規則を提供し、複数の開発者が同じプロジェクトで一貫性を保ちながら作業できるようにするためのものです。PSR-1とPSR-2は主に基本的なコーディング規約を定め、PSR-4やPSR-12はさらに詳細なガイドラインを提供しています。PSRに従うことで、コードの可読性、再利用性、保守性が大幅に向上します。


PSR-5〜PSR-11については、正式に承認されなかったため、現在欠番となっています。上記については、概要で、もし規約として利用するなら詳細に調べる必要があるようです。

[あとがき]
 JavaScript、PHPとか調べていくと、共通のキーワードが出てきます。具体的な例を挙げると、パスカルケース(PascalCase)、キャメルケース(camelCase)などといった用語です。パスカルケースは、クラスの名をつけるときに使用し、キャメルケースはメソッド名プロパティ名で利用しています。これは、言語が違っても共通の規約として利用され、どの言語においても一般化されているようです。
 近頃、どの言語も似てきていて、現在どの言語で製造しているのか迷うときがありますが、それでもなお、規約は言語共通で作成したほうが混乱が少ないかもしれません。そのため、開発にはより一層注意深さが必要になってきます。
 PSR-1〜PSR-4、PSR-12については、今後、EVE Projectで規約を整備し、整備完了後、EVE Projectコーディング規約公開の時に解説をさせていただきます。
 なお、既に作ったプログラムは順次修正していき、リリース当時は規約を遵守していない場合があります。プログラムの先頭は、EVE Projectとかはタブを利用しているので、修正が大変そうです・・・。

 では、また!!!

2024年09月12日

JavaScriptの世界標準規約 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
開発.jpg
 本日は、初めて知ったJavaScriptコーディング規約についての話です。
 IPAの試験でも出題されることがあるのですが、プロジェクトをスムーズに進行させる方法として、コーディング規約を厳守するということが挙げられています。その点について、以前ブログで書きましたが、非常に重要です。その理由については、「プログラマのすすめ 〜食えるプログラマの条件〜 [システム開発研究室]」で確認して頂くとして、その時は、プロジェクト内を想定していましたが、今回は範囲を世界的なレベルまで広げます。
 日本のシステム業界は、中国を中心に、インドなどいろいろなエンジニアの方が活躍してます。その人達と連携をするなら、世界に広げるべきでしょう!

[世界標準]
 じゃ、世界標準とはどのようなものなのか、調べてみると、そんなものがないことが分かりました。以前紹介した、「Airbnb JavaScript Style Guide」は、アメリカの1企業が作成し、同企業の業種は、宿泊予約プラットフォームの運営になります。同企業はアメリカ企業らしく社内でシステム開発し、その開発時の規約を公開したところ、その内容が社会に受け入れられ、世界の多くのプロジェクトで利用されているらしいです。
 世界標準を探しているのに、以上の内容では納得できないので、標準化団体から出ている規約がないか、ChatGPTに調べてもらいました。

❶Airbnb JavaScript Style Guide
概要
 Airbnbが公開したスタイルガイドで、特にES6以降のモダンなJavaScriptのベストプラクティスにフォーカスしています。広く使用されており、非常に詳細なガイドラインです。
リンク: Airbnb JavaScript Style Guide

❷Google JavaScript Style Guide
概要
 Googleが開発者向けに提供しているスタイルガイド。Googleの内部で使用されており、大規模なコードベースでの一貫性と可読性を重視したスタイルを提供しています。
リンク:Google JavaScript Style Guide

❸Standard JS
概要
 設定不要で、簡潔で明確なルールを提供するスタイルガイド。ESLintプラグインとしても使用可能で、ルールのカスタマイズを最小限に抑えたいプロジェクトに適しています。
リンク: Standard JS

❹Prettier (Code Formatter)
概要
 Prettierはスタイルガイドというよりも、コードフォーマッタですが、これを使用することでコードフォーマットの一貫性を自動的に保つことができます。スタイルガイドと組み合わせて使われることが多いです。
リンク: Prettier

❺ESLint Recommended
概要
 ESLint自体が提供している推奨スタイルガイドで、基本的なルールセットを含んでいます。プロジェクトのニーズに合わせてカスタマイズが可能で、AirbnbやGoogleのガイドと併用することもできます。
リンク: ESLint Recommended Rules

❻Node.js Best Practices
概要
 Node.jsの開発者向けに特化したベストプラクティス集です。特にバックエンド開発におけるJavaScriptの使用に関する具体的なガイドラインが含まれています。
リンク: Node.js Best Practices

❼Microsoft TypeScript Style Guide
概要
 TypeScriptを使ったプロジェクトに特化したMicrosoftのスタイルガイド。型を使った開発のベストプラクティスが詳述されています。
リンク: TypeScript Style Guide

❽JavaScript Standard Style by Idiomatic.js
概要
 Idiomatic.jsによって提供されているスタイルガイド。可読性とコードの一貫性を重視しており、コーディングスタイルに関する一般的なベストプラクティスを網羅しています。
リンク: Idiomatic.js


以上について、ChatGPTだけでなく、CopilotGeminiにも聞いてみましたが、ほぼ解答は同じでした。標準化団体からの標準規約はないようです。

[どれを選択する]
 どれを選択するかは、プロジェクトリーダーの判断に委ねられるようです。じゃ、EVE Projectではどれを選択するのかということになりますが、今後、Google Mapを作る機会などがあるような気がするので、Google社の規約を標準とします。ただね・・・。以前話した通り、ここのオブジェクト指向言語の記述の仕方、私が嫌いというか理解できないような記述になっているのですよね・・・。これから理解しなければとは思うのですが、それを規約とするのは今までいやだったのですが・・・。ただ、標準化団体からでているものがないので、グローバル企業である、Google社の規約を今後利用していくことにしました。

[あとがき]
 しらべたら拍子抜け・・・。じゃ、PHPの方は?っということで、PSRについて調べましたが、こちらは、非公式ではありますが、PHPのフレームワークライブラリの開発者、ユーザー、コミュニティのメンバーが参加する協議体のようです。そのまま利用することができそうですね?
 では、明日は、PHPから、PSRについてご紹介したいと思います。

 では、また!

■プログラマのすすめ 〜食えるプログラマの条件〜 [システム開発研究室]
https://fanblogs.jp/bahamuteve/archive/195/0

2024年09月09日

抽象化モデル 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
システム.jpg
  昨日は、EVE Projectだったらレガシーシステムをどうするのかという話をし、IPAからでている文書との相違点は、リバースエンジニアリングの部分かもしれないという可能性について触れました。
 そして、今回の全体像について、私自身も話していませんし、IPAからも出ていないので、本日は、このような作業の進め方の全体像についてお話ししたいと思います。
 本日話す内容は、EVE Projectが考えるやり方であり、IPAからこれから出てくる文書がその通りのやり方で出稿されるかどうか不明です。もし、知りたい方がいましたら、直接IPAにお聞きになってください。

 では、本題に入りましょう!

[抽象化モデル]
 これから紹介する方法は、レガシーシステムを保有し、かつ、IBMにさえ無理ですと言われたシステムに対して、かなり前に提案したことがあるやり方になり、タイトルにある通り、抽象化モデルと言われる方法になります。
 DFDに基づくやり方という意見もあり、EVE Projectは、昨日お話しした通り、「プログラムなんてどうでもいい!データが全てだ」といっているので、そうした観点から言うと、このやり方を選択するのは当然の流れかもしれません。
 具体的に、大きな流れで解説すると、以下のようになります。

❶現状システム
   ↓
❷現状システムの抽象化
   ↓
❸新システムの抽象化
   ↓
❹新システム


 ❶は、EVE Projectでは、現状調査にあたります。そして、❶の細かく現状分析した結果を❷で抽象化します。その作業と同時並行的に❸では、新システムの抽象的なモデルを作成します。そして、❷と❸を比較することにより、何が不足し、何が増えたのか確認し、その確認した内容が、意図した通りだった場合、❶で作成した資料と同一レベルの資料を❹で作成するという流れになります。この後に、❶と❹を比較検討するというフェーズがあるかもしれません。
 この方法を採用することにより、段階的に改善や変更を繰り返しながらシステムを具体化していくことが可能になります。
 このやり方について、Geminiは、以下のようなメリットがあるといっています。

❶複雑なシステムを簡潔に表現できる
 高い抽象度のレベルでシステムを捉えることで、全体像を把握しやすくなり、複雑なシステムでも理解しやすくなります。

❷設計段階での変更に柔軟に対応できる
 抽象的なレベルでの設計であれば、具体的な実装に影響を与えることなく変更を加えることができます。

❸異なるステークホルダーとのコミュニケーションが円滑になる
 技術的な詳細に踏み込まない抽象的なレベルでの議論は、非技術的な背景を持つステークホルダーとのコミュニケーションを円滑にします。


最初ChatGPTに聞いたのですが、プロトタイプ開発を念頭においているようで、使えないと判断し、Geminiの意見を採用しました。レガシーシステムでプロトタイプ開発はちょっと、難しいかなと判断しました。
 引き続き、デメリットについて確認していきましょう!

❶情報損失のリスク:
1)過度な抽象化
 抽象度が高すぎると、具体的な実装の詳細が失われ、誤解が生じる可能性があります。

2)詳細化の難しさ
 抽象的な概念を具体的な設計に落とし込む際に、新たな問題や矛盾が生じる可能性があります。

❷コミュニケーションのギャップ:
1)抽象度の違い
 異なるステークホルダー間で、抽象度の認識が異なり、コミュニケーションが円滑に進まない場合があります。

2)専門用語の誤解
 抽象的な概念を表現する際に、専門用語を用いると、非専門家には理解が難しい場合があります。

❸設計変更のコスト
1)上位レベルへの影響
 抽象度の高いレベルで設計を変更すると、下位のレベルにも影響が波及し、修正コストが増大する可能性があります。

❹複雑なシステムへの適用
1)モデルの複雑化
 極めて複雑なシステムの場合、抽象化モデル自体が複雑になり、管理が難しくなることがあります。

❺抽象化レベルの決定
1)最適なレベル
 どのレベルで抽象化するのが最適か、判断が難しい場合があります。


IPAがこの方法を採用しているかどうか、現時点不明ですが、本日以降にIPAから新たに文書が出てきて、抽象化モデルだと分かったら、以上のようなリスクを考慮した方がいいようです。

[あとがき]
 以上の方法、実は、IPAの1次試験で出題されています。IPAの試験を受験する人がいましたら、試験に役立ててください。ただ、ここでは、抽象化モデルと書いたのですが、試験でなんて呼称されていたのか思い出せません。過去に出題されています。もし、見つけたら、なんて呼称するのか正式な名称を教えてください。

 DXについて長々とお話ししてきましたが、実は、ここまでは、IPAも中小企業診断士もあまり試験に出た実績はありません。ここ以降なんですよね・・・。試験に出るの・・・。試験にも出ないこと長々と書いてしまいました。
 セキュリティから始まった、DXの話なのですが、ちょっと、間隔をおいてから、試験に出そうなところと、セキュリティの絡みについてお話ししたいと思います。
 ただ、書き終えてみて、2018年当時の日本のシステム業界について知ることができました。これから、情報処理安全確保支援士として、多くのお客様のところに訪問しますが、参考としたいと思います。

 では、また!!!

2024年09月08日

EVE Projectだったらどうする??? 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
レガシーシステム.jpg
 今日の開始は予定通り、プログラム修正から始めました。Xでつぶやきましたが、現在、PHPのプログラムを、PSR-1ガイドラインに基づいて修正しています。JavaScriptについては触れていませんでしたが、今後「Airbnb JavaScript Style Guide」に基づいて記述する予定です。どちらも、今まで規約らしい規約を見た記憶がないのですが、世界標準みたいなモノが、あったようです。今後気をつけるのと同時に、修正できるところから徐々に修正していきます。
 なんて、作業をしながら、XServerに開発環境を構築しようとしたのですが、キーが変更になったと、クライアントツールにメッセージが表示されました。作業をする場合、必ず、SSHを利用しているのですが、公開鍵暗号方式でログインをしているので、この場合のキーとは公開鍵になります。WinSCPでは、このメッセージが出たのは初めてです。ちょっと、心配になったので、XServerを再初期化後運用方法を変更しました。キーを先に作成し、サーバーに公開鍵を設定し、クライアントに秘密鍵を設定するように仕様を変更しました。これもまた、やり方を知らなかったので、時間がかかってしまいました。まっ、今後は安心して利用できるのでしょうか?運用を開始してからの鍵の変更は難しいですし・・・。
 その辺は今後考えるとして、本日のブログでは、私だったらどんなアプローチでレガシーシステムに対応するのか書きたいと思います。

[現行の超大規模システムをマネジメントが容易な規模(機能システム)に分割整理]
 2024年9月2日に書いた「現行の超大規模システムをマネジメントが容易な規模(機能システム)に分割整理」までの内容はできれば実施したいと感じています。ただ、ちょっと、やり方は違うくなりますが・・・?

■現状調査
大きい分類から小さい分類に分解していく(全体システム → システム → サブシステム)


コンセプトは、自分たちがコントロールできる単位まで分解すると言うことだと思うので、ここはやり方は多少違いますが、マネした方が良い点だと思います。ただ私の場合は、機能システムへ再分類するというその作業はここでは省略します。2024年9月2日では、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」の内容を以下のような流れで紹介しています。


現行ITシステムの全体把握
┗システムの粒度
┣社会システム
┣全体システム → @全体システム構成図
┣機能システム → A機能システム一覧
┃       → E機能システムの階層構造の確認 ←━━━━━━━━━━━━━━━━━━━┓
┃       → F機能システム間、機能システム・外部接続先間の連携の整理 ┃
┃       → G外部接続先のグルーピングと機能システムと外部接続先間の連携の集約化 ┃
┗サブシステム → Bサブシステム一覧(サブシステムの論理的な整理) ┃
→ Cサブシステム構成図 ┃
→ Dサブシステムの機能システム単位へのグルーピング━━━━━━━━━━━━┛




[サブシステム分解後]
 ちょっと、流れ的には違っていますが、対応しやすい単位に分解するという目的を達成する作業という意味では同じです。それ以降なのですが、チョット違います。私の場合は、昨日、書きましたが、サブシステム毎に、プログラム解析、またはリバースエンジニアリングを実施し、データ構造を解析します。
 この「ゼロからはじめるシステム開発」で何回か書かせて頂いているのですが、プログラムなんてどうでもいいのです。バグがあっても、汚くなっていてもなんでもいいと考えています。ただ、データの完全性が保証されるならという前提条件はあるのですが・・・・。
 前提条件のデータの完全性を保証しようとした場合、プログラムにバグがあることは許されません。そのようなケースがあるので、プログラムは正確に作ることを心がけます。
 ここでは、データの完全性が保証されていることを確認しながらデータ構造を解析します。

[あとがき]
 ごろごろ寝っ転がりながら、いろいろ考えたのですが、辛辣な意見を昨日言ったにもかかわらず、違うのは、リバースエンジニアリングを実施するかしないかだけの違いのようです(辛辣の言葉で発言して申し訳ございません)。「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」もこれが最後ではなく、続きがあるのですが、検討の結果多分、その部分も私の考え方と同じになりそうだという結論になりました。
 「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」にも作業の全体像が書かれていないので、明日は、その全体像についてご紹介し、本作業の流れを押さえていきたいと思います。

 では、また!!!

2024年09月07日

Only you can do that! 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
レガシーシステム.jpg
 昨日のブログですが、ちょっと、刺激的な内容になってしまいました。書き直そうかなとも思いましたが、共通フレームワークの下りとかは、YouTubeで見たときの印象で、その時は過激な内容を避けたのですが、今回の「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」を読んでみて、書いたほうがいいと感じ書かせてもらいました。
 日本では情報システム以外でもそうなのですが、権威主義的な対象物に対して、何も声をあげない傾向にあります。以前のブログで書きましたが、そんな世の中が、失われた20年とか、30年を作ったのかもしれません。

[Only you can do that!]
 2024年8月28日の「DXとSIベンダー」のあとがきで書きましたが、アメリカのSEは、「自分たちだけが信じることができ、それ以外の人間たちには任せておけないという雰囲気で仕事をしている」らしいです。この話、聞いたモノなので、正確かと聞かれれば詰まる部分もあるのですが、ただ、本来日本の職場でもこうでなければいけないのだと思います。
 ようは、以下の状況だと考えてください。

 現在目にしているレガシーシステムはあなた以外に更改することができず、他の誰かに任せれば失敗します。社外のSEや、あなた以外のエンジニアは、ゴミ、カス、アホです。


 そう考えれば、昨日の「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」」のような公的な文書を読んだとき違った印象を持つことができるかもしれません。実は現在私はそういう思考で目を通しています。
 まっ、それを口に出していうと嫌われるのは知っていますけどね(笑)。私も実名でやっていないからこのような内容を書けるという部分はあります。アメリカ人なら実名でもいうんでしょうね?

[あとがき]
 昨日は、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」の問題点を辛辣な口調で書き、本日はなぜそんなことを書いたのかその理由を述べました。ただ、非難だけなら誰でもできます。そして無責任です。
 できれば、無責任な人間にはなりたくはないので、明日私だったらどんなアプローチでレガシーシステムと向かい合うかということを書かせていただきます。
 あなたから見たら、ゴミ、カス、アホな私がもっともらしいことを書くので、もしよろしければお付き合いください。今日は、短くなりましたが、この辺で!

 では、また!!!

2024年09月06日

現行ITシステムの概要仕様を復元する 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
会議室.jpg
 3日間お休みをいただきました。休む1週間前から体がだるいという認識はあったのですが、きちんとした対応をしてきませんでした。そのため、急に寒くなったタイミングだったでしょうか?風邪の症状と思われる、頭痛、咳、吐き気をもようし、熱はなかったのですが、つらかったので、3日間お休みを頂きました。
 本日は、頭痛、吐き気はないのですが、激しい咳が時々出るのと、粘膜関係から出血があります。もう少し安静にしてから、全快に持っていきたいと思います。
 本日は前回の続きで、自分たちがマネジメントしやすいレベルになった、レガシー問題の機能システムをどうやって、機能復元するのかその手法について見ていきます。

[業務機能の復元する上での問題]
 ここで、レガシーシステムのシステム機能がブラックボックス化している問題の大きな要因としてドキュメントがないことをあげています。今まで、ドキュメントがないのは、大手SIベンダーの究極の営業という話をしましたが、レガシー問題を抱えている企業のほとんどがドキュメントがないと答えている状況は、私の推測が外れている可能性を示しているのかもしれません。

[レガシー問題への対応の起点]
 以上の問題を「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」では、一気にレガシー問題を解決できればいいのだが、費用等の問題でできない可能性に触れています。その場合、以下の起点がレガシー問題への対応への機会ととらえています。

❶ソフトウェアおよびハードウェアのサポート切れによるケース
❷部門最適やプログラムコピーによるスパゲティ化や肥大化によるケース
❸当初作っていたときとビジネスモデルが大きく変化して追従できないケース



[対象システム]
 ❶〜❸のいずれかの場面になったとき、レガシー問題への対応を考える起点として考えているのですが、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」の中で、対象のシステムを限定しています。それは、ウォーターフォール開発で製造されたシステムです。この文章を読んだとき、「えっ???」って一瞬思いましたが、対象が肥大化したレガシーシステムです。作られたのは、多分1990年代以前のものが対象となるので、ウォーターフォール開発に限定して問題ないかもしれません。ただ、その当時、ウォーターフォール開発での開発ばかりではなく、プロトタイプ開発スパイラル開発もあったような気がしますが、大丈夫でしょうか?

[仕様の復元方法]
 ウォーターフォールで開発されたシステムにおいて、どのように仕様を復元するのかその手法に触れています。総合的に情報を収集する必要性を前提条件に置き、以下の方法を挙げています。

❶システムの設計情報などの各種ドキュメント類
❷ログ・稼働実績
❸業務処理に関する有識者や現場の業務知識のヒアリング


この辺になると、ピンとこないんですよね???❶なんか、ドキュメントがないっていうのに、各種ドキュメント類ってどういうことでしょうか?まっ、残りかすでも集めろっていうことなのでしょうか?
 システムを作る立場の人間から、❷のログや稼働実績から仕様を復元するというのは、全く理解ができません。
 ❸の有識者へのヒアリングなのですができますかね?当時プロジェクト参加者で既に死んでいる人いませんか?直近のレガシーシステムでも開発されてから20年・・・。聞いたところで一番古いものになると、50年になっています。もしかしたら、レガシーシステムの定義が間違っているのかもしれませんが・・・?

[対応方法]
 仕様の復元方法は、読みながら「?」な部分が多かったのですが、読込が足りないだけかもしれません。もう少し後日きちんと読み直すとして、次に、レガシーシステムへの対応方法について見ていきたいと思います。「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」では、以下の種類に分けていくことを推奨しています。

❶バッチ型     → DFD
❷オンライン型   → 業務フロー
❸Web型      → 画面編線図
❹ゲートウェイ型  → 状態遷移図


既に、今までの作業で詳細な機能システムは分かっているので、以上の分類は簡単にできると思います。その分類の後行うのは、DFD、業務フロー、画面変遷、状態遷移といったところに主眼をおいて業務を復元するとしています。
 ここでもやはり、しっくりきません。「仕様復元方法」でも感じたのですが、プログラム解析、リバースエンジニアリングが一切出てこないのです・・・。なんか、上っ面だけ調査して、無駄なことをしているような気がしてならないのですが・・・?

[あとがき]
 共通フレームワークに関するYouTubeを見ていて感じましたが、システムを作っていない人も、エンジニアという肩書で多く世の中にいることを感じます。共通フレームワークって何を参考にして作っているか知っています?それは、日本の生産管理を参考にして作っています。
 ようは、日本では、モノづくりでうまくいっています。それは、1人で作る工芸品だけでなく、車のように高品質が求められ、かつ大量に作る製品においてでもです。そのため、トヨタ生産方式ではないのですが、生産現場の生産方式をソフトウェア業界に持ち込んで作ったのが、共通フレームワークだというのです。共通フレームワークの本を購入して読みました。はっきり言って中身があるとは思えません。ところどころいいことはかいてありますが、現在でも多くの現場で使用されていない理由がよくわかります。YouTubeで共通フレームワークを解説をしている人も含めて、このプロジェクトに参画している人全員が、実際に、最初から最後までシステムを開発する経験をしていないので、ピントがずれているような気がします。
 以上のことから分かりますが、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」ではところどころいいことは書いてあるので、参考にするのはいいのですが、全面的に参考とするのは問題があるかもしれません。
 なお、この感想は、あくまで私見です。読み込みが足りないだけかもしれません。他の人がそう言っているのをは聞いたことはありません。

 では、また!

2024年09月02日

レガシーシステムの課題のソリューション 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
会議.jpg
 昨日は、IPAが作成した、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」に書かれている課題について紹介し、その課題に対して、どんなアプローチにより解決しようとしているのか、その概要についてまとめました。
 本日は、その詳細について調査していきたいと思います。

[現行の超大規模システムをマネジメントが容易な規模(機能システム)に分割整理]
 昨日IPAが考えるレガシーシステム刷新の課題をChatGPTに100文字にまとめてもらいました。

 レガシーシステムの課題は、企業がDX推進において、@自社ビジネスに適合したITシステムの設計が難しいことと、A既存システムの変革がリスクやコスト面で困難なことが挙げられます。


以上の問題をIPAでは、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」の中で、大きい概念から徐々に小さくしていき、最終的に自分たちがコントロールできるところまで分解した上で、その分解したモノに対して対策を立てようとしています。その手法は、ブラックボックス化、超大規模化、P2Mというキーワードの課題に対してアプローチをし、解決することを目的としているようです。
 そのアプローチ方法を一覧化すると以下のようになります。


現行ITシステムの全体把握
┗システムの粒度
┣社会システム
┣全体システム → @全体システム構成図
┣機能システム → A機能システム一覧
┃       → E機能システムの階層構造の確認 ←━━━━━━━━━━━━━━━━━━━┓
┃       → F機能システム間、機能システム・外部接続先間の連携の整理 ┃
┃       → G外部接続先のグルーピングと機能システムと外部接続先間の連携の集約化 ┃
┗サブシステム → Bサブシステム一覧(サブシステムの論理的な整理) ┃
→ Cサブシステム構成図 ┃
→ Dサブシステムの機能システム単位へのグルーピング━━━━━━━━━━━━┛




[現行ITシステムの仕様復元]
 多分以上までは、システムエンジニアを複数人入れることにより成果物として作成することができると思われます、しかし、果たして、以上の成果物から、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」後半に書かれた内容で、再構築できるのかどうか本日の考察ではイメージできませんでした。
 本件について、もう少しお時間を頂いて考察させてください。なお、以上に書かれた内容は私の理解であり、かつ、省略している部分があります。レガシーシステムで本当に悩まれている方は、原本をお読み頂き対応して下さい。
 続きは明日書きます

 では、また!!!

2024年09月01日

レガシーシステムの課題とソリューション 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ミーティング.jpg
 金曜日まで2018年におけるDXの課題について見てきました。その中で、レガシーシステムが大きな問題を抱えており、その問題を解決しないと、DXが実現できないといった印象を持ちました。本日は、そのレガシーシステムに焦点を当てて考えて見たいと思います。

[レガシーシステムの課題の再認識]
 そのレガシーシステムの問題に対して、IPAから「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」をリリースしています。その内容は、DXを進めることの重要性と、その重要なDXを進める上でレガシーシステムが大きな壁として立ちはだかっている状況に警鐘を鳴らしています。その状況について、2019年に発表したDX 推進指標を、同年に287社の企業が自己評価したものをIPA が分析した結果によると、DX指標の上位5%企業は自社のIT資産の評価・分析は行ったうえで、評価・分析の結果を踏まえて不要資産の廃棄などの具体的な施策につなげているが、残りの95%の企業はDXにまったく取り組んでいないレベルにあるか、 DX の散発的な実施に留まっているに過ぎない段階であることを報告しています。その状況の分析により、以下の2つの課題があるとしています。


❶自社のビジネスに沿ったITシステムのあるべき姿を描くことが難しく、新たなシステム開発技術の適用方法も明確になっていないこと
❷既存のITシステムをリスクとコストをかけて変革することが難しいこと


特に❷が解決することができない理由として、2つの理由を挙げています。

■1つ目の理由
1)既存ITシステムが大規模化し、マネジメントが困難になるレベルになっている
2)開発時から繰り返し機能拡張をすることで超大規模化したシステムになっている
3)一般にマネジメントは、そのITシステムの規模に対し指数関数的に困難
→ このレベルのマネジメントできるSEの数が少ない → 経験がない? → 失敗する例が多い
4)P2M(Program & Project Management)レベルのITシステム開発向けの考え方が確立していない
→ 超大規模システムをコントロール可能な状態に分割し、全体をマネジメントする能力

 以上の状況から、多くの企業では自社の大規模化したITシステムの変革難易度の高さ故、ごまかしながら使っているのが現状である。

■2つ目の理由
1)企業のITシステムのブラックボックス化が進んでいることである
→設計書をメンテナンスしないままに変更が加えられてしまっているもの
→当初想定したアーキテクチャのポリシーに反した変更(コピー&ペーストなど)が行われてしまっている
2)「処理」の仕様を復元することはできるが、「業務」の仕様を復元することができない
3)現行システム要件のうち必要な要件を明確にしないと、正しい構築ができない


現行仕様が不明となっているITシステムの部分再構築のプロジェクトは問題化しやすく、ITベンダーの問題プロジェクトの多くがこのケースであるといわれています。いわゆる「現行機能保証」を求められるとプロジェクトの難易度が高くなるということが、失敗事例として語られています。

[IPAからのソリューション]
 以上の課題に対して、IPAから以下の内容でソリューションを提供しようとしています。

現状の超大規模システムを分割し、コントロール可能な粒度に整理する(今回公開分)
 現行の超大規模システムをマネジメントが容易な規模(機能システム)に分割整理

 新しい開発方式を踏まえた品質マネジメント方式(今後作成)
現行ITシステムの概要仕様を復元する(今回公開分)
 ブラックボックス化されているITシステムの概要仕様を復元するステップを示す

DXの要件を満たすITシステムのあるべき姿を描く(今後作成)
 デジタル技術を活用してビジネスを変革するためにDXの要件を満たすITシステムのあるべき姿を描く

新しい開発方法でITシステムの変革を進める(今後作成) ビジネス要件できめられた目指す姿と優先度に従って、アジリティ、スピード、品質を向上させる考え方を用いてITシステムを変革する


以上の詳細な内容を、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」に記しており、本問題を解決してほしいとしています。

[あとがき]
 「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」は、「DX実践手引書 ITシステム構築編(完成第1.1版)」の別冊という扱いです。読み方としては、「DX実践手引書 ITシステム構築編(完成第1.1版)」をまず読み、次に「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」を読むという順序になりそうです。本編約200ページ、別冊約50ページと読み応えある内容になっています。本編は、実際にDXを進めるうえでの話しなので、明日は、IPAがこの問題をどのように解決しようとしているのか、「DX実践手引書 ITシステム構築編 レガシーシステム刷新ハンドブック」中心に話を進めたいと思います。

 では、また!

■DX実践手引書 ITシステム構築編
https://www.ipa.go.jp/digital/dx/dx-tebikisyo.html

2024年08月31日

JavaScriptの開発状況 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 JavaScriptの開発も、ChatGPTの力を借りて、今日、明日で完成しそうな所まで来ました。
 製造範囲は、Prototype EVEで製造したモノが対象です。製造方法は、以前作成したプログラムをChatGPTに入力しオブジェクト指向言語へ変換するように御願いしています。その時ChatGPTからのコメントで「これでモダンなプログラムになります」と言われ時があるのですが、ちょっとショックです。それは、以前作ったプログラムが、古いと言われているような気分になるからです。そのモダンでないと指摘されたプログラムは、、なじみ深く、今からゼロから作り始めた場合でも、同じように作ってしまうようなロジックなのですが・・・。ただ、確かに古いかもしれませんけれどね・・・。

[ChatGPTが作る難解なロジック]
 ChatGPTが修正したプログラムは、私が苦手としている正規表現で判定するケースが多用されています。カナ、半角または漢字とか言った文字列は、コード変換する範囲または一部を判定することにより当該文字列かどうか知ることができます。ChatGPTはその範囲または一部を正規表現で表示し判定しているのです。そのため、非常にロジックが短い・・・。これも慣れていくしかないのでしょうね?


/*************************************************
*【メソッド名】カナチェックメソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:true
* 異常時:false
*【製 造 者】EVE
*【製造年月日】2024年8月30日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 対象文字列に仮名が含まれているかどうか判定する。
*************************************************/

kanaCheck() {
// 正規表現カナのコード範囲を指定する
const hankakuKanaPattern = /^[\uFF61-\uFF9F]+$/;

//カナが含まれているかどうか判定し呼び出し元へ制御を移す
return hankakuKanaPattern.test(this.#priString);
}



 他になれていない点があるとすると、三項演算子を多用してきます。これも短いからロジック全体がスッキリしていいのだけれど、作り慣れていないので、保守性で疑問を感じて最初普通のif文に変更していましたが、諦めました・・・。今後三項演算子を多用することにします。特に、判定することにより、変数を取得する場合などに利用すると、プログラムの可読性を高めることができそうです。

let result = (a > b) ? 'a is greater' : 'b is greater';



 それと、オブジェクト指向の関数が増えましたよね・・・。これからオブジェクト指向のプログラムを作ろうとしていて何ですが、やはり、従来のプログラムの方が分かりやすいです。まっ、メソッドを従来の関数と見立てて作ればいいのですが、なかなか慣れません。加えて、JavaScriptの古いオブジェクト指向のロジックはさらにわかりにくくさせています。ただ、他人のプログラムを解析することがあることを考えた場合、その能力ぐらいは付けた方がよさそうです。ただ、自分が新規で作るプログラムは、一般的なオブジェクト指向の方式で作っていきたいと考えています。

[あとがき]
 DXの方が一区切りしたので、現状のJavaScript開発について書かせていただきました。今までおもちゃっぽい言語だと思っていましたが、そうで無くなったという印象をもつことができた開発期間でした。
 来週から、PHPの開発を再開するのですが、JavaScriptの開発方法を踏襲したいと思います。PHPの開発では、いろいろなプロパティメソッドが関連しているため、最後に一気にデバックしようとしていましたが、今回のJavaScriptの開発を通して、メソッド単体でも十分デバックできることを確認できました。フレームワークの完成まで一気に作っていきます!

 では、また!!!

2024年08月30日

DXとSIベンダーの続き 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
サーバー.jpg
 Prototype EVEで利用していたJavaScriptオブジェクト指向言語に変換していますが、非常に簡単です。理由は、機能だけ説明してあとはChatGPTに作ってもらっているからです。今後ですが、メソッドはすべてChatGPTに作ってもらうことになりそうです。ただ、Classをデザインする場合は、自分でします。理由は、今までいろいろな経験をしてきて、製造しやすい形があります。そのためChatGPTの言われたままのシステムを作った場合、保守という部分で苦労しそうだからです。
 それと、ChatGPTは、目的にあったプログラムを提示してくれるのですが、その提示したプログラムに基づいて製造します。製造後、デバック御願いすると、修正を求めてきます。ChatGPT自身が提示してきたロジックにかかわらずです。そんな修正を繰り返していると、クラス全体の一貫性が失われていきます。
 ChatGPTを使用してプログラム製造する場合の、キーワードは、保守性だといっていいでしょう!
 では、前置きはこのぐらいにして昨日の続きです。

[DXとSIベンダー]
 DXSIベンダーということで、6項目あげ、そのうち2日間かけて❶について解説をしました。異論等あるかもしれませんが、一つの意見だと聞き流してください。
 それでは、本日は、「DXとSIベンダー」の❷から解説をしていきましょう!

❶ユーザ企業よりもベンダー企業の方にITエンジニアの多くが所属している。ユーザ企業のためにベンダー企業がITシステムを開発し、納入する受託開発構造であるため、ユーザ企業の内部に情報システムに関するノウハウが蓄積しにくい。
❷初期のITシステム構築は、ユーザの作業を写し取って論理化し、「要件定義」としてきた。
→(現状)システムがある状態で仕事をするのが当然となっているので、システムの全貌と機能の意義が分からない状態であり、従来のような「要件定義」をする能力を喪失している。
❸新たな価値を提供できるベンダー企業を使って結果を出すことが自らの評価につながる環境に置かれている。我が国のCIOは有名なベンダー企業に頼んだから大丈夫という考えに陥りがちである。しかも、ユーザ企業側の選定責任は不明確で、ベンダー企業側の責任となりがちである。
❹現状は、事業部門がそのようなオーナーシップを持って、プロジェクトに関わる仕組みになっていない場合が多い。
❺ユーザ企業におけるIT人材の不足が深刻な課題である。
→ベンダー企業に経験・知見を含めて頼らざるを得ないというのが現状。
→ベンダー企業と協調して取り組むことが必要
❻先端的な技術を学んだ若い人材をメインフレームを含む老朽化したシステムのメンテナンスに充てようとして、高い能力を活用しきれていなかったり、そのような人材にとっては魅力のある業務ではないために離職



[❷について]
 ここでは、既存のシステムをリプレイスする場合のことを言っているのでしょう?DXリポートの著者は、リプレイスをする場合なども、全体最適を意識しながら、製造を進めてほしいという希望をここで述べていると思われます。ただ、意味不明なのが、『従来のような「要件定義」をする能力を喪失している。』というくだり・・・。
 ここで著者が求める要件定義とは、革新的創造的な業務をする場合、どのようなシステムが必要なのかということを考え、その考えを実現するためにどのような機能が必要なのか考えるだけのような気がするのですが・・・?以前どんな要件定義をしていたのか不明ですが・・・?
 この革新的、創造的という言葉、中小企業診断士試験の、中小企業経営政策で頻繁に出てくる用語です。社会としては、革新的で創造的な、商品や製造方法を常に求めているということを意識する必要はあるようです。

[❸について]
 ❸は、よく聞きますね?中小企業などに行くとボロクソに言われるSIベンダーですが、金払いのいい企業への対応は違います。その金払いのいい企業の社員の方から聞こえる声は、「●●●ベンダーに任せておけば大丈夫!」という発言です。その仕事っぷりを聞くと、何から何まで忖度しながらSIベンダー側で実施し、その仕事はきめ細やかで完璧です。その仕事ぶりでは、問題があった場合、SIベンダーの責任と言われても仕方がない気がします。ただ、このようなプロジェクト体制でシステムを製造した場合、革新とか創造的なシステムが製造できるのかちょっと、疑問です。

[❹について]
 アジャイルを意識した発言だと思われます。そもそもこのDXは、アジャイル開発を意識したものとなっています。先日のブログでは、「ハイパーアジャイル」なんて言葉が出てきたぐらいです。その場合、プロジェクトマネージャーは、SIベンダーですが、システムオーナーは、事業部長になります。ただ、ウォーターフォールや、スパイラルとかという開発の場合、プロジェクトの体制としてどうなのでしょうか?今まで事業部長が全面にたって関わってくるという場面はみたことはないのですが、これからは求められるのかもしれません。

[❺について]
 人材不足の原因なのですが、人材マネジメントができていないのが主要因のような気がします。中小企業診断士の企業経営理論を勉強し、改めてマネジメントについて学ぶと学問上のそれと現場の乖離を感じます。そのような現場を見て、まずは、人材マネジメントから始めませんか?っといいたい・・・。

[❻について]
 古いシステムをいじっていて思うのですが、実はこの時がシステムをいじっている感は最高です!自分が小さいころシステムだと思っていたそのものが目の前にあると感じることができます。
 そのレガシーシステムは、システムの細部まで見ることができ、しかも、データ、ディスクなどハードの細部までユーティリティで確認することができます。それは、ソフトがハードにより近いことを意味し、コンピュータを勉強するには最高な環境だと思います。
 最新とか何とか言っていますが、現在のコンピュータ1950年にリリースされた、ENIACからその構成を全く変えていません。確かにはやりがあるのは知っていますが、コンピュータの本質を知りたいなら、レガシーシステムは最高ですよ!それを、新人に伝え、信じ込ませましょう(笑)!

[あとがき]
 最後は駆け足になりましたが、「DXとSIベンダー」の課題について、書きましたがどうでしょうか?DXレポートをななめ読みし、問題点を抽出したものなので、以上が全部ではないかもしれません。2018年のものになりますが、当時どんな問題があり、現時点とどう違うのか比較し、未来はどうなるのか?どうするのかということを考えるために、DXレポートを読むことも必要なことなのかもしれません。

 では、また!

2024年08月29日

社内でシステムを製造した場合の問題点 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
会議.jpg
 昨日、今日と気分がのりません。ブログとプログラム開発をするのがやっとの状況です。
雨のせいでしょうか?今日はこのまま何とか載り切り、明日から再始動していきたいです。
 話は変わりますが、JavaScriptで面白いやり方を見つけました。それは、テンプレートリテラル・・・。このやり方は初めて見ました。後日機会がありましたら、ご紹介します。
 では、昨日の続きです。

[社内でシステム開発する場合の問題点]
 昨日は、SIベンダーに頼りきった場合の、リスクについて考えてみました。本日は、その逆で、システム開発を自社でやった場合のリスクについて見ていきましょう!
 もう、去年のことになりますが、以下のような内容でブログを書きました。書いた当時は、「ゼロからはじめるシステム開発」で書いたのですが、昨日、「システムエンジニアから見た社会」に移動させていただきました。まだ読んでいない方は、内容の正否はともかくとして、一読してください。

評価なんて気にするな!こんな時がんばっても無駄!
こんな上司の時は努力するだけ無駄!

この問題提起は、日本の評価制度の問題提起とサラリーマンとして苦悩しているかもしれない人への応援の意味をこめて書きました。
 実は、社内でシステム開発をした場合、このような問題があるかなって思っています。

社内でシステムを作る人間は自分たちの能力を最大限ふり絞って仕事をします。そして、多分素晴らしいシステムを作ることができるとしましょう!その場合、そのシステムを作った人たちは、自分たちの実力を誇り、作ったシステムに見合った給与を求めます。ただ、システムを作ったけれど、会社としての収益が上がらなかったらどうでしょう?経営者としては、できれば、給与を上げたくありません。
 ただ、もし給与を上げたとしたら、今度は、他の部門から不満が噴出するかもしれません。例としてあげると、営業部門です。それは、会社の収益を生んでいるのが自分たちにも関わらず、給与水準が他の職種と比較すると既に高いシステムエンジニアの給与がさらに上がるのです。
 そのため、多くの日本の企業は、社員間で大きく差がつくような、職種を社外に出す傾向にあります(これは私見です)。それは、上司の問題もあるのかもしれませんが、以上の問題をはらんでおり、誰がやっても解決できていないという事実があるからなのかもしれません。
 ただ、この問題を解決をしないと、社内でシステム開発をするようになったけれど、以前とシステムの質が変わらないといった状況になるかもしれません。

[この問題へのアプローチ]
 この問題へのアプローチは、システム製造時に、TCOを考えるだけでなく、作ったシステムにより利益を生むような、対投資効果を考えなければならないと思われます。
 昨日の話になりますが、アメリカでは、多くの会社が社内に大きなシステム部門があり、その部門の人たちは、自分たち以外は信じられないといった雰囲気で仕事をしているという話をしました。その態度は、常に上から目線で、自分たちから見た外部の人間を格下に見ています。
 そういう態度を取る人たちの給与事情はどうなっているのでしょうか?日本と同様に、他部門と横並びに低く抑えようとしているのでしょうか?
 調べてみると、中程度から高めという回答をChatGPTから得ました。中程度から高めという言葉の意味を聞いてみると、アメリカの高い給与をもらっている管理職を含めて、中程度から高めなので、一般の社員からすると、給与水準は高いといっていいようです。
 その状況から、アメリカでは、システムが利益に直結している状況だと想像できます。

[あとがき]
 SIベンダーにシステム製造をお願いする場合と、社内でシステムを作る場合のそれぞれの問題点をよく理解し、将来どのような体制で会社を運営していくのかということをよく考えてから、どちらにするのか考えた方がいいようです。
 以前ブログで書きましたが、実は、システムづくりにおいて、一番作るのが難しいのは組織作りです。あなたは、どう感じますか?

 では、また!

2024年08月28日

DXとSIベンダー 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
システム.jpg
 昨日、システム業界の「2025年の崖」について書きましたが、崖が壁になっていました。
 本日修正しました。加えて、昨日の運送業界の「2024年問題」ですが、それについては、数値的根拠はありません。法律を調べあまり変わっていないという状況を確認まではしましたが、給与を減らされたから多くの人が退職したという部分は、Copilotからの回答をからうけた印象です。やはり、数値的な裏付けがない資料は信用しないほうがいいかもしれませんね?
 では、本日は、DXSIベンダーの関係についてです。

[DXとSIベンダー]
 2018年9月7日リリースされた、DXレポートには、SIベンダーとの関係についても記載されています。抜粋したものがあるので、ちょっと見てみましょう。

❶ユーザ企業よりもベンダー企業の方にITエンジニアの多くが所属している。ユーザ企業のためにベンダー企業がITシステムを開発し、納入する受託開発構造であるため、ユーザ企業の内部に情報システムに関するノウハウが蓄積しにくい。
❷初期のITシステム構築は、ユーザの作業を写し取って論理化し、「要件定義」としてきた。
→(現状)システムがある状態で仕事をするのが当然となっているので、システムの全貌と機能の意義が分からない状態であり、従来のような「要件定義」をする能力を喪失している。
❸新たな価値を提供できるベンダー企業を使って結果を出すことが自らの評価につながる環境に置かれている。我が国のCIOは有名なベンダー企業に頼んだから大丈夫という考えに陥りがちである。しかも、ユーザ企業側の選定責任は不明確で、ベンダー企業側の責任となりがちである。
❹現状は、事業部門がそのようなオーナーシップを持って、プロジェクトに関わる仕組みになっていない場合が多い。
❺ユーザ企業におけるIT人材の不足が深刻な課題である。
→ベンダー企業に経験・知見を含めて頼らざるを得ないというのが現状。
→ベンダー企業と協調して取り組むことが必要
❻先端的な技術を学んだ若い人材をメインフレームを含む老朽化したシステムのメンテナンスに充てようとして、高い能力を活用しきれていなかったり、そのような人材にとっては魅力のある業務ではないために離職


なんて感じで書かれています。

[DXとSIベンダーとの関係の分析]
 では、DXとSIベンダーの以上の関係を分析していきましょう。
ベンダー企業とユーザ企業に存在するIT人材の割合.png
 ❶は、右の図から分かるように、日本の場合、各国特に米国と比較するとかなり、社内にいるエンジニアの数が少ないという印象です。
 それがどういう問題になるかというと、SIベンダーに頼った場合の問題点から話していきましょう!

 以前のSI業界は、現場に何人のSEと言われる人間を送り込むか?ということが上司の仕事でした。それは、システムを作るということは二の次ということを意味しています。しかも作ったシステムは他人のものです。瑕疵期間はあるとは思いますが、その期間が過ぎれば、瑕疵がある分だけ仕事があります。その状況だと、SIベンダー側から見ると、システムに瑕疵が多ければ多いほど仕事が多いことを意味しています。その状況だといいシステムってできるのでしょうか?
 現在DXが声高に言われているため、昔のようにSIベンダーは仕事に困っていないのかもしれませんが、もしまた困るような状況になったら、以前同様に成功率3割なんてプロジェクトがざらになるのかもしれません。ちなみに現在のプロジェクト成功率何割ですか?
 加えて、レガシーシステムで、「ドキュメントが整備されていないため調査に時間を要する」という項目がありましたが、これ、SIベンダーの究極の営業です。おいしい仕事は他人に渡したくありません。だから、ドキュメントは残さずに、現場にいる人間の脳裏にのみ、仕様を残しているのです。
 加えて、現場で見る究極の営業は、普通じゃないプログラムで作るという行為です。ようは、同プロジェクトに参画した人間でないと理解できないようなプログラムロジックが増えていくのです。その行為により、他のベンダーに案件を奪われることはなくなります。

 以上がSIベンダーに頼った企業の成れの果ての状況です。人間には良心があり、全てのシステムに当てはまらないとは思いますが、人間困ればなりふり構っていられません。このような状況になる可能性があるということだけは抑えておいてください。

 以上の事案がもし発生するかもしれないと考えるなら、自社に優秀なエンジニアを雇った方がいいと多くの人が思うでしょう?ただ、日本の場合そうした場合でも問題はあるのですが・・・。

[あとがき]
 本日は、DXとSIベンダーの中の❶しか話せませんでしたが、意外と根が深い問題があるものです。
 アメリカの事情を現地で働いた人から聞いたことがありますが、社内SEは、社外のSEを信じていません。自分たちだけが信じることができ、それ以外の人間たちには任せておけないという雰囲気で仕事をしているそうです。さて、日本はどうでしょうか?

 では、また!

■DXレポート(経済産業省)
https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/20180907_report.html

■DX実戦手引き書~システム構築編・レガシーシステム刷新ハンドブック〜
https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf

2024年08月27日

DXにおける2025年の崖 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
崖.jpg
 昨日は、DXを進める上での、現状と課題を見てきました。なんか大変そうだという印象でしたが、多くの部分は、レガシーシステムでそれ以外はそれほど大きくないと個人的感想述べましたが、独りよがりの部分があるかもしれないので、どんな課題があるのか、DXレポート1から当該部分をピックアップし列記したいと思います。

[レガシーシステム以外の課題]
 以下がレガシーシステム以外の課題として上げている点です。

DXを推進する上での課題


❶新たなデジタル技術を活用して、どのようにビジネスを変革していくかの経営戦略そのものが不可欠だが、方向性が見いだせていない
❷経営者からビジネスをどのように変えるかについての明確な指示が示されないまま「AIを使って何かできないか」といった指示が出され、PoCが繰り返されるものの、ビジネスの改革に繋がらない
❸エンジニアのスキルシフトが必要とされるが現状はされていない。
┣要件変更を前提とした開発への対応ができるアジャイル開発の活用
┗システムを小さな機能に分割し、短いサイクルでリリースができる
❹API/Web APIベースの疎結合構造によるモジュール化されたサービスの利用による、大規模システムのコストとリスクの大幅な圧縮と変化への適用性の向上
❺ベンダー企業は変化の速いデジタル技術にキャッチアップできる人材を活用してユーザに価値を提供することが求められる。
❻ユーザ企業は正当な価値評価をすることが必要であり、これにより、ITエンジニアの単価が安価に固定されてしまう現状から脱却する必要がある。


以上です。やはり再度課題を挙げてみましたが、どれも、レガシーシステムの問題を片づけた後に実施すべきもののようです。

[DXを推進する上での課題の考察]
 レガシーシステムは、IPAからそのソリューションが用意されており、そちらで確認するとして、ここでは、それ以外の課題を見ていきます。
 ❶の新たなデジタル技術ですが、これは、ちょっと意味が分からないですよね?まず、企業においては、経営目標があります。その経営目標を達成するために、人的に実現するのか、技術的に実現するのか検討し、技術的に行うなら対費用効果を調べたうえで、効果があると判断した場合、実施するという性格のものです。この文章だと経営目標がありませんと言っているように聞こえます。文章通りに捉えるのではなく、世の中にどんなシステムがあって、自分たちの業務にどう使ったらいいのかわからないといった方がいいのかもしれません。その場合は、RFIを実施しSIベンダーの力を借りるというのが有効だと考えられます。
 ❷これは、経営者の不勉強さを露呈した事例ですね。やはり、❶同様に経営目標を立案後、その経営目標を実現するための手段を考える段階で検討すべきことで、いきなりAIというのは問題があるかもしれません。但し、新型コロナ感染症禍において、エフェクチュエーションを意識した発言なら分かります。
 ❸これは、難しいでしょうね・・・。まず第一に、エンジニアと呼べるエンジニアならいいのですが、そうでない人も多数います。一般的にサラリーマン的なエンジニアです。その人たちに新たな知識や新たな技術を求めるのは非常に難しいような気がします。他の業界の給与水準が高くなっていて、すぐに転職したくなるような状況ならいいのですが、そのような状況は日本においては聞こえてきません。
 ❹については、SOA(Service Oriented Architecture)について触れていると思われます。このような開発手法は昔から言われており、それでも現在も言われているというのは、まだそうでないシステムが沢山あるようです。この文章を読むと、たった数年でDXを達成するということの難しさを感じます。
 ❺現在、絶賛人材不足です(笑)。
 ❻これも難しいですかね?過去の経験上大金を出してもうまくいかなかったという話はよく聞きます。その理由としては、マネッジメントがうまくいっていなかったということらしいのですが、現在はどうなのでしょうか?
 ただ、成功すると思われる方法を紹介すると、できる人間たちだけを集めて、その集めた人間たちに大金を渡しシステムを作るという方法ならうまくいくと私は考えています。

[あとがき]
 2024年問題っていう用語テレビからよく聞こえてきませんでした?それは、運送会社の法的規制が厳しくなり、厳しくなったことにより運送業務がうまく回らなくなるという報道だったのですが、今回中小企業診断士がらみで調べてみたら、拍子抜けでした。厳しくなったのは、事実なのですが、テレビで報道されるほど厳しくなっていませんでした。それよりもむしろ、定年退職を迎えた人たちの給与を下げて再雇用しようとして逃げられたというのが本当のところらしいです。アメリカでは、年収現在約2,090万円だという話なのですが・・・。この差は何なのでしょうか?
 そのような問題を実はDXレポート1では語られており、「2025年の崖」と読んでいます。そろそろ、テレビで紹介し始めますよ!内容としては、システム業界のことなのですが、以上の運送業界と似たような話です。
 同一労働、同一賃金と言いながら、年齢がきたからという理由で給与を安くするというこの日本の企業体質、非常に問題があります。
 確かに私も年齢を重ねるたびに、技術的な用語を忘れたり、変質することがありますが、サッカーのセルジオ越後さんも言っているように、体得した技術力は失われません。
 固定費を安くしたいという経営者の気持ちは分かりますが、ビジネスを成功させるということをまず第一に、考えた方がいいかもしれません。

 では、また!

■DXレポート(経済産業省)
https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/20180907_report.html

■DX実戦手引き書~システム構築編・レガシーシステム刷新ハンドブック〜
https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf

2024年08月26日

DX 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
研究.jpg
 本日は、セキュリティに関するお話しです。っといいながら、DXなのですが・・・。なんでセキュリティの話をするのにDXなのか、その解説は後にして、まずはDXとは何なのか、経済産業省から2018年に出稿されたDXレポートから紹介していきます。

■DXの定義
 DXに関しては多くの論文や報告書等でも解説されているが、中でも、IT専門調査会社のIDC Japan 株式会社は、DXを次のように定義している。※1

 企業が外部エコシステム(顧客、市場)の破壊的な変化に対応しつつ、内部エコシステム(組織、文化、従業員)の変革を牽引しながら、第3のプラットフォーム(クラウド、モビリティ、ビッグデータ/アナリティクス、ソーシャル技術)を利用して、新しい製品やサービス、新しいビジネス・モデルを通して、ネットとリアルの両面での顧客エクスペリエンスの変革を図ることで価値を創出し、競争上の優位性を確立すること

 さらに、IDC社は、現在、飛躍的にデジタルイノベーションを加速、拡大し、ITと新たなビジネス・モデルを用いて構築される「イノベーションの拡大」の時期にある、とした上で、

 企業が生き残るための鍵は、DXを実装する第3のプラットフォーム上のデジタルイノベーションプラットフォームの構築において、開発者とイノベーターのコミュニティを創生し、分散化や特化が進むクラウド2.0、あらゆるエンタープライズアプリケーションでAIが使用されるパーベイシブAI、マイクロサービスやイベント駆動型のクラウドファンクションズを使ったハイパーアジャイルアプリケーション、大規模で分散した信頼性基盤としてのブロックチェーン、音声やAR/VRなど多様なヒューマンデジタルインターフェースといったITを強力に生かせるかにかかっています。

※1 (出典)Japan IT Market 2018 Top 10 Predictions: デジタルネイティブ企業への変革 - DXエコノミー
においてイノベーションを飛躍的に拡大せよ, IDC Japan プレスリリース, 2017年12月14日
(DXレポート 経済産業省)

まぁ〜、システムに携わっている人間が見てもよく分からない単語が乱発されています。

[意味不明な部分を解読する]
 一度さっと読むと、難しい単語が多いって感じたのですが、2度目じっくり読むとそうでも無いことが分かります。ただ、それでも意味不明な単語があるので、まずは、その単語の意味を調べるところから始めて見ましょう!
 以下は、ChatGPTに聞いた内容になります。


■クラウド2.0(Cloud 2.0)
 クラウド2.0は、従来のクラウドコンピューティングから進化した次世代のクラウドサービスの概念を指します。これには、マルチクラウド(複数のクラウドサービスプロバイダーを組み合わせて使用する)やハイブリッドクラウド(オンプレミスとクラウドを組み合わせる)など、より柔軟で高度なクラウド運用が含まれます。また、クラウドネイティブアプリケーションの開発や、AIや機械学習の活用も含まれることがあります。

■パーベイシブAI(Pervasive AI)
 パーベイシブAIは、あらゆる場所に広がるAI技術を指します。これには、企業や日常生活のさまざまな場面でAIが広く浸透し、自然な形で利用される状況を指します。具体的には、IoTデバイス、スマートホーム、ビジネスプロセスの自動化などでAIが利用されることを意味します。

■マイクロサービス(Microservices)
 マイクロサービスは、ソフトウェアアーキテクチャの一形態で、アプリケーションを複数の小さな独立したサービス(マイクロサービス)に分割して開発する方法です。各マイクロサービスは特定の機能に特化しており、独立して開発、デプロイ、スケールすることが可能です。このアプローチは、アジャイル開発やDevOpsの導入に適しており、システムの柔軟性とスケーラビリティを高めます。

■ハイパーアジャイルアプリケーション(Hyper-Agile Applications)
 ハイパーアジャイルアプリケーションは、非常に迅速かつ柔軟に変更や更新が可能なアプリケーションを指します。これは、従来のアジャイル開発手法をさらに強化したものであり、頻繁なリリースサイクルや継続的な改善を可能にします。このようなアプリケーションは、変化の速い市場環境や顧客のニーズに即座に対応できるように設計されています。



[DXの定義の考察]
 DXの定義と記載されている、前半が私が本来定義と認識している記述になります。その部分を意訳すると、

「新たな技術から創造されたビジネスが、新たな顧客体験を生みだし、生み出された体験により新たな価値が生み出される。その価値が競争優位となり、確立することにより市場における優位性を生み出す」

っといた所でしょうか?その価値観は、一般的にはブランド価値といっていいかもしれません。

[現状の課題]
 DX推進において、現状の問題として、自社で保有してるレガシーシステムを挙げています。印象としては、その部分が最大で、他の問題はたいしたことがないといった印象です。語弊になるかもしれませんが・・・・。
 では、具体的にレガシーシステムにどんな問題があるのかDXレポートから列記します。


・ドキュメントが整備されていないため調査に時間を要する
・レガシーシステムとのデータ連携が困難
・影響が多岐にわたるため試験に時間を要する
 →技術面の老朽化、システムの肥大化・複雑化、ブラックボックス化を解決
・各事業の個別最適化を優先してきたため、企業全体の最適化が図られなかった
 →データ・情報資産を数多く保有しているにも関わらず、連携が難しく、活用しきれていない。
・レガシーシステムの問題を経営課題として、真正面から取り組まないまま時間が経過してしまっている。
・スクラッチ(既存の製品や雛形等を流用せずに、まったく新規にゼロから開発すること)で大規模開発を行ってきた人材は既に現場から消え去る局面を迎えており、既に多くの企業においてブラックボックス化している。
・システム更改は、システムの価値は高められるが、経営者から見て価値が見えにくい。・将来的なリスクはあっても説明しにくい。
・現状は問題なく稼働しているため、誰も困っていない。
→結果として問題を先送りにしてしまう。
・改修プロジェクトは比較的長期を要し、かつコストも安くはない。現状の仕様を完全に踏襲することは困難であり、結果的に従前より使い勝手が悪くなることも少なくない(例えばパッケージに置き換える場合)。
・我が国企業のIT関連予算の80%は現行ビジネスの維持・運営(ラン・ザ・ビジネス)に割り当てられている。


DX資料.png
なんか、ボロボロって感じですね・・・。以上の状況を数値から確認することができます。右記の資料も、2018年のDXレポートからです。

[あとがき]
 長くなったこと、そして、一度読んだだけでは、なかなかどうまとめるのか、考えがまとまらないので、今日はこの辺にします。
 以前、大手銀行が1970年からシステム更改できずに悩んでいるという話を聞いたことがありましたが、正直言って100%信じていませんでした。ただ、今回の経済産業省からの文書を読んで、聞いた内容を信じることができます。
 なお、以上の文章は、2018年9月7日にリリースされた第1版からの調査結果です。昨日調べたところ、DXレポートは、第2.2版までリリースされており、同文書は2018年から4年たっているので、同レポートを読むこといより、本日の印象が変わるかもしれません。
 本日、PHPコンストラクタに関する修正が終わり、明日からJavaScriptの本格的な製造に入ります。特出する何かがあれば、そちらを優先しますが、なければ、引き続きDXに関するレポートをブログとしてまとめていきたいと思います。

 では、また!

■DXレポート(経済産業省)
https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/20180907_report.html

2024年08月25日

使い勝手が良くなるまで時間がかかる 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 今日の開発は、PHPの全体の半数のクラスコンストラクタに、try〜catchロジックを追加しました。それと同時に、コンストラクタでのエラーを、各メソッドの先頭で判定しているのですが、そのロジックを削除しています。それに加えて、各メソッドで使用している、変数をメソッドの頭でstaticで宣言していましたが、問題があるそうなので、削除しています。

[staticを利用する時の問題点]
 以下がその問題点です。ChatGPTから聞いた内容になります。

static 変数の特性


❶メソッド内での共有:
 メソッド内で static 変数を使用すると、その変数はそのメソッドが呼び出されるたびに再初期化されるのではなく、メソッドのすべての呼び出しで共有されます。これは、一度設定された値がメソッドの次回呼び出し時にも保持されることを意味します。

❷メモリ管理:
 static変数はクラスがロードされている限りメモリに保持されるため、大量に使用するとメモリ消費が増加する可能性があります。

❸スレッドセーフでない:
 static変数がスレッドセーフでない状況では、マルチスレッド環境での競合状態が発生する可能性があります。PHPは通常シングルスレッドで動作しますが、共有リソースに対して注意が必要です。

❹ユニットテストが困難:
 static変数は状態を持ち続けるため、メソッドが実行されるたびに異なる結果を返す可能性がある場合、ユニットテストの結果が予測不可能になります。特にテスト間で状態が共有されるため、テストの独立性が損なわれることがあります。

❺依存性注入が困難:
 static変数を使用すると、依存性注入(DI)が困難になります。クラスやメソッドが static 状態に依存する場合、他のクラスやコンポーネントとの結合度が高くなり、柔軟な設計が難しくなります。


プログラミングをしていて、気をつかわなければならない点が増えれば増えるほど、バグを生み出す原因となります。そのため、すべてのメソッドのロジックからstaticの宣言を削除しました。

[難しい数値判定]
 予定の作業を終えた後、JavaScriptを動かしてみました。ただ、ちょっと、おかしい・・・。先日正しく動いていたプログラムが正常に動作しない。
 正しく動いていたというのは、ちょっと、問題があるかもしれません。それは、ChatGPTとの対話により、ChatGPTの提案をそのままJavaScriptのロジックに挿入している部分があるからです。 
 一つ目は、isNaN()の仕様・・・。ChatGPTから提案されたロジックなのですが、実は関数の引数に数値以外の値が指定されるとtureになります。しかし、数値指定されると、falseになります。
 前回のプログラムが求めていたのは、文字列なのだけれど、その文字列は12345といった数字でない文字列が引数として設定されていることを期待し、それ以外の条件の場合は、エラーとしようとしていました。ただ、以下のロジックでは無理なようです。


if ( isNaN(str )) {
//引数がエラーの場合
this.#priErrorMessage = '引数は数値を含む文字列でなければなりません';
throw new Error(this.#priErrorMessage);
}



深掘りして見ると、ちょっと、使い勝手がよくない関数だと判明しました。そのため、現在は、引数を数値変換し、数値変換したものを、Number.isFiniteを使用して、数値かどうか判定する仕様としています。。

[変数定義]
 プログラムも複雑になるとGoogle Chromeでエラーとなるケースが増えてきます。 今回のシステム、ローカル変数を各メソッドの頭で宣言しているのですが、letまたはconstで定義しないとエラーになります。その箇所でエラーになればありがたいのですが、呼び出し元で「Uncaught ReferenceError: error is not defined」エラーになります。理由が分からずかなりの時間がとられました。
 使い始めのデバックツールはいつもそうなのですが、その使い勝手が分かるまで時間がかかります。今まで使ってきた全てのデバッカは、エラーとなったところでズバリエラーと表示してくれません。やっぱり、こんなもんですよね・・・

[あとがき]
 ChatGPTも完璧ではないですね?まっ、私の意図が伝わらなかったという話はありますが・・・。これを機に、ChatGPTの言っていることを参考に、BardCopilotの意見も聞きながらシステムを製造することにします。今までの経験上、システムについては、ChatGPTが一番精度がいいので、利用していたのですが、完ぺきではないということが分かりました。
 なお、本日書く予定でしたセキュリティに関する記事ですが、明日に延期します。

 では、また!!!

2024年08月24日

Web→DB間通信のパスワードのセキュリティについて考える 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティ.jpg
 昨日も寝苦しく現在睡眠不足です。気温も下がり寝やすいはずなんですが・・・。ただ、今日はプログラム修正をしました。ただ、途中で手が止まった・・・。それは、データベース関連クラス・・・。

[データベース関連クラス]
 データベース関連クラスは、以前このブログで紹介したクラスです。そのときから多少変えましたが、大きく変更はしていません。ただ、そのロジックを見て、ちょっと悩みました。それは、データベースに接続するユーザーIDとパスワードの扱いです。

[情報処理安全確保支援士2次試験]
 情報処理安全確保支援士2次試験で度々出題されるのですが、リモートで保守するシステムへログインするときの、ユーザーID、パスワードの扱いです。普通に作ると、ログインするためのユーザーID、パスワードの情報は、リモート保守対象のハードウェアの何処かに保存することになるのですが、それをハッキングされることがあります。その場合、リモート保守対象のシステムは、ハッカーの思うがままです。そうならないために、いろいろな手段を講じるのですが、Prototype EVEでは何もしていませんでした。これから本番機を製造するにおいてどうしようかなって、プログラムの修正の手が止まってしまいました。

[システムから自動で変更する]
 そのとき考えたのが、公開鍵暗号で利用されるハイブリッド方式です。公開鍵そのモノは、パスワードを保護するために利用し、パスワードそのものは共通鍵で定期的に変更する方式ですで保護しその共通鍵は定期的に変更するという方式です。。
 この方式を、WebサーバーとDBサーバーとの通信に当てはめると、Webサーバーに保存したパスワードはテキストファイルに保存されていますが、暗号化されている状態です。そのパスワードを利用して、WebサーバーからDBサーバーへ接続する場合、暗号化されたパスワードを復号しDBへ接続します。
 ここでの問題は、Webサーバーに暗号化されたパスワードの復号方法です。あるシステムでは、Base64でやっていますが、これBase64の関数があれば、すぐに復号できてしまいます。
 そこで、思い出したのが、Prototype EVEで利用している、クライアントとWebサーバー間のパスワードの暗号方式・・・。
 この方式は、クライアント側がログイン時、画面にパスワードを入力しますが、そのパスワードはあらかじめクライアントに渡した暗号化情報に基づき暗号化し、その暗号化したものをサーバーへアップロードします。アップロードしたパスワードは、Webサーバーでは、暗号化情報対となる復号情報により復号しログインすると言う方式です。ただ、この方式の場合、データベースに格納された、数万件の暗号化情報に基づき、無作為に選択され、その情報に基づきパスワードを暗号化するから意味があります。予め、テキストファイルにエクスポートするという方法がありますが、それを、公開鍵暗号化ハイブリット方式と同様に短時間で行うとなれば、この部分だけに、かなりのリソースを割かなければならなくなると思われます。

[システムで変更する]
 パスワードをシステムから定期的に変更するというのもよく考えるとあまりよくありません。それは、サーバー上にプログラムを配置すれば、ハッカーもDBへアクセスできると言うことを意味しています。今現在Prototype EVEにおいて、システムコマンドを利用する場合、メールが届くようにしていますが、これを短期間で行うと、受け取る側としては、ハッキングと言った問題が発生した場合、気づかない可能性があります。
 そこで、また、ChatGPTに聞いてみました。そうしたら、MySQLで利用しているユーザーがroot権限を持っている場合、システムコマンドを利用しなくても、DBのパスワードはALTERコマンドで容易に変更できるようです。rootユーザーを標準で使用するかどうかという問題はありますが、まっ、標準で利用できるモノは仕方がありません。これは、別の対応策を考えるとして、何となくいけそうだという印象を持つことができました。

[あとがき]
 まだ、問題はありますが、今日で方向性が決まった気がします。しかし、まだ考えが足りていない部分もありそうなので、いきなり作りこむのではなく、ある程度作り終えてから、追加ロジックとして作りこんでいきたいと思います。これにより、Web、DB間の通信のセキュリティは確保できそうです。
 ちょっと、考えるばかりで修正が全くできない一日でした。

 では、また!!!

2024年08月23日

オブジェクト指向言語のカプセル化 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 PHPコンストラクタでエラーが発生した場合の対応をしています。この手のシステム全体に影響を及ぼす修正は、短期間で一気にやって、後悔したことがたびたびあったので、今回は、少しずつ段階を踏んで実施しています。
 昨日はString Classのコンストラクタにエラーロジックを追加し、本日は、同修正の影響とその洗い出し、そして修正までを実施しました。
 実施してみて、多分いけるんじゃないかなっていう印象を持っています。今日一日再度検討し、問題ないと判断できた場合、明日一気に全てのクラスの見直しに入りたいと思います。

[カプセル化]
 昨日のロジックにおいて、カプセル化という話が出てきました。本日は、その解説をすることにします。
 カプセル化には、教科書等で見かけるのは、プロパティメソッドのカプセル化です。私は、プロパティのカプセル化をよく利用するのですが、どのような機能なのか、カプセル化について、ChatGPTに聞いてみました。

 カプセル化(Encapsulation)**は、オブジェクト指向プログラミング(OOP)の基本的な概念の一つで、データやメソッドを外部から隠蔽し、外部のコードがオブジェクトの内部状態を直接変更できないようにする技術です。カプセル化は、主にプロパティとメソッドで利用され、以下のような特徴やメリットがあります。

❶プロパティにおけるカプセル化
 プロパティ(クラスの内部データや状態)は、通常、privateやprotectedといったアクセス修飾子を使ってカプセル化されます。これにより、外部から直接アクセスできないようにします。

1)実装方法:
・private プロパティはクラス内でしかアクセスできません。
・protected プロパティはクラス内および継承したクラス内でのみアクセスできます。
・プロパティへのアクセスは、通常、publicなゲッター(getter)とセッター(setter)メソッドを通じて行われます。

2)メリット:
・データ保護
 外部のコードがクラス内部のデータを不正に変更するのを防ぎ、データの整合性を保ちます。
・変更の柔軟性
 クラスの内部実装を変更しても、外部に公開されたインターフェースを変更しなければ、他のコードへの影響を最小限に抑えられます。
・制約の管理
 ゲッターやセッターを使ってデータのバリデーションや制約を容易に実装でき、データが常に正しい形式を保つようにできます。


❷メソッドにおけるカプセル化
 メソッド(クラスの振る舞い)は、必要に応じてprivateやprotectedとしてカプセル化されます。これにより、外部から呼び出されることを防ぎ、クラスの内部処理を隠蔽します。

1)実装方法:
・private メソッドはクラス内でしか呼び出せません。
・protected メソッドはクラス内および継承したクラス内でのみ呼び出せます。
・外部に公開する必要があるメソッドは、publicとして定義されます。

2)メリット:
・内部処理の隠蔽
 クラスの内部処理を外部から隠すことで、クラスの使い方を単純化し、内部ロジックの変更が外部に影響を与えにくくなります。
・再利用性の向上
 クラスを使う側は、公開されたインターフェース(publicメソッド)を利用するだけでよく、内部の詳細に依存しないため、クラスの再利用性が高まります。
メンテナンスの容易化: クラスの内部実装を変更しても、外部のコードに影響が少ないため、メンテナンスが容易です。


■まとめ
 カプセル化は、ソフトウェアのモジュール性、保守性、データ保護、再利用性を向上させる重要な技術です。プロパティやメソッドを外部から隠蔽し、アクセスを制限することで、オブジェクトの内部状態を安全に保ちながら、システム全体の複雑さを管理しやすくします。


メソッドについては、第三者が利用することにより不都合な機能を提供したことがないので、そのメリットがいまいちピンとこないのですが、強いて言うなら、変更してほしくないデータがあったら、そのデータの内容を変更するような機能のメソッドをカプセル化することがあるかもしれません。
 ただ、昨日プログラムを作っていて気づいたのですが、もし、本当に変更してもらいたくないプロパティがあったとしたら、定数としたほうがいいかもしれません。定数として設定した以降は、変更できませんが、そんな方法があることを、昨日のChatGPTとの対話で感じました。
 なお、以上の解説はJavaの解説となっています。オブジェクト指向言語のカプセル化について解説を依頼したのですが、オブジェクト指向言語の代表的な言語としてJavaについて解説をしているようです。
 JavaScriptでは、何も付けなければpublicだし、#を付けた場合は、private扱いになります。但し、protecedはありません。

[それ以外のカプセル化]
 プロパティとメソッドのカプセル化について、理解できましたでしょうか?それについては、教科書等に書かれていてよく見かけるものです。自分の記憶では、その2つの記憶しかないのですが、もしかしたら、その他のカプセル化があるかもしれません。ちょっと、ChatGPTに聞いてみましょう!

❶クラスそのもののカプセル化
 クラス自体をカプセル化することで、そのクラスを外部から見えなくすることができます。これは、他のクラスやコードが特定のクラスに直接アクセスするのを防ぎ、そのクラスのインスタンス化や利用を制御する場合に役立ちます。

1)実装方法:
 internalやpackage-privateなどの修飾子を使ってクラスのアクセス範囲を制限できます。(例:Javaのpackage-private、C#のinternal)
クラスを別のクラスや名前空間(ネームスペース、パッケージなど)内で定義し、その範囲内でのみ利用可能にすることができます。

2)メリット:
・モジュールの保護
 クラスが定義されているモジュールやパッケージの外部からそのクラスにアクセスできないようにすることで、モジュール間の依存を減らし、モジュールの独立性を保ちます。
・複雑さの管理
 クラスを隠蔽することで、コードの複雑さを軽減し、システム全体の理解と管理を容易にします。


❷インターフェースのカプセル化
 クラスが実装するインターフェースもカプセル化の対象となることがあります。特に、クラスが複数のインターフェースを実装している場合、必要なインターフェースのみを外部に公開し、それ以外を隠蔽することができます。

1)実装方法:
 インターフェースの公開範囲を制限し、必要なインターフェースのみを外部に公開します。
 クラスを特定のインターフェースにキャストすることで、そのインターフェースのメソッドのみを利用可能にすることができます。

2)メリット:
・柔軟な設計
 必要な機能だけを公開し、他の実装詳細を隠すことで、柔軟で拡張性のある設計が可能になります。
・依存の削減
 外部コードが特定のインターフェースにのみ依存するようにすることで、クラスの変更が外部に与える影響を最小限に抑えることができます。


❸名前空間(ネームスペース)のカプセル化
 名前空間(またはパッケージ)は、クラスや関数、変数などのグループをカプセル化するための手段として利用されます。これにより、名前の衝突を避け、コードの整理がしやすくなります。

1)実装方法:
 名前空間やパッケージを使って、コードを論理的にグループ化します。
特定の名前空間内に定義された要素のみを外部に公開し、それ以外を隠蔽します。

2)メリット:
・名前の衝突回避
 異なるモジュールで同じ名前のクラスや関数を使用でき、名前の衝突を防ぎます。
・コードの整理
 大規模なプロジェクトでコードを整理し、特定の機能やモジュールに関連する要素をグループ化することで、コードの理解とメンテナンスが容易になります。


★まとめ
 カプセル化は、プロパティやメソッドだけでなく、クラス全体、インターフェース、名前空間などにも適用されます。これにより、システムの複雑さを管理しやすくし、コードの安全性、保守性、再利用性を向上させることができます。


ありましたね・・・。実装方法はイメージがわかないのですが、脳裏にとどめておいて必要に応じて利用したいと思います。

[あとがき]
 記憶とは、使用しないと経年劣化といったらいいのでしょうか?変質すると言われています。もしかしたらと思い、調べてみましたが、プロパティとメソッドについては、記憶通りでした。そして、本日新たな知識を得ることができました。
 ブログを書くという機会を利用し、今後も知識の確認と最新化をしていきたいと感じた本日の調査でした。

 では、また!

2024年08月22日

プロトタイプ 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
ペアプログラミング.jpg
 前回までは、オブジェクト指向言語としてのJavaScriptが、自分が作りたい形になるかどうか確認するために簡単なモノを作りましたが、本日は、完成形を目指します。
 では、早速、プログラムを見ていきましょう!

[プロトタイプ]
 以下が完成に近いプロトタイプのstringClassなのですが、以前作っていたPHPと似たような作りにするために、作るに際してChatGPTに質問をしながら製造をしています。


/*************************************************
*【クラス名 】文字列クラス
*【製 造 者】EVE
*【製造年月日】2024年8月19日
*【更新年月日】2024年8月22日
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* 文字列に関する機能を提供する
*************************************************/

class stringClass {
@//プライベート変数を定義
#proString;
#proStringLen;
#proStringByte;
#priErrorMessage

/*************************************************
*【メソッド名】コンストラクタ
*【 引 数 】文字列
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2024年8月19日
*【更新年月日】2024年8月22日
*【リリース日】
*【バージョン】
*【 概 要 】
* 初期の処理を実施する
*************************************************/

constructor( str ) {
//A変数定義
let error;

//Btry〜catch
try {
//C入力データチェック
if (typeof str !== 'string') {
//D引数がエラーの場合
this.#priErrorMessage = '引数は文字列でなければなりません';
throw new Error(this.#priErrorMessage);
}

E//UTF-8変換を行う
const encoder = new TextEncoder();
const strU = encoder.encode(str);

F//数値チェック
if (isNaN(str)) {
//引数がエラーの場合
this.#priErrorMessage = '引数は数値を含む文字列でなければなりません';
throw new Error(this.#priErrorMessage);
}

} catch ( error ) {
G// エラー処理
console.error('コンストラクタでエラーが発生しました:', error.message);
throw error;
}
//Hプライベート変数の設定
this.#proString = str;
this.#proStringLen = str.length;
this.#proStringByte = strU.length;
}
/*************************************************
*【メソッド名】文字列長取得メソッド
*【 引 数 】なし
*【返 却 値】
* 正常時:文字列長
*【製 造 者】EVE
*【製造年月日】2024年8月20日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 文字列長を取得する
*************************************************/

getLength() {
//I文字列長を取得し、呼び出し元へ制御を移す
return this.#proStringLen;
}
/*************************************************
*【メソッド名】文字列バイト数取得
*【 引 数 】なし
*【返 却 値】
* 正常時:バイト数
*【製 造 者】EVE
*【製造年月日】2024年8月22日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* バイト数長を取得する
*************************************************/

getByte() {
//Jバイト長を取得し、呼び出し元へ制御を移す
return this.#proStringByte;
}
/*************************************************
*【メソッド名】エラー取得メソッド
*【 引 数 】なし
*【 返却値 】
* 正常時:エラーメッセージ
*【製 造 者】EVE
*【製造年月日】2024年8月22日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* エラーメッセージを取得する
*************************************************/

getMessage() {
//Kバイト長エラーメッセージを取得し、呼び出し元へ制御を移す
return this.#priErrorMessage;
}
}




[プログラム解説]
 @では、クラス内で利用するプログラム変数を定義しています。変数の頭に#ついていますが、これがプライベート変数の宣言になります。ここで、変数をプライベート変数とすることにより、カプセル化することができます。なお、カプセル化につきましては、後日解説をします。
 Aでは、メソッド内変数を定義しています。
 Bからtry〜catch構文を利用しています。オブジェクト指向言語の場合、コンストラクタでは、returnが使えないことが多いです。JavaScriptも同様なため、ChatGPTに聞くまで、コンストラクタで引数がエラーでもエラーとすることができないと思い込んでいましたが、ChatGPTからtry〜catchを使う方法を教えてもらいました。多分PHPでも利用することが可能です。このプログラム完成後、PHPの方も修正することにします。
 Cでは、引数のチェックをしています。最初、UTFエンコード後入力データチェックをする仕様としていましたが、何も入力されていない場合などでは、エンコード処理がエラーとなるため、まずstringチェックをし、文字列が入力されていることを確認後、処理することを、ChatGPTから勧められました。
 Dでは、引数をUTF-8に変換しています。この関数のデフォルトがUTF-8なので何も指定がないのですが、別の文字列への変換も可能です。
 Eでは、UTF-8に変換しています。変換することにより、文字のバイト数を取得することが可能になります。なお、constと宣言していますが、これは定数宣言をしています。const宣言された変数は、以降定数として扱われ、変更することができません。
 Fでは、数値チェックをしています。JavaScriptの場合、"12345"は数値ではなく、文字列と判定されます。文字列扱いがされている数値の存在をここで確認しています。
 Gでは、tryでエラーとなった処理をここで取得し、エラーを画面上に表示しています。
 Hでは、取得した値をそれぞれプライベート変数へ再設定しています。
 I〜Kは、取得した値をプライベート変数へ設定しています呼び出し元へ返却し、制御を移します。

[あとがき]
 JavaScriptで改めて、プログラムを検証してみて、いろいろと勉強になりました。コンストラクタ内で引数をチェックし、エラーとすることができることを知ったのは収穫でした。ただ、PHPのプログラムを今から修正するのは大変です。
 この製造方法は、まさに、XPペアプログラミングです。今回は、ChatGPTの意見を聞きながら独りよがりの部分があったことに気づきました。これから、常にChatGPTに相談しプログラムを作っていきたいと思います。

 では、また!

2024年08月21日

プログラムの開発環境 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム.jpg
 昨日は寝苦しく、睡眠が浅かったため、朝起きたことをXで報告したのですが、その後、二度寝してしまいました。そのため、本日は、開発の報告はお休みです。その代わりなのですが、JavaScriptの開発環境についてお話ししましょう。

[従来の開発手法]
 従来は、HTML内にJavaScriptプログラムを作り、作ったそのプログラムに、本来のロジックと全く関係ないalert関数を要所、要所に配置し、どこまで動作するのか確認するということをしていました。他にできることといったら、alert関数で動いたところの変数が自分が想定したモノかどうかを調べるぐらいでしょうか?
 そのため、エラー原因が不明なため、昨日のような不慣れなオブジェクト指向言語での開発は本当に大変です。

[昨日知ったこと]
 昨日、正解が不明だったため、JavaScriptでは初めて、Google Chromeのデバッカを利用しました。使用した感想なのですが、EclipseでJavaプログラミングを見るような感覚でデバックすることができました。どこまで動いていて、どの時点ではどのような変数にどんな値が入っているのかビジュアル的に見ることが可能です。昨日はこの機能に助けられました。
 オブジェクト指向言語は、手続き型言語と違い、いろいろなクラスメソッドに飛んでしまいます。まず、自分が想定するメソッドに飛んでいるのかどうか不明だと言うことと、飛んだとしても、正しい動作をしているのかどうか、従来の開発手法では分からないのです。開発の途中からになりますが、非常に助かりました。

[JavaScriptの開発環境]
 JavaScriptの開発環境で、Google Chromeについて御紹介しましたが、他にもありました。それは、Javaで利用したことがある、Eclipseです。この開発環境は、最初IBMが開発していたのですが、バージョン3を迎えるころから、開発をEclipse Foundationが引き継ぎ、無償で提供されるようになった開発環境です。Microsoft製品しか使ったことがないという人がいたら、Visual Studioと似ている製品と言ったらいいでしょうか?

[開発環境の重要性]
 もし、プログラミング開発を受注する場合、開発環境を選択、熟知した方がいいでしょう?プロジェクトによっては、それ以外の環境しか認めないというプロジェクトがあるからです。
 そして、開発環境を使用するようになった場合、その開発環境を熟知しなければなりません。その熟知したレベルが、開発製品の品質、開発スピードを決めるからです。

 JavaScriptについては、従来は[JavaScriptの開発環境]で書いたような感じで開発をしてきたのですが、PHPは以前ブログで書いたことがあるように、秀丸でプログラミングし、デバック機能を有効にしたテスト環境で実際に動かしてみて、そのメッセージを見ながら開発をしていました。
 Eclipseなどの開発環境を利用していなかった理由は、以前の話になりますが、開発の進捗や品質は、バージョンに影響され、そのバージョンが上がると移行ツールなどを利用しなければならないなどの要件があったからです。しかも、動くプログラミング以外にいろいろな機能と言ったらいいのでしょうか?まっ、自分が望んでもいないいろいろなものが付録としてついてきてしまうのです。その点、秀丸での開発はそんなことがありませんから、今までず〜っと秀丸で開発してきたのです。
 そのため、自分のサイトは秀丸で製造していきますが、受注するシステムは、そこは気にする必要はないでしょう?自分の手元から離れれば、もう自分のものではないのですから・・・。

[あとがき]
 Javaの開発は、Eclipseがないと開発できないと言っていいぐらい便利なツールです。オブジェクト指向言語であるJavaも、いろいろなクラス、メソッドをまたぐため、ツールがないと開発ができないのです。その双璧をなす、Visual Studioは、個人で購入し利用していたときは、C#Visual Basicぐらいしか対応していなかった気がしましたが、今調べてみると、いろいろな言語に対応しているようです。どんどんEclipseに似てきているという印象です。個人または小規模開発なら現在は無償で利用できるので、一度試してみるのもいいかもしれません。しかもMicrosoftなら永続的にサポートしてくれそうですしね!

 では、また!

2024年08月20日

JavaScript製造の方向性を考える 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 昨日ブログをアップロード後なのですが、考え方が変わりました。
 昨日のプログラムはChatGPTからの提案だったのですが、気に入りません。特に、インスタンスグローバル変数として定義するところ・・・。
 昨日の調査までは、html内にfunctionで定義し、そこからclassを呼び出す仕様にしようと考えていました。しかし、一般的な方法として、ChatGPTから昨日のようなロジックを教えてもらいました。ただ、繰り返しになりますが、グローバル変数としてインスタンスを定義するところが、何がどう悪いと断言できるモノではないのですが、気持ち悪く感じます。ここで決めた方針で今後製造していくことになるので、もうちょっと、考えた方が良いようです。

[オブジェクト指向言語の開発]
 昨日のプログラムだと、class1に対して、複数の文字列を処理することになります。ただ、現在開発中のEVEシステムは、PHPになりますが、1インスタンスに対して1文字列を処理することにしています。この場合、どのインスタンスがどの文字列を処理していることが一目で分かり、プログラム終了までその内容を保持し、そこで処理された内容を再利用することが可能です。やっぱり、画面の機能を提供するJavaScriptは、HTML内でfunction定義し、classを利用した方がいいような気がします。

[自分の考えが実行できるかプログラミングしてみる]
 いいな〜っと思うのですが、その想像しているプログラムが動作するかどうか分かりません。早速、自分の頭に浮かんだプログラムを作ってみました。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="testscript0001.js" defer></script>
<script>
function test() {
// グローバル変数としてクラスのインスタンスを作成
window.getString = new stringClass("abcde");
alert(getString.getLength());
}
</script>
</head>
<body>
<button onclick="test();">Click Me</button>
</body>
</html>






//testscript0001.js
*************************************************
*【クラス名 】文字列クラス
*【製 造 者】EVE
*【製造年月日】2024年8月19日
*【更新年月日】2024年8月20日
*【リリース日】
*【バージョン】0.1
*【 概 要 】
* 文字列に関する機能を提供する
*************************************************/

class stringClass {
//グローバル変数を定義
static proString;
static proStringLen;

/*************************************************
*【メソッド名】コンストラクタ
*【 引 数 】なし
*【返 却 値】なし
*【製 造 者】EVE
*【製造年月日】2024年8月19日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 初期の処理を実施する
*************************************************/

constructor(str) {
//グローバル変数の設定
this.proString = str;
this.proStringLen = str.length;
}
/*************************************************
*【メソッド名】文字列長取得
*【 引 数 】なし
*【返 却 値】
* 正常時:文字列長
*【製 造 者】EVE
*【製造年月日】2024年8月20日
*【更新年月日】
*【リリース日】
*【バージョン】
*【 概 要 】
* 文字列の長さを取得する
*************************************************/

getLength() {
return this.proStringLen;
}
}



正解が分かっていないので、こんなに短いプログラムなのですが、かなり時間がかかってしまいました。ただ、想定していたようなプログラム開発は可能だということが、本日の調査からわかりました。

[一般的なプログラムと本日のプログラムどっちがいい?]
 昨日ChatGPTに紹介してもらったプログラムなのですが、一般的なプログラムらしいです。1人でプログラムを作っていて、この一般的という言葉に非常に弱いです。なぜかというと、通常、プログラムなどが変わって行く方向は、大多数によるからです。
 そこで、ChatGPTに昨日のプログラムと、私が作りたいプログラムどちらがいいのか聞いてみました。

■結論
 本日のプログラム(functionを外部ファイルに分けたもの)をお勧めします。

■理由
・一貫性とモジュール化
 関数とクラスが分かれていることで、プロジェクト全体の構造が一貫しており、開発者がどのファイルに何が定義されているかを簡単に理解できます。

・拡張性
 プロジェクトが大きくなった場合でも、各モジュールが独立しているため、機能の追加や変更が容易です。


但し条件があって、HTML内に記述したプログラムを外部ファイルに出すことが条件だそうです。まっ、製造時は、HTML内に記述して、リリースするときに外部に出すという流れになりそうです。回答の中身を吟味すると、一般的ではないが、比較検討するとお勧めできるということらしいです。っということは、そのうち一般的になるかもしれません。

[あとがき]
 本日は、朝起きて、昨日のことが気になって、いきなりプログラムを作り始めましたが、実は昔は起きた瞬間からプログラムを作るという生活だったような気がしますし、そんな生活を今まで推奨していました。っというのは、朝はボケボケで目の調子も悪く何をしてもうまくいきません。ただ、プログラム開発を始めると、最初はいつも通りボケボケなのですが、通常の生活より早くしゃっきりとするのです。
 また、以前推奨していた生活にもどして、生活のリズムを変えてみたいと思った、本日のプログラム開発でした。

 では、また!

2024年08月19日

JavaScriptを動かしてみる! 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラミング.jpg
 本日から、JavaScriptの実際の調査に入るのと同時に、Stringクラスの製造に入っています。ただ、どんなプログラムなのか、その実体が分からないので、ChatGPTに質問をしながら、プログラムの製造に入っています。

[JavaScriptとは?]
 JavaScriptとは、HTMLで利用する、クライアント側の言語です。通常の手続き型言語として利用する場合は、<head>〜</head>内に、functionという記述後関数名を記述するのですが、オブジェクト指向のJavaScriptはちょっと違うようです。
 通常オブジェクト指向のJavaScriptはjsファイルとして外部ファイルに記述し、そのファイルを使用したいHTMLファイルへインポートするという流れになります。ChatGPTから提供された実際のプログラムは以下の通りとなります。


//script.js

// クラス定義
class AlertManager {
//@コンストラクタ
constructor(message) {
this.message = message;
}
//AshowAlertメソッド
showAlert() {
alert(this.message);
}
}

//Bグローバル変数としてクラスのインスタンスを作成
window.alertManager = new AlertManager('This alert is triggered by a button click!');






<!--test.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Using JavaScript Class from HTML</title>

<!-- C外部JavaScriptファイルインポート-->
<script src="script.js" defer></script>
</head>
<body>
<!-- DHTMLからクラスを使用 -->
<button onclick="alertManager.showAlert()">Click Me</button>
</body>
</html>



 @はコンストラクタです。Java同様に、Classのインスタンス作成時(new)に無条件で実行されるメソッドです。Javaは、クラス名と同じメソッド名を指定することにより、コンストラクタと言うことを明示しますが、JavaScriptは、constructorと記述します。
 Aは、ShowAlertメソッドになります。内容を見ると、引数をAlert関数を用いて画面上に表示する機能だと言うことが分かります。
 Bは作成したクラスのインスタンスをグローバル変数として定義しています。基本オブジェクト指向言語としてプログラムを使用しようとした場合、Java同様にインスタンスを作成後利用することになります。通常、newというキーワードでインスタンスを取得するのですが、onClickonLoad等で利用しようとした場合、複数行記述することができないため、ここで記述し、HTML内で利用する場合は、このインスタンスを利用することになります。
 Cここからは、アドレスバーから呼ばれる、プログラムhtmlファイルの記述になります。Cでは、上記@〜Bで作成した、script.jsファイルをhtmlファイルにインポートし、その機能を利用できるようにしています。
 Dでは、グローバル変数として定義した、インスタンスを呼び出し、ボタンをクリックしたときにshow.Alertメソッドを実行するように定義しています。

 以上です。実際にプログラムを作成し、Prototype EVE上で実行しましたが、動作することが確認できました。

[あとがき]
 はじめての方は難しいですかね?手続き型言語は、呼び出した順番に実行されていくので、直感的に理解できるのですが、非手続き型言語であるオブジェクト指向言語は、インスタンス、メソッドとか、プロパティとかでてきて、どれがどのように利用されるのかいまいち不明です。
 簡単に言うと、以上のプログラムは設計図で、その設計図を利用しようとした場合、Bでの記述のように、クラスをnewというキーワードで、実体化(インスタンス化)することにより利用します。その実体化された機能は、属性はプロパティで定義され、機能はメソッドとして定義されている状態になっています。
 まっ、プログラムは習うより慣れろです。サンプルプログラムなどを自分で実行して試しながら覚えていくしかないでしょう?

 本日で、JavaScript製造方法について理解することができました。明日からは、製造を進めるのと同時に、深掘りしていきたいと思います。

 では、また!!!

2024年08月18日

情報セキュリティ10大脅威 2024 〜セキュリティ研究室〜


 こんにちは!
 ナビゲータのEVEです。
セキュリティルーム.jpg
 「無尽蔵」から株式情報をダウンロードさせていただいているのですが、検索後表示される企業のレコードが複数表示されます。気づいたのは、今年の4月以降だったので、本件の対応も中小企業診断士一次試験終了後としていたのですが、本日対応しました。
 今回の障害、東証一部、二部が東証プライムスタンダードグロースなんて名称に変わったタイミングで発生したのかと想像していたのですが、違いました。東証一部、二部が東証プライム、スタンダードと変わったのはよく考えたら2022年4月4日とかなり昔のことですが、今回の障害に気づいたのつい最近ですもんね・・・。
 あてがはずれてからいろいろ調べはじめてから、3〜4時間かけて、やっと判明・・・。「無尽蔵」からの情報が増えたようです。以前は、東証の株式情報しかなかったのですが、それに加えて、名証札証福証といった市場からの情報が増えたため、トヨタとか大成建設とかいった、複数の市場に上場している企業が複数表示され、東証のみを想定していた検索条件ではうまく表示できていなかったということだったらしいです。
 障害原因を特定してから、すべて情報が画面上に表示できるようにシステムを改修しました・・・。やり終えてみて、途中でやめるべきでしたね・・・。株式情報関連テーブルのデータ構造を思い出すのに時間がかかりすぎました。他にやることが沢山あるのに・・・。なんか、いつもいっているような・・・始めたらなかなかやめられないのですよね?
 では、前振りが長くなってしまいましたが、今日は予定通り、セキュリティについてお話ししましょう!

[情報セキュリティ10大脅威 2024]
 当サイトでは、毎年、情報セキュリティ10大脅威について報告させていただいています。
 脅威とはいろいろあってそのすべてに対応しなければいけないのは確かなのですが、正直ってかなり難しいという印象を持っています。ただ、現在流行の攻撃を知り、対応しておけば、確率からみるとリスクを大きく軽減することができると私は考えています。そのために調べ、対応し、気を付けるということは非常に重要です。
 では、早速、例年通り、IPAより脅威についてランキング形式で個人、組織と分けて報告していただいているので、見ていきましょう!

【個人】
1位 インターネット上のサービスからの個人情報の窃取(前年8位)
2位 インターネット上のサービスへの不正ログイン(前年9位)
3位 クレジットカード情報の不正利用(前年4位)
4位 スマホ決済の不正利用(前年5位)
5位 偽警告によるインターネット詐欺(前年7位)
6位 ネット上の誹謗・中傷・デマ(前年2位)
7位 フィッシングによる個人情報等の詐取(前年1位)
8位 不正アプリによるスマートフォン利用者への被害(前年6位)
9位 メールやSMS等を使った脅迫・詐欺の手口による金銭要求(前年3位)
10位 ワンクリック請求等の不当請求による金銭被害(前年10位)

【組織】
1位 ランサムウェアによる被害(前年1位)
2位 サプライチェーンの弱点を悪用した攻撃(前年2位)
3位 内部不正による情報漏えい等の被害(前年4位)
4位 標的型攻撃による機密情報の窃取(前年3位)
5位 修正プログラムの公開前を狙う攻撃(ゼロデイ攻撃)(前年6位)
6位 不注意による情報漏えい等の被害(前年9位)
7位 脆弱性対策情報の公開に伴う悪用増加(前年8位)
8位 ビジネスメール詐欺による金銭被害(前年7位)
9位 テレワーク等のニューノーマルな働き方を狙った攻撃(前年5位)
10位 犯罪のビジネス化(アンダーグラウンドサービス)(前年10位)

 カッコ内は前年の順位なのですが、新たな攻撃はトップテンにははいってきていないようです。とりあえず、例年通りの脅威に気をつけ、対策をしておけば、脅威の確率を大きく下げることができそうです。ただ、気をつけなければならないのは、一度設定すれば問題ないとするのではなく、年単位で良いと思うのですが、有効に働いていることを確認した方がいいです。他のシステムを追加したせいで、以前の設定が無効になったなんて言うことは普通にあります。気をつけて下さい。

[情報処理安全確保支援士〜オンライン研修〜]
 毎年、情報処理安全確保支援士オンライン講習を受講しているのですが、ランサムウェアについて多くの部分をさいています。組織の脅威として、2021年から4年連続1位となっているから当然でしょう!特にバックアップについては、1章まるまるとって、解説をしている力のいれよう。ランサムウェア対策とは大きく書いていないのですが、そうだろうなということは想像できます。

[ランサムウェア]
 RaaSって知っていますか?近頃、IaaS、PaaS、SaaSだけでなく、DaaS、CaaSなどクラウド関連で、●aaSという言葉が増えてきたので、その一種かなって思っていたら、違いました。RaaSとは、ランサムウェア提供サービスです。パッと聞いたところ、善良なサービスかと思いきや、犯罪の手段を提供するサービスだそうです。どんなサービスなのか、ChatGPTに聞いてみました。

 RaaS(Ransomware as a Service)とは、ランサムウェア(コンピュータシステムを攻撃し、データを暗号化してアクセスできなくするソフトウェア)を他のサイバー犯罪者に提供するビジネスモデルのことです。RaaSでは、技術的なスキルを持たない者でも、簡単にランサムウェア攻撃を実行できるように、ランサムウェアの開発者がそのソフトウェアをサブスクリプションや一回限りの料金で提供します。
 RaaSを使用する犯罪者は、攻撃の成功に基づいて、開発者に一部の利益(通常は暗号通貨で)を渡します。これは、従来のサイバー犯罪よりも広範に普及しやすく、インターネット上でのランサムウェア攻撃の急増の一因となっています。


だれでも手軽に、ランサムウェアの犯罪を実行できるそうです(笑)。4年連続1位というのは納得です。

[あとがき]
 いかがだったでしょうか?ランサムウェアの脅威を身近に感じていただけましたでしょうか?気を付けてもなかなか防ぐのは難しいのですが、最低限のセキュリティを施したうえで、バックアップを適切な形で取得し、問題があった場合、バックアップからすぐに業務を再開できるような体制を作っておくことが重要なようです。
 BCPDRPなどを考えた業務を普段から心がける必要があるようです。なお、DaaS、CaaSなど、●aaSという言葉について、中小企業診断士の試験で出題されています。他にどんな言葉があるのかCopilotに調べてもらいましたので、試験の参考としてください。もしかして、IPAの試験でも出題されていますか?スキルを維持する意味でも、時間ができたら、IPAの試験を受験してみたいと思います。

 では、また!


 ●aaSとつくサービス

❶SaaS(Software as a Service)
 ソフトウェアをインターネット経由で提供するサービス。
❷PaaS(Platform as a Service)
 アプリケーション開発に必要なプラットフォームを提供するサービス。
❸IaaS(Infrastructure as a Service)
 仮想サーバやストレージなどのインフラを提供するサービス。
❹DaaS(Desktop as a Service)
 仮想デスクトップ環境を提供するサービス。
❺BaaS(Backend as a Service)
 モバイルアプリのバックエンド機能を提供するサービス。
❻FaaS(Function as a Service)
 サーバレスアーキテクチャで関数を実行するサービス。
❼MaaS(Mobility as a Service)
 交通手段を一つのサービスとして統合する概念。
❽NaaS(Network as a Service)
 ネットワークインフラをサービスとして提供するもの。
❾HaaS(Hardware as a Service)
 ハードウェアをサービスとして提供するもの。
❿XaaS(X as a Service)
 あらゆるものをサービスとして提供する総称。
⓫CaaS(Container as a Service)
 コンテナ技術を利用して仮想化されたシステム基盤をサービスとして提供するものです。
⓬DBaaS(Database as a Service)
 データベース管理システムをクラウド上で提供するサービス。
⓭STaaS(Storage as a Service)
 データストレージをクラウド上で提供するサービス。
⓮AaaS(Analytics as a Service)
 データ分析ツールやプラットフォームをクラウド上で提供するサービス。
⓯DRaaS(Disaster Recovery as a Service)
 災害復旧サービスをクラウド上で提供するもの。
⓰SECaaS(Security as a Service)
 セキュリティ機能をクラウド上で提供するサービス。
⓱VaaS(Video as a Service)
 ビデオ会議やストリーミングサービスをクラウド上で提供するもの。





■情報セキュリティ10大脅威 2024
https://www.ipa.go.jp/security/10threats/10threats2024.html

■無尽蔵
https://mujinzou.com/

■情報セキュリティ10大脅威 2023 〜セキュリティ研究室〜
https://fanblogs.jp/bahamuteve/archive/402/0

■情報処理安全確保支援士 オンライン講習 7日目 [セキュリティ研究室]
https://fanblogs.jp/bahamuteve/archive/41/0

2024年08月17日

オブジェクト指向言語としてのJavaScript 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
ビジネスプラン.jpg
 昨日は、私がよく知っている言語、JavaJavaScriptを比較し、何ができて、何ができないのか調べました。昨日の段階では、Javaでできることは、JavaScriptでもできそうだという印象をもちましたが、実際はどうなのでしょうか?

[オブジェクト指向言語]
 JavaScriptもオブジェクト指向の言語の機能が採用されています。それは、以前かららしいのですが、ただ、普通のJavaとかC#とかとは全く異質なものでした。しかし、classキーワードが採用されたため、非常に分かりやすくなったような気がします。但し、Javaとは違い、クラスベースではなくプロトタイプ継承ということらしいです。クラスベース継承はよく理解しているのですが、プロトタイプベース継承はよく知りません。どんな機能をもつモノなのかChatGPTに聞いてみました。

■クラスベースとプロトタイプベースの違い
・クラスベース継承
 クラスを基にしてオブジェクトを作成し、クラス間での継承を行います。クラスは設計図として機能し、コードの再利用が容易です。

・プロトタイプ継承
 オブジェクトが他のオブジェクトを基にして作成され、プロトタイプチェーンを通じて継承します。オブジェクトが直接継承の基盤となるため、より動的で柔軟な継承が可能です。

■classでプログラミングした場合のJavaScript
・クラス構文は、見た目や使い勝手がクラスベース言語に似ており、オブジェクト指向プログラミングを扱いやすくします。
・しかし、内部的にはプロトタイプベースの継承が使用されており、クラス構文もそのプロトタイプベースの仕組みのラップに過ぎません。


どうも、プロトタイプベースと言っているのは、以前見たことがある何しているのかよくわからないプログラミングを指しているようです。もしかしたら、古いプログラムを見るタイミングがある場合、必要な知識になるかもしれません。

[なんでオブジェクト指向言語]
 今まで、経験してきた言語は、すべて手続き型言語に分類されています。Javaも同様に手続き型言語として利用することが可能ですが、基本非手続き型言語に含まれます。非手続型言語は、オブジェクト指向型言語、関数宣言型言語論理型言語宣言型言語などがありますが、Javaやこれから製造しようとしている、JavaScriptは、オブジェクト指向型言語に含まれます。私は、従来の手続き型言語から、非手続き型言語のオブジェクト指向型言語に乗り換えようとしていますが、どんなメリットがあって乗り換えようとしているのでしょうか?その特徴について、ChatGPTにまとめてもらいました。

❶再利用性 (Reusability)
 コードの再利用: クラスやオブジェクトを作成し、それらを他の部分で再利用することで、同じコードを何度も書かずに済みます。例えば、親クラスで定義したメソッドやプロパティをサブクラスで再利用することができます。

❷拡張性 (Extensibility)
 柔軟な拡張: 新しい機能を追加する際に、既存のコードを変更せずに新しいクラスやメソッドを追加できます。これにより、システムの拡張が容易になります。

❸カプセル化 (Encapsulation)
 データの隠蔽: データ(フィールド)と操作(メソッド)をクラス内にまとめ、外部から直接アクセスできないようにすることで、データの保護と変更の影響範囲を制限します。これにより、プログラムの保守性が向上します。

❹保守性 (Maintainability)
 コードの整理: クラスとオブジェクトを使って関連する機能をまとめることで、コードが整理され、理解しやすくなります。修正やバグ修正が容易になります。

❺多態性 (Polymorphism)
 柔軟な振る舞い: 同じメソッド名で異なる実装を持つことができ、異なるオブジェクトが同じメソッドを異なる方法で実装できます。これにより、プログラムの柔軟性と拡張性が向上します。

❻抽象化 (Abstraction)
 複雑さの隠蔽: クラスやオブジェクトを使用することで、複雑な実装の詳細を隠し、インターフェースや基本的な機能だけを外部に公開することができます。これにより、システム全体を理解しやすくなります。

❼モジュール化 (Modularity)
 コードの分割: プログラムを複数のクラスやモジュールに分割することで、各部分が独立して作成・テスト・修正できるようになります。これにより、協力的な開発が容易になります。

❽テストの容易性 (Testability)
 単体テスト: クラスやオブジェクト単位でテストを行うことで、バグを早期に発見しやすくなります。モジュール化されているため、単体テストがしやすいです。

❾シミュレーションとモデル化 (Simulation and Modeling)
 現実世界のモデル化: 現実世界の概念やプロセスをオブジェクトやクラスとしてモデル化することで、プログラムの設計が直感的に行えます。ビジネスロジックやデータモデルをそのままプログラムに反映できます。

❿協力的な開発 (Collaborative Development)
 チーム開発の支援: OOPの構造により、チーム内での役割分担がしやすく、個々の開発者が担当するクラスやオブジェクトを管理することで、効率的に協力することができます。


以上です。私は、EVEシステムを作ろうとしたとき、Prototype EVEの機能も使用したいと思い、オブジェクト指向言語の機能を利用しましたが、そのとき拡張性とか、再利用性といった部分を感じることができました。

[あとがき]
 本日は、オブジェクト指向言語のさわりの部分についてお話ししました。この知識、ときどき、中小企業診断士の試験で見かけます。これから、プログラミングをはじめたい人ばかりではなく、多くの人に役立つ情報になるとうれしいです。
 なお、日曜日は、今後セキュリティのことについて書くことにしました。理由等については、明日お話しますが、その関係で、JavaScriptのつづきの話は月曜日になります。月曜日からは、実際のプログラミングに入っていきますので、お楽しみください。

 では、また!

2024年08月16日

Javaから見たJavaScript 〜プログラム研究室〜


 こんにちは!
 ナビゲータのEVEです。
JavaScript.jpg
 中小企業診断士の二次試験の勉強ですが、令和3年に入っています。令和4年の問題を分析をしながら進めたので、二度目になると、事例Tだと解答と比較的近いモノが書けるようになってきます。中小企業診断士の問題は、試験を実施している機関から、解答が公表されているわけではないので、これで合格となかなか断言するのは難しいのですが、実際に試験に合格した先生方が作成した解答なので、多分合格に近づいているのだと思います。
 ただ、そんな中小企業診断士二次試験からブログに書いてみたいような内容がなかなかないため、「システムエンジニアが目指す中小企業診断士」は書きたい内容がでてきたら、書くとして、しばらくは、「ゼロからはじめるシステム開発」で、起業に向けた準備をしたいと思います。

[JavaScript]
 起業の準備をするにあたり、今調べてみると、思った以上にJavaScriptの需要が多いのに驚きます。Googleのシステムなんか、JavaScriptという言語から想像できないようなシステムを作っているような状況から、かなり複雑なスキルが求められているのでしょうか?
 そんな以前のGoogleのJavaScriptプログラミングを見て、何をしているのか全く理解できなかったことがありましたが、それは、ブログに以前書きましたが、JavaScript特有のオブジェクト指向で記述されていたためでした。ただ、近年他言語と同じようなオブジェクト指向の構文が用意されたため、オブジェクト指向のJavaScriptでも容易にプログラムを読むことができるようになりました。それでは、2024年04月26日の続きになりますが、JavaScriptについて調査していきます。

[Java言語の調査]
 他言語と近くなったというJavaScriptなのですが、近くなったとはいえ、違う部分もあるようです。何が同じで何が違うのか、私が精通しているJava言語からオブジェクト指向としてのJavaScript言語を調べてみたいと思います。
 それでは、JavaScirptを調べる前に、Javaとはどんな言語でだったのか、思い出してみたいと思います。それについて、ChatGPTに聞いてみました。

 Javaは以下のような機能を有した言語です。

❶オブジェクト指向:
 Javaは完全なオブジェクト指向言語であり、すべてがオブジェクトとして扱われます。

❷クラスとオブジェクト:
 クラスはオブジェクトの設計図であり、オブジェクトはクラスのインスタンスです。Javaではクラスを使ってオブジェクトを作成し、操作します。

❸カプセル化 (Encapsulation):
 データ(フィールド)とメソッドをクラス内にまとめ、外部から直接アクセスできないようにすることで、データの保護とプログラムのモジュール化を実現します。

❹継承 (Inheritance):
 Javaでは、あるクラスが他のクラスの機能を引き継ぐことができます。これにより、コードの再利用が促進されます。

❺ポリモーフィズム (Polymorphism):
 同じメソッド名で異なる動作を実装することができます。オーバーロード(同一クラス内でメソッドの引数が異なる複数のメソッドを定義)とオーバーライド(継承関係にあるクラスで親クラスのメソッドを再定義)が含まれます。

❻抽象化 (Abstraction):
 抽象クラスやインターフェースを用いて、具体的な実装を隠蔽し、重要な機能だけを外部に公開します。

❼インターフェース (Interface):
 インターフェースを使用することで、クラス間の契約(コントラクト)を定義し、異なるクラスが同じメソッドを実装することを強制します。

❽メモリ管理 (Garbage Collection):
 Javaにはガベージコレクション機能があり、プログラムが使用しなくなったメモリを自動的に解放します。

❾例外処理 (Exception Handling):
 Javaでは、エラーや例外をtry-catchブロックで処理する仕組みがあり、プログラムの健全性を保つことができます。

❿プラットフォームの独立性:
 JavaのコードはJava Virtual Machine (JVM)上で実行されるため、OSに依存せず、どこでも動作します。

⓫パッケージ化 (Packaging):
 Javaでは関連するクラスをパッケージ(package)としてグループ化し、名前空間を提供することでクラスの衝突を避け、コードの整理を容易にします。

⓬メソッドのオーバーロード (Method Overloading):
 同じクラス内で同名のメソッドを複数定義できますが、引数の型や数が異なる場合に限ります。これにより、同じ動作を異なる入力で処理することが可能です。

⓭メソッドのオーバーライド (Method Overriding):
 サブクラスが親クラスのメソッドを再定義することができます。これにより、サブクラス独自の振る舞いを持たせることができます。

⓮スレッド (Threading):
 Javaはマルチスレッドプログラミングをサポートしており、複数のスレッドで同時にタスクを実行することが可能です。これにより、並列処理やバックグラウンドタスクの実装が容易になります。

⓯シリアライゼーション (Serialization):
 オブジェクトの状態をバイトストリームに変換し、保存またはネットワークを介して送信することができます。これにより、オブジェクトの持続性やリモートプロシージャコールが可能となります。

⓰ジェネリクス (Generics):
 クラスやメソッドで使用するデータ型をパラメータ化でき、型安全なコードを記述することができます。これにより、コンパイル時に型の不整合を防ぎます。

⓱ラムダ式 (Lambda Expressions):
 Java 8から導入されたラムダ式により、簡潔に無名関数を記述することができ、コードの可読性と保守性が向上します。主に関数型インターフェースと共に使用されます。

⓲ストリームAPI (Stream API):
 Java 8から導入されたStream APIを使用することで、データの操作(フィルタリング、マッピング、集計など)を関数型プログラミングスタイルで効率的に行うことができます。

⓳アノテーション (Annotations):
 アノテーションはメタデータをコードに付加する機能で、特定のコンパイラ動作やランタイム処理を指示するために使用されます。例えば、@Overrideはメソッドがオーバーライドされていることを示します。

⓴リフレクション (Reflection):
 Javaではリフレクションを用いて、実行時にクラスやメソッド、フィールドの情報を動的に取得したり、操作したりすることができます。これにより、動的なオブジェクト操作が可能となります。


❶〜⓮までは、よく知る機能です。それでは、以上の機能をJavaScriptは実装しているのかChatGPTに聞いてみましょう!

❶オブジェクト指向:
 JavaScriptもオブジェクト指向の概念をサポートしており、オブジェクトを使ってデータとメソッドを管理します。ただし、プロトタイプベースのオブジェクト指向(クラスベースではなくプロトタイプ継承)を採用しています。

❷クラスとオブジェクト:
 ES6以降、JavaScriptでもclassキーワードが導入され、クラスを使ってオブジェクトを作成できます。ただし、内部的にはプロトタイプを使用しています。

❸カプセル化 (Encapsulation):
 JavaScriptでは、private修飾子はありませんが、クラス内で#を使ってプライベートフィールドやメソッドを定義することが可能です。また、モジュールを利用することで、変数や関数を外部から隠すことができます。

❹継承 (Inheritance):
 JavaScriptでもextendsキーワードを使ってクラス継承が可能です。プロトタイプチェーンを使って継承を実現します。

❺ポリモーフィズム (Polymorphism):
 JavaScriptでもオーバーライドによるポリモーフィズムが可能です。同じメソッド名で異なる振る舞いを持たせることができますが、オーバーロードはサポートされていません。

❻抽象化 (Abstraction):
 JavaScriptには抽象クラスやインターフェースの概念はありませんが、クラスや関数を使って抽象化を行うことができます。また、interfaceや抽象クラスの代わりに、ドキュメント化や型注釈(TypeScript)を利用することが多いです。

❼インターフェース (Interface):
 JavaScript自体にはインターフェースはありませんが、TypeScriptを使用すると、インターフェースを定義して型安全なコードを書くことができます。

❽メモリ管理 (Garbage Collection):
 JavaScriptも自動ガベージコレクションをサポートしており、メモリ管理が自動で行われます。

❾例外処理 (Exception Handling):
 JavaScriptでもtry...catchブロックを使って例外処理を行うことができます。throw文を使って独自の例外をスローすることも可能です。

❿プラットフォームの独立性:
 JavaScriptはブラウザ上で動作し、ほとんどのプラットフォームで実行可能です。Node.jsを使えばサーバーサイドでも動作します。

⓫パッケージ化 (Packaging):
 JavaScriptではES6モジュール (import / export) を使ってコードをモジュール化し、名前空間を分けることができます。パッケージ管理にはnpmやYarnが利用されます

⓬メソッドのオーバーロード (Method Overloading):
 JavaScriptにはメソッドのオーバーロードはありませんが、関数の引数にundefinedをチェックして振る舞いを変えることで、似たような機能を実現できます。

⓭メソッドのオーバーライド (Method Overriding):
 JavaScriptでは、サブクラスで親クラスのメソッドをオーバーライドすることが可能です。

⓮スレッド (Threading):
 JavaScriptはシングルスレッドですが、Web Workersを使用してバックグラウンドで処理を行うことができます。また、非同期処理(async/awaitやPromise)を活用することで、効率的な並行処理が可能です。

⓯シリアライゼーション (Serialization):
 JavaScriptではJSON.stringify()を使ってオブジェクトをJSON形式にシリアライズし、JSON.parse()を使ってデシリアライズできます。

⓰ジェネリクス (Generics):
 JavaScript自体にはジェネリクスはありませんが、TypeScriptを使うことでジェネリクスを導入し、型安全なコードを書くことができます。

⓱ラムダ式 (Lambda Expressions):
 JavaScriptではアロー関数があり、簡潔に無名関数を記述することができます。functionキーワードを使わずに、() => {}の形で関数を定義できます。

⓲ストリームAPI (Stream API):
 JavaScriptにはJavaのようなStream APIはありませんが、Array.prototype.map()やfilter()、reduce()などを使って、類似の処理が可能です。

⓳アノテーション (Annotations):
 JavaScriptにはJavaのようなアノテーションはありませんが、デコレーターを使うことで似たような機能を実現することができます(TypeScriptではより強力にサポートされています)。

⓴リフレクション (Reflection):
 JavaScriptではReflectオブジェクトやObjectメソッドを使用してリフレクション的な操作が可能です。たとえば、オブジェクトのプロパティを動的に取得・操作することができます。


ざっと読んでみると、Javaで利用できる機能は、TypeScriptなどの機能を利用することにより実現することができそうです。

[あとがき]
 以上のすべてを利用するわけではないのですが、使用しそうな機能から順に、調べて実際にプログラミングをしていきたいと思います。
 明日からブログは、その調査結果をまとめていきます。

 なお、本日調べていて気づいたことが・・・。今年の中小企業診断士の経営情報システムで、ポリモーフィズムが出題されたのですが、勘違いしたような気がします・・・。言語の中で唯一資格をもっているJavaなのですが・・・。まっ、二度と間違うことはないでしょう・・・。

 では、また!!!

2024年08月15日

ビジネスプラン 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
プログラム開発.jpg
 本日は、ビジネスプランについて決まったことについてお話ししましょう!

[プログラム]
 今回、ビジネスプランを策定するにあたり、プログラム開発を受注しようとしています。できることからお金にしていこうとしていますが、ここ数年距離をおいていたので、状況が分かりません。どんなプログラムを作ったらいいのかは、インターネット上のソースから、だいたい想像つくのですが、請け負うシステムに影響を受けるので、気にしてもしかたないでしょう?
 気になるのは請け負った場合の単金なのですが、インターネット上ではかなり高額が提示されています。ただ、素直にその内容を信じることができません。
 私が、まだSIベンダーに所属していた時、年齢のこともあり私自身はプログラム開発はしていなかったのですが、単価はどんどん下がり、ビジネスにならないといったような話を聞きました。しかも、海外へ発注するケースが多く、単金が下がる傾向に拍車がかかっていたような気がしていたのですが・・・?まっ、登録して、依頼がくればわかるでしょう?ただ、プログラム開発は受注しますが、システム開発は受注しません。なぜって?めんどくさいから(笑)。

[セキュリティ]
 情報処理安全確保支援士の資格をとり、既に、3回のオンライン研修をうけ、1回実務研修を経験して、コストとして10万円以上支払ったのに、なんの成果もありません。そんなことを考えると、情報処理安全確保支援士の資格を活かしたいと思います。ただ、私は、技術思考が強く、今回中小企業診断士の経営情報システムに出題されたような、技術以外の部分については、不勉強なことは確かです。
 実際にこれから、お客様に行くという想定で考えると、技術的以外の知識が多く求めあれるような気がします。オンライン研修では、技術的以外の部分の情報も入手しているのですが、その内容が脳裏に定着しているか微妙です。
 お客様のところにいくまで、そっちの方の知識の収集及び知識定着に努力したいと思います。

[システム開発]
 今まで、Prototype EVENew Prototype EVEの開発についてこのブログでお話ししてきましたが、今後の方向性が決まりました。
 今までは、New Prototype EVEをきちんと作りこんでから、EVEシステムを作ろうと考えていましたが、やめます。来週からぐらいになると思いますが、EVEシステムの開発に着手し、完成を急ぎます。
 上記で、プログラム開発、セキュリティに関するビジネスの話をしましたが、思うに任せないところがあります。それは、人間関係や、費用の問題で妥協しなければならないということが現時点で分かっているからです。今後は自分のビジネスになるので、最善は尽くすのですが、やはり永続的にビジネスにするにはリスクが大きいような気がします。但し、ここで言っているシステム開発は、すべての主導権があり、自由に、思うがままに作れるという部分で、安心です。ビジネスプラン作りながら、わくわくしてきます。
 今後、このシステムから何かビジネスが生まれれば本当に幸せです。それには、多くの人に役立つシステムを作らないといけませんね?

[あとがき]
 とりとめもなく書きましたが、以上が現在考えている新ビジネスです。その他に、今までやってきた、SNSを使ったビジネスとか考えていますが、なかなかお金にするのは難しいというのはここ数年で分かりました。以上の考えは、現時点のモノで、ビジネスプランがまとまったころ、別なことを考えているかもしれませんが、そのときは、またご報告します。

 では、また!!!

2024年08月13日

Windows7復活への道 三日目 〜ハードウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
Microsoft.jpg
 今日からやっと、試験後の予定していた日常生活に戻れるようになりました。っといいながら、いろいろとやっていて、明日からになりそうですが・・・。
 どういうことかというと、中小企業診断士の二次試験の過去問を解いてみて、だいたいどのようなモノで、どんなことをしなければならないのかといったボリューム感と言ったらいいでしょうか?それが、だいたい本日までで掴めたということが1つ目で、2つ目は、リビングで利用するためのパソコンが正常に稼働するようになったという状況だからです。
 一度はやってみないとボリュームって掴めませんもんね・・・。ただ、掴んだボリュームですが、かなり大きいようです・・・。どうやって処理しようかな?

[3日目の作業は?]
 本日は、Windows10のインストールからです。
 昨日は、Windows10のアップグレードをインターネット経由でやろうとしたのですが、どうも、SSL/TLS通信がうまくいかず、できなかったという話までしました。
 本日は、インターネット経由でダメなら、Windows10のブータブルディスクを作成し、そのブータブルディスクからインストールを試みるところからの話になります。

[Windows10のインストール]
 Windows10のインストールも、昨日同様に、電源を入れてから、起動する画面のメッセージに従い、BIOSの画面を起動します。そして、USBから起動してインストール作業の再開です。
 Windows7の時と違い、今回は、インストーラー起動後まもなくしてから、ライセンスを求められます。ただ、私は、Windows7をWindows10にアップグレードしたいだけなので、Windows10のライセンスは持っていません。そのため、スキップボタンがあったので、ライセンスを入力せずに次の画面に変遷します。
 そうすると、アップグレードか、カスタムインストールか聞いてきます。当然今までの経緯から言うと、アップグレードです。ただ、アップグレードを選択するとエラーになります。またかっていう感じです。お使いのマシンに適合しないというのです・・・。適合しないって、ハードディスクが壊れる直前までWindows10で動作していたのにです・・・。仕方がないので、カスタムを選択しインストールしようとしましたが、ライセンスを求められます。
 ちょっと、状況が分からないので、インターネットで調べてみると、以前は、フリーライセンスでWindows10をインストールできたのですが、現在は、できないというのです。
 このマシンDELLInspiron 570というマシンで、12年前の2012年3月16日にDELLから直接、104,345円で購入しています。壊れた直後は、3、4万円で購入したような気がしましたが、勘違いだったようです。そのため、惜しいと思いWindows10のライセンスを購入することにしました。

[Windows10っていくら?]
 Windows10って以前購入金額をみたことがあるのですが、確か1万5千円ぐらいしたと思います。10万円をセーブできるなら、購入するのもありかなって感じです。
 ということで、インターネットで探してみると、千円以下で購入できるショップ(*1)がありました。ラッキー!!!
 初めて購入するサイトなので、詐欺かもしれないとかいろいろ考えなければならない点はあったような気がしましたが、気づいたら、購入していました(笑)。

[あとがき]
 翌日ですが、メールでWindows10ライセンスが届きました。Yahooで有料店と紹介されているので、今後気軽に購入できそうです。
 そのライセンスを用いて、Windows10をまっさらな状態でインストールし、現在は、通常に稼働しています。
 あとは、FTPサーバーを構築すれば、完璧でしょうか?

 以上がWindows7のマシンを復旧するまでの道のりです・・・。他にやることもある中時間を掛け過ぎです・・・。ただ、以前からやろうと持っていて、かつ、やりかけでやめるのってできないと思いません?まっ、仕方がないので、今日から試験後の普通の日々を送れるように頑張ります!

 では、また!!!

■MY PC STORE
https://store.shopping.yahoo.co.jp/mercadosnowpc/

2024年08月12日

Windows7復活への道 二日目 〜ハードウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
Windows7.jpg
 ここ数日冷気に当てられてしまったようです。クーラーは、朝方ひんやりしているようだったので、寝てから4時間ほどで停止するように設定しているのですが、扇風機は稼働したままねてしまったのが間違えだったようです。目の奥そしてサイナスが重いっていう症状です。頭痛薬を飲みましたが、効きますでしょうか?やはり、風邪薬ですかね?
 それでは、昨日の続きで、ハードディスクを取り付けてからの報告です。

[Windows7を回復ディスクから復旧する]
 昨日は、新しいハードディスクを注文したところまで話したのですが、本日、そのハードディスクが届いてからの話になります。
 届いたハードディスクを早速、パソコンにマウントしました。 そして、昨日同様に、電源を入れてから、起動する画面のメッセージに従い、BIOSの画面を起動します。そして、USBから起動してインストール作業の再開です。ただ、しばらくしたらまたエラーになりました。ここで分かったこと・・・。悪いのはハードディスクだけでなく、回復ディスクも壊れていたのです・・・。

[Windows7をダウンロードする]
 ノートパソコンの方は、回復ディスクを正副作っていたのですが、こちらのWindows7マシンは、重要性がそれほどないと考えていたため、作っていませんでした。だったらと言うことで、インターネットからWindows7をダウンロードしてインストールすることにしました。
 そう思い立ってから、分かったのですが、Windows7ってMicrosoft社からダウンロードできないのですね?保守期間は過ぎているというのは知っていたのですが、ソフトそのモノもダウンロードできないとは・・・。Linuxとかだとアーカイブとして、すべての古いバージョンをダウンロードできるようにしているのですが、Windowsはしていません。購入した人の権利はどうなっているのでしょうか?
 なんて、考えながら、他にないかと探したら、ありました。インターネットのアーカイブ情報を集めているnon-profit団体のサイトのようです。ただ、Microsoft以外のサイトからダウロードするのは心配でしたが、全く何も入っていないパソコンなので思い切ってダウンロードしてインストールをすることにしました。

[使えないWindows7]
 先ほどと同じ要領でインストール作業を始めました。いままで、インストール開始からエラーになるまでえらく時間がかかっていたのですが、普通にインストールすると思った以上に簡単にインストールできるようです。数分で、インストールが終わり、Windows7が起動してきました。
 当然、保守がきれているWindows7を使い続けることは問題があるので、Windows10へのバージョンアップをすることにしました。
 ただ、ここでも問題が・・・。Windows7搭載のブラウザIEだと、Microsoftにアクセスできない・・・。ページが表示されないのです。これは、ブラウザの問題だと思い、Google Chromeをダウロードしようとしたのですが、これも無理・・・。サポートしていないマシンだからインストールさせないというのです。仕方がないので、普段使っていない、Fire Foxをダウンロードして、Windows10のバージョンアップサイトにアクセスしました。ただ、ここでも問題が・・・。バージョンアップしようとするとエラーとなるのです。エラーメッセージをインターネットで調べて見ると、どうも、SSL/TLS通信がうまくいかない(エラーコード:0x80072F8F-0X20000)・・・。情報処理安全確保支援士の方は知っていると思いますが、SSL/TLSで使用している鍵の最終的な保証は、ブラウザが行うとされています。ただ、古いのはOSで、ブラウザは最新のFire Foxです。もしかしたらですが、ブラウザで保証するというその鍵情報は、ブラウザで保持しているのではなく、OSで保持していて、各ブラウザはそのOSで保持している鍵情報を見て認証しているのかもしれません。
 ただ、今から思うと、この作業に先んじて、ブラウザで保証しているSSL/TLSの種類をチェックリストから選択したのですが、その中に当該サイトで保証しているSSL/TLSがなかったのかもしれません。最新の仕様を、12年前のマシンのOSが知るわけありませんもんね???

[あとがき]
 いろいろありますでしょ・・・?こういうことって、昔からありそのときいつも思うのは、最新なものを利用した方が、時間を無駄にしなくて済むっていうことです。
 このあと、Windows10ブータブルディスクを作り、バージョンアップしようとするのですが、ここでも問題が・・・。
 また、本日も長くなってしまったので、続きは明日にしましょう!

 では、また!!!

■Windows7ダウンロードサイト
https://archive.org/download/win-7-home-prem-sp1-japanese/Win7_HomePrem_SP1_Japanese_x86.iso

2024年08月11日

Windows7復活への道 一日目 〜ハードウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
112.jpg
 この1週間、中小企業診断士2次の勉強を進めながら、ビジネスプランを作成し、その一方でプログラム開発をしようと考えていたのですが、ちょっと問題が・・・。
 中小企業診断士の試験に集中しようと考えていた4月末日頃、リビングのパソコンのハードディスクが壊れました。このパソコン、大画面テレビで動画を見るなどで利用する一方でPrototype EVEのバックアップ先として利用していたのですが、購入から12年目にして寿命を迎えました。
 普通ならメッセージからハードディスクだということが予想がついていたので、手持ちのハードディスクからすぐに復旧するのですが、ちょうど中小企業診断士の件で落ち込んでいたので、中小企業診断士の試験を終えてから復旧することにしました。
 そして、試験を終えて復旧しようとしたのですが、問題が・・・・。

[Widows7]
 12年前のパソコンのOSはWindows7です。ただ、途中で、Windows10に無償でバージョンアップできたので、何年前か記憶は定かではありませんが、バージョンアップし、ハードディスクが壊れた当時は、Windows10で動作していました。確か、バージョンアップしたときだったと思いますが、回復ディスクを作成しています。

[SATA]
113.jpg

 今回は、その回復ディスクから、システム復元を試みています。
 その前にやることがあって、ハードディスクを交換しなければなりません。情報処理安全確保支援士の方はあまり関係ありませんが、中小企業診断士の試験を受験する人は知っておいた方がいい、これが、SATAです。小さい口が電源で、大きい口のほうがSATAのポートになります。その口のコードの先を追ってみると、電源コードは、電源ボックスにつながっており、SATAのポートはマザーボードにつながっているのが分かります。
 そこから、古いハードディスクを取り外し、動くはずのハードディスクをつけて、インストールを開始しました。

[USBからマシンを起動]
 まず、起動する画面のメッセージに従い、BIOSの画面を起動します。BIOSとはパソコンが起動するときに最初にアクセスするデバイスです。近頃のパソコンは技術的に古くなったBIOSは使っていないという話もちらほらとききますが、そのメニューから、回復ディスクが入っているUSBから起動するように起動先を変更します。

[回復ディスクからOSがインストールできない!]

111.png

 USBから起動した後は、メッセージに従い、Windows7をインストールを開始します。ただ、インストール途中でエラーになります。このとき、手元に壊れたハードディスクを含めて複数あったため、どこかで壊れたハードディスクと取り違えたかもしれないという可能性を考え、正常かもしれないと思われるハードディスクを再マウントすることにしました。この時点では知りませんでしたが、結局手元にある8台のハードディスクすべて検証することになります。

[動作するハードディスクがない・・・]
 数時間かけて、8台のハードディスク全てにインストールを試みましたが、徒労に終わりました。このとき、ふと思い出したのが、「IDE/SATA-USB変換ケーブル」です。このケーブルを使用すると、SATAハードディスクをUSB経由で認識させることができます。ただ、やってみたら、全滅でした。今まで動作すると考えていた、ハードディスクまでここ数年の間で壊れていたようです。せめて乾燥剤入りのビニール袋に入れておくべきでした。

【中古】 SANWA SUPPLY IDE/SATA-USB変換ケーブル 0.72m USB-CVIDE2

価格:7624円
(2024/8/11 17:47時点)
感想(0件)



[あとがき]
 今日は文章が長くなってしまったので、この辺でやめますが、この作業後、ハードディスクをAmazon経由で購入しています。今まで、500GBのSATAハードディスクだと1万円ぐらいするという認識だったので、覚悟したのですが、今回安い製品を見つけてしまいました。
 それは、Seagate内蔵ハードディスクです。値段は、3,750円・・・。円安なのに、3,000円台というのは驚きです。円高になったら、もしかしたら、3,000円切るのかもしれません。その製品をWebから注文し作業をやめています。

SEAGATE製HDD ST500DM002 500GB SATA600 7200

価格:2970円
(2024/8/11 17:50時点)
感想(0件)



 前回ノートPCの時は、回復ディスクから苦労せずインストールできたので、それほど時間をかけるつもりはなかったのですが、予想外の作業量です。まっ、前回は、ただの再インストールだったということもありますが・・・。

 そして、翌日SATAハードディスクが届くのですが、ここからまた苦労します。火曜日にブログを書いてから本日まで書くことができなかったのもそれが原因です。
 その苦労話の続きは明日書くことにしましょう!

 では、また!!!

2024年04月26日

新しい技術による開発 〜プログラミング研究室〜


 こんにちは!
 ナビゲータのEVEです。
JavaScript.jpg
 今日は、朝すぐ起きて、令和3年の経営情報システムの問題を解きました。ボケボケと言うこともあったのかもしれませんが、今まで受験した中で、最低の60点・・・。先ほど振り返り復習をしたのですが、それほど難しい単語はないのですが、単純な部分で選択を間違っています。実力がまだまだということもありますが、当日は頭をクリアにして受験しないと稼げる点数も稼げないかもしれないと感じました。
 中小企業診断士試験の勉強もそうですが、システム開発もそろそろ進めていきたいと思います。遅れに遅れている中小企業診断士の状況から、システム開発に時間を割くことは難しい状況なのですが、ブログでは、今後システム開発で利用する、新しい技術について勉強していこうと思います。

[JavaScriptオブジェクト指向プログラミング]
 JavaScriptは今まで、関数として利用していました。画面から利用する場合は、今後も従来通りに開発をしていくのですが、JavaScriptプログラムから呼び出される、文字操作、数字操作、配列操作などといった機能をもったプログラムは、オブジェクト指向で開発をしていきたいと思います。
 画面から呼び出される関数は、再利用性が乏しく、その画面に特化して作ることが多いのですが、ある目的の機能を持ったプログラムは再利用性が高い場合が多いというのは今までの経験から感じています。しかも、現在利用できるJavaScriptは、JavaPHPに似たような感じで開発が出来るようになりました。

[勉強の素材]
 いつもなら本をすぐに購入するのですが、今回はその必要はないかなって感じています。理由は、インターネットの記事を読んだ範囲の話ですが、Java、PHPでオブジェクト指向プログラミング開発、または知識があれば、開発ができそうだと判断したからです。
 じゃ、何をということで思い出すのが、いつもお世話になっている「とほほ」です。現在は、いろいろなカテゴリーでポータル画面が埋め尽くされていますが、1990年当初は、HTMLとJavaScriptがメインでした。
 私はWebの開発を業務で初めてした言語はJavaScriptだったのですが、そのとき非常にお世話になっており、なじみがあり、使い慣れているということもあり、今回もお世話になることにしました。

[とほほのWWW入門 ]
 とほほのサイトの情報は、以前にもこのブログで御紹介していますが、どちらかというと中級以上の人向けの情報です。理由は、読んですぐに理解できるという記述になっていないからです。初めて業務でWeb系のシステムを作るときにこのサイトの情報を見ながら作ったのですが、わかりにくい・・・。情報自体が最小限で、余計な事が書いていないので、行間を読みながらの開発になります。ただ、一度理解してしまえば、辞書代わりに利用できるので非常に便利です。そういう意味で、このサイトは中級者以上向けサイトだと感じています。

[今後の予定]
 JavaScriptが、JavaやPHPと同じような開発ができたと言いましたが、それは、Classで定義するようになったと言うことです。実は、それ以前からオブジェクト指向でプログラムを記述できたのですが、非常にわかりにくいというか勉強していないので、理解できません。勉強すれば理解できると思うのですが、今まで習得してきた技術スコープから見ると、アウトオブレンジって感じています。重ね重ねいいますが、一度も勉強はしていないんですけれどね・・・。
 ということで、今回は、Classを定義すると言うところから勉強していきます。目次だけを見ると以下のような項目が並んでいます。

クラスを定義する(class)
コンストラクタ(constructor)
フィールド(field)
メソッド(method)
プライベート(#)
スタティック(static)
スタティックイニシャライズブロック
ゲッター(getter)とセッター(setter)
プロトタイプ(prototype)
継承(extends)
親クラス(super)
クラス式


当然、以上のとほほの内容をまとめていくだけでなく、AIを駆使して、いろいろ寄り道をしながらの勉強と言うことになると思います。多分、1〜2ヶ月ブログを書けば、JavaScriptでオブジェクト指向プログラム開発ができるんじゃないかなって想像しています。
 まっ、かかりっきりでやれば、数日だと思いますが・・・。

[あとがき]
 実は、「ゼロからはじめるシステム開発」で何書こうかなって悩んでいました。PHPの製造も、中小企業診断士の進捗が遅れているのが原因で止まっていて、何も報告することができないし、環境については、前回までに、特出すべき事はすべて書いたような気がするし・・・。
 っということで、オブジェクト指向のJavaScriptです。ここで勉強しておけば、スムーズに、開発に入ることができそうです。

 今日は、午前中に、経営情報システムの受験と整理が終わったので、午後は、令和3年経済学・経済政策の受験に進みたいと思います。

 では、また!!!

■とほほのWWW入門
https://www.tohoho-web.com/

2024年04月16日

Ubuntuのアップグレード −Gsudo apt -u upgradeー 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日の起床は、予定通り7:00でした。明日の起床目標は、6:30です。最終的には、5:00に起きたいのですが、寝ることができる時間を考えると難しい状況です。過去問の試験結果もひどい状況だし、もっと、勉強時間を作るようにしないと・・・。
 では、昨日の続きで、今日は、Esudo apt updateからです。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse

Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。



[Esudo apt update]
 昨日までは、Ubuntuの公式リポジトリで今後使いそうなものをインストールしました。今日は、Esudo apt updateから解説するのですが、このapt updateは、@で実施済みです。では、なぜEで再びupdateを行うのでしょうか?
 以下が、Bardからの回答です。

 Esudo apt updateは、Ubuntu アップグレード手順における、追加したリポジトリの情報を取り込むために必要です。

■詳細説明
 B、C、Dのコマンドで universe、restricted、multiverse リポジトリを追加した後、Eのコマンドで再度 apt update を実行することで、これらのリポジトリに含まれる最新のソフトウェアパッケージ情報を取得できます。

 具体的には、以下の情報が取得されます。
・各パッケージの最新バージョン
・各パッケージの依存関係
・各パッケージのダウンロード元

 この情報に基づいて、F以降のコマンドで適切なソフトウェアパッケージのインストールやアップグレードが行われます。

■E を省略するとどうなるか
 E sudo apt update を省略した場合、以下の問題が発生する可能性があります。
・最新のバージョンのソフトウェアパッケージがインストールされない
・必要なソフトウェアパッケージがインストールされない
・依存関係エラーが発生する

 つまり、アップグレードが正常に行われない可能性が高くなります。


このupdate作業なんですが、何かインストールする前そして後に実施しなければならない作業のようです。

[Fsudo apt -y install gdebi]
 次に、apt -y install gdebiはgdebiをインストールするということは分かるのですが、gdebiとはどのようなツールなのでしょうか?以下は、Bardからの回答です。

 Ubuntu アップグレード手順における F sudo apt -y install gdebi は、gdebi パッケージをインストールするコマンドです。

■gdebi パッケージとは
 gdebi パッケージは、.deb ファイルのインストールを容易にするユーティリティです。

■.deb ファイルとは
 .deb ファイルは、Debian パッケージと呼ばれるソフトウェアパッケージの形式です。

■gdebi をインストールする利点
 gdebi をインストールすると、以下の利点があります。
・コマンドラインで .deb ファイルを簡単にインストールできるようになります。
・グラフィカルなインストーラーを使用するよりも高速にインストールできます。
・依存関係を自動的に解決してくれます。
・破損したパッケージの修復にも役立ちます。

■F のコマンドを実行すると、gdebi パッケージがシステムにインストールされ、以下のコマンドが使用できるようになります。
・gdebi <ファイル名>.deb:指定された .deb ファイルをインストールします。
・gdebi --force-bad-name <ファイル名>.deb:名前が不正な .deb ファイルをインストールします。
・gdebi --reinstall <ファイル名>.deb:既にインストールされているパッケージを再インストールします。
・gdebi --purge <ファイル名>.deb:パッケージとその構成ファイルを削除します。

■具体的には、以下のことが可能になります。
・ダウンロードした .deb ファイルをダブルクリックするだけで、gdebi を使用してインストールできます。
・ターミナルで gdebi コマンドを使用して、.deb ファイルをインストールできます。
・依存関係のある複数の .deb ファイルをまとめてインストールできます。


あらかじめインストールしておいたほうが、後々作業が簡単になりそうです。

[Gsudo apt -u upgrade]
 そして、本作業の目的である、アップグレード作業を実施します。以下にアップグレード作業の概要についてのBardからの回答です。

 Ubuntu アップグレード手順における G sudo apt -u upgrade は、システムにインストールされているパッケージを最新バージョンにアップグレードするコマンドです。

■詳細説明
 apt upgrade コマンドは、以下の動作を行います。
・リポジトリに登録されている最新バージョンのパッケージ情報を取得します。
・現在インストールされているパッケージと比較します。
・古いバージョンのものを 最新バージョンにアップグレードします。

■G のコマンドを実行すると、以下のことが行われます。
・main、universe、restricted、multiverse リポジトリに登録されている 最新バージョンのパッケージ情報 が取得されます。
・現在システムにインストールされているパッケージと比較され、古いバージョンのものが 最新バージョンにアップグレードされます。
・アップグレードに必要な 依存関係 も自動的に解決されます。

■G を省略するとどうなるか
 G sudo apt -u upgrade を省略した場合、以下の問題が発生する可能性があります。
・古いバージョンのソフトウェアパッケージを使い続けることになり、セキュリティ上の脆弱性にさらされる可能性があります。
・新しい機能を利用できなくなります。
・バグや パフォーマンスの問題 が発生する可能性があります。
・つまり、システムを安全かつ快適に利用するためには、G のコマンドを実行することが重要です。


このupgrade作業において、updateしているのに、なんでわざわざupgradeするのかという疑問を持つ方がいると思います。私もその一人なのですが、そもそも更新するものが違うようです。updateコマンドは、更新パッケージのリストを更新するのですが、upgradeはパッケージその物を更新します。そのため、upgrade作業を行わないと、パッケージそのものは更新されず、安定面、セキュリティ面で問題が発生する可能性があります。詳細については、Bardは以下の内容で解説しています。

 update コマンドは、パッケージリストを最新の状態に更新するコマンドです。一方、アップグレードは、パッケージを最新バージョンに更新するプロセスです。

■update コマンドのみでは不十分な理由
 update コマンドのみでは、以下の理由で セキュリティや安定性を維持できない可能性があります。
・新しいパッケージがリリースされていない場合: update コマンドは、既にリリースされているパッケージのみを更新します。新しいパッケージがリリースされていなければ、update コマンドを実行しても、セキュリティ上の脆弱性やバグが修正されない可能性があります。
・依存関係の問題: update コマンドは、依存関係を考慮せずにパッケージを更新します。そのため、特定のパッケージを更新すると、別のパッケージが動作しなくなる可能性があります。
・古いバージョンのパッケージが残っている場合: update コマンドは、古いバージョンのパッケージを削除しません。そのため、古いバージョンのパッケージが残っていると、セキュリティ上の脆弱性やバグが修正されない可能性があります。

■アップグレードが必須な理由
 アップグレードを実行すると、以下のことが行われます。
・新しいパッケージがインストールされます。
・古いパッケージが削除されます。
・依存関係が解決されます。

 そのため、アップグレードを実行することで、システムを最新の状態に保ち、セキュリティ上の脆弱性やバグを修正することができます。


以上から、頻繁にアップグレード作業は実施しなければいけないようです。Bardからの提案では、1週間に一度は、アップグレード作業を実施した方が良いと言っています。
 ただ、セキュリティに関しては、リリース直後にした方がいいという回答もあります。それには、当該サイトを頻繁に見なければならないため、難しいといえるでしょう?それを考えると、1週間という周期は最低限守らなければならないサイクルなのかもしれません。

[あとがき]
 以上の作業を実施後、システムをシャットダウン後電源ボタンを押下し、システムを起動すれば、システムのアップグレード作業は完了です。ただ一通り、調べて見て、本番環境においては、1週間ごとにやらなければいけないというのはハードルは高いように感じます。ただ、セキュリティのことを考えると仕方がないのかもしれません。実施時にはアナウンス後、実施した方がよいでしょう?
 今までの解説にはなかったのですが、Copilotは、バックアップ後実施した方がいいといっています。確かにそうなのですが、本番機などのバックアップは容量の関係で難しいといえます。スナップショットなどがとれればいいのすが・・・。
 実施前のバックアップについても、ご検討下さい。

 では、また!!!

2024年04月15日

Ubuntuアップグレード −Bsudo apt-add-repository universe/Csudo apt-add-repository restricted/Dsudo apt-add-repository multiverse− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 今日の起床は、7時30分でした。昨日より、30分早く起きることができました。明日は、7:00からかな?
 では、昨日の続きで、今日は、Bsudo apt-add-repository universeからです。

@sudo apt update
Asudo apt install software-properties-common

Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。



[Bsudo apt-add-repository universe/Csudo apt-add-repository restricted/Dsudo apt-add-repository multiverse]
 Bsudo apt-add-repository universe、Csudo apt-add-repository restricted、Dsudo apt-add-repository multiverseの実施の理由は、利用することができるソフトウェアを増やすことにあります。まっ、目的が決まっている人はあえてする必要はないかもしれませんが、不確定な運用において、ディスクに余裕があるプロジェクトは、転ばぬ先の杖的に有効した方がいいかもしれません。本日は、ChatGPTからの回答です。

 Bsudo apt-add-repository universe は、Ubuntuのパッケージソースリストに「universe」リポジトリを追加するためのコマンドです。これを実行する理由は以下の通りです:

■ソフトウェアの選択肢の拡大
 Universe リポジトリには、Main リポジトリには含まれていない多数の追加パッケージが含まれています。これにより、より多くのアプリケーションやツールをインストールできるようになります。

■特定の依存関係の解決
 あるソフトウェアをインストールしようとしたとき、その依存パッケージが Universe リポジトリにのみ存在する場合があります。そのため、これを有効にしておくと依存関係の問題を解決できます。

■追加の背景
 デフォルトでは、新しいUbuntuインストールにはMainとRestricted のリポジトリは有効になっていますが、Universe と Multiverse は手動で追加する必要があります。この手順を行うことで、アップグレードや新しいソフトウェアのインストールの際に、より広範囲のパッケージが利用可能になります。
 手順Bは、これらの追加パッケージにアクセスできるようにするため、特に多くのコミュニティサポートされるアプリケーションやライブラリを使用したい場合に重要です。このステップを実行することで、システムの機能や利用可能なソフトウェアの幅が広がります。


ちなみに、Ubuntuで公式に管理しているリポジトリについて、ChatGPTから解説ありましたので、付け加えておきます。

■Universe リポジトリについて
 Ubuntuでは、利用可能なソフトウェアパッケージがいくつかのリポジトリに分けられて管理されています。これらは主に以下の4つのカテゴリに分類されます:

・Main
 Canonicalによってサポートされ、Ubuntuリリースの一部として提供されるフリーかつオープンソースのソフトウェア。

・Universe
 コミュニティによってメンテナンスされるフリーソフトウェアの広範囲なコレクション。Canonicalによるサポートは受けていませんが、数千ものソフトウェアが含まれています。
・Restricted
 サポートが必要なプロプライエタリなドライバー。

・Multiverse
 著作権や法的な制約により自由に使用できないソフトウェアが含まれています。


以上はUbuntuプロジェクトから公式にリリースされたものです。ChatGPTからの解説の通り、mainは、今回のインストール作業により、既に有効になっているのですがUniverseRestrictedMultiverseは有効となっておらず、予め有効にしておいた方が運用面で負荷が軽減されると考えられるので、今回インストール手順に含めています。
 また、公式なリポジトリには、以上の他に、UpdatesSecurityBackportsProposedがあります。Updates、Securityは、今までの手順で有効となっていますが、Backports、Proposedは無効となっています。Backportsは、。特定の新しいソフトウェアを使用したい場合にのみに必要となるもので、当プロジェクトからは除外対象とします。そしてProposedは、まだ正式にリリースされていないアップデートをテストするためのリポジトリです。テスト環境で有効とすることは、ぎりぎり許容できますが、本番環境では、有効にすることは推奨できません。ただ、本番環境と同じ環境でテスト等しないと問題等発生することが考えられることから、やはり、無効のままにしておいた方がよさそうです。

[あとがき]
 いろいろと調べていくとあっという間に、予定文字数を越えてしまいます。ただ、知らないシステムを利用するのは問題があるので、引き続きこのような形で、調べた上で利用するようにしたいと思います。
 続きは、明日引き続き書きます。

 では、また!

2024年04月14日

Ubuntuのアップグレード @sudo apt update/Asudo apt install software-properties-common 〜経営情報システム〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 昨日はお葬式でした。2週間のうちに2回もお葬式があり、その間いろいろな出来事がありました。詳しくは書きませんし、書けませんが、本当に疲れました。
 本日から、通常の生活に戻る予定でしたが、今日起きたのは8時・・・。普通に起きることができませんでした。しばらく、こんな生活が続くのかもしれません。早く元の生活に戻ることができるようにがんばります。
 そんな、今日、令和5年の経営情報システムを受験したのですが、結果72点でした。去年から今年にかけて勉強したのは、Studyingだけです。その状態から、合格点以上というのは、不思議です。去年の試験では、試験直後難しいと感じていましたが、本日解くとさほど難しく感じません。知らない単語がたくさん出てきているのは事実なのですが、知っている単語から導き出すことができます。令和6年中小企業診断士試験勉強開始当初、応用情報技術者試験の勉強をするという発言をブログでしていましたが、その必要はないようです・・・。時間もありませんし・・・。Studyingから拾える単語を100%覚えて、試験では、90点以上を目指したいと思います。
 では、本日は、昨日からの続きで、Ubuntuのアップグレード作業について書きましょう!

[Ubuntuのアップグレード]
 以下がUbuntuのアップグレード手順です。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。

では、@から順番に解説をしていきましょう!

[@sudo apt update]
 @は、以下の理由により、アプリケーションをインストールする場合など、何かシステムに変更を加える場合、必ず行います。今回は、Copilotに解説をしてもらいましょう!

■パッケージリストの更新
 apt updateは、Ubuntuパッケージリストを最新の状態に更新します。
パッケージリストには利用可能なパッケージとそのバージョン情報が含まれています。
アップグレード前に最新の情報を取得することで、正確なアップグレードが可能になります。
■依存関係の解決:
 アップグレード時には、新しいパッケージやバージョンに対する依存関係を解決する必要があります。
apt updateを実行することで、依存関係を正確に特定し、適切なパッケージをダウンロードできます。
■セキュリティと安定性:
 最新のセキュリティパッチや修正が含まれたパッケージを利用することで、システムのセキュリティと安定性を向上させます。
したがって、apt updateはアップグレードプロセスの前提条件として重要です。この手順を実行することで、アップグレードがスムーズに進行し、問題を最小限に抑えることができます。


これは、システムに変更を加える以外にも、習慣的にやった方がいいかもしれません。

[Asudo apt install software-properties-common]
 これは、今までのアップグレード作業の最中に実行したことがないコマンドです。アップグレードの最中に、エラーになることがありましたが、もしかしたら、この処理を実行していなかったため、エラーになっていたのかもしれません。今回も、Copilotに解説をしてもらいましょう!

 sudo apt install software-properties-commonは、Ubuntuシステムでソフトウェアリポジトリの管理に必要なパッケージをインストールするコマンドです。具体的な理由を説明します。

■ソフトウェアリポジトリの追加
 software-properties-commonは、新しいソフトウェアリポジトリを追加するためのツールを提供します。
 リポジトリを追加することで、新しいパッケージやアップデートを取得できるようになります。

■PPA (Personal Package Archive) の利用
 PPAは、Ubuntuユーザーがサードパーティのソフトウェアをインストールできるようにする仕組みです。
 software-properties-commonをインストールすると、PPAを追加できるツールが利用可能になります。

■システムのアップデート:
 インストールされているパッケージを最新の状態に保つために、software-properties-commonをインストールすることが推奨されています。


ちなみに、PPAとは、Personal Package Archivesの略称で、個人や開発チームが自分たちのソフトウェアをUbuntuユーザーと共有するために使用する、Launchpad.netにホストされるリポジトリのことです
 冗長的に解説すると、以下のような特徴があります。以下は、Bardからの解説です。

 PPA は 、Ubuntu用のソフトウェアパッケージを配布するためのリポジトリです。
 公式リポジトリに含まれていない最新バージョンのソフトウェアや、公式リポジトリでは提供されていないソフトウェアを入手するために利用されます。

■PPAの主な特徴:
・最新バージョンのソフトウェアを入手できる
 公式リポジトリよりも早く、最新バージョンのソフトウェアを入手できます。
・公式リポジトリでは提供されていないソフトウェアを入手できる
 公式リポジトリでは提供されていない、特定のニーズに合わせたソフトウェアや、開発中のソフトウェアを入手できます。
・簡単にインストールできる
 sudo apt-add-repository コマンドを使用して、簡単にPPAを追加できます。
・簡単に削除できる
 sudo apt-remove ppa: コマンドを使用して、簡単にPPAを削除できます。

■PPAの注意点:
 公式リポジトリよりも安定性が低い: PPAは個人が作成・管理しているため、公式リポジトリよりも安定性が低い場合があります。

・セキュリティ上のリスクがある
 PPAには、公式リポジトリにはない脆弱性を含むソフトウェアが含まれている可能性があります。
・すべてのディストリビューションで利用できるわけではない
 一部のPPAは、特定のUbuntuディストリビューションのみを対象としています。


 ちなみに、Launchpad.netとは、ソフトウェア開発者向けのWebサービスです。ソフトウェア開発のプロジェクトを管理したり、ソフトウェアパッケージを配布したり、他の開発者と協力したりすることができます。

[あとがき]
 長くなってしまったので、今日はここまでとさせていただきます。
 今日の更新は、遅い時間になってしまいましたが、明日からは、できれば、昼間に更新したいと思います。

 話は変わり、最初の話に戻りますが、令和5年の経営情報システムの試験ですが、当日、目がチカチカしかなり体調が悪い状態でした。そのときは、前日一夜漬けしようとしたつけだと思っていましたが、後日もしかしたら、コロナかもしれないということが分かりました。
 そんな体調で去年受験したのですが、経営情報システムの点数が合格点以下だったのは、その体調のせいだったのかもしれません。ただ、経営法務は受かったんですよね・・・。まだ、経営情報システムのほうが自信があったのですが・・・。まっ、どっちにしろ、1次をまた再受験しなければいけないので、がんばります!

 では、また!

2024年04月10日

Ubuntuをupgradeする 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
UbuntuUpGrade.png
 今日は最悪な日です。予定外なことがたくさん出てきている中、急いでいろいろなことをしなければならないのですが、ブログを作るために、Ubuntuのアップグレード作業をしたのですが、2時間以上かかった上に、録画していたビデオファイルが消えた・・・。
 脆弱なマシンが本当に恨めしく思えます。ただ、グチをいっていても仕方がないので、ここから、急がず慌てず慎重に、いろいろと進捗を進めていきます。
 っということで、作業のビデオファイルは残すことができなかったのですが、今回、インストールしながら、同方法について、ChatGPTBardCopilotにいろいろ質問をして、正しいと思える方法が確立できたので御報告します。

[Ubuntuをアップグレードする]
 以下が、ChatGPTが推奨している手順に、自分の考えで修正した手順です。

@sudo apt update
Asudo apt install software-properties-common
Bsudo apt-add-repository universe
Csudo apt-add-repository restricted
Dsudo apt-add-repository multiverse
Esudo apt update
Fsudo apt -y install gdebi
Gsudo apt -u upgrade
Hshutdown -h now

※システムシャットダウン後、電源を押下しシステムを起動します。


ChatGPTが推奨している点と違うところは、以下の2点です。

Gsudo apt -u upgrade
Hshutdown -h now


ChatGPTは、Gの-uは不要だと言っていましたが、オプション-uをつけました。去年作った手順書も-uを付けています。理由については、おって解説しましょう。
 続きまして、Hなのですが、ChatGPTはカーネルのバージョンアップが行われるなら分かるが、そうで無いなら不要だと言っています。ただ、今までの経験で、upgrade実施後キーボードからの入力がおかしくなったりしたことがありました。そんな経験から、Hのコマンドを実施するようにしています。なお、去年の手順書では、rebootでしたが、今回は、shutdownコマンドを実行するようにしています。実は、rebootコマンドでもキーボードからの入力がおかしくなったと言う経験からです。
 では、そんな違いがあるのですが、項番@から順をおって解説していきましょう!

[あとがき]
 っ思ったのですが、長くなったので、本日は、ここまでとさせていただきます。

 今回、ChatGPT、Bard、Copilotに同じ質問をしながら、インストール作業を進めたのですが、システムについては、ChatGPTが強いって言う印象です。次に、Bardでしょうか?聞いた内容で矛盾があった場合、Bardはこう言っているんだけれど、ChatGPTはどう思うって聞くと、それについて、的確に回答してくれます。
 昨年のアップグレードに関するリポートなのですが、インターネットから自分で情報を集めたものでした。今回の手順と比較して、どっちが合っているのでしょうか?Ubuntuは、自分で作ったシステムではなく、その詳細まで把握していないので、今回は、AIを信じてブログを更新しました。もし、何かご意見がございましたら、ご連絡下さい。
 なお、同インストール作業の状況は、Xserverの作業を録画したモノで作成し公開したいと思います。

 では、また!

2024年04月05日

現状と今後 〜システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
StartUp.jpg
 久しぶりの更新です。
 現状の話と、今後について話しましょう!

[現状]
 現状あまり開発は進んでいない状況です。本日までに、製造したクラスは以下の通りです。

・DB関連クラス
・データクラス
・配列クラス
・ディレクトリクラス
・日付クラス
・文字列クラス
・ファイルクラス
・ファイルアップロードクラス
・ファイルダウンロードクラス
・ファイル・ディレクトリ特定メソッド
・数値クラス
・時間制限管理クラス
・ファイルサマライズクラス
・ユーザ管理クラス

 今後作る予定のクラスは以下の通りです。

・メール管理クラス
・システム管理クラス
・セキュリティ関連クラス
・クライアント管理クラス
・URL管理クラス


今後作る予定のクラスの個数は、それほど多くはないのですが、Prototype EVEで使用していた関数の中身を見ると、それなりに時間がかかりそうです。

[今後の予定]
 今まで、予定していたスケジュールは以下の通りです。

01月 クラスの製造
02月 クラスの製造
03月 Yahooダウンロード処理の製造
04月 クローニングデータ抽出条件登録・修正・削除処理の製造
05月 Yahooデータ抽出処理の製造
06月 クラス関連の見直し
07月 クラス関連の見直し
08月 ユーザ管理システムの製造
09月 権限管理システム製造
10月 メッセージ管理システムの製造
11月 パラメータ管理システムの製造
12月 ログインシステム
01月 ファイル・フォルダ管理システム
02月 コンテンツ管理システム 


3月の予定はまだ未着手で、現在は4月です。3〜5月までは1つのシステムとして稼働し、クラスの製造が終わりさえすれば、1カ月間ぐらいで製造可能かなとも思うのですが、予定を変更することにしました。

[起業チャレンジ!覆面ビリオネア!]
 理由は、ブログ「システムエンジニアから見た社会」で書きました、「起業チャレンジ!覆面ビリオネア」です。この中で1つ心に刺さる言葉がありました。それは、需要がないところに何を持って行っても、成果はないということ・・・。まっ、当たり前なんだけれど、なんだか、目から鱗ですよね・・・。それを、聞いた瞬間、開発の手が止まりました。 そろそろ、インカムがないとまずいかなって感じになってきています。そこで、いろいろ始めたのですが、一番現実的な方法としては、システム販売です。それには、いくつか方法があるのですが、需要なんて考えていません。作れば、誰かがほしいって言ってくれるんじゃないかなぐらいで考えていました。
 システムを作るということは、それほど簡単ではなく、それなりに時間がかかります。ビジュアルプログラミングなど、現在いろいろ便利なプログラミング手法が出てきているのですが、それは、財務システムなど既に誰が作っても同じになるようなありふれたシステムです。もし、画期的な製品で利益を得ようとするなら、従来の開発手法しかないでしょう?それを考えると、作って売れないから次といった感じで作った場合の、数カ月というタイムロスは厳しいものがあります。

[中小企業経営政策]
 中小企業診断士の勉強をしていますが、いろいろ中小企業を後押ししてくれる団体があります。以下が主に、支援してくれる組織です。

・商工会議所
・中小企業基盤整備機構(中小機構)
・よろず支援拠点
・ワンストップ相談窓口Plus One


調べてみると分かりますが、意外と金銭面での支援は多いのですが、起業そのものの相談に乗ってくれる団体って多くはないようです。
 ソフトウェア開発って、多くの人がお金がかなりかかるモノって考えているようですが、実は間違っています。システムを作れる人からすると、パソコンさえあれば、システムは作れます。それ以外、食費、光熱費等々が必要なのは確かですが、それは、ソフトウェア開発をしていなくても、かかる費用なので、起業という面では無視していいと思います。起業し、組織を大きくしようとする段階では、多額のお金が必要になりますが、当分は不要でしょう?
 以上は、そんな人に必要な相談窓口です。中小企業診断士試験が終わってからになると思いますが、相談にいきたいと思います。

[あとがき] 
 システム開発において、需要のあるシステムを作るという方向性は出たのですが、ただ、できるといって信じる人はまずいないでしょう?それを、考えると、まず、EVEシステムを作るのもありかなって、ブログを書きながらそう感じました。
 当初、Prototype EVEを再利用しながら、徐々にEVEシステムへ移行しようと考えていましたが、それもどうかなって現在方向性がぐらついています。
 ただ、今このブログをつけている現在は、少なくても、4月いっぱいは、中小企業診断士の勉強中心の生活にしたいと思っています。

 起業する上で、2つ必要なものがあります。それは、起業するためのスキルと、経営のノウハウ・・・。経営のノウハウを形あるモノとして取得するための、準備を4月いっぱいで目途をたてたいと考えています。5月以降はどうするのかは、これから考えたいと思います。

 では、また!


■ビジュアルプログラミングの特徴について(QUREOプログラミング教室)
https://qureo.jp/class/blog/blog-14908#:~:text=%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%E3%80%81%E5%9B%B3%E5%BD%A2,%E3%82%84%E3%81%99%E3%81%84%E7%82%B9%E3%81%8C%E9%AD%85%E5%8A%9B%E3%81%A7%E3%81%99%E3%80%82

2024年03月28日

本番環境を準備する −準備編@− システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
ネットワーク.jpg
 本日は、昨日の続きで、Ubuntuのインストール後の設定作業になります。
 本日は、下記の項番Aからになります。

@rootへのパスワード設定
Aネットワークの設定
BUbuntuのアップデートの実行
Cネットワークツールのインストール



[Aネットワークの設定−ネットワーク設定ファイルを見つける−]
 今回の作業すべて動画に残したのですが、開発環境を一般の方に知られたくなかったため、普段の環境とは違うものを設定しました。そのため、開発環境を最新にするためには、Ubuntuがレポジトリに用意してくれている、最新パッケージをネットワーク経由で取得しなくてはいけません。そのため、ネットワークを再設定しなくてはいけないのですが、意外と大変・・・。理由は、Ubuntuでは、インストラーに入っている設定は、最小限なモノらしく、ifconfigとか通常利用しているコマンドが利用できない。そこで、いろいろ調べ、ネットワークの設定ファイルを直接いじることにしました。手順としては、以下の通りとなります。
 まずは、ネットワークを設定しているファイルを開きます。

cd /etc/netplan/***********.yaml
#sudo vi ***********.yaml


設定ファイル名が、「***********.yaml」となっていますが、これは、バージョンにより違うので、以上の記述となっています。それと、Ubuntuでは、「/etc/netplan/」には、***********.yamlファイルしかありませんでした。他の、ディストリビューションでは、Copilotによると、場所とか違うが、拡張子は、yamlだそうです。まっ、find等で見つけるなどして、当該ファイルを探して下さい。

[Aネットワークの設定−ネットワークファイルの設定を変更する−]
 次に、特定したファイルをviで表示後、設定していきます。


network:
ethernets:
ens33:
addresses:
- xxxx.xxx.xxx.xxx/xx・・・@
nameservers:
addresses:
- xxx.xxx.xxx.xxx・・・A
search:
- pro2grammer.com
routes:
- to: default
via: xxx.xxx.xxx.xxx・・・B
version: 2


 上記がネットワークを設定する拡張子yamlファイルです。表示後は、以下の内容で@、A、Bを修正します。

@当該サーバーのIPアドレスを設定します。
ADNSのネームサーバーのIPアドレスを設定します。
B当該サーバーが所属するデフォルトゲートウェイを設定します。

上記設定後、上記内容を保存し、ネットワークを再起動します。

#sudo systemctl restart systemd-networkd



[BUbuntuのアップデートの実行]
 次に、Ubuntuのアップデートを実行します。UbuntuはDebian というディストリビューションから派生した製品です。そのため、以下のコマンドは、Debian系のディストリビューションは、多分同じです。

#sudo apt update


以上のコマンドを実行することにより、リポジトリに公開されている最新のモジュールを利用することができます。

[Cネットワークツールのインストール]
 最初にネットワークを修正するのに、普段利用しているコマンドが利用できませんでした。それでは、普段使いのコマンド等を利用するため、パッケージをインストールします。

#sudo apt install net-tools


実はここで苦労しました。理由は、以前は、net-toolsではなく、network-toolsだったらしいのです。Copilotだっけかな?network-toolsをダウンロードして下さいと回答を得てからダウンロード作業を開始したのですが、network-toosがダウンロードできない。そのためダウンロードをしようとしたときの、エラーメッセージを紹介し何回問い合わせても問題が解決できず、結局、2021年1月までしか更新されていない、ChatGPTに聞いたところ、最新のバージョンは、network-toolsではなく、net-toolsだと言う回答を得て問題が解決されました。
 Copilotって、インターネットにつながって日々更新されているはずなんですけれどね・・・?よく考えたら、Bardに聞くの忘れている(笑)。

[あとがき]
 以上で、システムを構築する前作業は完了です。これから、OSを最適な環境にしてから、EVE、Prototype EVEシステムが動作する環境を構築していきます。

 では、また!!!

2024年03月27日

本番環境を準備委する −環境調査編@− システム開発研究室〜


 こんにちは!
 ナビゲータのEVEです。
vmware-s.png
 今日の午後は、Ubuntuの本番環境構築の調査をしていました。
 昔と違い、インターネットでいちいち調べるのではなく、ChatGPTCopilotBardから聞きたい情報を聞くことができます。
 ただ問題が・・・。

[システム構築におけるAIを使用する場合の問題点]
 システム構築におけるAIを使用する場合の問題点は、Ubuntuひとつにしても、いろいろなバージョンがあり、バージョンによりコマンドやパッケージが違うということです。そのため、教えてもらったコマンドをそのまま実行しても、正常終了しないケースがあります。それと、正常終了した場合でも、情報が古いなどの理由により、ディストリビューション開発者側の意図に沿っていない設定になっている可能性があります。

[対策]
 そんな問題点への対策ですが、今回、実行したコマンドをすべてメモをしました。ChatGPTは、2022年1月までの情報で、直近更新される予定はないので、CopilotまたはBardに最新の環境において、正しい設定かどうか後日聞くことにしました。聞くに際しては、バージョンとか環境について詳しく解説してからのほうがいいと思われます。
 めんどくさいとブログをつけながら思ったのですが、よく考えたらインターネットに公開されている情報も正しいかどうかわかりませんもんね?それを、考えれば、聞けばすぐに答えてくれて、間違っていれば訂正してくれる、AIの方がいいような気がします。

[今日の作業]
 今日の作業は、以下の通りです。

@rootへのパスワード設定
Aネットワークの設定
BUbuntuのアップデートの実行
Cネットワークツールのインストール

では、順をおって解説していきましょう!

[@rootへのパスワード設定]
 以前も話しましたが、インストール時にrootのパスワードは設定できません。そのため、インストール時に作ったユーザーでログイン後以下のようにパスワードを設定します。

#sudo passwd root


以上のコマンドを実行すると、ログインユーザーのパスワードを聞いてきますので、入力後、rootのパスワードと確認用パスワードを入力します。
 以上でrootのパスワードの設定は完了です。

[rootでログインを許さない理由]
 Ubuntuではセキュリティレベルを高めるために、sshからは、rootでのログインはさせません。その理由はログから誰がどのような作業をしたのか知るためです。rootでログインを許した場合、複数で開発するプロジェクトでは誰が何をしたのか後で知ることができません。加えて、ウイルス等に感染した場合、ユーザーのパスワードが窃取された場合でも、rootでのログインを許していなければ、不正な行為をする時間を遅らせることができ、その間に、対策を取ることができるかもしれません。

[それでもrootでログインできるようにしたい!]
 それでも、rootでログインし作業をしたいというニーズがあります。私のように1人で開発している場合は特にです。現在は、WinSCPで開発をしていますが、そのWinSCPのユーザーは、インストール時に作成したユーザーです。そのため、作業内容に制約があります。
 Prototype EVEはApache権限ですべて実行するため、開発環境はすべてApacheへ所有権を移譲しているのですが、その移譲している作業領域でファイルなどを保存しようとするとエラーになります。そのエラーを出さない方法もあるのですが、その場合、ファイルの保存日付が更新されません。
 インストール時に作成したユーザーにApacheグループを付与しても同じでした。だから、root権限がどうしてもほしいのです。そこで、今回、いろいろと調べてみました。そうしたら、ChatGPTが、しぶしぶですが、以下の方法を教えてくれました。その場合は、以下のファイルを、viで開きます。

#sudo vi /etc/ssh/sshd_config


表示したファイルへ以下の1行を追加します。

PermitRootLogin=Yes


PermitRootLoginという行を探したのですが、説明文はあるのですが、該当するものはありませんでした。そのため私は、PermitRootLoginを解説していると思われる33行目の下に、以上の行を追加しました。
 追加後sshサービスを再起動します。

#sudo service ssh restart


以上で、rootに関する作業は完了です。

[あとがき]
 長くなってしまったので、本日はここまでとさせていただきます。

 思った以上に作業に時間が取られてしまいました。ただ、今まで開発で苦労していた部分が解消できて、うれしいです。しかし、現在は非推奨な開発方法です。理由は先ほど解説した通りです。ただ、もし1人で開発する機会がございましたら、ご利用ください。

 では、また!!!

2024年03月21日

Ubuntuをインストールする −プロファイルの設定〜パッケージの導入− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 あともう少しで、Ubuntuのインストールの解説も終了です。今まで通り、トリビア的な知識も織り交ぜて解説致しますので、おつきあい下さい。
 今日は、項番Hのプロファイルの設定からです。

@GMU GRUB version 2.86
A欠番
B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定

Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定
Kパッケージの導入



[Hプロファイルの設定]
 以下がプロファイルの設定画面の概要なのですが、順に解説していきましょう!

1)Your name      □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
2)Your server name   □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
3)Pick a username   □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
4)Choose a password  □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
5)Confirm your password □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□


 1)では、あなた自身の本名またはハンドルネームを入力します。この項目は任意に設定できます。
 2)はサーバー名を入力します。Webサーバーを構築する場合、ここで指定するサーバー名が、URLの一部となるので、その点を考慮に入れ名前を入力して下さい。なお、入力は小文字のみです。
 3)では、ログインするときのユーザー名を入力します。Ubuntuでは、rootユーザーはここで作成するユーザーでログイン後に有効にします。ここで作成するユーザーが、rootユーザーを有効にするまでの、インストール作業者が自由に利用できる唯一のユーザーとなるので、紙などにメモして忘れないようにして下さい。
 4)5)では、パスワードを設定します。4)でパスワードを入力し、5)は確認用パスワードを入力します。基本、自分が忘れることがない、大文字、小文字を組み合わせた英数字と記号で作成し、10文字前後で作る方が良いでしょう!パスワードなので、紙などに残せないので、記憶に残りやすく、かつ、セキュリティの高いモノにしなくてはなりません。ちなみに、総務省からは、一度設定したパスワードは変更しなくていいという案内が出ています。それは、2度目、3度目に再設定するパスワードは、一度目に設定したパスワードの一部を変更する、または平易なパスワードになる可能性があるためです。実際の業務では、セキュリティの高いパスワードを定期的に更新するのが望ましいです。

[Ubuntu Proアクティベーションの実施]
 ここでは、有償サービスの選択メニューになります。

 Ubuntu Proは、Canonicalが提供する有料のサブスクリプションサービスです。このサービスは、Ubuntu Serverのエンタープライズ向けバージョンであり、以下の特徴を提供します:
❶セキュリティとカーネルアップデート
 Ubuntu Proは、セキュリティパッチとカーネルアップデートを優先的に提供します。これにより、システムのセキュリティと安定性が向上します。
❷FIPS 140-2認証
 Ubuntu Proは、米国連邦情報処理標準(FIPS)に準拠した暗号モジュールを提供します。これは、セキュリティ要件の厳しい環境で必要とされます。
❸AWS、Azure、Google Cloudとの統合
 Ubuntu Proは、クラウドプロバイダーとのシームレスな統合をサポートします。
❹Landscape: Ubuntu Pro
 リモート管理ツールであるLandscapeへのアクセスが含まれています。これにより、複数のサーバーを効率的に管理できます。
❺エンタープライズサポート
 Ubuntu Proは、24/7のエンタープライズサポートを提供します。


 注目する点は、❷FIPS 140-2認証です。これ、情報処理安全確保支援士の試験でよく見かける暗号に関する記述です。
 そして、❺なのですが、これは、Ubuntuからの技術的なサポートに関する記述になります。Ubuntuは多くのLinux製品と違い、ディストリビューション提供元からの手厚い保守サービスが用意されています。料金的に10万円/年以下と他のサービスと比較するとリーズナブルな料金体系となっているので、もし、業務で利用する場合、このサービスに入った方がいいでしょう?

[SSHの設定]
 SSHをインストールする画面も用意されています。SSHは、インストールサーバーと保守用クライアントとの間をセキュアな通信を提供します。インストール以降複数の作業者で分担し作業をする場合、ここでSSHをインストールした方がいいかもしれません。私は、1人で使うので、ここでは、スキップし、次の作業に移ります。

[Kパッケージの導入]
 この項目は、昨日までなかった項目で、参考にしているインストール動画で改めて確認できた画面です。
 ここでは、無料で利用できるパッケージの一覧が表示されます。Copilotに一部になりますが、どんなパッケージがあるのか解説してもらいましょう!

microk8s: 軽量なKubernetesクラスタを簡単にセットアップできます.
nextcloud: オンプレミスのファイル共有とコラボレーションプラットフォーム.
wekan: オープンソースのタスク管理ツール.
docker: コンテナ化されたアプリケーションを実行するためのプラットフォーム.
powershell: Microsoft PowerShellのLinux版.
wormhole: ファイル転送のためのエンドツーエンド暗号化ツール.


以上は、一部で20以上のパッケージを利用可能なようです。もし、ディスク容量などの問題によりインストールに悩むなら、後でもインストールすることが可能です。私は、運用後少しずつインストールしていくことにします。

[あとがき]
 家にサーバーを構築する場合、クラスタリング構成にしたいと考えています。だから、最初の項目のパッケージなどは魅力的ですね?
 気を付けなければならないのは、特異なパッケージを利用した場合、後日サポートが受けることができなくなる可能性があるという点です。当初はデフォルトで設定した方がいいでしょう?

 以上で、Ubuntuのインストールは完了です。これから、各パッケージのインストールに移ります。現在動画の製造もしていますので、文章で分かり難いという人がいましたら、そちらで確認してください。

 では、また!

■総務省から「パスワードの定期変更は不要」と発表|安全なパスワード管理・設定方法を紹介(GMOトラストブログ)
https://blog.trustlogin.com/articles/2018/20230518

2024年03月20日

Ubuntuをインストールする −ストレージの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
ふきのとう.jpg
 本日も、Ubuntuのインストールに関するリポートです。本日は、項番Gストレージからです。

@GMU GRUB version 2.86
A「物理コンピュータと同じようにUbuntuをインストールをします。完了してオペレーティングシステム起動後に、[インストールを完了しました]をクリックして下さい。」
*CTL+ALTキーを押して、マウスカーソルを解放します。

B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定
Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定



[Gストレージの設定−初期設定−]
 以下がストレージの初期設定の画面です。

Guide storage configuration
Configure a guided storage layout,or create custom one.
(×)Use an entire disk
 [/dev/sda local disk 20.000G]
 [×]Set up this disk as an LVM group
  [ ]Encrypt the LVN group with LUKS
( )Custom storage layout


ここで知らなければならないのは、WindowsLinuxのストレージの管理方法の違いです。WindowsとLinuxの違いについて、本日は、ChatGPTに解説してもらいましょう!

 WindowsとLinuxのディスク管理にはいくつかの違いがあります。以下にそれらの主な違いを示します。

❶ファイルシステム:
・Windows
 NTFS (New Technology File System) がデフォルトのファイルシステムですが、exFATやFAT32もサポートされています。NTFSはセキュリティやパフォーマンスの観点から設計されています。
・Linux
 Ext4 (Fourth Extended File System) が一般的なデフォルトのファイルシステムですが、他にもXFS、Btrfs、およびFAT32やNTFS(サードパーティーのドライバーを使用して)などが使われます。Linuxは複数のファイルシステムをサポートしており、選択肢が豊富です。
❷ディスクのパーティション管理
・Windows
 ディスク管理ツールを使用して、パーティションを作成、削除、サイズ変更することができます。Windowsでは主にMBR(Master Boot Record)およびGPT(GUID Partition Table)のパーティションスキームが使用されます。
・Linux
 Linuxでは、パーティション管理にfdiskやparted、GPartedなどのツールが使われます。MBRやGPTの他に、LinuxではLVM(Logical Volume Manager)やRAID(Redundant Array of Independent Disks)などの柔軟なストレージ管理方式も一般的です。
❸ボリューム管理:
・Windows
 Windowsでは、ディスクをボリュームとして扱い、ボリュームにはドライブレターが割り当てられます。Windowsではディスクを簡単に拡張したり、ボリュームシャドウコピーを作成したりすることができます。
・Linux
 Linuxでは、物理ボリュームをLVMやRAIDなどの抽象化レイヤーでラップし、論理ボリュームとして扱います。そのため、ディスクの拡張やスナップショットの作成などが柔軟に行えます。
❹ファイルシステムのマウント
・Windows
 Windowsでは、ファイルシステムをドライブレター(例:Cドライブ、Dドライブ)に割り当ててマウントします。
・Linux
 Linuxでは、ファイルシステムをディレクトリにマウントします。通常、/mntや/varなどのディレクトリにマウントされます。


WindowsもLinuxもいろいろ種類があり、上記の解説でそのすべてを網羅することはできないのですが、最新の環境を利用している場合は、以上の解説で問題ないと思います。
 以上の内容を読んで、WindowsとLinuxの違いを理解したうえで、ストレージの初期設定画面を見ていきましょう!

 Use an entire diskでは、指定したディスク全体をUbuntuのインストールに使用します。ここでは/dev/sdaというローカルディスクが20.000Gで指定されています。つまり、このディスク全体をUbuntuに割り当てることになります。なお、この20Gというのは、私が仮想サーバーを構築時にアサインしたディスク容量になります。仮想サーバで保持している全てのディスクを使用してインストールすることになります。
 Set up this disk as an LVM groupでは、論理ボリュームを柔軟に管理するための仕組みです。このオプションを選択すると、指定されたディスクをLVMグループとして設定します。LVMを使用すると、論理ボリュームを必要に応じてサイズ変更できるため、柔軟なストレージ管理が可能です。ここでこの指定をしないと、後でディスク容量を増やすことが無理とは言わないのですが、かなり手間のかかる作業となります。なお、ここでもし指定しない場合でも、後で、Set up this disk as an LVM groupとしてディスクを再構成することは可能です。
 Encrypt the LVM group with LUKSは、ディスクの暗号化を提供する仕組みです。このオプションを選択すると、LVMグループをLUKSで暗号化します。暗号化されたディスクはセキュリティが高く、外部からのアクセスを防ぎます。多分多くの方の想像通り、ディスクからのデータの読込速度は遅くなります。具体的な速度の遅さは、環境や設定によって異なりますが、通常は数パーセントから数十パーセント程度の影響があると言われています。
 Custom storage layoutを選択すると、ユーザーがカスタムでストレージを設定できます。パーティションの作成やマウントポイントの設定などを手動で行います

 このメニューを見て、Set up this disk as an LVM groupがいいと思うのですが、不勉強で運用にどういう影響が出るのか不明です。Set up this disk as an LVM groupについては、今後調査するということで、ここでは、Use an entire diskを選択し、次に進みたいと思います。

[Gストレージの設定−サマリー−]

FILE SYSTEM SUMMARY
AVAILABLE DEVICES
USED DEVICES



 [Gストレージの設定−初期設定−]で選択した内容のサマリーが表示されます。
 FILE SYSTEM SUMMARYでは、インストールされるファイルシステムの概要が表示されます。boot用に確保する領域と、それ以外の領域について表示されています。
 AVAILABLE DEVICESでは、利用可能なデバイスの一覧が表示されます。これには、インストールに使用できるディスクやパーティションが含まれます。インストール時に選択できるデバイスがここに表示されます。なお、ここでは、ubuntu-vgとFree Spaceが表示されていますが、ubuntu-vgはこれからインストールする、ストレージの論理グループになります。そして、Free Spaceは、ディスク上でまだ割り当てられていない、利用可能な空き領域を示します。なお、まっさらなサーバーの場合は、Free Spaceはないそうです。仮想環境で、何回かインストール作業を行ったために、Free Spaceができたと思われます。
 USED DEVICESでは、使用されているデバイスの一覧が表示されます。これには、すでに他の用途に使用されているデバイスやパーティションが含まれます。

[ubuntu-vg(new) LVM volume group]
ubuntu-lg new,to be formatter as ext4,mount at /


 以上については、ubuntu-vg は、Logical Volume Manager(LVM)の論理ボリュームグループ(Volume Group)を指します。論理ボリュームグループは、物理ボリューム(Physical Volumes)をまとめて管理するための仮想的なグループです。
 そして、ubuntu-lv は、LVMの論理ボリューム(Logical Volume)を指します。論理ボリュームは、論理ボリュームグループ内の利用可能な空き容量から作成され、ボリュームグループ内のディスクスペースを論理的に区切るために使用されます。普段使用するUbuntuやその他のアプリケーションはこの領域に格納され、動作することになりそうです。
 なお、ubuntu-vgとubuntu-lvの関係は、ubuntu-vg>ubuntu-lvとなり、ubuntu-vgという仮想グループにubuntu-lvという領域が存在します。ubuntu-lvの領域は、ubuntu-vgが管理する領域になり、それは、ユーザーにより指定することは可能です。
 そして、最後に以下の項目ですが、partition1、2はboot領域になります。
 最後に、partition3 は新しいパーティションで、LVM ボリュームグループ ubuntu-vg の物理ボリューム (Physical Volume) として設定されています。

partition1 new,BIOS group spacer
partition2 new,to be formatted as ext4,mounted at /boot
partition3 new,PV of LVM volume group ubuntu-vg


以上の内容で、自分がシステムを製造する上で利用できるのは、ubuntu-lvで、ubuntu-vgと比較すると約1/2です。正直言ってもっと増やしたいと思うのですが、Ubuntuで何をどうやっているのかまだ理解できていないので、ここは我慢して、デフォルトのまま次に進みたいと思います。

[あとがき]
 Linuxのストレージって、個人的に非常に複雑だと感じています。以前、製造環境のディスク容量が足りなくなり、増設したのですが、非常に苦労した記憶があります。
 その理由は、Ubuntu-lvの領域しかユーザーは利用できないため・・・。普通は、Ubuntu-vgの領域全部利用できると思いませんか?ただ、それは間違いだと今回知りました。
 前回は、製造環境を再構築するに際し、最終的にデータベースの2倍の容量を増やし、やっと、データベースへデータを格納できたのですが、今後は迷うことはなさそうです。

 では、また!

2024年03月19日

Ubuntuをインストールする −Proxy・アーカイブミラーサイトの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
福寿草.jpg
 昨日までは、Dのネットワークの設定まで解説しました。本日は、その続きで、項番Eから解説します。なお、Aですが、特段何もすることがないようだったので、解説から削除しました。加えて、プロキシーの設定とアーカイブミラーの設定の順番を変更させていただきました。

@GMU GRUB version 2.86
A「物理コンピュータと同じようにUbuntuをインストールをします。完了してオペレーティングシステム起動後に、[インストールを完了しました]をクリックして下さい。」
*CTL+ALTキーを押して、マウスカーソルを解放します。

B言語選択
Cキーボード選択
Dネットワークの設定
Eプロキシーの設定
Fアーカイブミラーサイトの設定
Gストレージの設定
Hプロファイルの設定
IUbuntu Proアクティベーションの実施
JSSHの設定



[Eプロキシーの設定]
 ネットワークの次には、Proxyを設定する画面が表示されます。

Configure proxy
If this system requires a proxy to connect to the internet,enter its details here.
Proxy address:□□□□□□□□□□□□□□□□□□□□□□□□□□


以上のような画面が表示されますので、同一ネットワーク上にProxyが存在する場合は、セキュリティの面から設定すべきでしょう?
 Proxyとは、当該サイトとの通信を中継するシステムです。通信速度が遅い時代には、同一ネットワークからの同一サイトの通信の重複を避けるため、当該サイトのキャッシュ情報を保持し、それを同一ネットワークのメンバーへ提供するのが主な機能でしたが、近年では、セキュリティの側面が強くなってきています。
 ただ、これは、一般論なので、設定の有無については、ネットワークエンジニアもしくはセキュリティエンジニアに相談した上で設定する、しないを決定して下さい。

[Fアーカイブミラーサイトの設定]
 次に、アーカイブミラーサイトを設定する画面が表示されます。

Configure Ubuntu archive mirror
if you use an alternative mirror for Ubuntu,enter its details here.
Mirror address:□□□□□□□□□□□□□□□□□□□□□□□□□□
testing of the mirror location has not yet started.


以上がアーカイブミラーサイトを設定する画面ですが、アーカイブミラーサイトとは、公式サイトの複製サイトになります。アーカイブミラーサイトの役割としては、公式サイトの安定運用のためといったところでしょうか?公式サイトに世界中のユーザーから一気にアクセスされた場合、公式サイトはダウンする可能性があり、公式サイトとしての可用性信頼性を失う恐れがあります。それを防ぐために、この画面でミラーサイトを指定します。今回のインストールでは、アーカイブミラーサイトを利用していませんが、できれば、アーカイブミラーサイトを利用した方がいいでしょう?以下が、CopilotBardが調べてくれた、日本人が利用しやすい、アーカイブミラーサイトになります。

https://launchpad.net/ubuntu/+archivemirrors Canonical
https://www.tsukuba.ac.jp/ 筑波大学
https://www.wide.ad.jp/index_e.html WIDEプロジェクト
https://nii.res.in/ 国立情報学研究所
https://www.ubuntulinux.jp/japanese Ubuntu 日本語フォーラム
https://zh.wikipedia.org/zh-cn/%E7%90%86%E5%8C%96%E5%AD%A6%E7%A0%94%E7%A9%B6%E6%89%80 中国語版ウィキペディア
http://www.u-tokyo.ac.jp/ 東京大学
https://www.osaka-u.ac.jp/ 大阪大学
https://www.hokudai.ac.jp/ 北海道大学
https://www.tohoku.ac.jp/japanese/ 東北大学
https://www.keio.ac.jp/ja/ 慶應義塾大学
https://www.nagoya-u.ac.jp/ 名古屋大学
https://www.kyoto-u.ac.jp/ja 京都大学
https://www.kobe-u.ac.jp/ 神戸大学
https://www.hiroshima-u.ac.jp/ 広島大学
https://www.tokushima-u.ac.jp/ 徳島大学
https://www.kyushu-u.ac.jp/ 九州大学
https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 清華大学
https://tekdataco.com/blog/%D8%AA%D9%85-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88/ Tekdata
http://ubuntutym.u-toyama.ac.jp/ubuntu/ 富山大学:
http://ftp.riken.go.jp/Linux/ubuntu/ 理化学研究所:
https://ftp.jaist.ac.jp/pub/Linux/ubuntu/ 北陸先端科学技術大学院大学:
https://www.ftp.ne.jp/Linux/packages/ubuntu/archive/ KDDI研究所:
https://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/archives/ 山形大学:



[あとがき]
 本日、気づいたのですが、コメントが寄せられていました。2024年03月10日のブログ、「Ubuntuをインストールする −インストール準備− 〜ソフトウェア研究室〜」に寄せられたモノなのですが、本日、同コメントを承認させていただいた上、コメント内に返信を書かせて頂きました。
 普段から、コメントが欲しい欲しいと思っていたのですが、もらったことがなく、コメントをもらうと言うことが想像できていなかったため、気づくのに遅れました。ご連絡が遅れ大変申し訳ございません。
 なお、今回のコメントで、相互リンク希望というご依頼でしたが、当サイトについては、一言声を掛けて頂ければ、リンクしていただいて結構です。ただ、当サイトから全く知らない方のサイトのリンクをすると言うことは、現時点では、する予定がございませんのでご容赦ください。
 ご希望に添えない返信の仕方で大変申し訳ございませんが、以上よろしく御願いします。

 では、また!

2024年03月18日

Ubuntuサーバーのインストール −ネットワークの設定− 〜ソフトウェア研究室〜


 こんにちは!
 ナビゲータのEVEです。
デスクワーク.jpg
 先週末は、お休みを頂きました。ブログをアップロード後、旅行に行くかもしれなかったのですが、確率的に100%でなかったので、前回のブログには、旅行の話は載せませんでした。そのため、今回の旅行の案内については、事後的に旅先から週末は更新できませんといった内容で、X(旧ツイッター)から案内しようと思ったのですが、ハプニングが・・・。普段全然使っていない、携帯、IPhoneなのですが、ディスプレイが膨らんでいます(笑)。インターネットで調べるとどうもバッテリーが膨張しているらしい・・・。全然使っていないのに・・・。使おうと思えば、使うことができるのですが、ちょっと、怖いので、気づいた瞬間に、電源を落としてしまいました。そんな理由で、本日の連絡になりました。
 本日は、頭痛で思った活動ができていませんが、徐々に日常の生活に戻していきたいと思います。

[Dネットワークの設定]
 前回までは、Ubuntuのインストール作業の「Choose type of install」Ubuntuインストールタイプを選択するところまで実施しました。本日は、その続きで、ネットワークの設定からになります。
 ネットワークの設定画面では、最初に、ネットワークカードに関する情報が表示されています。技術的・システム的には、DHCPでも可能なのですが、サーバーを構築するので、固定IPで設定する方がいいでしょう?


NAME TYPE NOTES
[enc 33 eth - ← ここを選択
DHCPv4 192.168.10.130/24]



そうすると、以下の様なメニューが表示されるので、IPv4を選択します。以前、YouTubeの動画の取材の一貫で、IPv6の勉強を開始したのですが、中途半端な状態で、業務では利用できないので、ここは、迷わずIPv4を選択したいと思います。


(colose)
Info
Edit IPv4 ← ここを選択
Edit IPv6
Add a VLAN tag



 次のメニューでAutomatic(DHCP)と表示されているので、その項目をクリックすると、以下のようなメニューが表示されます。


Automatic(DHCP)
Manual ← ここを選択
Disabled



ここでは、固定IPv4で設定したいので、Manualを選択します。
 ちなみに、Automatic(DHCP)は、接続する度毎に自動でIPアドレスを取得する方法になります。
 Disabledは、このネットワークの設定を無効にする場合に使用します。

 Manualを選択すると以下の項目が画面上に表示されます。


Subnet
Adress
Gateway
Name server
Serch domains



 Subnetは、Windows等でも設定すると思いますが、サブネットマスクを指します。通常、Windowsでは、[255.255.255.0]と入力しますが、Ubuntuでは、「ネットワークアドレス + / +マスク長」という形式で入力します。
 ネットワークアドレスは、コンピューターネットワーク上で使用される、特定のネットワークセグメントを識別するためのアドレスです。そして、マスク長は、ネットワークアドレスとして何オクテッド利用するのか指定します。IPv4では、アドレス長は、32オクテッドで、そのうち24オクテッドをネットワーク部、そして、残りの8オクテッドをホスト部として利用するという意味になります。
 ちなみに、ここで、オクテッドという単位を利用していますが、ビットとあまり意味は違いません。昔のネットワーク技術者は、オクテッドという言葉をよく利用していましたが、現在は、ビットと表現している人の方が多いようです。
 次の、Addressですが、これは、これから構築するUbuntuのIPアドレスになります。
 Gateway (ゲートウェイ)は、ローカルネットワークと外部ネットワーク(インターネットなど)を接続するためのルーターまたはファイアウォールのIPアドレスです。
 Name serverは、DNSサーバーには、キャッシュサーバーネームサーバー