先週買った本8冊、買いたかった本6冊 2022-12-19 ~ 2022-12-25
今週はちょっと多めになってしまった。休みに入るからといって調子に乗っているんじゃないだろうか。
先週買った本
- ロバート・C・マーティン『Clean Agile 基本に立ち戻れ』
- 第147回 PHP 勉強会@東京で興味を持って
- 最近現場で Miroを使ったカンバンを立ち上げて、多少の効果は出ているもののどこかツール先行・手法先行になってしまっているのが気になってもいた。ここでアジャイルの基本に立ち戻っておきたい
- 柏岡秀男『小さな会社のスクラム実践講座』
- 先週は見送っていたけれど
- 上記と同じく第147回 PHP 勉強会@東京のあと田中ひさてるさんが勧めているのを見て、結局気になってしまった
- 手法先行の直近の取り組みでうまくいっていないところを改めるきっかけにできないか
- 楠木建『ストーリーとしての競争戦略』
- この本を愛読書として挙げる人と来月飲むことになったので、話題作りのため
- 刊行間もない2011年2月15日に Amazon で買った履歴がある。ちゃんと最後まで読んだはずなのに、いまいち内容を思い出せない。当時買ったものはとっくに古本に出してしまっていたので今回買いなおし
- 地球の歩き方 水曜どうでしょう 原付の旅『「日本列島制覇」編』『「ベトナム縦断」編』
- バカなので
- 沖幸子『ドイツ流 掃除の賢人―世界一きれい好きな国に学ぶ』
- 八木あき子『ドイツ婦人の家庭学』
- ドイツ語学習のネタになるかと思って(その2)。ブックオフで100円
- 「婦人」という言い回しが渋くていい…と思ったら単行本では1983年刊行とのこと。なので著者は「西ドイツ在住」である。熱い
- WEB+DB PRESS Vol.132
- 仕事の都合で毎号読んでいる(Web 屋なので)
- 第1特集はきしださんの「脱オブジェクト指向」。読みごたえあり。今月買った『ちょうぜつソフトウェア設計入門』とも関連しそう
- 家主と地主 2023年1月号
- 仕事の都合で毎号読んでいる(家主でも地主でもないけれど)
- 第1特集は繁忙期の話題。不動産業界はそんな季節
先週買いたかった本
- 玉手慎太郎『公衆衛生の倫理学 ――国家は健康にどこまで介入すべきか』
- 倫理学に興味があって(といいつつ直近では何も読めてない…)
- 南川高志『マルクス・アウレリウス 『自省録』のローマ帝国』
- 『自省録』の神谷美恵子訳のほうを3年くらい前に読んだ
- 昨年はエピクテトス『人生談義』を読んでエピクテトス先生に心酔したのだった。その意味でマルクス・アウレリウスは同門みたいなもの(謎)なのでまた読み返したい
- 塚本靑史『深掘り三国志』
- アンドリー・スチュワート『情報セキュリティの敗北史: 脆弱性はどこから来たのか』
- デイビッド・ファーリー『継続的デリバリーのソフトウェア工学 もっと早く、もっと良いソフトウェアを作るための秘訣』
- 仕事柄
- 栗本泰司ほか『多すぎる!国産アプリのバグ退治』
- 仕事柄
- タイトルでわざわざ「国産」と断っているのは、最終章が「日本のアプリにバグが多い理由」であるのを見ると何かしら意図があるっぽい
猫のひたいほどワイド 2022年度第29週 自分用アーカイブ
月曜日 2022-11-28
公式アーカイブ 月22/11/28放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川
潜入リポート1 岡田翔大郎「今年も猫ひ田!集大成!!新米ネコヒカリを試食!!!」大磯町
今シーズンの「猫ひ田」シリーズ完結回。
新米ネコヒカリ大試食会
コーナー MC はグリーン岡田くん。白ご飯と塩むすびを試食。
お米マイスターの評:
匂いはややツンとしてかぐわしい。見た目は粒が大きく膨らみがいい。口に含むと全体的にもっちりしていて嚙み心地がいい。
潜入リポート2 朝田淳弥「バスケがしたいです!本格コートがグランドオープン」川崎市川崎区
イエロー早瀬くん、グリーン岡田くんとのトリオロケ。
猫ひたスタジオでやってみよう「決めろ!ヘディングハットトリック」
カゴを目掛けてヘディングでシュートを決める。1人2球、全部で6球のうち3点以上入れば猫ひたポイント
視聴者:誰がシュートを決められるかを予想。予想が当たればサポーターバッジ
- 岡田くん:0
- 朝田くん:0 視聴者予想×
- 細貝さん:0
猫ひたニュース
K's English lesson #10 "TOUCH"
Tatsuya: Tatsuya Uesugi, loves Minami Asakura more than anyone else in the world.
Minami : What do you mean?
ここでは達也が南に電話で告白したアニメ版のシーンを採用。原作コミックでは河原で告白している。
発音面では "world" の舌の動きがポイント。Minami の "What do you mean?" に続いて、各自これまで学んだことを生かしてアドリブで返す新趣向。
猫ひたインフォ
- 横浜シティポップ祭~シティポップ歌合戦 girls edition~
- 出演の小方リサさんから VTR でメッセージ。当日は岡村アナも出演
プレゼントコーナー
今週のおやつは JA 島原雲仙のブロッコリー。
今週のプレゼントはパックスナチュロン ハンドクリーム、またはパックスオリー ボディーソープとパックスオリー ボディーコンディショナーのセット。
電話つながった。
火曜日 2022-11-29
- MC 鎌苅健太
- 猫の手も借り隊
- レッド 大矢剛康 6→7
- ブルー 植村颯太 5
- アシスタント 岡村帆奈美
公式アーカイブ 火22/11/29放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川
去る26日に20歳を迎えたブルー植村くんが記念にオープニングトーク。30歳のレッド大矢くんをいじったうえで、俳優として売れることを誓う。
潜入リポート1 植村颯太「触れて学べて楽しめる!大人気の科学館!」相模原市中央区
植村くんの水族館レポート、シリーズ化?
鎌苅健太の奥深き TKG 「オムライス風 TKG」
卵好きの鎌苅が卵かけご飯 = TKG の新たな可能性を探るコーナー
新企画。いわく、年頭の目標に「卵」を掲げていたことに絡めているとのこと。試食後、鎌苅さんが「うまかり」もしくは「まずかり」の裁定を下し、「うまかり」の場合はレシピが公式アーカイブに掲載される。
ネコヒカリを使った「オムライス風 TKG」をスタジオ調理・試食。黒こしょうをたっぷりかけて、よく混ぜるのがおすすめらしい。
素直に「おいしい」と言えずに戸惑う出演者。岡村アナいわく「初めて食べる感じだから脳が一瞬追いつかない」「半熟すぎるオムライス」、植村くんいわく「この上に焼いた卵をのせたらおいしい」、率直にまずそうな表情を見せる大矢くん。「好きな人は好き」という鎌苅さんの裁定は「うまかり」。レシピは公式アーカイブに掲載。
潜入リポート2 大矢剛康「大集合!辻堂で出会える最新技術」藤沢市
公益財団法人湘南産業振興財団の「ロボテラス」を訪問、数々のロボット製品を紹介
- LOVOT[らぼっと]
- セラピーロボット「PARO-パロ-」 | NDソフトウェア(株)介護ソフト(システム)、健診システムなら「ほのぼの」
- ユニボ | 世界初の個性を学習するパートナーロボット『 unibo 』|ユニロボット株式会社
- Gateboxとは? - Gatebox
- 【公式】マッスルスーツ エブリィ-MUSCLE SUIT EVERY | 製品情報サイト
- アバターがあればDXは今すぐできる|For Biz | avatarin アバターイン
猫ひたスタジオでやってみよう「決めろ!ヘディングハットトリック」
- 植村くん:0
- 大矢くん:0 視聴者予想×
- 鎌苅さん:0
猫ひたニュース
佐々木依里が行く やさしさヨコハマ発 PAX NATURON
- パックスナチュロン ハンドクリーム - パックスナチュロン(PAX NATURON)公式ブランドサイト | 太陽油脂
- パックスオリー - ボディーソープ - 【公式】パックスナチュロンオンラインショップ
- パックスオリー - ボディーコンディショナー - 【公式】パックスナチュロンオンラインショップ
WE リーグ 2年目の挑戦!ノジマステラ神奈川相模原
ノジマステラ神奈川相模原から共同キャプテンの杉田亜未・松原有沙両選手がゲスト出演。
プレゼントコーナー
電話つながった。
水曜日 2022-11-30
- MC 三上真史
- 猫の手も借り隊
- レッド 奥谷知弘 6
- グリーン 拓郎 8→9
- アシスタント 岡村帆奈美
公式アーカイブ 水22/11/30放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川
潜入リポート1 奥谷知弘「歓迎!猫ひた登山部・新入部員編!!」山北町
猫ひた登山部、四年越しに新入部員を迎える。グリーン拓郎くんとのコンビロケ。
放映当日、テレビ富士山はやっぱり悪天候で真っ白。
猫ひたガーデニング部「コキアでホウキを作ろう」
森一世ディレクターが育ててくれたコキアをほうきに仕立てる。
- 用意するもの:麻紐、くし、はさみ
- 手順
- 鉢からコキアを引き抜く
- コキアをくしで梳かしてごみを落とす
- ガーデンジャー「ガーデニングはさみ」で枝を切り分ける
- 枝元を麻紐で縛って柄にする。お好みで布などを巻きつけてもよい
- 必要に応じて穂先を切りそろえる
潜入リポート2 拓郎「おいしい!楽しい!ふるさとまつり大満喫!」座間市
- 第37回座間市民ふるさとまつり | 座間市ホームページ
- ホーム - 座間市立 座間中学校
- 相武台駅前弁当ポカラ(@bentopokara) • Instagram写真と動画
- ポエム(@poem_zama) • Instagram写真と動画
- 山路 伴幸 | GLASS BEADS Online Shop
- 中島青果店(座間市ひばりが丘)|エキテン
- (公社)神奈川県宅地建物取引業協会 相模南支部 | Sagamihara-shi Kanagawa | Facebook
- 座間市特産品「ざまみず」アルミボトル缶大好評販売中 | 座間市ホームページ
- 居合・組太刀・試し斬り・無外流 | 【無外流居合 いさま会】
猫ひたスタジオでやってみよう「決めろ!ヘディングハットトリック」
視聴者は「誰も入れられない」という選択もできるようルール調整。
- 拓郎くん:1
- 奥谷くん:0 視聴者予想×
- 三上さん:1
翌週のスペシャルウィークに向けて、「わたしの大切なひと鉢 スペシャル企画」。12月7日(水)の放送で写真を紹介した視聴者にガーデニング部バッジ+スペシャルプレゼント進呈。テーマは「秋冬の花」。
猫ひたニュース
アゾンインターナショナルはかつて現火曜レッド大矢くんが取材している。
ニュースのあとは「新米ネコヒカリ大試食会」。コーナー MC はグリーン拓郎くん。
かながわ MIRAI 「靴下で雪だるまを作っちゃおう!」
まんまるマルタくん登場。雪だるまの作り方:
- 靴下の3分の1くらいまで綿・ティッシュなどを詰めて輪ゴムでとめる
- 靴下の3分の2くらいまで綿・ティッシュなどを詰めて輪ゴムでとめる
- 余った部分を外側に折り返してニット帽をつくる
- 紙や布で顔・マフラーなどをつけたらできあがり
雪だるまの起源は定かでない。ただ江戸時代の浮世絵にはすでに雪だるまの描写がある。
ゲスト:Olu.
Olu. (オルドット)よりはるちゃん・いもちゃんをゲストに迎える。
猫ひたインフォ
プレゼントコーナー
電話つながらず。
木曜日 2022-12-01
- MC 井上正大
- 猫の手も借り隊
- ブルー 白又敦 7
- イエロー 木村魁希 9→10
- アシスタント 岡村帆奈美
公式アーカイブ 木22/12/1 放送|猫ひたアーカイブ |猫のひたいほどワイド|tvk デジタル3ch テレビ神奈川
照井アナの代打として岡村アナが登板。
潜入リポート1 白又敦「最強のご飯のお供!? 自慢の調味料を調査 !」相模原市緑区
- 串焼しまちゃん(@shima_kushi) • Instagram写真と動画
- 「調味料選手権2022」、今年の ❝No.1調味料❞ は「ほりにしブラック」に決定!!|一般社団法人日本野菜ソムリエ協会のプレスリリース
スタジオでは「ネコヒカリ」に「胡麻之極味」をあわせて試食。
井上正大のお茶の時間「猫ひた版お茶カレー Vol.2 魅惑のアレンジ」
レシピは公式アーカイブに掲載。
潜入リポート2 木村魁希「舞台芸術をプロデュース!」川崎市麻生区
- 昭和音楽大学音楽芸術運営学科 アートマネジメントコース
- かのんぷ♪と奏でよう@しんゆり~みんなでつながるLOVEのこころ~ 2022/12/08(木) | チケット GETTIIS
- かのんぷ♪ウェブサイト | 千葉県九十九里を拠点に活動するかのんぷ♪の公式ウェブサイトです!
猫ひたスタジオでやってみよう「決めろ!ヘディングハットトリック」
- 木村くん:0 視聴者予想×
- 白又くん:1
- 井上さん:0
井上さん、かごから球がバウンドして失敗。今週も引き続き全曜日0ポイントのまま。
猫ひたニュース
猫ネットしらまた
「お茶の時間」の久保田美祈さんをゲストに迎える。猫ひた以外のお仕事の紹介、過去の緑の衣装のダイジェストなど。
猫ひたインフォ
- 寄附・ふるさと納税/図書館城下町 大和市
- しあわせをシェアしよう。 | 三菱電機
- YOKOHAMA MUSIC HARBOR 2022 CHRISTMAS(ヨコハマミュージックハーバー2022クリスマス)|【公式】横浜市観光情報サイト - Yokohama Official Visitors' Guide
- 瑛人とめぐる!?横浜人気観光スポットデジタルスタンプラリー|【公式】横浜市観光情報サイト - Yokohama Official Visitors' Guide
- 【公式】宝くじチャンスセンター
- 関内寄席 一之輔・わさび・小痴楽 三人会 | 横浜関内ホール 公式サイト
プレゼントコーナー
電話つながった。
[映画]『ペルシャン・レッスン 戦場の教室』で語学への気合を入れなおす
映画『ペルシャン・レッスン 戦場の教室』を鑑賞しました。一度みてあまりに心打たれたので、日を置いてもう一度みてきました。
劇場にて『ペルシャン・レッスン』を鑑賞したところいたく感動して、その勢いでスタバに籠りドイツ語講義の予習に2時間かそこら打ち込んだうえ書店でドイツ語の勉強に関係しそうな本を3冊買い込んだ。おおよそ語学の勉強をする人全員にみていただきたい。 https://t.co/zvRpi4CG6C
— カガタ・ユースケ kann brauchen, was er gelernt hat (@_heartyfluid) 2022年11月19日
今日はドイツ映画まつりというかナチス映画まつりを敢行。『バビ・ヤール』は話の筋(っていうのか?)が追いづらくて疲れた。背景知識が足りなかったのかもしれない。同じロズニツァ監督作の『ドンバス』はもっと乗れたんだけどな。『ペルシャン・レッスン』は2度目。ディテールを噛み締めた。 pic.twitter.com/OV5R7np1Tm
— カガタ・ユースケ kann brauchen, was er gelernt hat (@_heartyfluid) 2022年12月24日
全体として、ドイツ語学習者としての自分の姿勢を強くただされた感があり、語学をやる人みんなにみてほしい映画だと思いました。
概要(ないしゲームのルール)
公式サイトから引用:
ナチス親衛隊に捕まったユダヤ人青年のジルは、処刑される寸前に、自分はペルシャ人だと嘘をついたことで一命を取り留める。彼は、終戦後にテヘランで料理店を開く夢をもつ収容所のコッホ大尉からペルシャ語を教えるよう命じられ、咄嗟に自ら創造したデタラメの単語を披露して信用を取りつける。こうして偽の<ペルシャ語レッスン>が始まるのだが、ジルは自身がユダヤ人であることを隠し通し、何とか生き延びることはできるのだろうか──。
主人公ジルに課されたミッションはおおむね次のとおり。
- 自分のまったく知らないペルシャ語をコッホ大尉に教えなければならない
- コッホ大尉に教える嘘ペルシャ語の単語を自分ででっち上げなければならない
- たとえ嘘ペルシャ語教師のミッションを抜かりなくこなしても、強制収容所ではいつ理不尽に殺されるかわからない
簡単にまとめれば、「暗記できなかったら即殺されるし、暗記できても偶発的に殺されるかもしれない」ということです。
ジルに見習うべき点
1. 学んだ(というかでっち上げた)言語をとにかく堂々と運用する
ほかのユダヤ人といっしょに銃殺されそうになったところを「自分はペルシャ人だ」と言い張って切り抜ける冒頭から始まって、ジルは事あるごとにユダヤ人ではないかと疑われ殴る蹴るの暴行を受けたり銃口を突きつけられたりするわけですが、そのたび堂々と嘘をつき通します。あるときは相手の目を見て今思いついた嘘を言い、あるときは粛々と無視してみせる。
語学の上達には「失敗を恐れず堂々と運用してみる」のが大事です。もちろん失敗するというのは恥ずかしいものですが、失敗すれば即死のジルに比べればまったく取るに足りないことです。自分も学んだ言語をジルのように堂々と運用して、場数を増やしていきたいと思いました。
2. 勉強の質・量ともに貪欲
質についていえば、ペルシャ語の教材はもちろん筆記用具すら随意に使えない中、ジルは目に入ったものに片っ端から嘘ペルシャ語の名前をつけたり、被収容者名簿の氏名をもじって嘘単語をでっち上げることで記憶を強化したりと、勉強の手段を次々発明します。
ドイツ語を学んでいるとつい「英語は教材が豊富でいいな」「ロゴフィリアみたいな本がドイツ語にもあればな」などと甘えたことを考えがちですが、ジルのおかれた境遇に比べれば明らかに恵まれているわけで、もっとハングリーにならなければ語学の上達はおぼつかないと思い知らされます。
また量に関しては、コッホ大尉いわく半年で570語、その後期間は不明なものの終幕時点では3,000語弱を習得したようです。コッホ大尉はともかく、筆記用具も満足に使えないジルにとっては大変な量といってよいでしょう。
序盤にコッホ大尉は1日4語、2年で2,000語という学習目標を立てます。ここで思い出したのが千野栄一『外国語上達法』でした。
ある外国語を習得したいという欲望が生まれてきたとき、まずその欲望がどうしてもそうしたいという衝動に変わるまで待つのが第一の作戦である。そして、その衝動により、まず何はともあれ、やみくもに千の単語を覚えることが必要である。
[...] そのエネルギーとしては、どうしてもその言語をモノにしたいという衝動力を使い、そのエネルギーの燃え尽きる前に千語を突破することである。従って、この千語習得の時間は短くなければならず、そこで十分に時間のとれるときに新しい言語を学び始めるよう計画をセットする必要がある。
「千語習得の時間」として千野がどの程度の長さを想定していたのか明示されてはいないものの、明らかにコッホ大尉の学習姿勢はヌルいな、と感じたのでした。そのあとすぐ「やっぱり40語教えろ」となって、これは案外ばかにできないかもしれん、と思い直すのですが。
条件の整ったコッホ大尉がそれなりの情熱で学習するということは、ジルもまた少ない道具立てでそれに応える必要があるわけです。おおよそ一日中単語の暗記に精力を注いでいたジルの嘘ペルシャ語学習は、質だけでなく量も圧倒的だったというべきでしょう。特に熱いのは、暴行を受けて半死半生の中無意識に嘘ペルシャ語単語を暗唱するシーン。日ごろどれだけ暗唱を繰り返していたかがしのばれます。
そういえば、単語を覚えるシーンが劇中たくさんあるのに対して、文法の話題はまったくと言っていいほど出てこないんですよね。むしろ、文法はまだ学んでいないとためらうコッホ大尉に、いいから噓ペルシャ語で話してみろとジルがけしかけるシーンすらあります。語学力を決定づけるのは結局語彙の量であり、語彙を増やすことこそが正義だというメッセージなのかもしれない…?
総じて、勉強の質にせよ量にせよ、自分にそれらが足りていないのは結局「ドイツ語ができるようにならないと死ぬ」とか思っていないからなんだろうな、と反省しました。まさに必死さが足りない。
3. 努力が報われない理不尽にもくじけない
「ドイツ語ができるようにならないと死ぬ」とか思っていない、と前項で書きましたが、これは裏を返せば「ドイツ語ができるようになったところで特に何もない」ということでもあります。簡単なところでいえば、たとえばドイツ語ができるようになったところで仕事には役立ちそうにない、とかそういうことです。興が乗っている間は知的好奇心だけでも勉強ははかどるのですが、残業したとか眠たいとか勉強の妨げになるものが現れると、とたんに「なんでこんなこと頑張ってるんだっけ」と気の迷いが生じます。
その点、ジルが嘘ペルシャ語に注ぐ情熱も、正当化するのがなかなか難しいものです。まずどこへ行っても通じない嘘ペルシャ語を身につけないといけないという状況自体、そもそも不条理です。また、それによってコッホ大尉には守ってもらえても、強制収容所では学習の努力とは無関係に理由なく殺されてしまうかもしれない。実際ジルにも、それまでの努力を投げ出して死に向かおうとする場面が何度かありました。情熱を持ち続けられないのも無理からぬことです。
ジルが長期にわたって心折れずに語学を続けられた理由は何だったのか。劇中では偶然の出会いで命拾いするわけですが、はたして単発かつ偶発的なイベントだけで継続できるものなのか。あるいは結局のところ運でしかないのか。この映画に描かれていることだけから答えを導き出すのは難しいことですが、今後考えたいところです。
ジルとコッホ大尉にみる語学の価値
劇中ジルとコッホ大尉の嘘ペルシャ語語彙が増えていくうち、二人はしだいに嘘ペルシャ語で会話ができるようになります。事実上、二人にしかわからない暗号です。嘘ペルシャ語でコッホ大尉は詩を編み、そして余人には話さないつらい過去をジルに打ち明けます。その後ドイツ語での会話では、ジルがコッホ大尉を親称 du で呼ぶようになります。
ジルはドイツ語も流暢なものの母語はフランス語、そしてコッホ大尉の母語はドイツ語です。二人がドイツ語で会話するのは、コッホ大尉はじめナチスにジルが隷従を強いられているためです。一方嘘ペルシャ語は、ジルにとっては自称母語であり、コッホ大尉にとっては母語話者レザ・ジューン(ジルがペルシャ人を装うために名乗った偽名)から学ぶ外国語です。つまりドイツ語の場合とは正反対に、コッホ大尉がレザ・ジューンの生活様式に合わせる形になるわけです。それも強制でなく自発的に。その結果ジルがコッホ大尉を du で呼ぶようになったのは、ジルがコッホ大尉に心を開いたととらえることもできそうです(結局最大の嘘は残しているというのが難しいところなんですが)。
「自分の母語で相手に話させる」ということは「自分の世界に相手を取り込む」ということであり、逆に「相手の母語で話す」ということは「相手の世界を尊重しその世界に入っていく」ことなんだろうな、と思いました。そして心を開いて「相手の母語で話す」ことには、相手の心をも開かせる効果があるのかもしれません。もしそうなら、語学って希望があるなと思います。そういえば先日、「ウクライナの避難民から日本語であいさつを受けてすごく親近感がわいた。自分もウクライナ語であいさつしてあげようと思った」というような話を聞きました。ちょっと似ていますね。
ただまあ、コッホ大尉もジルと嘘ペルシャ語を話している間は何かしら幸福そうでしたが、最終的にはコッホ大尉の努力は報われなかったんですよね…。やはり「努力が報われない」結末も、覚悟しておかないといけないのかもしれない。
追伸
- 原作は Wolfgang Kohlhaase "Erfindung einer Sprache" 『ある言語の発明(でっち上げ)』。Kindle ストアにある短編集のサンプルで、全編読めてしまう模様。太っ腹
- 『バビ・ヤール』はパンフレットを読んで復習します…
php-build で PHP8.1 を WSL2 上の Ubuntu 22.4 LTS にインストールする
ふだん PHP は Docker 経由もしくは Windows + Scoop で利用しています。
今回、表題のとおり WSL2 上の Ubuntu で PHP8.1 が使いたくなりました。
$ php -v Command 'php' not found, but can be installed with: sudo apt install php8.1-cli # version 8.1.2-1ubuntu2.9, or sudo apt install php-cli # version 2:8.1+92ubuntu1
APT のパッケージとしても提供されているようだけれど、どうせなら Windows + Scoop のように任意のバージョンが使えるようにしたいところです。
そこで、 php-build を導入して任意のバージョンの PHP がビルドできるようにしたうえで、 direnv でバージョンが切り替えられるようにすることにしました。
php-build
のインストール
まずは php-build
のコード一式を取得してインストールします。公式ドキュメントいうところの standalone での導入にあたります。
$ git clone https://github.com/php-build/php-build.git $ cd php-build/ $ PREFIX=$HOME/local ./install.sh $ php-build/bin/php-build --version php-build v0.11.0dev
php-build
で PHP をビルドする
本校執筆時点での PHP8.1 系最新バージョンのビルドを試みます。
$ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- tar (child): bzip2: Cannot exec: No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now ----------------------------------------- [...]
bzip2
が入っていませんでした。インストールして再試行します。
$ sudo apt install bzip2 $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: in `/tmp/php-build/source/8.1.13': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details ----------------------------------------- [...]
C コンパイラが入っていませんでした。インストールして再試行。
$ sudo apt install build-essential $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | 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 ----------------------------------------- [...]
phg-config
が古すぎた。
$ sudo apt install pkg-config $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met: No package 'libxml-2.0' found [...]
libxml2
が足りない。
$ sudo apt install libxml2-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (openssl >= 1.0.2) were not met: No package 'openssl' found [...]
openssl
が足りない。
$ sudo apt install libssl-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (sqlite3 >= 3.7.7) were not met: No package 'sqlite3' found [...]
sqlite3
が足りない。
$ sudo apt install libsqlite3-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (zlib >= 1.2.0.4) were not met: No package 'zlib' found [...]
zlib
が足りない。
$ sudo apt install zlib1g-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Please reinstall the BZip2 distribution ----------------------------------------- [...]
BZip2... さっき入れましたが。コマンドでなく development kit のほうが必要になったということかしら。
$ sudo apt install libbz2-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (libcurl >= 7.29.0) were not met: No package 'libcurl' found [...]
libcurl
が足りない。
$ sudo apt install libcurl4-openssl-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (libpng) were not met: No package 'libpng' found [...]
libpng
が足りない。
$ sudo apt install libpng-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (libjpeg) were not met: No package 'libjpeg' found [...]
libjpeg
が足りない。
$ sudo apt install libjpeg-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (oniguruma) were not met: No package 'oniguruma' found [...]
oniguruma
が足りない。
$ sudo apt install libonig-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Please reinstall readline - I cannot find readline.h ----------------------------------------- [...]
readline
が足りない。
$ sudo apt install libreadline-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Cannot find libtidy ----------------------------------------- [...]
libtidy
が足りない。
$ sudo apt install libtidy-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- configure: error: Package requirements (libxslt >= 1.1.0) were not met: No package 'libxslt' found [...]
libxslt
が足りない。
$ sudo apt install libxslt1-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- No package 'libzip' found [...]
libzip
が足りない。
$ sudo apt install libzip-dev $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [...] ----------------- | BUILD ERROR | ----------------- Here are the last 10 lines from the log: ----------------------------------------- In file included from /tmp/php-build/source/8.1.13/ext/opcache/jit/zend_jit.c:705: /tmp/php-build/source/8.1.13/ext/opcache/jit/zend_jit.c: In function ‘zend_jit_startup’: /tmp/php-build/source/8.1.13/ext/opcache/jit/dynasm/dasm_x86.h:127:19: warning: array subscript -10 is outside array bounds of ‘void *[38]’ [-Warray-bounds] 127 | D->globals = gl - 10; /* Negative bias to compensate for locals. */ | ~~~^~~~ In file included from /tmp/php-build/source/8.1.13/ext/opcache/jit/zend_jit.c:763: /tmp/php-build/source/8.1.13/ext/opcache/jit/zend_jit_x86.dasc:143:14: note: while referencing ‘dasm_labels’ 143 | static void* dasm_labels[zend_lb_MAX]; | ^~~~~~~~~~~ PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. ----------------------------------------- [...]
何か一目ではわからないエラーが出てきました。エラーメッセージの一部でぐぐってみると、先達がいました。あらまほしきことです。
autoconf
を入れましょう。
$ sudo apt install autoconf $ php-build/bin/php-build -i development 8.1.13 ~/php/8/8.1.13 [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-development gets used as php.ini [Info]: Building 8.1.13 into /home/ykagata/php/8/8.1.13 [Skipping]: Already downloaded and extracted https://www.php.net/distributions/php-8.1.13.tar.bz2 [Preparing]: /tmp/php-build/source/8.1.13 [Compiling]: /tmp/php-build/source/8.1.13 [xdebug]: Installing version 3.2.0 [Skipping]: Already downloaded http://xdebug.org/files/xdebug-3.2.0.tgz [xdebug]: Compiling xdebug in /tmp/php-build/source/xdebug-3.2.0 [xdebug]: Installing xdebug configuration in /home/ykagata/php/8/8.1.13/etc/conf.d/xdebug.ini [xdebug]: Cleaning up. Makefile:243: warning: overriding recipe for target 'test' Makefile:136: warning: ignoring old recipe for target 'test' [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.8.1.13.20221223223630.log or rebuild with '--verbose' option [Success]: Built 8.1.13 successfully. $ ~/php/8/8.1.13/bin/php -v PHP 8.1.13 (cli) (built: Dec 23 2022 22:38:51) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.13, Copyright (c) Zend Technologies with Zend OPcache v8.1.13, Copyright (c), by Zend Technologies with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
Sehr gut.
記録のため、必要なパッケージをひとつひとつ探索する一部始終を書き起こしました。いったんわかってしまえば次回以降は、ここまででインストールしたパッケージを最初に一括で apt install
すれば十分ですね。
direnv
で PHP にパスを通す
direnv
は APT でインストールできます。
$ sudo apt install direnv
当該ディレクトリで必要な環境変数を定義するファイル .envrc
を作成します。以下のコマンドでテキストエディタが開きます。
$ direnv edit .
次のとおり追記して保存し、テキストエディタを抜けます。
PATH_add $HOME/php/8/8.1.13/bin
作成した .envrc
の適用を許可します。
$ direnv allow
大事なことを忘れていました。 ~/.bash_profile
に以下を追記します。
eval "$(direnv hook bash)"
direnvを活用して楽々環境変数管理【Ubuntu】 | Abillyzによれば
~/.bashrcにフックする設定をする。 ※WSLのUbuntuはデフォルトで読まないので~/.bash_profileに設定
とのことで、 WSL 以外では ~/.bashrc に書けばよいもよう。
編集した ~/.bash_profile
をリロードすれば、できあがりです。
$ source ~/.bash_profile direnv: loading ~/.envrc direnv: export ~PATH $ php -v PHP 8.1.13 (cli) (built: Dec 23 2022 22:38:51) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.13, Copyright (c) Zend Technologies with Zend OPcache v8.1.13, Copyright (c), by Zend Technologies with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
別のバージョンの PHP が使いたくなったら、同様の要領でビルドして、 direnv でパスを通してやれば ok です。
[イベント]第147回 PHP勉強会@東京
きのう表題のイベントをオンライン視聴した際のメモ。
細かすぎて伝わらないちょうぜつ本見どころ5選
#ちょうぜつ本こと『ちょうぜつソフトウェア設計――PHPで理解するオブジェクト指向の活用 』を先日上梓したばかりの田中ひさてるさんによる著者解題。
- 伝わりやすい見どころ:Facade パターン
- Facade パターンにおいて Facade と Features は 1:N
- 1:1 はよくある誤解。Taylor Otwell は GoF がなんといったか忘れたか
- 用語は原義をふまえて踏襲しよう
- 例:「カリー化は部分適用ではない」
- 関数型プログラミングにおける「ファンクタ」関数を呼び出す側の概念だった
- それが C++ では呼び出される関数の側の概念に…
- 「オブジェクト指向」は定義できない
- 例:「カリー化は部分適用ではない」
- 用語は原義をふまえて踏襲しよう
- 1:1 はよくある誤解。Taylor Otwell は GoF がなんといったか忘れたか
- Facade パターンにおいて Facade と Features は 1:N
- 伝わらない見どころ
- ダーティ vs クリーン
- クリーンアーキテクチャは層の内容を問わない!安定した中心に不安定な要素が依存していればよい
- 求めるべき安定度は案件による
- 順に読むとネタかと思う流れ
- DI コンテナ紹介 → シングルトン批判 →
SingletonTrait
のサンプルコード- 意図した流れ
- シングルトンとは唯一無二。すなわち「概念と存在の区別がつかない」ものに使うのがよい
- たとえば「神」
- 時をつかさどる神
Time
クラス - 数学をつかさどる神
Math
クラス
- 時をつかさどる神
- PHP では
True
False
Null
- またユーザー空間では
const
やenum
も
- またユーザー空間では
- たとえば「神」
- 表向きは「シングルトン使うな」であり、ほんとうの玄人向けには「State パターンで使います」
- DI コンテナ紹介 → シングルトン批判 →
- 抽象クラスとインターフェイスの使い分け
- SOLID 原則の中で異色の存在 LSP「リスコフの置換原則」
- オブジェクト指向は構造化プログラミングではない
- ダーティ vs クリーン
- One More Thing: ひみつの参考文献
- ボブおじさんが好きで著書を参考文献に入れている
- アジャイルソフトウェア開発の奥義
- SOLID 原則、パッケージ原則
- Clean Architecture 達人に学ぶソフトウェアの構造と設計
- 『奥義』 + クリーンアーキテクチャ
- Clean Agile 基本に立ち戻れ
- アジャイルについてプロセスでなく原典のアジャイルソフトウェア開発宣言に戻ることを提唱
- Clean Craftsmanship 規律、基準、倫理
- TDD と職業倫理
- 参考文献リストに入っていないのは原稿 FIX 後に出た本だから。すばらしい本
- アジャイルソフトウェア開発の奥義
- ボブおじさんが好きで著書を参考文献に入れている
プログラムを実行するとはどういうことか
プログラムを実行するとはどういうことか / What does it mean to execute a program? - Speaker Deck
- プログラムの「実行」いろいろ
- CPU がそのまま実行できるものを実行する
- CPU がそのまま実行できないものを実行する
- インタープリタ:CPU がそのまま実行できないものを実行する
LT
PHP Open Textbook のお話
mikumoさん。
- PHP Open Textbookを1月1日よりベータ公開予定 ~商用非商用を問わず無償での改変権、利用権を付与~ – PHP技術者認定機構
- 初心者が困っている例:実習環境が自分で作れない
- OS やアプリケーションがバージョンアップして、書籍の情報が古くなった?
- 書籍に初心者向けの説明が足りない?
- 環境構築は指導する側にとって説明したい本筋ではない?
- → PHP Open Textbook を参照するようにすれば楽ができる。ネットの海をさまよわなくていい!
- まずは興味を持ってもらうのが目的。PHP7初級試験への橋渡し
- 2023年1月1日ベータ公開予定。お手柔らかにフィードバックを
Laravel コアファイルのコードリーディング Model::all()
から new PDO()
まで追ってみた
Laravelコアファイルのコードリーディング/Reading the core code of Laravel - Speaker Deck
- なぜコアファイルを読もうと思ったか
- 好奇心
- 仕事ではコアの奥底まで読むことがない
- コードリーディングの練習
Model::all()
からnew PDO()
まで- Connector (シングルトン)
- クエリビルダー
- Eloquent のビルダー
- Model の Collection
- コアファイルを読むメリット
CUPID について5分でわかりやすく解説してみる
Seiichi Akiba さん。
- CUPID—for joyful coding - Dan North & Associates Ltd
- CUPID は SOLID 原則に代わる5つの Properties
- Properties はルールでなく目標
- Composable 組み立てやすい
- 最小限の依存関係を保つ。意図がわかりやすい
- Unix 哲学
- シンプルで一貫性のあるモデル
- Predictable 予測可能
- 期待通りに動作し決定論的、観察可能
- Idiomatic 自然に感じる
- 自分にとって読みやすいコードでなく言語のイディオムを尊重する
- ローカルなイディオムのガイドラインを持つ
- Domain-based 問題領域をモデル化する
『えこひいき』される関数たち
うさみけんたさん。
- 前置き:ZendEngineにえこひいきされる標準関数たち (前篇) - Qiita
- オペコードにおける関数呼び出し
INIT_FCALL
- しかしたとえば
is_int()
はTYPE_CHECK
命令に strlen('foo')
はECHO 3
に!
- しかしたとえば
- 本題:ZendEngineにえこひいきされる標準関数たち (後篇) - Qiita
Trait
trait
をuse
するのは継承とは異なる- メソッド名の衝突とその解決
- メソッドをコピペするようなものと思えばよい
- 継承クラスの
self
は不変、トレイトのself
は可変
- トレイトの static な変数やメソッドにはクラス定義なしにアクセスできてしまう
- PHP8.1 から deprecated
[英語]ボキャブライダー #1159 「お手軽調理」の "easy" "prepackaged" について
Web サイトでの配信期間は2022年12月28日(水)中とのことだけれどいちおうリンクを張っておく。
ボキャブライダー #1159 「お手軽調理」|NHKラジオ らじる★らじる
NHKゴガク アプリなら、今のところ無期限で聴ける。
easy (形容詞)作りやすい、手間のかからない
Max: "Easy recipe" で「手間のかからないレシピ」、 "easy to make" で「作りやすい」です。
Hiyori: "Simple recipe" じゃだめなんですか?
Max: "Simple recipe" というと「材料や手順などが少ない」という感じで、 "easy recipe" は「誰でも作れる」という感じです。
あっこれはいい質問、 t_wada さんに教わったやつだ、とピンときた。
(言及いただいたので補足します)Simple と Easy は軸が違う(それぞれ対極は Complex と Hard)ので、対象が十分に小さければ両立できないわけではないのですが、多くの場合では結局トレードオフになります。二つを意識して分けないと(例えば層を分ける)、どっちつかずの設計をしてしまいがちです https://t.co/EQFDmSHkdq
— Takuto Wada (@t_wada) 2021年4月21日
Easy: 手数の少なさを重視(そのかわり覚えることが増え、特定の状況には強いが他には弱い設計になる)
Simple: 覚えることの少なさを重視(そのかわり手数が増えたり、自分で組み合わせたりしなければならない)
Simple と Easy は軸が違う(それぞれ対極は Complex と Hard)ので、対象が十分に小さければ両立できないわけではないのですが、多くの場合では結局トレードオフになります。
prepackaged (形容詞)あらかじめ包装された
Hiyori: 「レトルト」は英語じゃないんですか?
Max: "Retort" という英語はあるんですが、ほとんどのアメリカ人には通じないと思います。"Prepackaged" は、レトルト食品や冷凍食品、お弁当など、広く「調理されてパッケージに入った」ものを指します。
"Retort" を辞書で引くと、名詞の意味よりも「言い返す」という意味の動詞としての意味が先に出てくる。英辞郎ではレベル8。
レトルト食品 - Wikipedia いわく:
レトルトパウチ(食品)は英語でも retort pouch (foods) と呼ばれるため、和製英語ではない。また、同じ意味で boil-in-bag (foods) が使われる。
"retort pouch" で Google 検索すると Retort pouch - Wikipedia が出てきた:
In the consumer market, retort pouches have gained great popularity outside of the United States, particularly in the Pacific Rim region. However, American consumers have evidently demonstrated reluctance regarding the packaging technology, and its adoption has been slow. As a result, many retort packages sold in the United States are packaged in cartons to give them an appearance more familiar to consumers.
アメリカ人はレトルトパウチのパッケージを嫌うため同国では普及が遅れており、その外観をよくするためパウチを紙箱に入れている…というけれど、レトルトパウチをそれほど嫌っているようでもない日本でもレトルトカレーとかは紙箱に入っているのがふつうのような。あれは一種の緩衝材なんだと思っていたけど、どうなんだろうか。
[記事]CakePHP 5.0.0-beta1 Released
とうとう CakePHP5 の beta1 がリリース。
よりくわしい変更点は移行ガイドに: 5.0 Migration Guide - 5.x
新機能は思いのほか少ない。
CakePHP 5 leverages the expanded type system feature available in PHP8.1+.
型宣言をより積極的にしていくのが変更の主眼か。このあたりがどの程度アプリ開発のしやすさに寄与してくるのかは、使ってみないとわからないところか。
CakePHP also uses assert() to provide improved error messages and additional type soundness. In production mode, you can configure PHP to not generate code for assert() yielding improved application performance.
すなわち、CakePHP アプリの本番環境では zend.assertions
を -1
に設定しておく必要が出てくる。従来は「本番環境の PHP 設定がどうなっているかわからないから…」とプロダクトコードに assert()
を使うのをためらう案件もあったけれど、フレームワーク側でそもそも使っているならスタンスが変わってきそう。
Query::all() was added which runs result decorator callbacks and returns a result set for select queries.
これが何のことを言っているのか、ざっと見ただけではわからず。ただ従来 Cake\ORM\Query::$_type
でクエリの種別( select / insert / update / delete)を表現していたところ、クエリの種別ごとにクラスが新設されているのは見つけた。
EnumType was added to allow mapping between PHP backed enums and a string or integer column.
PHP8.1 で追加された列挙型を使った EnumType
が提供されるのはうれしい。ぜひ使いたい。
前回の CakePHP4 リリース時をふりかえると、4.0.0 beta1 リリースから 4.0.0 正式リリースまでは約半年。すると5.0.0の正式リリースは来年2023年半ばくらいかしら。