アフィリエイト広告を利用しています
検索
<< 2024年08月 >>
        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システムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

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ハードディスクが届くのですが、ここからまた苦労します。火曜日にブログを書いてから本日まで書くことができなかったのもそれが原因です。
 その苦労話の続きは明日書くことにしましょう!

 では、また!!!