end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

centos 8 & apache2.4 における php7 と php5 の共存

先日、centos8 に php7 を install しましたが、 今回は、その環境へ php5 を install し、共存させます。

install php ver.7.3.15 and wordpress ver.5.3.2 - end0tknr's kipple - 新web写経開発

Win10環境のIISにおける 複数verのphp (php 5 , php7) の共存は 既に実施していますので、そちらをご覧ください。

Win10環境のIISにおける 複数verのphp (php 5 , php7) の共存 - end0tknr's kipple - 新web写経開発

php 5.6 の install

以下の通りです。 前回のphp7との相違点は、 configure時の prefix=/usr/local/php5 や、opensslのver です。

$ wget https://www.php.net/distributions/php-5.6.40.tar.gz
$ tar -zxvf php-5.6.40.tar.gz
./configure \
  --prefix=/usr/local/php5 \
  --enable-mbstring \
  --with-mysqli=mysqlnd \
  --with-pdo-mysql=mysqlnd \
  --with-openssl=/usr/local/openssl_1_0_2 \
  --with-zlib=/usr
$ make
$ make test
$ sudo make install

$ /usr/local/php5/bin/php -v
PHP 5.6.40 (cli) (built: Apr 30 2020 01:42:01) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

php の旧verは、次のurlにて配布されています。

https://www.php.net/releases/

php の設定 ( php.ini )

[Thu Apr 30 02:25:36.696856 2020] [cgid:error]
  [pid 25391:tid 139769904359168] [client 192.168.63.1:13500]
     malformed header from script 'test.php5': Bad header: <b>Security Alert!</b> The PHP

apache の error_log に↑上記のようなエラーが表示される為、 php.ini を作成し、「 cgi.force_redirect = 0 」を設定します

$ /usr/local/php5/bin/php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/php5/lib

$ sudo vi /usr/local/php5/lib/php.ini
cgi.force_redirect = 0

apache 2.4 の設定

拡張子=.php は、module版php の ver.7 で動作させ、 拡張子=.php5 は、cgiphp の ver.5 で動作させます。

以下は、apache設定ファイル(httpd.conf)の抜粋です。

$ vi /home/end0tknr/local/apache/conf/httpd.conf
LoadModule cgid_module modules/mod_cgid.so

<Directory "/home/end0tknr/dev/Test">
   AllowOverride All
   Order allow,deny
   Allow from all

   Options ExecCGI
   AddHandler cgi-script .php5
   AddHandler cgi-script .pl
</Directory>
Alias /Test /home/end0tknr/dev/Test

php cgi ファイルの作成

$ vi /home/end0tknr/dev/Test/test.php5

$ chmod 755 *php5

#!/usr/local/php5/bin/php-cgi
<?php
phpinfo();
?>

在宅勤務を行うための情報セキュリティ規程 by オプティマ・ソリューションズ

以下を申し込み、内容を確認しましたが、私にはちょうどよい情報量。

【ニュースリリース】《新型コロナ対策》在宅勤務を行うための情報セキュリティ規程をご提供いたします。 | オプティマ・ソリューションズ株式会社

政府機関等の情報セキュリティ対策のための統一基準群(平成30年度版) by 内閣セキュリティセンター

メモ

https://www.nisc.go.jp/active/general/kijun30.html

上記にて、以下が公開されています。 かなりの情報量ですので、後日、時間があれば、読みます。

【統一基準群】

  • 政府機関等の情報セキュリティ対策のための統一規範PDF
  • 政府機関等の情報セキュリティ対策の運用等に関する指針PDF
  • 政府機関等の情報セキュリティ対策のための統一基準(平成30年度版)PDF
  • 政府機関等の対策基準策定のためのガイドライン(平成30年度版)PDF

【政府機関統一基準適用個別マニュアル群】

  • 外部委託等における情報セキュリティ上のサプライチェーン・リスク対応のための仕様書策定手引書PDF
  • スマートフォン等の業務利用における情報セキュリティ対策の実施手順策定手引書PDF
  • 情報セキュリティ監査実施手順の策定手引書PDF

【統一基準群(平成30年度版)の教材】

  • 情報セキュリティ小冊子(機関等(国の行政機関、独立行政法人及び指定法人)の職員用教材)PDF

改正民法対応「情報システム・モデル取引・契約書」 by IPA / 経産省

晴耕雨読

以前より、経産省 & IPA にて公開されている モデル取引・契約書が、 民法改正に対応した為、改めて内容を確認。

解説も含めて、200ページ超の内容は、流石に丁寧で分かりやすい。

ポイント - 特に「瑕疵担保責任」→「契約不適合」

詳細は、上記1のIPAページの記載のとおりですが、今回の民法改正で最も気になるのは 「瑕疵担保責任」→「契約不適合」。

内容
改正前 瑕疵担保責任は引渡時/仕事の終了から1年以内に権利を行使する必要あり
改正後 契約不適合を知った時から1年以内にその旨の通知をすればよい。
注文者が契約不適合を「知る」までの間は消滅時効一般に基づき、10年間権利の行使

これに対し、新規モデル契約では、 「責任追及期間が延びれば人員維持コストが上がり、報酬に転嫁される結果、ユーザ企業に不利益」 等の理由で、民法改正前と同様、引渡時/仕事の終了からの期限を設けている。

その他では、以下もポイントになると思います。

  • 要件定義は、ユーザ側主体で行う為、準委任
  • 仮発注書はモデル契約書に用意されているが、やむを得ない場合のみ使用
  • 開発基本モデルの19条(外部設計)は画面,帳票,IFの仕様策定の為、準委任(ユーザ主体)もある

モデル契約書 からの抜粋

モデル契約書として、「開発基本契約」「運用保守基本契約」「運用保守個別契約(サンプル)」が wordファイルで公開されています。

以降では、条文の抜粋と共に、やはりポイントと考えている部分に★を記載しています

ソフトウェア開発委託基本モデル契約書

タイトル 内容
■総則■
1条 契約の目的
2条 用語の定義
3条 適用範囲
4条 個別契約 作業内容や請負/準委任,納期,委託料/支払法は個別契約で定める
5条 委託料、支払方法 個別契約で定める
6条 作業期間、納期 個別契約で定める
7条★ 再委託 ユーザ事前承諾を要する場合と、ベンダ最良の場合あり
■推進体制■
8条 協働と役割分担 「詳細」は個別契約で定める
9条★ 責任者 各個別契約では責任者を選任し、以降○条の権限/責任を有する
10条 主任担当者 責任者の下で連絡確認や調整を行うプロジェクトリーダ
11条★ 業務従事者 ベンダ従業員は、あくまでベンダが指揮命令を行う
12条 連絡協議会の設置
13条★ プロジェクトマネジメント責任 マルチベンダ方式の場合、ユーザ側が責任を負う
■本件業務■
14条★ 要件定義支援 要件定義はユーザ主体で、ベンダは支援(準委任)だが善管注意義務を負う
15条 要件定義支援の個別契約 要件定義支援の範囲は、4条に従い個別契約で決める
16条 要件定義検討会 検討会はユーザ主催だが、必要ならベンダからも開催OK
17条 要件定義書の確定 ユーザ&ベンダの合意で確定.要件定義は準委任の為,修正はユーザ実施
18条 要件定義の終了・確認 要件定義の合意後、ユーザは期間内に点検を行い、確認(検収)する
19条 外部設計の実施 17条の要件定義に基づき、ベンダが行うが、ユーザへ必要な協力要請もOK
20条 外部設計の個別契約締結
21条 外部設計書の納入 ベンダは期日までに外部設計書、書検収依頼書(納品書)を納入
22条 外部設計書の承認・確定 ユーザは期間内に点検を行い、承認(検収)する
23条★ 契約不適合責任 外部設計の確定後、個別契約の目的を達成しない誤り(契約不適合)が
ある場合、追加を求めることができる。
契約不適合におり損害を被った場合、損害賠償請求できる。
ベンダが契約不適合責任を負うのは外部設計承認後、○年以内
24条★ ソフトウェア開発業務の実施 モデル契約書ではシステムテストが準委任型と請負型がある
25条 SW開発の個別契約
26条 納入物の納入
27条 検査仕様書の作成・承認 ユーザはシステム仕様書に基づく検査仕様書を作成しベンダに提出
28条 SWの検収 ユーザは検査仕様書に基づき検査しシステム仕様書とSWの整合を点検する
29条 契約不適合責任
30条★ SW運用準備支援
31条 SW運用準備の個別契約
32条 SW運用準備の終了・確認
■契約内容等の変更■
33条 本契約/個別契約の変更 事前協議の上、書面により変更契約を締結できる
34条 システム仕様書等の変更 変更が必要な場合、変更提案書を相手方に交付/提案し、
定められた変更管理手続によってのみこれを行える
35条 中間資料のユーザ承認
36条 未確定事項の扱い ユーザ&ベンダで合意された未確定事項は、次工程へ持ち越せる
37条 変更管理手続 変更に費用を要する場合、金額も協議する
38条 協議不調で契約終了
■資料/情報の扱い■
39条 資料等の提供/返還
40条 資料等の管理 ベンダはユーザからの資料等を管理/保管し、本件以外には使用不可。
業務遂行上必要な範囲内で複製/改変OK
41条★ 秘密情報の扱い 口頭で秘密の旨通知した情報は、開示後○日以内に書面で内容を特定。
再委託先や退職者へも秘密保持義務を負う。
秘密保持義務は本契約終了後一定期間、存続する
42条 個人情報
■権利帰属■
43条 納入物の所有権 納入物の所有権は、個別契約に定める時期をもって、ユーザへ移転
44条★ 納入物の特許権 特許権、他知的財産権は、発明等を行った者が属する当事者に帰属。
共同で行った発明等から生じた特許権等は共有。
45条★ 納入物の著作権 A案: 全てをベンダに帰属
B案: 汎用可能なプログラム等をベンダ、それ以外をユーザに帰属
C案: 汎用可能なプログラム等をベンダ、それ以外を共有
46条★ ベンダの納入物再利用 秘密情報扱いに反しない範囲で、
ベンダが著作権保有するSWや他納入物を利用できる。
■保証や責任■
47条★ 知的財産権侵害 納入物が、著作権特許権を侵害した場合のベンダ責任について規定
48条★ 三者SWの利用 技術的な要請等から第三者SWが広く利用されている。
しかし、ベンダが第三者SWの契約不適合や権利侵害の把握は困難な為
49条★ FOSSの利用
50条★ セキュリティ セキュリティ対策の機能、管理体制及び費用負担等は、別途、定める。
「政府機関の情報セキュリティ対策のための統一基準」や
「SW開発における情報セキュリティ対策実施規程(雛形)」を参照
■一般条項■
51条 権利義務譲渡の禁止 事前の同意なく、本契約の地位を第三者へ承継や権利義務譲渡できない
52条 解除 重大な過失や背信行為があった場合、本契約や個別契約を解除できる
53条 損害賠償 検収完了や業務終了から○年経過後はできない。
損害賠償累計総額は、帰責事由となった個別契約に定める金額を限度。
(ただし、賠償義務者の故意や重大過失に基づく場合には適用しない)
54条 輸出関連法令の遵守 納入物を輸出する場合、外国貿易法等を遵守し、所定の手続をとる。
55条★ 和解による紛争解決 法的救済手段の前に、当事者間でまず解決に尽力する。
当事者間で解決できない場合、仲裁/訴訟の前に
ADR(裁判外紛争解決手続)による解決を図る
56条 合意管轄 訴訟が生じた場合、○○地方裁判所を第一審の専属的合意管轄とする
57条 協 議 本契約や個別契約に定めのない事項や疑義が生じた事項は、
信義誠実の原則に従い協議し、円満に解決を図る。

情報システム保守運用委託基本モデル契約書

タイトル 内容
■総則■
1条 契約の目的
2条 適用範囲
3条 個別契約 作-業内容や請負/準委任,納期,委託料/支払法は個別契約で定める
4条 委託料・支払方法
5条 業務の開始日・期間
6条 再委託
■業務の実施■
7条 業務実施とユーザの協力 ユーザはベンダによる業務実施に協力する。
事業/業務変更による影響内容等は事前に協議する。
ベンダが業務をユーザの工場や事務所実施する必要がある場合、
ユーザはベンダの立入を認め、作業場所を提供する。
8条 業務従事者 開発モデル契約第11条(業務従事者)と同様
9条 会議体の開催 業務内容によっては定期協議会を開催する。
ベンダは議事録を○日以内に作成し、ユーザは○日以内に点検する
10条 障害発生時の対応 不具合等の障害時における緊急連絡体制等の取り決めが必要な場合
業務仕様書or別途書面で緊急連絡体制や必要な事項を取り決める
11条★ 一時停止 ベンダは以下の場合、業務を停止するでき、責任も負担しない。
・天災・事変等の非常事態による業務遂行不能
・通信回線、計算機等の保守や工事のやむを得ない事由がある
・ユーザが提供する設備が不具合等により停止 等
ベンダは停止事由の発生後直ちに時期/期間をユーザ通知する。
但し、緊急やむを得ない場合、事後相当期間内の通知もOK。
12条 本件業務の中止 ベンダはユーザに以下がある場合、解消までの間、業務中止できる。
・委託料支払いを遅滞し、催告しても解消されない
・本契約/個別契約の各条項に違背
・ユーザ責で、ベンダ業務に著しい支障を来たすorそのおそれがある
ベンダは事由発生後直ちに業務中止した旨をユーザへ通知する
13条★ ユーザによる監査 ユーザは業務履行状況を監査でき、ベンダは協力し必要な情報を提供。
但し、調査費用はユーザの負担。
14条 業務に関する責任 準委任: ベンダの善良な管理者の注意をもって実施される限り
    業務内容、結果等にベンダは責任を負わない。
請負型: 業務結果の誤りや業務仕様不一致の場合、ベンダは修正する。
誤り/不一致でユーザに生じた損害は、損害賠償する。
この責任期間は誤り/不一致の実施日から○年
■資料/情報の扱い■
15条 資料等の提供・返還 ユーザは業務に必要な資料開示や貸与等の提供を行う。
資料等が業務上不要となった場合、ベンダは遅滞なく返還等を行う
16条 資料等の管理 開発モデル契約第40条と同様
17条 蓄積情報の管理 業務遂行でベンダ内等にユーザの情報が蓄積/保管の場合、15条に従う
18条 秘密情報の扱い 開発モデル契約第41条と同様
19条 個人情報 開発モデル契約第42条と同様
■一般条項■
第20条 契約期間 契約有効期間は、締結日から○年間。
但し期間満了○ヵ月前までに意思表示がないと、更に○年間継続。
21条 契約内容の変更 開発モデル契約第33条 と同様
22条 権利義務譲渡の禁止 開発モデル契約第51条 と同様
23条 解  除  開発モデル契約第52条 と同様
24条 損害賠償 開発モデル契約第53条 と同様
25条 輸出関連法令の遵守 開発モデル契約第54条 と同様
26条 和解による紛争解決 開発モデル契約第55条 と同様
27条 仲裁・合意管轄 開発モデル契約第56条 と同様
28条 協  議 開発モデル契約第57条 と同様

保守・運用業務委託 個別契約書(サンプル)

タイトル 内容
■個別契約書■
1 業務名
2 契約形態 請負 or 準委任
3 業務内容 別紙業務仕様書に記載の通り
4 業務対象の範囲
5 ユーザ/ベンダ役割分担
6 開始日・実施期間 保守運用モデル契約 第20条 と同様
7 委託料 月額○百万円
8 支払条件
9 資料等、要な事項 別紙業務仕様書に記載の通り
10 特記事項
■別紙:業務仕様書■
1 業務の実施
2 業務の対象
3 業務の前提条件 ユーザ/ベンダの共同で実施されるもので、次項の役割分担に従う。
相手方の分担作業の実施にも誠意をもって協力する
4 実施体制 業務履行の連絡、確認を行う窓口責任者や、他の実施体制を定める。
相手からの要請や指示の受理、相手への依頼等は窓口責任者を通じて
5★ 業務の内容 以下を○曜~○曜の○時~○時に行う。
(1)業務実施状況管理
・案件管理・インシデント管理・問題管理・変更管理・リソース管理
・構成管理・定例報告
(2)業務アプリ本番処理検証
(3)業務アプリンの改良
保守における修正範囲は規定しておく必要があり
(4)業務臨時処理  
(5)トラブル対応 
(6)質問対応
(7)業務アプリの予防保守
(8)システム/運用改善提案
6★ サービスレベル 本件業務内容に加え、以下を達成できるように務める
・インシデント管理レスポンス・質問一次回答時間・改良納期
上記を達成できなかった場合、可能な範囲で改善努力する
7 定期協議会
8 ユーザの協力義務
9 受託条件の変更 変更希望の場合、書面で通知し、協議後、変更する
10 著作権の帰属
12 権利侵害 三者から知的財産権を侵害する訴えがあり、
ユーザがベンダへ要請する場合、ベンダが対応する

re: 情報セキュリティ管理基準 - 経済産業省

メモ

ITガバナンスにおける COBIT と ISO-38500 - end0tknr's kipple - 新web写経開発

先程の上記エントリと同様、観点や着眼点の集まりですが、助かります。

https://www.meti.go.jp/policy/netsecurity/downloadfiles/IS_Management_Standard_H28.pdf

https://cio.go.jp/node/2047

REBOK - 要求工学知識体系

PMBOKやBABOKの存在は知っていましたが、REBOKは初めて知りました。 (リボックでなく、アールイーボックと読むらしい)

インターネットを検索すると、 IPAや、情報サービス産業協会(JISA)のページが見つかります。

BABOK同様、REBOKも、こういう知識体系をまとめて頂けるのは助かります。

ただ、超上流工程は、こういう知識体系があるだけでは全く進まないんですけどね

ITガバナンスにおける COBIT と ISO-38500

COBIT

アメリカの情報システムコントロール協会(ISACA)と ITガバナンス協会(ITGI)が提唱するITガバナンス成熟度を測るフレームワーク

組織におけるプロセス改善能力を評価する CMMI と似た位置づけと理解しています。

ISO-38500

ITガバナンスにおける国際規格で、 ①評価(Evaluate) ②指示(Direct) ③モニタ(Monitor) の EDMモデルで定義している。

経産省による「システム監査基準」「システム管理基準」

ITガバナンスに関しては、 経産省が「システム監査基準」「システム管理基準」をとりまとめ 公開しているので、参考になります。

観点や着眼点の集まりですので、実践するには、ここから一手間、必要ですが

www.meti.go.jp

LOI (Letter of Intent, 意向表明書) ≒ 仮発注書?

www.ipa.go.jp

上記urlにある 『改正民法に対応した「情報システム・モデル取引・契約書」』 のwordファイルからのメモです。

この中で、先行着手や仮発注に関して、次のような記載があります。 ( p.142以降には、仮発注合意書 のサンプルもあります)

【p.5】情報システムの構築において、 契約が締結される前に開発作業に着手する例が少なくないことが指摘された。

【p.6】 なお、激変するビジネス環境に対応するため、正式な契約書を締結しないままに、 情報システム構築が開始されるやむを得ない場合の措置として、 仮発注合意書(Letter Of Intent:LOI)のモデルを策定しているが、 契約内容について基本的に合意に達したものの詳細まで含めた最終合意には 達しておらず、契約締結手続等形式的手続に時間を要する場合など、 極めて限られた場合にのみ使用すべきものであり、 仮発注合意書のプロセスを設けることを推奨するものではない。 本来的には、正式な契約書を締結し業務を開始することが基本のプロセスである。

確かに...

他のurlを見ても、「LOI ≒ 仮発注書?」はグレーなようですね。

とすると、LOI の本来の目的が分からなくなってきますが

政府CIO ポータル - cio.go.jp

ITシステムを外部委託する場合のモデル契約書としては、 経産省が公開する「情報システム・モデル取引・契約書」が参考になります。

IPA経産省等、政府や省庁系のサイトには、 参考になるガイドライン等が多く公開されていますが、 「政府CIO ポータル」もそういったサイトの一つ。

例えば「デジタル・ガバメント推進標準ガイドライン解説書」の目次は以下で、 発注者側視点での粒度では、ちょうどよい印象を受けます。

第1章  ITマネジメントの全体像          PDF     DOCX
第2章  プロジェクトの管理              PDF     DOCX
第3章  予算要求                        PDF     DOCX
第4章  サービス・業務企画              PDF     DOCX
第5章  要件定義                        PDF     DOCX
第6章  調達                            PDF     DOCX
第7章  設計・開発                      PDF     DOCX
第8章  サービス・業務の運営と改善      PDF     DOCX
第9章  運用及び保守                    PDF     DOCX
第10章  システム監査                    PDF     DOCX

excel vba で ldap検索

多分、以下の内容で検索できます

Public UID As String
Public TgRow As Long
Public TgCol As Long

Private Sub LDAPserch()
'
Dim strLDAP As String
Dim oLDAP   As Object
Dim mail    As String
Dim sei     As String
Dim mei     As String
Dim name    As String
Dim sei1    As String
Dim mei1    As String
Dim name1   As String
Dim unit    As String
Dim corp    As String
Dim findNo  As Integer

Dim eUnit   As String

' ↓↓ここからUID検索機能。UID検索機能から必要データを取得する ↓↓
 On Error Resume Next
    
    If UID <> "" Then
        strLDAP = "LDAP://ldap.smile.sexy.co.jp/uid=" & _
                    UID & ",ou=people,o=sexy-group"                       'LDAPへログオン
        Set oLDAP = GetObject(strLDAP)                                    '入力されたUIDをセット
        mail = oLDAP.get("mail")                                          'メールアドレスの取得
        sei = oLDAP.get("sn")                                             '日本語 姓の取得
        mei = oLDAP.get("givenName")                                      '日本語 名の取得
        name = oLDAP.get("cn")                                            '日本語 姓名の取得
        sei1 = oLDAP.get("sn;lang-en-phonetic")                           '英語 姓の取得
        mei1 = oLDAP.get("givenName;lang-en-phonetic")                    '英語 名の取得
        name1 = oLDAP.get("cn;lang-en-phonetic")                          '英語 姓名の取得
        corp = oLDAP.get("o")                                             '会社名の取得
        unit = oLDAP.get("ou")                                            '日本語 所属部署名の取得
        Cells(TgRow, TgCol + 2).Formula = mail                            'メールアドレスから
        findNo = InStr(mail, "@")                                         'ドメイン名を省く
        If UID = Left(mail, findNo - 1) Then
             Cells(TgRow, TgCol + 1) = ""                                 '別名登録なければメールは転送せずクリア
            Else
                Cells(TgRow, TgCol + 1).Formula = Left(mail, findNo - 1)  '別名登録済なら別名をメールに転送
        End If
        Cells(TgRow, TgCol + 3).Formula = sei                             '日本語の姓を転送
        Cells(TgRow, TgCol + 4).Formula = mei                             '日本語の名を転送
        Cells(TgRow, TgCol + 5).Formula = name                            '日本語の姓名を転送する
          'UIDから別シートの「tableau」を抽出する
        Cells(TgRow, TgCol + 6).Formula = WorksheetFunction.VLookup(UID, Sheet4.Range("A:B"), 2, False)
            If sei <> "" Then
            If Cells(TgRow, TgCol + 6).Formula = "" Then
            Cells(TgRow, TgCol + 6).Formula = "non"
            End If
            End If
        Cells(TgRow, TgCol + 7).Formula = sei1                            '英語の姓を転送する
        Cells(TgRow, TgCol + 8).Formula = mei1                            '英語の名を転送する
        Cells(TgRow, TgCol + 9).Formula = name1                           '英語の姓名を転送
        Cells(TgRow, TgCol + 10).Formula = unit                           '日本語の所属部署を転送
         
         '日本語部所から別シートの「英語部所名」を抽出する
        searchEunit unit, eUnit                                           '関数"searchEunit"(英語部所名を部所階層をさかのぼりながらあてに行く)呼び出し
        Cells(TgRow, TgCol + 11).Formula = eUnit                          '英語会社名転送
        
        Cells(TgRow, TgCol + 12).Formula = corp                           '会社名を転送
         '日本語会社名から別シートの「英語会社名」を抽出する
        Cells(TgRow, TgCol + 13).Formula = WorksheetFunction.VLookup(corp, Worksheets("会社リスト").Range("A:B"), 2, False)
        
        ''''''Cells(TgRow, TgCol + 13).Formula =WorksheetFunction.VLookup(corp, Sheet5.Range("A:B"), 2, False)''''''''
        
        If Cells(TgRow, 4).Formula <> "" And Cells(TgRow, 14).Formula <> "" _
        And Cells(TgRow, TgCol + 16).Formula <> "" And Cells(TgRow, 2).Formula = "" Then
        Cells(TgRow, 2).Formula = "依頼"
        End If
        
        
    End If
    Exit Sub

End Sub
Sub searchEunit(unit, eUnit)
    On Error Resume Next
    eUnit = WorksheetFunction.VLookup(unit, Worksheets("部所リスト").Range("A:B"), 2, False)
    
        While eUnit = "" And unit Like "* *"
            unit = Left(unit, InStrRev(unit, " ") - 1)
            eUnit = WorksheetFunction.VLookup(unit, Worksheets("部所リスト").Range("A:B"), 2, False)
        Wend
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
'UID新規入力を監視
'入力されたら重複チェックし、LDAPの登録情報を取得する

    Select Case Target.Column
      Case 3                                                                             '3列目を対象とする
        TgRow = Target.Row
        TgCol = Target.Column
        If Not Intersect(Cells(TgRow, TgCol), Target) Is Nothing Then                    '3列目に文字入力を監視
          For x = 1 To Selection.Count
            If Cells(TgRow, TgCol) <> "" Then                                            '更新行を見つけた
              Range(Cells(TgRow, TgCol + 1), Cells(TgRow, TgCol + 13)).ClearContents     'UID消されたらクリア
              With Worksheets("Sheet1")
                wLastGyou = .UsedRange.Rows.Count                                        '最終行番号を取得
                wCellVal = .Cells(TgRow, TgCol).Value                                    'セルの値を取得する
                If Application.CountIf(.Range("C3:C" & wLastGyou), wCellVal) > 1 Then    'C列(ID)に重複チェック
                   '入力されたUIDが重複ならばメッセージ。
                  MsgBox "IDが重複しています。" & vbCrLf & "登録行へ移動します", vbOKOnly + vbInformation, "登録済!"
                  Cells.Find(What:=wCellVal, LookIn:=xlValues, LookAt:=xlWhole).Activate  '該当行へジャンプ
                  Range(Cells(TgRow, TgCol), Cells(TgRow, TgCol + 13)).ClearContents      '追加入力値もクリア
                  Exit Sub
                End If
              End With
              UID = Cells(TgRow, TgCol).Value                                             '入力値を検索対象へ
              Call LDAPserch                                                              '検索機能実行
            Else
              UID = ""                                                                    'UIDを削除されたら
              Range(Cells(TgRow, TgCol + 1), Cells(TgRow, TgCol + 13)).ClearContents      '行クリア
            End If
            TgRow = TgRow + 1
            Next
        End If
    End Select

End Sub

cento8 に ruby ver.1.9.3 を install from source or rbenv

古い ruby on rails アプリの動作確認を行おうとしましたが 古い ruby や openssl が必要だったらしい。

今回の場合、きちんと原因を調査していませんが、 openssl ver.0.9.8 を shared & -fPIC で install することで解消しました。

以下、install手順

install 先は、centos 8

$ cat /etc/redhat-release 
CentOS Linux release 8.1.1911 (Core) 

install openssl ver.0.9.8 with shared and -fPIC

$ tar -xvf OpenSSL_0_9_8zf.tar.gz
$ cd openssl-OpenSSL_0_9_8zf
$ export CXXFLAGS="$CXXFLAGS -fPIC"
$ ./config --prefix=/usr/local/openssl_0_9_8 --shared
$ make
$ make test
$ sudo make install

install ruby ver.1.9.3 from source

$ tar -xvf ruby-1.9.3-p551.tar.bz2
$ cd ruby-1.9.3-p551
$ ./configure --prefix=/home/end0tknr/local/ruby-1.9.3 \
              --with-opt-dir=/usr/local/openssl_0_9_8
$ make test
$ make install

install ruby ver.1.9.3 by rbenv

install rbenv

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

$ source ~/.bashrc
$ rbenv --version
rbenv 1.1.2-28-gc2cfbd1

install ruby

$ rbenv install --list
1.8.5-p52
  :
2.7.0
2.8.0-dev
jruby-1.5.6
  :
truffleruby-20.0.0

$ export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/openssl_0_9_8"
$ rbenv install 1.9.3-p551

ruby version の 選択

$ rbenv versions
* system
  1.9.3-p551
$ rbenv version
system

$ cd tmp/oauth_sample/

$ rbenv local  1.9.3-p551
$ rbenv version
1.9.3-p551 (set by /home/end0tknr/tmp/OAUTH/oauth_sample/.ruby-version)

rbenv に関してのその他については、以下を参照

rbenv を利用した Ruby 環境の構築 | Developers.IO

install php ver.7.3.15 and wordpress ver.5.3.2

次のurlにあるentryの 2017 -> 2020年版です。

phpの2020/3 での最新は ver.7.4.3 ですが、 ver.7.4より別moduleになった Oniguruma(正規表現ライブラリ)のinstall後、 ver.7.4を上手くinstallできなかった為、php ver.7.3.15 を使用しています。

php が依存するlibrary の install

re2c - lexer generator for C/C++

$ wget https://github.com/skvadrik/re2c/archive/1.3.tar.gz
$ tar -xvf 1.3.tar.gz
$ cd re2c-1.3
$ autoreconf -i -W all
$ ./configure
$ make
$ make check
$ sudo make install

re2c が依存するlibraryは、 https://re2c.org/install/install.html に 記載されています。 これによれば、buildは C++ compiler のみ必要とするようですが、 私の場合、「autoreconf -i -W all」実行時に次のようなerrorとなった為、 libtool を installしています。

$ autoreconf -i -W all
aclocal: warning: couldn't open directory 'm4': No such file or directory
Makefile.am:385: error: Libtool library used but 'LIBTOOL' is undefined
Makefile.am:385:   The usual way to define 'LIBTOOL' is to add 'LT_INIT'
Makefile.am:385:   to 'configure.ac' and run 'aclocal' and 'autoconf' again.
Makefile.am:385:   If 'LT_INIT' is in 'configure.ac', make sure
Makefile.am:385:   its definition is in aclocal's search path.
autoreconf: automake failed with exit status: 1

$ sudo yum install libtool

flex - lexical analyser

$ wget https://github.com/westes/flex/files/981163/flex-2.6.4.tar.gz
$ tar -xvf flex-2.6.4.tar.gz
$ cd flex-2.6.4
$ ./configure
$ make
$ make check
$ sudo make install

bison - general-purpose parser generator

https://www.gnu.org/software/bison/

$ wget http://ftp.gnu.org/gnu/bison/bison-3.5.3.tar.gz
$ tar -zxvf bison-3.5.3.tar.gz
$ cd bison-3.5.3
$ ./configure
$ make
$ make check
$ sudo make install

libxml2-devel

make check で threadsのerrorが発生しましたが、無視して先に勧めています

$ wget ftp://xmlsoft.org/libxml2/libxml2-sources-2.9.9.tar.gz
$ tar -xvf libxml2-sources-2.9.9.tar.gz
$ cd libxml2-sources-2.9.9
$ ./configure
$ make
$ make check
 :
## C14N 1.1 without comments regression tests
## Catalog and Threads regression tests
I/O warning : failed to load external entity "test/threads/invalid.xml"
parse failed
I/O error : failed to load external entity "test/threads/bca.xml"
parse failed
I/O error : failed to load external entity "test/threads/abc.xml"
parse failed
I/O error : failed to load external entity "test/threads/acb.xml"
parse failed
I/O error : failed to load external entity "test/threads/bac.xml"
parse failed
I/O error : failed to load external entity "test/threads/cba.xml"
parse failed
I/O error : failed to load external entity "test/threads/cab.xml"
parse failed
Thread 0 handling test/threads/abc.xml failed
Thread 1 handling test/threads/acb.xml failed
Thread 2 handling test/threads/bac.xml failed
Thread 3 handling test/threads/bca.xml failed
Thread 4 handling test/threads/cab.xml failed
Thread 5 handling test/threads/cba.xml failed
Thread 6 handling test/threads/invalid.xml failed
I/O error : failed to load external entity "test/threads/bca.xml"
parse failed
I/O error : failed to load external entity "test/threads/cab.xml"
parse failed
I/O error : failed to load external entity "test/threads/abc.xml"
parse failed
I/O error : failed to load external entity "test/threads/acb.xml"
parse failed
I/O error : failed to load external entity "test/threads/cba.xml"
parse failed
I/O warning : failed to load external entity "test/threads/invalid.xml"
parse failed
I/O error : failed to load external entity "test/threads/bac.xml"
parse failed
 :
sudo make install 

ICU - International Components for Unicode

$ wget https://github.com/unicode-org/icu/releases/download/release-66-1/icu4c-66_1-src.tgz
$ cd icu/source
$ make
$ make check
$ sudo make install

php 本体

$ wget https://www.php.net/distributions/php-7.4.3.tar.gz
$ ./configure \
  --with-apxs2=/home/end0tknr/local/apache/bin/apxs \
  --enable-mbstring \
  --with-mysqli=/usr/local/mysql/bin/mysql_config \
  --with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
  --with-openssl=/usr/local/openssl_1_1_1 \
  --with-zlib=/usr
  :
checking for mysql_set_server_option in -lmysqlclient_r... no
configure: error: wrong mysql library version or lib not found.
Check config.log for more information.

今回、centos8やmysql8 を利用した影響でしょうか、 configureにて上記のようなerrorとなった為、 次のurlを参考に「mysqlnd」に変更しています。

https://stackoverflow.com/questions/54625966/error-wrong-mysql-library-version-or-lib-not-found-when-building-php-7-with-a

$ ./configure \
  --with-apxs2=/home/end0tknr/local/apache/bin/apxs \
  --enable-mbstring \
  --with-mysqli=mysqlnd \
  --with-pdo-mysql=mysqlnd \
  --with-openssl=/usr/local/openssl_1_1_1 \
  --with-zlib=/usr
$ make
$ make test
$ sudo make install

$ sudo cp php.ini-development php.ini-production /etc/
$ sudo ln -s /etc/php.ini-production /etc/php.ini

wordpress

mysql8に対し、create database & create user

refer to https://qiita.com/ucan-lab/items/3ae911b7e13287a5b917

$ /usr/local/mysql/bin/mysql -u root -p

mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;

mysql> CREATE USER 'wordpress'
         IDENTIFIED WITH mysql_native_password
     BY 'ないしょ';
mysql> GRANT ALL ON wordpress.* TO 'ないしょ';

mysql>  SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| wordpress        | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

mysql8より defaultの認証方式が caching_sha2_password になっており、 そのままでは、wordpress からの db接続に失敗する為、 上記では「WITH mysql_native_password」を追加しています。

参考までに wordpress からの db接続失敗時のerrorは以下の通りです。

PHP Warning:  mysqli_real_connect():
  The server requested authentication method unknown to the client
  [caching_sha2_password]
  in /home/end0tknr/dev/Test/wordpress/wp-includes/wp-db.php on line 1633
PHP Warning:  mysqli_real_connect():
  (HY000/2054): The server requested authentication method unknown
  to the client
  in /home/end0tknr/dev/Test/wordpress/wp-includes/wp-db.php on line 1633

apache httpd.conf 変更

$ vi /home/end0tknr/local/apache/conf/httpd.conf

#以下を追加

<Directory "/home/end0tknr/dev/Test">
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>
Alias /Test /home/end0tknr/dev/Test

wordpressのdownloadと設定

$ pwd
/home/end0tknr/dev/Test
$ wget https://ja.wordpress.org/wordpress-5.3.2-ja.tar.gz
$ tar -xvf wordpress-5.3.2-ja.tar.gz
$ cd wordpress
$ cp wp-config-sample.php wp-config.php

$ vi wp-config.php

define( 'DB_NAME',    'wordpress' );
define( 'DB_USER',    'ないしょ' );
define( 'DB_PASSWORD','wordpress' );
define( 'DB_HOST',    'localhost' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', '/home/end0tknr/local/apache/logs/wp_errors.log' );

wordpressのinstall

後は、ブラウザから wordpress/wp-admin/install.phpaccessすれば、OKです。

aXes - AS400 の 5250 エミュレータ画面をwebブラウザで操作可能に

メモ。

今後もAS400接続する IBM i Access Client Solutions を維持するより、 良い気がします。

excel - 名前'????'は既に存在します。この名前にする場合は~

excelのシートコピーを行う際、次のようなエラーメッセージが表示されることがあります。

名前'????'は既に存在します。
この名前にする場合は[はい]をクリックします。
移動またはコピーを行うために'????'の名前を変更する場合は、[いいえ]をクリックします。

殆どの場合、「数式」タブ→「名前の管理」により「名前の管理」ダイアログを開き、 定義された名前を削除することで解消します。

ただし、非表示と名前が存在する場合、更にひと工夫が必要です。

具体的には、excelvbaにて、以下を実行することで、「非表示」の名前を、 「表示状態」に変更できますので、改めて名前を削除すれば、完了です。

Public Sub VisibleNames()
    Dim name As Object
    For Each name In Names
        If name.Visible = False Then
            name.Visible = True
        End If
    Next
    MsgBox "全ての名前定義を表示にしました", vbOKOnly
End Sub