PHPのarrayについてGPT4に議論させてみた

こんにちは、フリーランスエンジニアの太田雅昭です。

PHPは古い言語であるため、モダンなTypeScriptなどに慣れているとつい猿のようにムッキーしてしまうこともあるかと思います。

しかし人気CMSのWordPressに使われていたりするため、PHPを触らないといけないことも多いのが実情です。

今回は、そんなPHPにムッキーした時にGPT4を使って気分を紛らわせてみましたので、その様子をご紹介させていただきます。

これを読んで、少しでもPHPへのムッキーを解消していただければと思います。

PHPのarrayにムッキー

そもそもの発端は、WordPressのプラグイン作成をしている時でした。PHPはObject型、Array型があり、Object型は謎の記法で書きます。謎と言っても他の言語と比べて独特であるというだけなのですが、ともかくObject型はアローで属性にアクセスし、Array型だと角カッコでアクセスします。

このObjectのアローでの表現が、キーに変数を使う時など非常にみずらい。また初期化時も、いちいち一つずつ代入しないといけない(Arrayからキャストする方法はある)。だからDictionary的な機能はArrayを使いたいのですが、Arrayはなぜか、他の言語でいうListとDictionaryの性質を併せ持っています。これらの型はそれぞれ用途が違いますし、分けた方が圧倒的に使いやすいと思います。せっかく関数の引数や返り型を指定できるのに、arrayで一緒くたになっていたら意味がないじゃないですか。しかしこれはPHPが古い言語ということもあり、プログラミングに対する概念が進んでいない状態で最初の仕様が固まってしまったためでしょう。

さてそんなところについついムッキーしてしまうわけですが、以下のように発散させました。

GPT4に議論させる

GPT4に議論させてみました。以下を参考にさせていただきました。

https://blog.front-mind.com/chatgpt-disc/

上記を参考に、指示を出してみます。

あなたは[司会者]と[専門家1]と[専門家2]の役割を持ちます。[テーマ]についてそれぞれの役割が交互に発話し、課題と解決方法も混ぜながら議論してください。[ゴール]に向かって議論してください。かならず[ゴール]について結論を出してください。
各条件は以下の通りです

[テーマ]
PHPのarrayは、配列と連想配列との役割分担を明確にするよう改変すべきか。

[専門家1]
改変すべきと主張するエンジニア

[専門家2]
改変すべきでないと主張するエンジニア

[ゴール]
何度か議論を経て、それを見た読者に考えるきっかけを与える。

以下、GPT4の回答、それに続けていきます。

もちろん、議論を始めましょう。今回のテーマは「PHPのarrayは、配列と連想配列との役割分担を明確にするよう改変すべきか」というものですね。専門家1、あなたは改変すべきと主張するエンジニアとして、まずどのような理由がありますか?

専門家1:PHPのarrayについて、配列と連想配列の役割を明確に分けるべきだと考えます。現在のarrayは、添字が数値の場合と文字列の場合を区別せずに扱います。これは混乱を招く可能性があり、プログラムの品質を低下させる原因となります。例えば、配列として使用しているのに連想配列のように振る舞うことがあるため、予測困難なバグが発生しやすいです。

専門家2:一方で、PHPのarrayはその柔軟性が魅力です。必要に応じて添字を数値または文字列で使用でき、同じ変数に異なるタイプのデータを格納できます。改変すれば、既存のコードが影響を受け、互換性の問題が生じる可能性があります。また、この柔軟性は多くの開発者にとって便利で、制約を加えることは逆に開発を妨げることになるかもしれません。

どちらの主張にも一理あるようですね。ゴールに向かって、この問題に対する結論を出すために、もう少し詳しく議論してみましょう。特に、既存のコードへの影響や開発効率についても考慮しながら、議論を進めましょう。
続けて
もちろん、議論を続けましょう。専門家1と専門家2、前回の議論で示された観点をさらに深めてみましょう。専門家1、改変の主張を強化するために、具体的な利点や例を挙げていただけますか?

専門家1:確かにです。PHPのarrayを改変し、配列と連想配列の役割を明確に分けることにより、コードの予測可能性が向上します。例えば、関数やメソッドの引数として受け取るデータの型を明確に指定でき、誤った型のデータが渡された場合にエラーを検出しやすくなります。また、コードの可読性も向上し、新たな開発者がプロジェクトに参加する際にもスムーズなコード理解が可能となります。

専門家2:しかし、改変が既存のコードに与える影響を考える必要があります。PHPは多くの既存プロジェクトで使用されており、それらのプロジェクトは現在のarrayの柔軟性を利用しています。改変が行われると、これらのプロジェクトは大規模な修正を必要とし、時間とリソースがかかる可能性があります。また、柔軟性を削減することは一部の開発者にとって不便で、新しい制約が生まれることになります。

議論を通じて、改変の利点と欠点が明らかになってきました。ゴールに向かって、どちらの主張を支持するかについて意見をまとめ、結論を出しましょう。読者に、この問題について考えるきっかけを提供しましょう。
続けて
理論的な面と実用的な面からの観点を踏まえた議論は非常に重要です。専門家1と専門家2、最終的な結論に向けて、さらに深く議論を進めてみましょう。

専門家1、改変が行われる場合、具体的なステップやベストプラクティスを提案できますか?

専門家1:もちろんです。改変が行われる場合、段階的なアプローチが必要です。まず、既存のコードと連携しながら、新しい配列型を導入することが大切です。また、PHPのバージョンアップと連動して実施することで、プロジェクトに最小限の影響を与えることができるでしょう。そして、開発者コミュニティとの協力が不可欠で、変更の受け入れを円滑に進めるための議論と説明が必要です。

専門家2、改変しないことに対する最終的な主張は何ですか?

専門家2:改変しないことに対する主張は、既存のコードベースへの影響を最小限に抑えることと、開発者が柔軟なアプローチを維持できることです。PHPのarrayは柔軟で多目的なデータ構造であり、多くのプロジェクトで成功裏に使用されています。改変を行うことで、これらの利点が損なわれる可能性があり、新しい制約が生まれることになります。

最終的な結論として、読者に提供する情報は何か、どちらの主張にも賛同できる観点はあるか、という点を考えてみましょう。そして、この問題についての結論を出してみてください。
最後に司会者としてまとめてください
議論を進めてきた専門家1と専門家2、PHPのarrayに関する改変の是非について、非常に興味深い議論が展開されました。その結論をまとめると、以下のようになります。

専門家1は、PHPのarrayを改変して、配列と連想配列の役割を明確に分けるべきだと主張しました。これにより、コードの予測可能性が向上し、可読性が向上するという利点があります。また、新しい配列型を段階的に導入するアプローチを提案しました。

一方、専門家2は、改変しないほうが良いと主張しました。PHPのarrayの柔軟性が多くのプロジェクトで重要であり、改変が既存のコードに大きな影響を及ぼす可能性があると指摘しました。

最終的な結論として、PHPのarrayの改変については、プロジェクトのコンテキストや要件に依存すると言えます。新しい配列型の導入は、新規プロジェクトや特定のユースケースに適しているかもしれませんが、既存のプロジェクトには影響があるため、
続けて
続けてまとめます。

結論として、PHPのarray改変については以下のポイントを考慮すべきです。

プロジェクトのコンテキスト: 既存のプロジェクトでは、柔軟性を活かす必要があるかどうかを検討する必要があります。新規プロジェクトや特定のユースケースでは改変が有益かもしれませんが、既存のコードベースへの影響を考慮することが大切です。

開発者コミュニティの意見: PHPのコミュニティやプロジェクトのメンバーと協力し、議論を行い、改変についての意見を集約することが重要です。

段階的なアプローチ: もし改変を行う場合、段階的なアプローチを採用し、既存のコードとの互換性を確保する方法を検討すべきです。

最終的な結論は、プロジェクトの要件や目標に応じて異なるかもしれません。議論を通じて、読者に対して考える材料を提供し、プロジェクトごとに最適な決定をする手助けとなることを願っています。

この議論に参加いただいた皆さん、貴重な意見を共有していただき、ありがとうございました。議論はゴールに向かって進展しました。

最後に

いかがでしたでしょうか。皆様はどうか分かりませんが、少なくとも私はすっきりすることができました。しかしこのようにGPTのやり取りをコピペするだけのページは、ネットの質を落としかねないですね。皆様はこのようなページは作ってはいけませんよ。え?私?いやぁ、ははは。