Programs


音楽 リズムづくりのための試作プログラム


Activity Logs

開発中のWEB教材や、それに関わる論文の進捗などを報告します。

TwitterやFacebookなど多くのSNSがありますが、あえて、テキストサイトにこだわります。

直近20件を表示しています。

過去ログはこちら

児童が夏期休暇に入った「ここ2週間」が勝負の分かれ道です。
ここで進まないと,9月は地獄10月はさらに地獄


「地獄」の話は,いまは,机の下に置きます。
今は,楽しい思い出話をします。


スキーフリーは、クリス・ピリヒによって作成され、WindowsとDOS用のMicrosoft Entertainment Pack 3で1991年10月にリリースされたシングルプレーヤーのスキーコンピュータゲームです。プレイヤーは山の斜面でスキーヤーを操作し、障害物を避けながら時間との勝負をしたり、ゲームモードに応じてスタントを行ったりしてポイントを獲得していく。

SkiFreeはリリース時にそのシンプルさとビジュアルに注目した批評家の間で好評を博しました。このゲームはMacintoshに移植され、数年後にはゲームボーイカラーとiOSにも移植されました。Pirihは、オリジナルのソースコードを再発見した後、32ビット版のWindows版を無料でリリースしました。SkiFreeは今でもゲームコミュニティの間で人気があり、フルランを終えた後にプレイヤーを追いかけてくる「Abominable Snowman」でよく知られています。

SkiFree
www.DeepL.com/Translator(無料版)で翻訳しました。

私が小学校のとき,学校のパソコンルームに,Windows3.1を登載したPCが10台ほどありました(メーカーは覚えていません。NECか富士通かな?)。
そして,その教室の後ろ側に「FM Towns」が2台あったことも,よく覚えています。
私の小学校時代には,すでにWindows95がリリースされており,卒業前には,Windows98もリリースされていたのでしょうが,学校では相変わらずWindows3.1のママでした。
おそらく,あの後,Windows XP を登載したPCが導入されたのでしょう。

Windows ME なんて,良く分からない立ち位置のものもありましたね。あれは一体なんだったのでしょう。

*この頃のMacは冬の時代でしょうか。


小学校のPCには,確か,FDドライブが2つありました。
Aドライブ」と「Bドライブ」です。
MS-DOS,そしてソフトウェアを起動させるために,両方のディスクドライブを使用して起動していたのですね。

*よく,PCの記事で「なぜ,PCのドライブはCから始まるのか?!」なんてものをみます。
そして,FDDが「Aドライブ」として搭載されていたときには,「Bドライブは,なぜないのか?!」だったような気がします。

*将来のWindowsには,CやDといったドライブレターを付けることを止めることもあるのかな?(MacやLinuxのように管理する)
でも,そうすると,絶対パスの指定が変わって,過去の遺産(ソフトウェア)が使えなくなりそうで,まずなさそうですね。
昔のソフトが動く(最近はそうでもない?)ことが,Windowsの魅力の1つです。

しかし,当時の私が小学校のPCを使うときには,既にHDD(Cドライブ)を積んでいて,デフォルトでMS-DOSが起動し,そこからWindows3.1が自動的にブートするようになっていたので,FDDからPCを起動することはありませんでした。

*しかし,Windows3.1からシャットダウンを選択しても,自動的に電源は切れず,「MS-DOS」に戻っていました。そこからどうやって電源を切っていたのかな?覚えていません。電源ボタンをブチッと押していた気もします。

*今振り返ると,「CDドライブ」も付いていた気がします。
そうすると,途中でPCが入れ替わったのかな。
FDD2機にHDD,そしてCDドライブなんて,豪華な環境を備えたPCを多数もっていたとは考えにくい。


ここからが本題です。前置きが長い。

コンピュータルームでは,「ソリティア」や「マインスイーパ」といったゲームが遊べました。また,自宅で「窓の杜」でダウンロードしたフリーソフトのゲームをFDDに入れていけば,学校のクラブ活動の時間に遊ぶ,なんてこともできたりして。

*当時はまだ,インターネット回線(ダイヤルアップ)が自宅に通っている家庭は少なかったです。私の学校では1学年に数人ぐらい,かな?10人いなかったのでは?だから,私なんかは,自宅で面白いフリーソフトを発掘しては,FDDに収まる容量なら(私のときには1.44MB),学校に持って行っていました。

「窓の杜」を久しぶりに見てみましたが,ニュースサイトになっていますね。
また,市の中央図書館には,「窓の杜」に掲載されているソフトウェア集のカタログ(データの入ったCD-ROM付き)が置いてあったりしたのですが,今見るともうありませんでした。残念。

いま私が勤務する小学校では,PCに「ゲーム」なるものは,パージされています。「ソリティアやマインスイーパは,マウスの操作を覚えるのに適している」なんてことを,読んだか,聞いたことがあるのですが。
そして,それらのゲームは,「攻略サイト」もなく,解法が1つのゲームでもないので,とても勉強になると思うのだけれど,「ゲーム=勉強に邪魔なモノ」で括られてパージされるのだとしたら,ちょっともったいないですね。

*いや,もしかすると,いまのWindows10には「ソリティア」も「マインスイーパ」もないのかもしれない?家のPCで見た覚えないですね。


さて,ここで,冒頭にちらっと触れた「FM-TOWNS」です。

いや,正確には,その「FM-TOWNS」にのみ入っていた「Ski」なるゲームの話です。

ゲーム内容は単純。

プレイヤーは,雪山をスキーで下っていきます。
操作方法は,基本的に,マウスの位置(左右)でプレイヤーを動かします。
もしくは,十字キーの右左だったかな?

途中,プレイヤーは,木や転がっている石にぶつかってコケたり,犬がいたりして邪魔をしてきます。その中で,いかに早く,滑走するか,またマウスを駆使してテクニカルにコースを下っていくか,みたいなゲームだったと思います。

しかし,このゲーム,グロテスク要素が1つ入っているのです。

滑走距離が1km(2kmだったかな?)になると,急にクマ(イエティとかって記事もみました)が,猛スピードで追いかけてきます。

捕まると,食べられます。
ゲームオーバーです。

あれは,結構恐怖でした。

ならば,上に登ればいいじゃないか!と,キーボードの十字キーの上をひたすら押して,登ったところ,これも一定のところで急にクマが襲ってきます。

基本,目標(クリア)のないゲームなので,そういったギミックを用意しておいたのでしょうね。

もしくは,猛スピードでクマが追いかけてくることで,それからどれぐらい逃れることができるか,という,新しい目標が設定されるようになっていたのかもしれません。


さて,このゲーム,実は,今も遊べます。

「The Most Officialest SkiFree Home Page!」

Wikipediaによると,上が作者による公式ホームページらしいです。ここに,「Download」という項目があり,64bitのWindowsでも動くと書かれています。すごい!

また,ブラウザ上でもプレイできるように,有志(?)が作成しているWEBアプリが,アーカイブとして閲覧できます。

https://archive.org/details/win3_SKIFREE

試しにやってみたところ,懐かしい,動きました。

1km までが スコアの付く滑走距離で,2km になると,クマ(か,イエティ)が待ち構えています。食われました。


公式ホームページをみると,クマではなく「Abominable Snow Monster」らしいですね。うーん。

みなさまも,どうぞWEB版で手軽に体験してみると良いと思います。

素晴らしき,レトロゲーム。

「WordPress」のアーカイブ機能を使ってログページを作っている。

しかし,「Google Search Console」からの定期連絡で,404エラーを吐いているとのお知らせ。
どうやら,記事数が「0」の場合に,自動的に「404エラー」(Not Found)を吐くようになっているらしい。余計なことを。

避けるためにはどうするか。

記事数が「0」にならないように,常に先行して記事を投稿しておかなければならない。公開日時を指定して。

残念ながら,自分にはそんなに記事を書けるほどの,ネタストックがない。残念ながら。

しかし,今日はある。近くのレンタルDVD店の新作コーナーにて次の2点を借りた。

「キューブリックに愛された男」(2015)
「キューブリックに魅せられた男」(2017)

パッケージが似ているため,最初,レジに持って行った際に,

「お客様,同じ商品が入っています」

と注意していただいた。ありがとう。

日本公開年は両方とも昨年らしい。
なるほど,それで今頃レンタル開始の新作扱いなのか。


さて,キューブリックといえば・・・,

「突撃」(1957)「スパルタカス」(1960)あたりは,初期作品だが,本当に名作。
カーク・ダグラスと組んで,最高の出来映え。
「突撃」に描かれている理不尽さは,今見ても通じるところがある。
また,「スパルタカス」は長編映画で見るのに体力がいるが,映画史の契機になっていることを,漫画『赤狩り』「トランボ ハリウッドに最も嫌われた男」(2015)で知ると,面白さが増すので吉。
ちなみに,『赤狩り』と「トランボ」は,人権についてどちらも大変勉強になるので,時間に余裕があればぜひ見るべき(漫画『赤狩り』は,タイトルがどぎついが,別に左派をプッシュしたり,非難したりしているわけではない)。

その後,「ロリータ」(1962)
こちら,難解な創り(疲れる展開)になっており,残念ながら良く分からない。
ナボコフの原作も先に読んでいたが,これも難解。
いま,Wikipediaをみながら,そんなストーリーだったかしら,なんて思い返している。
そういえば,物語中盤にて,ロリータの母親は,「主人公が惚れているのは自分だ」と思っていたが,実は「娘目当て」で,「逆上して家を飛び出したところで交通事故に遭う」という,嘘みたいな展開だったことを思い出した。
「交通事故」による急展開は,いろんな小説で都合良く使われている。
山崎豊子でさえ,唐突に用いるものだから,それが出てきたときには,「え?」と声を出してしまった。

ロリータから一転,「博士の異常な愛情」(1964),こちらは大変素晴らしい。
ストーリーも非情に簡潔。
とくに,冒頭のB-52に給油するシーン,そしてそのBGMがとても素晴らしい。
その冒頭のBGMが入ったサントラを探したことがあるのだが,結局見つからなかった。

「2001年宇宙の旅」(1968)は,えらい高く評価されているが,「現代っ子」な私にとっては,機械(ハル9000)が歌う「デイジー・ベル」が元祖ボーカロイドだったり,CGっぽい演出が実は手書き(Wikipediaしらべ)だったりすることには,あまり魅力は感じないかった。
この映画で使われているレベルの合成音声やCGは,個人でも実現可能なぐらい,もはや当たり前の技術になっている。
そして,シナリオが(私にとっては)難解すぎる。
結局,「装甲騎兵ボトムズ」の最終話がかなり影響を受けているな!ぐらいの印象。

「シャイニング」(1980)は,ホラー映画枠で有名らしいが,個人的にはあまりホラーさは感じない。
主人公の子どもが,三輪車にのって,広い廊下を走るシーンを撮影するのは,さぞ大変だったのだろう!という印象。
あとは,「レッドラム」という言葉が「金田一少年の事件簿」にも出ていたなーぐらい。

さて,キューブリックといえば・・・,なんといっても,「フルメタル・ジャケット」(1987)に出てくるハートマン軍曹が最高である。最高だが,見ていてつらい。
後半はベトナム戦争映画に共通する鬱展開だが(前半もじゅうぶんに鬱展開である),ラストシーンのミッキーマウス・マーチは素晴らしい。

「バリー・リンドン」(1975)「アイズ・ワイド・シャット」(1999)はしっかり見ていない。見なければ。


そして,キューブリックといえば・・・,なんと言っても「時計じかけのオレンジ」(1971)である。日本版予告編から,その異端さが窺える。

まず,冒頭の映像からして「コレ」である。
怖い。「シャイニング」より遙かに怖い。

そして,ウォルター・カルロス(ウェンディ・カルロス)のシンセサイザーが,その不気味さを増幅させる。
ウォルター・カルロスのシンセサイザーは大変勉強になる(美しい)ので,サウンド・トラックはぜひ入手すべき。

なんといっても,音楽を上手く使っている映像作品である。

「ベートーヴェン」といわず,「ルドヴィヒ」と呼ぶのが素敵。

しかし,大変残念なことに,一番素敵なシーンがDVD/BD版には含まれていない。

この映画は,かなりバイオレンスなシーンがいくつもあるのだが,その際に,主人公や女性の局部も描かれている。

日本の劇場公開版では,当時の法律により,そのシーンになると,急に「丸」が出てきて,局部が覆い隠されていたらしい。

私が最初,LD(レーザー・ディスク!)で見たバージョンは,その劇場公開版であったため,この「丸」を含んだ表現が用いられていた。それが非情にシュールであり,作品の極度なバイオレンスにユニークさが含まれ,この作品の魅力の1つになっていたように感じる。
(黒い丸だった気がするが,ネットの海を見ていると,どうやら白い丸らしい。黒だった気がするのだが・・・)

しかし,現在,完全版と称して出回っているDVD,BDには,残念ながらこのモザイクがない。そのため,バイオレンスさが増し,あの絶妙なバランス感が崩れているように思う。

残念ながら,そのLDは引越の際に手放してしまった。惜しいことをした。
あのシーンをもう一度みる方法はないものか。
どうにか日本の劇場公開版のBDを出してもらえないものか。

この作品を引用した作品も数知れず。

最近(?!)だと,「ビブリア古書堂の事件手帖」のネタの1つになっていた。
私も原作は読んだが,正直あれは良くない。なぜなら原作には音楽がないから。
「雨に唄えば」は原作小説には出てこないのだから。

あと,安易なオマージュ(失礼)も良くない。奈須きのこの「空の境界」のアニメ版。あれに,敵役が「雨に唄えば」や第9を歌いながら,主人公を襲うシーンが出てくるが,どうみても「時計じかけのオレンジ」のオマージュ(悪く言えばパクリ)である。知ってしまったら最後,作品がチープになってしまう。せっかく梶浦由記がいたのだから,それを使えばよかったのに。

加えて,「雨に唄えば」の効果を増すためにも,この「時計じかけのオレンジ」に先駆けて,「Sing in the rain(雨に唄えば)」(1952)の視聴は必須。「雨に唄えば」のシーンだけの視聴ではだめ(ラストシーンにもう1度出てくるが,それを楽しむためには,抜粋したものではなく,全部みる必要あり)。


さて,冒頭に紹介した
「キューブリックに愛された男」
「キューブリックに魅せられた男」
がどんな内容なのかが気になる。

私はドキュメンタリーが一番好きなのです。

「政治」「宗教」「野球」をネットの記事で扱うと,ページが荒れるという話を昔聞きましたが,広島東洋カープの話をします。


本日も,9回まで「6−4」で勝っていたのに,その裏に満塁HRを打たれてサヨナラ負け。
相変わらずのザル展開ですが,悲しさも麻痺してとくになし。
(むしろ,自分自身のことで精一杯な現状もあり)

今年は同じような負け方(9回まで勝っていて,すんでのところで逆転負け)が多いです。


広島のリリーファーを見ても,代わりの抑えはイマイチ。

スコット → 練習試合の球威が皆無。無理。
菊地保 → 三振がとれないので,抑えには不向き。中継ぎなら良。
フランスワ → 直近の試合を見ても,中継ぎ専用(抑えは無理)。
藪田 → 未知数。
堀江 → 未知数。まだ若く,抑えで負荷がかかって,故障するのが怖い。
島内 → 球威が上がったけれど,抑えとしてはどうか。
一岡 → 連投だと球威が落ちて,抑えは無理(中継ぎでの連投とは違うのでしょう)
D.J. ジョンソン → 最近調子が良い(?)。夏場になって調子が上がってくることを期待したい・・・。


打撃陣が好調なだけに,今日のような試合を勝ちきれない今季は厳しかろう。
また,2回で降板した大瀬良は故障なのか,どうなのか・・・。

まだシーズンは残り試合多いですが,厳しい一年になりそうですねー。

久しぶりの大きな体調不良。頭痛がひどく、動けない。

熱はない。

その後、買い出しに出る。その時に見つけた看板。

酒タバコが、悪になっている。(どちらも飲まないけど)

そこまで憎まなくても、と思ってしまう。

やらなければならないことが山積みだが、ちょっと動けないので、ロキソニンを飲んで今日は何もしません。

本当に何もしません。それで良いのか。

Amazon の商品一覧を見たところ,
2月頃からのマスク不足は,
どうやら解決したようですね。

私も,Amazon 経由でマスクを買いました。

使い捨ては嫌なので,洗えるタイプのものを。

値段も,一時期はえらいことになってましたが,
この商品も洗えるタイプで6枚980円。
まあ,値段はこんなもんでしょう。
コロナ以前が安すぎたのです。

せっかくですので商品レビューを。

【6枚セット】マスク 洗えるマスク 夏用 ひんやり 立体型 洗って使える マスク 通気性 個包装 抗菌防臭 UVカット 速乾 繰り返し使える 男女兼用 普通サイズ (ブラック) (6)

どんなことにも
くじけず
どんなことにも
負けず
どんなことにも
落ち込まず
明るく前へ

がんばれ日本

と書かれたビニール袋が2枚。

中身はこんな感じ。
マスク3枚ずつが1つの袋に入っていて,
それぞれ個別包装されている形です。

取り出して,撮影したものがこちら。
ノーマルなマスクです。

6枚組なので,自宅に3枚,職場にも予備で3枚置いておけます。
届いたばかりで,まだ繰り返しの洗濯はしていません。
強度はどの程度でしょうか。

値段が安いので,1枚6回も洗えれば良いのかな,と。
そうすれば,毎日使ったとしても,1ヶ月はもちますね。

コロナ禍以前は,
使い捨てマスク50枚入りを,
1箱500円とかで買っていた気がしますが(記憶違いかも),
それと同じぐらいのコストだと嬉しいですね。

100枚,1,000円だとすると,100日分。

これだと,3ヶ月ちょいでしょうか。
6枚で100回洗うとしたら,1枚あたり16,17回あたり洗える形?
ちょっと難しいかもしれないですね。

まあ,マスクを買うのに,行列に並んだり,
異常な値段を払わずに済むようになったのは,大変嬉しいことです。

コロナ禍が一日でも早く過ぎ去ることを願っています。


色々と,ストック(共有)しておきたいネタはあるのですが,
なかなか時間がとれず,まとめられていません。

こういった文章(日記)なら,ぱっと書けるんですが・・・。
まあ,「2月時点でこうだった!」というように,
「7月半ばにはこうなっていた」という記録にはなるかな。

% php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.66.dylib
  Referenced from: ~/.phpenv/versions/7.4snapshot/bin/php
  Reason: image not found
zsh: abort      php -v

php のコマンドを打つと,上のようなエラーが出るようになった。

色々あたったところ,

1) brew update && upgrade を打つ
2 )PHPを再インストールする

という解決方法がえられた。

参考:MacでPHP実行時にlibicui18n.62.dylibのエラーが出る場合の対処方法


というわけで,phpenv を使って,php を再インストールする。
( 1 のbrew のコマンドは実行済み)

まず,phpenv でインストールした7.4から,システムのバージョンに戻す。

% phpenv global system
% phpenv rehash

次に,7.4をアンインストール&再インストール,そして,切り替えを行う。

% phpenv uninstall 7.4snapshot
% phpenv install 7.4snapshot
% phpenv global 7.4snapshot
% phpenv rehash
% php -v
PHP 7.4.7-dev (cli) (built: Jun 15 2020 02:05:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.7-dev, Copyright (c), by Zend Technologies
    with Xdebug v2.9.7-dev, Copyright (c) 2002-2020, by Derick Rethans

エラーなく実行できることを確認できた。

ローカルで開発するときも,こういったことが起こるから面倒ですね。
Docker で開発するのが楽なのかな・・・。

% phpenv uninstall 7.4.6_debug
~/.phpenv/plugins/php-build/bin/rbenv-uninstall: line 69: phpenv-hooks: command not found

Debugで入れたときのPHPを削除しようとコマンドを打ったところ,エラーが返ってくる。

どうやら,phpenv-hooks というものが必要らしい。

ので,Googleで探してみたところ,コメントアウトすると動くとの記事が見つかる。

phpenv installの前に下記のようなエラーが出たのでコメントアウトしたら動きました・・・なんだったんだろう・・

/usr/local/bin/rbenv-install: line 128: phpenv-hooks: コマンドが見つかりません

phpenv+php-build 複数のPHPのversionを使い分け

早速, rbenv-uninstall を vim で開き, 69 行目をコメントアウトする。

そして,再度コマンドを実行。

% phpenv uninstall 7.4.6_debug
Are you sure you want to remove version ‘7.4.6_debug’? [y/N]: y
Version ‘7.4.6_debug’ (~/.phpenv/versions/7.4.6_debug) successfully removed.

無事,アンインストールが完了。

ほかの異常にあたるまでは,とりあえず,コメントアウトのママで良いかと思います。

雑記。

予約開始日から注文していた「アニマル連邦」が今日届きました。
発売日が12日だったので,2日遅れですね。

Amazonの予約販売も,発売日に届くようにしてくれると嬉しいのだけど,それは難しいのでしょうか。
12日に商品ページを見たら,Primeで「13日に配送される」と書いており,あまり予約注文のメリットがないようにも感じます。
(といっても,あまり読む時間ないので,しばらく積むでしょうが・・・。)


しかし,まさか書籍化するとは。

Twitterで火がついたのは,クレヨンしんちゃんの絵柄そっくりなパロディからだったと思います。かなり完成度が高かった。

パロディの内容は,ドラッグや宗教といったタブーなものが多く,あのタッチで,世界観がまったく違う内容(ギャップ)が良かった(?)のでしょうか。

そこから,オリジナルの漫画を並行して出して,それが見事に書籍化するまで大ヒット。

電通をバックにして盛り上がった(ように,見せかけていた,マッチポンプの)ワニと違う点は,「仕掛けがない」ところだと,信じています。

これも,何かしらマスメディアと組んで,フォロワー数をいじっていたのだとしたら残念ですが,内容的に,これをプッシュするメディアはいないでしょう。

有名作品のカバー・パロディで人気を得る

オリジナル作品を広める

というのが,トレンドになるのかな(もしくは,すでになっている?)。
どうでしょう。

今後にも期待です(2巻は出るのかな?)。


堺屋太一の「歴史からの発想」も届きました。

読む時間がないので,早速積んでいます。
メルカリで300円で買ったので,本当に余裕のできたときに,でよかろう。

堺屋太一だから,面白いに,違いないだろう!

Search Replace DB

本番環境のDBのエクスポートについては,MySQLDumpコマンドでDBごとエクスポートします。

それを,ローカルでインポートするわけですが,WordPressでは,DBのカラムの値に本番環境のURLが入っている箇所が多くあるため,インポートしただけでは,ローカルで動かすことができません。

単純に1つ1つ置換するのも,SQLコマンド打つのも面倒(* 分からない)ので,「Search Replace DB」というプログラムを使います。

参考:【WordPress】DBの置換には「Search Replace DB」を使おう

いろいろ,WEB記事を見ていると,本来は,ローカルで開発したものを,本番環境にあげて,全置換することに使われることが多いようですが,今回はその逆になります。

Database Search and Replace Script in PHP(公式サイト)

現在の最新版は 4.1.1 のようです。
(ページの下の方を辿れば,v.3 系や,v.2 系も公開しているようです。)

公式サイトにアクセスすると,メールアドレスや名前を入力するフォームがあるので,それらを送信すると,ダウンロードリンクの書かれたメールが送られます。

ダウンロードファイルは,プロジェクトフォルダにコピーします。
Git を使っている場合は,.gitignore

Search-Replace-DB-4.1.1/
Search-Replace-DB-master/
search-replace22/

を無視するように追加しといた方が良い(楽)かもしれません。
(「Search-Replace-DB-master」は V.3 系,「search-replace22」は V.2 系です。)

ちなみに,v.3系にアクセスすると,

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"?

なるエラーが出ます。PHP7.3 以降から出るらしいです。

参考:PHP7.3からbreakの代わりにcontinueを使うとWarningになる。

使い方については,先のページ(【WordPress】DBの置換には「Search Replace DB」を使おう)と同じです。

これで,
1)ドメイン名の置換(本番環境のドメインをローカルの開発環境へ)
2)https を http に置換(本番環境が https の場合)
を行います。

以上,本番環境のWordPressDBをローカルの開発環境へ移動することのまとめです。

ちなみに,前回の記事で,必死にphp5系を入れようとしていましたが,それは,「Search-Replace-DB」のv.3系で,ローカル開発環境のDBにアクセスできなかったためです。

v.3系では,確か,MySQL8へ接続するプログラムでなかったことが原因だった気がします。そのあたりもv.4系になって改善されたのでしょう。これで,PHPのバージョンを5系に落とす必要(手間)がなくなりました。ありがたいかぎりです。

PHPを使った開発からしばらく離れていた。

今使っているPHP7系のMySQLのドライバと,PHP5系のドライバは違うらしい。

そのため,古いプログラム(MySQLへの接続の関数)を使ったものがエラーで動かない。

よって,phpenv でphp5系をインストールすることにする。


% phpenv install 5.6snapshot

(略)

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Please reinstall the libcurl distribution -
    easy.h should be in <curl-dir>/include/curl/
-----------------------------------------

当然のごとく,エラー。


$ phpenv install 5.6.40

ちなみに,5.6.40もエラーが出てインストールできない。

エラー内容からすると,curlやら,opensslあたりが問題らしいが,それ系はhomebrewでインストール済みである。

早速ググって解決を図る。


phpbrewでphpインストール

$ brew install zlib bzip2 libiconv curl
$ phpbrew install 5.6.40 +default +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)" +curl="$(brew --prefix curl)"

失敗。


Macのphpenv(php-build)でビルドしようとしたら出るエラーと解決まとめ
$brew install libmcrypt

こちらもエラー。なかなかうまくいかない。

エラー内容を抜粋が次の通り。

Please reinstall the libcurl distribution

libcurl を再インストールせよとある。

homebrewインストール、libcurlをhomebrewインストール

上をみると,brew install curl で良いように書いてある。


php5系が動けば良いので,バージョンを5.5に変えてみる。

$ phpenv install 5.5snapshot

(略)

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
Failed to run 'buildconf'.
You should not run buildconf in a release package.
use buildconf --force to override this check.
-----------------------------------------

エラー内容が変わった。

これも調べてみるが,今いち,解決しそうな記事が見つからない。


どうも,またパスの問題らしい。

macOS 10.15 Catalina 上で phpenv を使って PHP 5.6 を build するのにものすごく苦労した話

ちなみに, ここで用いる bison は古いモノを使わなければならないので,それをインストールする。

Macでphpenvによるphpのインストールにハマりにハマった件

brew install bison@2.7
% YACC=$(brew --prefix bison@2.7)/bin/bison \
PHP_RPATHS="/usr/local/Cellar/openssl/1.0.2r/lib /usr/local/opt/zlib/lib /usr/local/opt/bzip2/lib /usr/local/opt/curl/lib /usr/local/opt/libedit/lib /usr/local/opt/libiconv/lib /usr/local/opt/mcrypt/lib" \
PHP_BUILD_CONFIGURE_OPTS="--with-openssl=/usr/local/Cellar/openssl/1.0.2r --with-curl=/usr/local/opt/curl --with-zlib-dir=/usr/local/opt/zlib --with-bz2=/usr/local/opt/bzip2 --with-curl=/usr/local/opt/curl --with-libedit=/usr/local/opt/libedit --with-iconv=/usr/local/opt/libiconv --with-mcrypt=/usr/local/opt/mcrypt --with-tidy" \
PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4 \
phpenv install 5.6snapshot

結果。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: GD build test failed. Please check the config.log for details.
-----------------------------------------

The full Log is available at '/tmp/php-build.5.6snapshot.20200609005430.log'.
[Warn]: Aborting build.

うーん。ちなみに,ログを cat しても次の行しか出てこない。

configure: error: GD build test failed. Please check the config.log for details.

さて,どうしたものやら。

プログラミング等とは関係ありません。

ちょっと移動する機会があり,出発した直後に「マスクをしていない」ことに気付きました。

地方では大分沈静化しているとはいえ,やはり,マスクがないと怖さはあります。

しかし,マスクをとりに帰ると,どうしても「乗りたい便に遅れる」ので,仕方なくマスクをせずに駅へ向かいました。

メディアでは,すこし,マスクの在庫がダブつきだした,なんてはなしも聞きます。

駅には小さな売店がいくつかあるのですが,そこで「マスクが売っていないか」を少し期待しながら聞いてみました。

「すいません,今はないんです。」

当然の返事。

さすがにここら辺は関係ないよなーと,最後の店舗に在庫を聞いてみたところ,

「売ってはないんです。でも,マスクはあるので,それを差し上げますよ!」

と,売り物ではない,個人のマスクを1枚いただきました。

出発間際で急いでいたので,お礼しか言えず,お店の別の品を買うという発想が浮かばなかったのが申し訳ない。

次,その店に伺ったときは,何か買う予定です。

以上,日記です。

理由が分かってしまえば,大変,しょうもないプログラミングミスでした。

Webpack をつかって,jsファイルを読み込み/生成できない

webpack.config.js に,1通り設定を行って,書き出しの設定を行います。

ちなみに,package.json には,次のような scripts を指定。

(略),
  "scripts": {
    "build": "webpack --mode production --watch --config webpack.config.js",
    "dev": "webpack --mode development --watch --config webpack.config.js"
  },
(略)

これで, $ npm run dev と叩くと,ファイルを1まとめにしてくれるはずなのですが,次のエラーが出て先に進みません。

ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/~{プロジェクトへのパス}'

webpack.config.js には,entry ポイントを,./webpack 以下を見に行くように設定しているので,./src を見に行くところが間違っています。

なぜ,うまく走らないのか。
webpack.config.js を読み込んでいないのか。

試しに,webpack.config.js
console.log("webpack.config.js is loaded")
と書き込んでみました。

しっかりと,コンソール(ターミナル)に出力されました。

なら,なぜか。
webpack.config.js の記述が間違っているのでは?

目を皿にして見直すと,

module.exports

と書かねばらならぬところが,

module.export

と書かれていました・・・。
(そりゃ,読み込まれませんね・・・)

結局,ここを修正することで,全てうまく進みました。

AtomWebpack 用のプラグインがあれば,入れようと思います。
(構文エラーチェック用的な・・・)

brew での mariadb の導入に失敗

ローカル環境にデータベースを入れようと思ったら, brew コマンドで一発ですね。

$ brew install mariadb

これで最新版の MariaDB もろもろを拾ってきてくれます。

が,

$ mysql -u root -p

で,ログインできず・・・。

mysql をセーフモードで起動し,中身を見てみると,「mysql」データベースが空・・・(show tables で,Empty)。

そのため,「mysql_secure_installation」を走らせたとき,root のパスワードを聞かれても,入れないわけです。

いったん,削除したり, $ brew reinstall mariadb を試したりしたけれど,なぜか「mysql」データベースは空のまま。

うちの Mac に,以前なにかMySQL系を入れていて,それが悪さをしているのでしょうか。入れた記憶がありませんが・・・。

仕方がないので,Homebrew でのインストールは中止。

公式サイトから MySQL 8 をダウンロード

データベースをいじってたころは,MySQL がオラクルに買収されて,MariaDB が流行ってから,MySQL はあまりさわってませんでした。

しかし,公式サイトを見ると,いつの間にか MySQL 8 までリリースされていたのですね(6と7は欠番かな)。

Wikipediaをみると,2018年4月19日にリリースされたとのこと。

結構前ですね。知りませんでした。

動けば,MariaDB でも MySQL でもなんでもいいです。

早速,ダウンロードし,インストール,続けて,mysql に入ろうとコマンドを叩いたところ,

% mysql
zsh: command not found: mysql

ほう・・・。

いや,クライアントがないはずはなかろう・・・ということで,昨日のパス問題を思い出します。

いまのパスに mysql がいないだけでは?

ちょっとググって調べたところ, /usr/local 以下にいる様子。

% ls /usr/local | grep mysql
mysql
mysql-8.0.20-macos10.15-x86_64

2つ,いらっしゃいますね。

% ls -al /usr/local | grep mysql
lrwxr-xr-x    1 root     wheel    30  5 19 00:51 mysql -> mysql-8.0.20-macos10.15-x86_64
drwxr-xr-x   13 root     wheel   416  5 19 00:52 mysql-8.0.20-macos10.15-x86_64

どうやら,mysql 8.0.20シンボリックリンクみたいですね。
(シンボリックリンクで合っているのかな?)

こいつを実行すれば,走りそうです。
/usr/local 以下なので,sudo が必要な様子。

とりあえず,「mysql_secure_installation」を走らせます。

% sudo /usr/local/mysql-8.0.20-macos10.15-x86_64/bin/mysql_secure_installation 

(中略)

Success.
All done! 

無事,走りました。

GUIソフト「DBeaver」を使ってログイン

少しググると,いま人気らしい「DBeaver」を使ってログインしてみようと思います。

brew でインストールしたところ,「最新版があります」と,公式から dmg ファイルをダウンロードさせられました。まあ,接続できれば,どちらでも良いです。

早速,「MySQL 8 系」のドライバ(My SQL 5 系とは違うらしい!)をダウンロードし(ここら辺を自動でやってくれるのが便利),接続。

エラー:Public Key Retrieval is not allowed

ググります。

AllowPublicKeyRetrieval

サーバー側から公開鍵を取得するための特別な Handshake を許可/禁止します。既定値は false(禁止)です。Ping送信時に “Public Key Retrieval is not allowed” というエラーが返ってきた場合、この値を true に設定すると Ping が成功するようになります。

参考:Payara ServerでMySQL 8.0を使用する

ドライバのプロパティから,AllowPublicKeyRetrievalTrue に設定して,再接続。

無事,接続できました。本当に,良かったです。

Adobe Acrobat Reader」で,PDF データを画像に書き出しできないか,と見ていたところ,右画面に,「PDFを書き出し」なる部分がありました。

下の画像のところです。

Adobe Export PDF
「オンラインでPDFファイルをWordまたはExcelに変換します」

その下をみると,「PNG」で変換と書いてあります。

早速,「変換」ボタンをおしてみると,WEBブラウザが起動し,Adobeへのログイン画面へ。

そして,Adobeにログインすると,下の画面が表示されました。

ん?

このページを見る限り,「Adobe Acrobat Pro DC」をダウンロード(購入)しなければ,書き出せないようにみえるのですが。

オンラインで書き出す」とは,全然違った動きをしているのでは?

もしかしたら,「Word」「Excel」だけなのかな,と思い,「Word」を選択して「変換」を押したところ,上の画像と同じホームページに飛ばされました。

有料なんですね。


「Mac」にデフォルトで入っている「プレビュー」でも,PDF を画像ファイル形式で書き出せるのに,有料ソフト(しかも,Acrobat Pro)を買わせようとする Adobe は,なかなか「えげつない」と感じました。

Windows にも多くの無料書き出しソフトがありますから,そちらを使った方が良いですね。

Mac OSX(10.15.4)にphpenvを導入する

きっかけは,CakePHP4 の導入。

「いま,PHPの開発は,『Laravel』が主流!」

などという記事もみかけますが,むかし使い慣れた「CakePHP」から,新しいフレームワークを習得するのが面倒です。(「Laraval」も興味はあります。)

Rails」が流行りだしたころも,同じようなことがいわれていた気もします。
(しばらく見ない間に,Railsも5.1になっている・・・。)

いま,WEB開発では,どんな手法がトレンドなんでしょうね。


「CakePHP」のはなしに戻ります。

早速,公式マニュアルのクイックスタートガイドに沿って,導入しようとすると,2点エラーが出ました。
(しかし,公式サイトの日本語ドキュメントは,いつの間にこれほど充実していたのだろう。)


追記:
この時点では,2点のエラーを修正すれば,すんなりPHP7.4が導入できると思っていました。
しかし,2点どころではなかったです。

「phpenv」をOS X 10.15.4(Catalina)に導入するのは,かなり面倒です(時間がかかります)。


1) The requested package cakephp/bake ^4.0 exists as cakephp/bake [(略)] but these are rejected by your constraint.

The requested package cakephp/bake ^4.0 exists as cakephp/bake but these are rejected by your constraint.

原因がよく分からんので,早速グーグルで検索。

参考:How to Fix Cakephp 4 Composer Install Error

どうやら,インストール時に,CakePHPのバージョン指定を"4.0"にしていたのが悪かったようです。
すでに,「4.0 以上」のマイナーバージョンがリリースされているので,それが指定できるようにしなければならない・・・のかな?

失敗時のコマンドphp composer.phar create-project --prefer-dist cakephp/app:4.0 [プロジェクト名]

エラー回避のコマンドphp composer create-project --prefer-dist "cakephp/app:^4.0" [プロジェクト名]

こうすることで,まず1つめのエラーを回避できました。


2)the requested PHP extension intl is missing from your system.

いま,Mac OS Xに,デフォルトで入っているPHP(7.3.11) を使っているのですが,「ext-intl」がないようです(もしくは,有効になっていない?)。

こちらも,ググってみたところ,その多くが「Homebrew」でPHPを入れるという解決策でした。

でも,「せっかくOS標準のPHPから離れるのなら,最新版のPHPを入れたい」ので,PHP7.4をインストールしようと思います。

Homebrewでコマンドを叩いたところ,まだ用意されてないのか,見つかりません。

% brew search php
==> Formulae
brew-php-switcher   php-cs-fixer        phplint             phpstan
php                 php@7.2             phpmd               phpunit
php-code-sniffer    php@7.3             phpmyadmin
==> Casks
eclipse-php                netbeans-php               phpstorm

探し方が間違っているのかな?

brewでOSと同じバージョンのphp7.3を導入するのは,なんか微妙な気分です。

なら,phpenv はどうだろう?ということで,今回のタイトルに至ります。


phpenv の導入

まず,githubをみると,2つリポジトリが見つかります。

A)phpenv / phpenv

B)CHH / phpenv

「Star」や「Watch」の数でみると,(A)の方が優勢ですね。
どちらを使うべきか。

ここでも,ちょっとググってみます。

phpenvのリポジトリは、phpenv/phpenvCHH/phpenvの2種類あって、phpenv/phpenvのほうが如何にも公式って感じでこちらでインストールしようとしたのですが、こちらはバグが多すぎる上に、Issueに載っている解決法もバラバラで、さらにすべて試してもうまくいかないことがあったので、諦めました。そしてCHH/phpenvをインストールしたら何の問題もなくあっさり出来たので、こちらをインストールします。

参考:phpenvで最新版のPHPをインストールしてWebサイトで使用する

これを見ると,どうやら(B)の方がよいようですね。
(B)のリポジトリをクローンしてインストールします。

phpenv % bin/phpenv-install.sh

export PATH="/Users/(アカウント名)/.phpenv/bin:$PATH"
eval "$(phpenv init -)"

Add above line at the end of your ~/.bashrc and restart your shell to use phpenv.

「.bashrc」に書き込めと表示されますが,OS が Catalina になってから,ターミナルが Zsh になったらしいので,書き込む先は「.zshrc」でしょうか。

編集して,ターミナルを再起動します。

% phpenv 
rbenv 1.1.2-30-gc879cb0
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List installed Ruby versions
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme

phpenv コマンドが通るようになりました。

使い方は rbenv と同じようですが(コマンドを叩いたら,いきなり「rbenv」と出ますね・・・),rbenv を使ったのもはるかむかしなので,覚えてません。

「php-build」のインストール

公式リポジトリのREADMEを参考に「PHP7」を導入。

まず,「php-build」が必要らしい。

こちらも,上のリンクにある,github からクローンする。

ホームディレクトリの .phpenv ディレクトリに,pluginsフォルダを作成する。
そこに,github からクローンした「php-build」ディレクトリをコピーする。

% cp -r php-build .phpenv/plugins 

すると,phpenv コマンドで install をパラメーターで与えることができる。

% phpenv install -l
Available versions:
  5.2.17
  5.3.10
(略)
  7.4.0
  7.4.1
  7.4.2
  7.4.3
  7.4.4
  7.4.5
  7.4.6
  7.4snapshot
  master

今回の目的の,php7系がみられました。


PHP7.4 のインストールを試行:失敗

早速,コマンドを叩いて,php7.4(現時点での最新版)をインストールします。

% phpenv install 7.4.6

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

Alternatively, you may set the environment variables LIBXML_CFLAGS
and LIBXML_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See `config.log' for more details
-----------------------------------------

The full Log is available at '/tmp/php-build.7.4.6.20200518013139.log'.
[Warn]: Aborting build.

エラーで失敗。

こういったのが,精神的にきつい。

とりあえず,ログを参照。

% cat /tmp/php-build.7.4.6.20200518013139.log
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: error: in `/var/tmp/php-build/source/7.4.6':
configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

Alternatively, you may set the environment variables LIBXML_CFLAGS
and LIBXML_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See `config.log' for more details

pkg-config」とやらをインストールする必要があるのでしょうか。


「pkg-config」を調べる

Wikipedia に pkg-config についての記事がある。
しかし,よく分からん。

コンパイルするときに使ってるのかな?

とりあえず,導入の方法を探る。
Wikipediaにある外部リンク「php-config」を踏む。

これをみると,Git で公開されているらしい。
git://anongit.freedesktop.org/pkg-config が,リンク切れ(?)。
となりの(browse)というリンクを踏むと,リストが表示された。

どうやら,GitHubではなく,GitLabというページで公開されているようだ。

早速,pkg-config を Clone しよう・・・と思ったところ,READMEをみると,結構ややこしそう。Clone したところで,Mac でビルドできないんじゃないか?


Homebrew で「pkg-config」をインストール

 % brew install pkg-config

愚直に,brew からコマンド叩いてインストールできるのではないか?

コマンド叩いて,ターミナルを再起動したところ,無事導入されたようです。

% which pkg-config
/usr/local/bin/pkg-config

Homebrew は必須ですね・・・。


PHP7.4のインストールにトライ(2度目):失敗

% phpenv install 7.4.6

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------

No package 'krb5-gssapi' found
No package 'krb5' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables KERBEROS_CFLAGS
and KERBEROS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.4.6.20200518015313.log'.
[Warn]: Aborting build.

ここまで,導入に手間取ると,疲れてきますね。


「krb5」をbrew で導入

先ほどの「pkg-config」と同様に,「krb5」を brew で叩いてみましょう。

% brew install krb5

openssl@1.1 も一緒に導入されました。
なぜでしょう。

そして,macOSは,今回インストールしたものではなく,デフォルトのプログラムを読みに行くから,.zshrc に色々と書き込む必要があるとアラート。

OpenSSL のパスも書き換える必要があるのか・・・?

とりあえず,先に krb5 のパスを書き換える。
.zshenv に下の行を追加。

# krb5
export PATH="/usr/local/opt/krb5/bin:$PATH"
export PATH="/usr/local/opt/krb5/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/krb5/lib"
export CPPFLAGS="-I/usr/local/opt/krb5/include"
export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig"

PHP7.4のインストールにトライ(3度目):失敗

% phpenv install 7.4.6

祈る思いで,コマンドを叩く。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Package requirements (openssl >= 1.0.1) were not met:

No package 'openssl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables OPENSSL_CFLAGS
and OPENSSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.4.6.20200518020736.log'.
[Warn]: Aborting build.

当然,想いは届かない。

どうやら,「OpenSSL のバージョンが 1.0.1 以上じゃないとダメ!」らしい。

だから,krb5 の導入時に OpenSSL の1.1 が入ったのですね。


.zshenv に OpenSSL のパス等を記述

先ほど krb5 を導入したときに,
.pem ファイルを使っているなら,
/usr/local/etc/openssl@1.1/certs
に,コピーして,
/usr/local/opt/openssl@1.1/bin/c_rehash
しろ,というメッセージもあった気がします。
.pem ファイルとかは,とくにもっていない,はず。

参考:[OpenSSL] pem ファイルとは?SSL証明書の中身を確認する方法

上の記事にもあるように,
むかしむかしの記憶を探ってみると,.pem ファイルは,
サーバーのSSL証明書に使ったファイルだった気がします。

SSHの公開鍵や秘密鍵は関係ない・・・はず。
なので,今回は,これは放置。

そして,また,.zshenv を修正。

# OpenSSL 1.1
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

上の行を追加。


PHP7.4のインストールにトライ(4度目):失敗

% phpenv install 7.4.6

祈る(午前2時半)。そして,エラー。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------

No package 'krb5-gssapi' found
No package 'krb5' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables KERBEROS_CFLAGS
and KERBEROS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.4.6.20200518022506.log'.
[Warn]: Aborting build.

また, krb5 。さっき入れたよね?

PKG_CONFIG_PATH 云々いってますので,確認。

% echo $PKG_CONFIG_PATH
/usr/local/opt/openssl@1.1/lib/pkgconfig

先ほど設定した値になってますね。

pkgconfig % ls
libcrypto.pc	libssl.pc	openssl.pc

なかにも,いくつかファイルがいらっしゃいます。
(これで,じゅうぶんなのかは分からないのですが。)

brew に krb5 なる別のものがあるのか,とも考えて検索。

% brew search krb5
==> Formulae
krb5 ✔

特にないみたいですね・・・。

ここで,再度,さきほど krb5 をインストールしたときに表示されたメッセージを確認。

PKG_CONFIG_PATHが2カ所ある!

1つは,OpenSSL,もう1つは Krb5 のところ。
また,「PKG_CONFIG_PATH」だけでなく,
「LDFLAGS」と「CPPFLAGS」もダブっている。

とりあえず,先ほど,OpenSSL で .zshenv に設定した行を,
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
以外,コメントアウトする。


PHP7.4のインストールにトライ(5度目):失敗

% phpenv install 7.4.6

祈る(午前2時40分頃)。そして,エラー。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Package requirements (openssl >= 1.0.1) were not met:

No package 'openssl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables OPENSSL_CFLAGS
and OPENSSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

The full Log is available at '/tmp/php-build.7.4.6.20200518023833.log'.
[Warn]: Aborting build.

何か,根本的な間違いをしている気がする。

試しに,openssl の場所を確認する。

% which openssl
/usr/bin/openssl

古い(1.1じゃない)方を見に行ってますね。そりゃダメですね。


.zshenv を修正

先ほど,OpenSSL のパス以外をコメントアウトしましたが,それが間違っているのではないか,ということで .zshenv を修正。

# krb5
export PATH="/usr/local/opt/krb5/bin:$PATH"
export PATH="/usr/local/opt/krb5/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/krb5/lib"
export CPPFLAGS="-I/usr/local/opt/krb5/include"
export PKG_CONFIG_PATH="/usr/local/opt/krb5/lib/pkgconfig"

# OpenSSL 1.1
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig:$PKG_CONFIG_PATH"

OpenSSLの方で,LDFLAGSCPPFLAGSPKG_CONFIG_PATHの定義をするときに,Krb5 での定義をちゃんと引っ張ってきて上書きするように修正。


PHP7.4のインストールにトライ(6度目):失敗

% phpenv install 7.4.6

祈る(午前2時40分頃)。そして,エラー(無慈悲)。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: error: Please reinstall the BZip2 distribution
-----------------------------------------

しかし,エラー内容が変わりましたね。
「BZip2 をインストールせよ」とのこと。

ちなみに,OpenSSLのパスはとくに関係ないみたいです。

% which openssl
/usr/bin/openssl

LDFLAGSCPPFLAGSPKG_CONFIG_PATH,これらが重要だったみたい。

とりあえず, brew で bzip2 をインストールしてみましょう。


brew で BZip2 をインストール

% brew install bzip2

bzip2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have bzip2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/bzip2/bin:$PATH"' >> ~/.zshrc

For compilers to find bzip2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/bzip2/lib"
  export CPPFLAGS="-I/usr/local/opt/bzip2/include"

インストールは成功しましたが,先ほどから見慣れたメッセージが出てきましたね。

早速,.zshenv を修正します(何度目でしょうか)。

# BZip2
export PATH="/usr/local/opt/bzip2/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/bzip2/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/bzip2/include:$CPPFLAGS"

こんな感じの行を追加。


PHP7.4のインストールにトライ(7度目):失敗

% phpenv install 7.4.6

祈る(午前3時10分頃)。そして,エラー。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: error: Please reinstall the BZip2 distribution
-----------------------------------------

このエラーは,さっき見た気がします。

ググってみます。

参考:phpbrew で bzip2 や zlib が見つからないというエラー

まさに,これではないでしょうか

インストールのコマンドに引数を与えてやります。

% phpenv install 7.4.6 \
    +bz2="$(brew --prefix bzip2)" \
    +zlib="$(brew --prefix zlib)"

こんな感じですかね。


PHP7.4のインストールにトライ(8度目):失敗

% phpenv install 7.4.6 +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)"

祈る(午前3時15分頃)。そして,エラー。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: error: Please reinstall the BZip2 distribution
-----------------------------------------

違うみたいですね。

心が折れかけていますが,探ります。

ひたすら,ググる。

参考:macOS Mojave で php BZip2 をインストールできない

上の記事では,
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / 
をすればよいとありましたが,私のMacでは,CommandLineTools 以下に,Packagesなるフォルダがありませんでした。

参考:macOS Catalinaでもphpenv使いたかったのでdefault_configure_optionsいじったりPHP_BUILD_CONFIGURE_OPTS指定したりした

php-buildには default_configure_options というファイルがあり、こちらに configure で利用するオプションを記載しています。

ROXX(旧SCOUTER)開発者ブログ

そうなのか!!

とりあえず,こちらの記事を参照に愚直に試行します。

先に「libiconv」「zlib」パッケージを追加

% brew install bzip2 libiconv zlib
 % brew install bzip2 libiconv zlib

(中略)

Warning: bzip2 1.0.8 is already installed and up-to-date
To reinstall 1.0.8, run `brew reinstall bzip2`

(中略)
libiconv is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libiconv first in your PATH run:
  echo 'export PATH="/usr/local/opt/libiconv/bin:$PATH"' >> ~/.zshrc

For compilers to find libiconv you may need to set:
  export LDFLAGS="-L/usr/local/opt/libiconv/lib"
  export CPPFLAGS="-I/usr/local/opt/libiconv/include"
zlib is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

For compilers to find zlib you may need to set:
  export LDFLAGS="-L/usr/local/opt/zlib/lib"
  export CPPFLAGS="-I/usr/local/opt/zlib/include"

For pkg-config to find zlib you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"

あわせて,.zshenv を修正します。

# libiconv
export PATH="/usr/local/opt/libiconv/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/libiconv/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/libiconv/include:$CPPFLAGS"

# zlib
export LDFLAGS="-L/usr/local/opt/zlib/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/zlib/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig:$PKG_CONFIG_PATH"

default_configure_options の編集

カレントディレクトリをプラグインの場所に移動。

% cd .phpenv/plugins/php-build/share/php-build

「default_configure_options」を,ROXX(旧SCOUTER)開発者ブログ をたよりに,編集(先にコピーを取っておきます)。

編集箇所は,記事にあるように,

--with-zlib-dir=/usr
--with-bz2

の削除。

--with-zlib-dir=/usr/local/opt/zlib
--with-bz2=/usr/local/opt/bzip2
--with-iconv=/usr/local/opt/libiconv

の追加。


PHP7.4のインストールにトライ(9度目):失敗

% phpenv install 7.4.6

祈る(午前3時45分頃)。そして,エラー。

そろそろ,明日に響く時間帯です。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
No package 'icu-uc' found
No package 'icu-io' found
No package 'icu-i18n' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables ICU_CFLAGS
and ICU_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

ICU_CFLAGS とか, ICU_LIBS とか,なんのことかわかりませんが,求められているパッケージをインストールします。


brew で icu4c を再インストール

% brew install icu-uc icu-io icu-i18n

Error: No available formula with the name "icu-uc" 

そうかー。

一応,brew で確認。

% brew search icu
==> Formulae
icu4c ✔                                  ploticus
==> Casks
cricut-design-space        panic-unison               visicut

入ってるっぽいですけどね。再インストールしましょう。

% brew reinstall icu4c
(中略)
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.zshrc
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.zshrc

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

For pkg-config to find icu4c you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

ここら辺が怪しそうですね。設定してない行です。

またも,.zshenv を修正して,祈ります。

# icu4c
export PATH="/usr/local/opt/icu4c/bin:$PATH"
export PATH="/usr/local/opt/icu4c/sbin:$PATH"
export LDFLAGS="-L/usr/local/opt/icu4c/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/icu4c/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"

こんな感じのものを追記。


PHP7.4のインストールにトライ(10度目):失敗

試行回数が2桁にのりました。

% phpenv install 7.4.6

当然のように,エラー(3時55分)。

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables ONIG_CFLAGS
and ONIG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

oniguruma」ってなんでしょうか。

エラー見る度に毎回思うんですけど,最初から,不足しているパッケージを全部出してくれませんかね。仕方ないか。


oniguruma のインストール

愚直に brew でインストール。

 % brew search oniguruma
==> Formulae
oniguruma

いますね。

% brew install oniguruma

とくに,「.zshenv に,あれをかけ」などは出ませんでした。


PHP7.4のインストールにトライ(11度目):失敗

% phpenv install 7.4.6

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: error: Cannot find libtidy
-----------------------------------------

はい。


LibTidy のインストール

早速,brew でインストールをかけようとしたが,search してもみつからない。

ググってみると,「tidy-html5」という名前で提供されているらしい。

かまわず,brew install を叩く。

% brew search tidy-html5
==> Formulae
tidy-html5
% brew install tidy-html5

PHP7.4のインストールにトライ(12度目):失敗

% phpenv install 7.4.6

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: error: Package requirements (libzip >= 0.11) were not met:

No package 'libzip' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBZIP_CFLAGS
and LIBZIP_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
-----------------------------------------

もう,ビルドエラーに何も感じなくなってきました。


brew で libzip のインストール

% brew install libzip

とくに,エラーなどはなし。


PHP7.4のインストールにトライ(13度目):失敗

% phpenv install 7.4.6

[Preparing]: /var/tmp/php-build/source/7.4.6

今まで,ここでコケていたのが,はじめてコンパイルまで行く。

[Compiling]: /var/tmp/php-build/source/7.4.6

期待していいのだろうか。

当然ながら,かなり時間がかかります。
clangrbenvがかなり回っていますが,ターミナル側には何も出力されないので,ちょっと不安です。
何か出力してくれた方が,安心しますね・・・。

と,期待させていたところで,エラー!

[xdebug]: Installing version 2.9.5
[Downloading]: http://xdebug.org/files/xdebug-2.9.5.tgz
[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-2.9.5

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
warning: unsupported relocation in debug_info section.
note: while processing /private/var/tmp/php-build/source/7.4.6/ext/opcache/.libs/zend_accelerator_util_funcs.o
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: /var/tmp/php-build/source/7.4.6/modules/opcache.a(shared_alloc_shm.o) has no symbols
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
-----------------------------------------

ちょっと,意味が分からないですね。ログファイルを見ます。

configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
configure: WARNING: unrecognized options: --with-png-dir, --with-icu-dir
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
warning: unsupported relocation in debug_info section.
note: while processing /private/var/tmp/php-build/source/7.4.6/ext/opcache/.libs/zend_accelerator_util_funcs.o
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: ext/opcache/.libs/opcache.a(shared_alloc_shm.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: /var/tmp/php-build/source/7.4.6/modules/opcache.a(shared_alloc_shm.o) has no symbols
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
ld: warning: directory not found for option '-L/usr/local/opt/icu4c/lib:-L/usr/local/opt/zlib/lib:-L/usr/local/opt/libiconv/lib:-L/usr/local/opt/bzip2/lib:-L/usr/local/opt/openssl@1.1/lib:-L/usr/local/opt/krb5/lib'
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.

brew で libxml2 をインストールする

いままで,エラーメッセージにはなかったけれど,もしかしてこれが原因なのだろうか。

% brew install libxml2
(中略)
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides BSD libedit.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

For pkg-config to find readline you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

For pkg-config to find sqlite you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig"
Python has been installed as
  /usr/local/opt/python@3.8/bin/python3

You can install Python packages with
  /usr/local/opt/python@3.8/bin/pip3 install <package>
They will install into the site-package directory
  /usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
python@3.8 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have python@3.8 first in your PATH run:
  echo 'export PATH="/usr/local/opt/python@3.8/bin:$PATH"' >> ~/.zshrc

For compilers to find python@3.8 you may need to set:
  export LDFLAGS="-L/usr/local/opt/python@3.8/lib"

For pkg-config to find python@3.8 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/python@3.8/lib/pkgconfig"
libxml2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxml2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

For compilers to find libxml2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxml2/lib"
  export CPPFLAGS="-I/usr/local/opt/libxml2/include"

For pkg-config to find libxml2 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides BSD libedit.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

For pkg-config to find readline you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"
sqlite is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have sqlite first in your PATH run:
  echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc

For compilers to find sqlite you may need to set:
  export LDFLAGS="-L/usr/local/opt/sqlite/lib"
  export CPPFLAGS="-I/usr/local/opt/sqlite/include"

For pkg-config to find sqlite you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig"
Python has been installed as
  /usr/local/opt/python@3.8/bin/python3

You can install Python packages with
  /usr/local/opt/python@3.8/bin/pip3 install <package>
They will install into the site-package directory
  /usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages

See: https://docs.brew.sh/Homebrew-and-Python
python@3.8 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have python@3.8 first in your PATH run:
  echo 'export PATH="/usr/local/opt/python@3.8/bin:$PATH"' >> ~/.zshrc

For compilers to find python@3.8 you may need to set:
  export LDFLAGS="-L/usr/local/opt/python@3.8/lib"

For pkg-config to find python@3.8 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/python@3.8/lib/pkgconfig"
libxml2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxml2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

For compilers to find libxml2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxml2/lib"
  export CPPFLAGS="-I/usr/local/opt/libxml2/include"

For pkg-config to find libxml2 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"

なんか,めちゃくちゃパッケージがインストールされましたね。
Python とか readline とか,sqliteとか。

当然, .zshenv を修正します。

# libxml2
export PATH="/usr/local/opt/libxml2/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/libxml2/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/libxml2/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH"

# readline
export LDFLAGS="-L/usr/local/opt/readline/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/readline/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig:$PKG_CONFIG_PATH"

# sqlite
export PATH="/usr/local/opt/sqlite/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/sqlite/lib:$LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/sqlite/include:$CPPFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/sqlite/lib/pkgconfig:$PKG_CONFIG_PATH"

# python3.8
export PATH="/usr/local/opt/python@3.8/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/python@3.8/lib:$LDFLAGS"
export PKG_CONFIG_PATH="/usr/local/opt/python@3.8/lib/pkgconfig:$PKG_CONFIG_PATH"

PHP7.4のインストールにトライ(14度目):失敗

% phpenv install 7.4.6

現在,4時48分。徹夜ですね。

phpenv: ~/.phpenv/versions/7.4.6 already exists
continue with installation? (y/N) 

こんなメッセージが。さっきコケてたけど成功してたのか?

いや,失敗しているはずなので,再インストール。

[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: Loaded zendopcache Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.4.6 into ~/.phpenv/versions/7.4.6
[Skipping]: Already downloaded and extracted https://secure.php.net/distributions/php-7.4.6.tar.bz2
[Preparing]: /var/tmp/php-build/source/7.4.6
[Compiling]: /var/tmp/php-build/source/7.4.6

ここまでは一瞬で来ます。

[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-2.9.5

ここでコケますね(5時2分)。

うーん。phpのバージョンを落として試してみましょうか。

% phpenv install 7.4.1

※ヤングマガジンの電子版(Kindle)を読みながら待ちます。
「ザ・ファブル」がないと,読むもの少ないです。
今週号は「マイホームヒーロー」「アルキメデスの大戦」ぐらい。
休載している「喧嘩稼業」「私の少年」「アンダーニンジャ」が定期的に連載されればいいな。
「サタノファニ」「1日外出録ハンチョウ」「パラレルパラダイス」「カイジ」がギャグ枠でしょうか。
ブラインドサッカーがテーマの「ブクロキックス」が面白くなりそう。期待。

結果は,やはりエラー。
[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-2.9.5
でコケます。

ちょっとここでググってみましょうか。


定義ファイルの修正

参考:phpenv+php-buildでのDebug用PHPのビルド

定義ファイルというのがあるらしいですね。

「xDebug」でコケてるのだから,とりあえず,これをインストールしないようにできるのではないか?

.phpenv/plugins/php-build/share/php-build/definitions

ここにある, 7.4.6 を確認すると下の通り。

configure_option "--enable-gd"
configure_option "--with-jpeg"
configure_option "--with-zip"

install_package "https://secure.php.net/distributions/php-7.4.6.tar.bz2"
install_xdebug "2.9.5"
enable_builtin_opcache

この行にある「install_xdebug "2.9.5"」を削除すれば,コケないのでは?(xdebugが原因でコケているなら・・・)

早速,7.4.6 を 7.4.6_debugとコピーし,「install_xdebug~~」の行を削除。

そして,インストール。


PHP7.4(XDebugなし)のインストールにトライ(14度目):成功

% phpenv install -i development  7.4.6_debug

「phpenv/php-build の小ネタ集」「CentOSにphpenvでPHP環境を構築する」を参考に,ちょっと引数変えてみました。
(うまくいっていない状態で,別のこといじるのは良くないのですが)

[Preparing]: /var/tmp/php-build/source/7.4.6_debug
[Compiling]: /var/tmp/php-build/source/7.4.6_debug
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.4.6_debug.20200518053236.log or rebuild with '--verbose' option
[Success]: Built 7.4.6_debug successfully.

おお,「Success」などという素敵な言葉が出ました。

「XDebug」でコケてたんですね。
必要なら,今後インストールしましょう。

さて,「CakePHP」です。


PATHの設定は .zshrc でする

% phpenv global 7.4.6_debug
% phpenv rehash

ここで php -v を実行すると,インストールした7.6.4_debugがよみこまれるはず,なのですが相変わらず,System7.3が読み込まれます。

どうやら,PATHがおかしい。調べてみると,丁寧に,
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
これらが優先して読み込まれている(PATHの先頭に定義されている)。

調べてみると,どうやら,path_helper というのが呼び出されるため,これらのPATHが上書きされてしまうようです。

参考:
PATH設定がどこにあるか分からないときに見るべきファイル
zshの設定ファイルの読み込み順序と使い方Tipsまとめ
Mac の zsh で PATH を zshenv に設定するとハマる

そこで,PATHは,.zshrc に書くことで,これを回避することができるようです。

※今まで,色々とコケていたのも,実はこの「PathHelper」が原因がだったのでは?

PATHを .zshrc に定義したことで,どうにか,PHPもphpenvで設定したものが読み込まれるようになりました。


ようやく CakePHP4 のインストール

さっそくコマンドを実行します。

% php composer.phar create-project --prefer-dist "cakephp/app:^4.0" cakephp

無事,最後まで走り,プロジェクトが生成されました!

早速,開発サーバーを走らせてみます。
デフォルトのURLは「http://localhost:8765」です。

 % bin/cake server

無事に表示されました!ここまで長かった!
(現在,6時40分)

最初の問題2)に挙げた「ext-intl」は,とくに設定しなくとも動いているようですね(遠い昔のことのようです)。

では,CakePHP4が動いた!というところで,一旦休みます。
少し横になって,また開発に移りましょう!


追記:PATH を通したら,簡単にコンパイルできた。

先に書いた,
「/usr/local/bin」
「/usr/bin」
「/bin」
「/usr/sbin」
「/sbin」
が,他のPATHより優先されていた問題ですが,これを解消したところ,xDebugを使わないように,定義ファイルをいじらずとも,あっさりとコンパイルできました。

% phpenv install -i development 7.4.6

※ development はつけています(これのせい,ではないでしょう。おそらく)。

[Preparing]: /var/tmp/php-build/source/7.4.6
[Compiling]: /var/tmp/php-build/source/7.4.6
[xdebug]: Installing version 2.9.5
[Skipping]: Already downloaded http://xdebug.org/files/xdebug-2.9.5.tgz
[xdebug]: Compiling xdebug in /var/tmp/php-build/source/xdebug-2.9.5
[xdebug]: Installing xdebug configuration in ~/.phpenv/versions/7.4.6/etc/conf.d/xdebug.ini
[xdebug]: Cleaning up.
[Info]: Enabling Opcache...
[Info]: Done
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /tmp/php-build.7.4.6.20200518064609.log or rebuild with '--verbose' option
[Success]: Built 7.4.6 successfully.

% php -v

PHP 7.4.6 (cli) (built: May 18 2020 06:57:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies
    with Xdebug v2.9.5, Copyright (c) 2002-2020, by Derick Rethans

落とし穴がどこにあるのか,分かりません。
分かったときに,愕然としたりします。

まさか,PATHが原因だったとは・・・。
(zsh の設定ファイルの理解不足も原因。)

MacでXAMPP(VM版)を用いています。

XAMPPは,
便利だったり,でも,便利じゃないところもあったり,
開発しやすかったり,でも,しにくかったりするところがあるのですが,
ローカル環境で素早く開発するためには,必要だと思っています。
(とくに,PHP関連のWEBプログラム)

Nuxt.jsみたいに,Node.jsを使って開発する場合はXAMPPは必要ないですね。
(ただ,まだNode.jsで,DBを使ったことがないので,DBと連携するときにどうするのかは分かりません。)

MacのXAMPP(VM版) での Sessionについて

さて,ローカル環境でSessionがうまく動いていないことに気付きました。

session.auto_start がデフォルトでOff

どうやら,MacのXAMPP(VM版)は,デフォルトでSessionがOffのようです。sessionの内容が引き継がれていませんでした。

そのため, /etc/php.ini で,

session.auto_start=1

と記す必要があります。

session_start を宣言する場合は,HTMLより先に宣言しなければならない

session.auto_start を設定する前は,
いちいち,session_start() を宣言していたのですが,そこで警告が出ていました。

調べたところ,HTMLを出力している最中に, session_start() を呼び出すと,ダメなようです。

<html>タグより先に <?php session_start(); ?> を書かなければなりません。知りませんでした。

参考:PHPのsession_startでWarningが出てしまう

ゴリゴリ開発する前の設定で,色々と面倒なところがありますね。
忘れて,また同じことを探すのは嫌なので,書き留めておきます。

5月に入っての最初の投稿ですが,情報共有です。

先ほど,このようなメールが来ました(一部削除)。

図1 Amazon.co.jp らしきところからのメール

「Amazon.co.jp」から,支払い方法がダメだというメール。

実は,以前の支払いで,クレジットカードが通らないことがあり,何も疑問をもたず,思わずリンク先をクリック。

下が,「アカウントを更新する」をクリックしたときの画面(一部削除)。

図2 リンク先のログイン画面

ログイン画面に飛び,メールアドレスを入力,したところ,

パスワードがMacのキーチェーンから自動的に入力されない。

ここで気付きました。「なにかおかしい」と。

URLをみてみると,「amsweb-jp.com」という謎のドメイン。

下がURLの拡大画像です(一部削除)。

図3 謎のURL

ドメイン後のパラメーターはよく分かりませんが,signin.phpの後は,おそらく私のIPアドレスです。

気味が悪いので,すぐにルーターの設定画面から,IPを書き換え(解放)ました。

落ち着いて,Amazonなるところからきたメールを,もう一度見直すと,普段のAmazonからのメールとは違うことがよく分かります。

図4 「Amazon.co.jp」を騙るところからのメール全文

メール本文の最後に,「敬具」なんて言葉があるところで,違和感をもつべきでした。
英語からの直訳でしょうか。


例えば,新しいデバイスからログインした際のメールが次のとおり。
(一部,削除しています。)

図5 「Amazon.co.jp」からのメール

ページ下に,「Amazon」から送信されたことを確認するためのURLが添付されています。

ちなみに,下部のリンクをクリックするとこんな画面です。
(こちらも,一部削除)

図6 「Amazon.co.jp」のURLチェック画面

さて,「詐欺メール」の方に戻りましょう。

メールの送信者が「Amazon.co.jp」となっていますが,実際には異なるドメインです。

図7 謎の送信元

また,宛先も,メール転送を設定している私のドメインです。

図8 私がAmazonでは使っていないメールアドレス

これは,Amazonに登録しているアカウントのアドレスではありません。

そもそも,私の所持するドメインに来るメールを,メインアカウントに転送する設定にしていなければ,こんな詐欺メールにひっかかりそうにはならなかったのですね。

ただ,キーチェーンアドレスに登録しないと思い出せないぐらい,「複雑なパスワード」にしていたのは良い方向に働きました。
簡単なパスワードだったら,違和感を持つ前に,入力していたかもしれません。

以前から,このようなメールは多くありましたが,どんどん巧妙になっているように思います。

コロナウイルスばかりに気を取られていると,ここら辺に引っかかってしまいそうですね。

以上,日誌でした。

MacBookPro が修理から帰ってきました

先日,「スペースーキー」が2度押しされて,全く使い物にならないと嘆いていたMacBookProが,「MacBook、MacBook Air、MacBook Pro キーボード修理プログラム」の修理を終えて帰ってきました。

コロナウイルスで,モノの動きも非日常な今ですが,事前のAppleサポートの連絡より,若干早く帰ってきました。

修理の進捗具合は次のとおりです。

4月21日(火)Appleの電話サポートで修理依頼
4月22日(水)ヤマト運輸が集荷に来る
4月23日(木)Appleの修理センターに到着(メールあり)
4月24日(金)修理完了&発送(メールあり)
4月25日(土)自宅に到着

Appleの電話サポートでは,5日〜1週間程度とのことでしたが,その電話込みで5日で修理完了という具合でした。

「トップケースの交換」ということで,キーボードの交換になったのですが,バッテリー一体型だったようで,バッテリーも一緒に交換してもらったようです。

システム情報より

というわけで,止まっていたコーディングを進めなければなりません。

iPad Pro と外部キーボード

MacBookPro がない間,自宅外で作業をするのをどうしようか,と考えたところ,「手持ちのiPadに外部(US)キーボード」をつないで使うのはどうか,と思い試してみました(iPadのUSB-Cポートに変換アダプタを介して,有線キーボードをつないでみました)。

結果は,「使いづらかった!」です。

まず,iPad Pro用の「Word」が非常に使いづらい。

1)OneDrive上のファイルを編集するのがデフォルトなのか,iCloud上に保存したWordファイルを編集するところから面倒(時間がかかる)。

2)Windows, macOS用のWordと違うところが多く,「あれ,○○したいときに,どこ選択したらいいんだ?」みたいなことが多発(慣れの問題かもしれません)。

3)思ったように,文字入力ができない(これはiPadの文字入力ソフトのせいかな)。ライブ変換機能はとくに使いづらかったので,即OFF。

で,iPad用のアプリ「Pages」をダウンロードすると使いやすいのかな,と,そちらも試してみたのですが,これも使いづらい(慣れの問題もあるでしょう)。

結果として,一番使いやすかったのは,「Google ドキュメント」でした。

表の細かいレイアウトなど,凝ったことはできませんが,無難に文書を作るだけなら,「Google ドキュメント」で十分だな,と。
何が良いかというと,とにかく,動作が軽い(早い)!
文書を書くだけなら,「Word」や「Pages」より使いやすく思いました。

これで作ったファイルを,自宅の「Word」で整形すれば,全然使い物になります(「Google ドキュメント」で作ったファイルは,綺麗にWordファイルにエクスポートできました。素晴らしい!)。

あとは,iPad 用に「ATOK パスポート」が対応してくれれば,ユーザー辞書もWin/Macと同期されて便利だろうなーと思っているところです(同期だけなら「ATOK for iPad」でもできるようですが,App Storeの評価が低い・・・。ATOKパスポートに年会費払っているのに,これに1,700円払うのもなぁ・・・)。


ただ,MacBookProが思ったよりも早く帰ってきたので,iPad Proに有線キーボードをつないで入力する機会は,そうないかもしれません。

発売が1ヶ月前倒しになった(4月21日発売)のiPad Pro用のMagic Keyboardも,値段が半額ぐらいなら「買おうかなー」と思うのですが,4万円はなかなか高いです・・・。配送日も現時点で6月(約1ヶ月半先)ですし。もういいかな。

MacBookProのキーボードが故障

どうも最近、誤変換が多いと疑問に思っていたのですが、昨日あたりに、「スペースキーが二度押しされる」ということに気付きました。

あと、右シフトが、押さえ込まれたまま帰ってこなかったり。

これは、Appleの出している修理プログラムの対象になるのではと、電話したところ、見事に当たり。

明日、ヤマト運輸が集荷に来て、5日から1週間のちに帰ってくるそうです。

バックアップをとったり、修理用のアカウントを作ったり、暗号化を切ったりと、面倒。

AppleCareプラスに入っているんだから、即日修理とか、代替品とかしてくれると嬉しいのだけれど、そういうのはないのよね。

高いPCの割に、こういった初期不良・故障に最近よく出会います(二度目)。

ElementUIを使う

Vue.js で、「見栄えの良いUIにしたいなー」と思って調べていると、「ElementUI」が良いと書かれていました(山田 2019, p.258)。

早速、ElementUIをnpmでインストールしました。

npm i element-ui -S

そして、main.jsを編集。

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

ちなみに、デフォルトは中国語らしいので、日本語に直す必要があります。
(ダイアログなどがChineseになってしまう。)

The default language of Element is Chinese. If you wish to use another language, you'll need to do some i18n configuration. In your entry file, if you are importing Element entirely:

https://element.eleme.io/#/en-US/component/i18n
import locale from 'element-ui/lib/locale/lang/ja'
Vue.use(ElementUI, { locale })

そして、カスタムテーマをSCSSで作れるようだったので、ちらっとファイルを作って、ビルドしたところ、webpackで生成されるindex.js50MBとかになりました。ローカルでも鬼のように遅いです。

そこで、ElementUIのホームページを見ながらカスタムCSSファイルを作ろうとしたところ、ハマりました。

element-themeのインストール(に失敗)

npmでさっとインストールします(公式ホームページでは、グローバルにインストールせよと書かれていますが、GitHubではプロジェクト内にインストールしていますね)。

npm i element-theme -D
npm i element-theme-chalk -D

そして、et -i と打つと、SCSSファイルが生成されるとあるのですが、ここでエラー。

const { Math, Object } = primordials;
                         ^

ReferenceError: primordials is not defined

なんのことやら。

ググってみたところ、gulpとのバージョンが合わないとか。
Gulp実行でエラーが出力

とりあえず、依存関係を確認。npm audit を打ちます。

すると、いくつかのファイルが依存関係でエラーを吐いています。みてみたら、すべて「element-theme」に関わるものでした。

そういえば、element-theme の導入時に大量のエラーを吐いていた気がします。

npm i element-theme -D
npm WARN deprecated gulp-util@3.0.8: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated graceful-fs@1.2.3: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated gulp-util@2.2.20: gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm WARN deprecated graceful-fs@2.0.3: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
+ element-theme@2.0.1

まず、頭に出てきたgulp-utilですが、こいつが、ネックなのかなと。gulp-utilgulp4がリリースされたため、非推奨らしいです。

脆弱性の警告を受けたnpmパッケージの依存関係を力技で直す

こちらのサイトを手がかりに、一つ一つ潰していっても良いのですが、どうしましょうか。

パッケージを1つ1つ確認するも、うまくいかず・・・

とりあえず、Gulpをインストール

npm i gulp -D
+ gulp@4.0.2
et -i            
fs.js:27
const { Math, Object } = primordials;
                         ^

ダメですね。1つ1つ消していきましょう。

まずは、clean-css

とりあえず、npmで最新版をインストール。
Path          │ element-theme > gulp-cssmin > clean-css
とあるので、プロジェクト下node_modulesのgulp-cssminからclean-cssフォルダを削除。

npm dedupeして、npm audit したら、問題が1つ減っているのが分かります。

と、うまくいっているように見えたのですがnpm i で別のパッケージをインストールしたら、再度アラートが出るように・・・。賽の河原状態・・・。

結局、今回は「et」コマンドで初期ファイルをいじるのは止めました。
今のところ、問題はないですが・・・対策を考えます。

とらいえず、WEB上でカスタムテーマを作成するのが良いでしょうか。

参考文献

山田祥寛 2019 『これからはじめるVue.js実践入門』SBクリエイティブ.(Amazon