PHP コメントで配列の中身の型を定義する

大した話じゃ全然ないんですが、いっつも忘れてしまって、コードの中を漁るはめになっているので、メモっておきます。

何のためにこのコメントがあるかというと、PHPでは、配列の中の変数の型を定義することができません。

なので、コメントに書いておくと親切、ということですね。

    /* @var int[] */
    public array $numbers;

上記のコメントの意味は、$numbers という配列には、数字を入れることになっている、という意味です。

ただし、これはただのコメントなので、なんの強制力もありません。

上記の$numbers に Stringを入れてもエラーを吐いたりはしません…。

しかし、あるとないとで読んだプログラマーさんがわかりやすいので大違いだとは思います。

ChatGPTにコードレビューの言葉を考えてもらう

※ コードレビューをしてもらうではありません。

コードレビューの言葉って気を遣いますよね。
相手は人間なので 失礼なことを言ってしまってないか心配です。
そこで今回は、 Chat GPT にコードレビューの言葉を考えてもらいましょう。
しかも、レビュイーの好きなキャラを使えば、そのキャラからレビューしてもらっているので何を言われても幸せな気持ちになるはずです。
こんな win-win な 活用方法はありません。

変換してもらう言葉は以下の4つになります。

  1. このメソッドの名前が内容と合ってないです。
  2. この条件分岐は必要ないと思います。
  3. ここで空チェックを行った方が良いと思います。
  4. このメソッドの役割が多すぎるので分割した方が良いと思います。

※ GPT-4 を利用しています。

カミーユ・ビダン の場合

  1. このメソッドの名前、完全に内容とズレてるだろ!名前を変えないと誤解を生むぞ!
  2. この条件分岐、一体何のために存在してるんだ?邪魔だから削除しろ!
  3. ここ、まさか空チェックをスルーするつもりじゃないだろうな? 不具合を招きたいのか?今すぐ修正しろ!
  4. このメソッドの役割、多過ぎるだろ。まるでジャンクだ。分割しないと後で後悔するぞ!

過激ですね…レビュイーが精神崩壊しそうです…
何回か試してたのですが、たまにベジータみたいになってましたね

シャア・アズナブル の場合

  1. このメソッドの名前、まるで戦場で迷子になったかのようだ。内容と一致させるべきだ!名前が全てを語るのだから。
  2. この条件分岐、本当に必要と思っているのか? これは無駄だ、削除すべきだ。質を追求しろ!
  3. ここでの空チェック、まさか忘れていないだろうな?過信は命取りだ。すぐに対応せよ!
  4. このメソッド、役割が多すぎる。分割することで各々が本来の力を発揮できる。手を打つべきだ!

所々、ぽい名言生み出しています。
「まるで戦場で迷子になったかのようだ」、「分割することで各々が本来の力を発揮できる」とかはかっこいいですね。

ハマーン・カーン の場合

  1. このメソッドの名前、内容と全く合致していない。恥を知れ。名前と内容が一致しないなど、どうしようもない俗物ね。直ちに名前を見直すべきだ。
  2. この条件分岐、必要ないだろうが。恥を知れ、俗物。不必要なものに固執するなど、余計な混乱を生むだけよ。
  3. ここで空チェックを怠るとは、あまりにも無責任だ。恥を知れ、俗物。これ以上問題を生む前に、速やかに対応しなさい 。
  4. このメソッドの役割、明らかに多すぎるわ。無秩序な行為を放置するな、恥を知れ。分割することで整理し、機能を明確にするべきよ。

情緒不安定さを隠せません。
それぞれ最後の言葉がないほうがハマーン様っぽいですね…
どうしようもない俗物って…w

シン・アスカ の場合

  1. 全然内容と合ってない、このメソッドの名前!名前を変えてやる!俺が、ここで!
  2. 絶対に必要ない、この条件分岐!削除してやる!それが俺の意志だ、今日、ここで!
  3. 空チェックを怠ってる、この部分!すぐにでも対処するんだ!今日、ここで!
  4. 役割が多すぎる、このメソッド!分割してやる!今日、ここで!

めちゃくちゃ怒ってますが全部やってくれるのが、シンっぽいですね。
任務とか大体文句言いながらもやってますからね。
レビュワーにとってはマイナスでしかないですが、レビュイーにとっては神様かもしれません。

※ 「もっと強気でお願いします。」「「恥を知れ、俗物。」のような雰囲気でお願いします。など何回かリクエストを出した結果です。

まとめ

使うにしてもキャラは選びましょう。

Chat GPT とモデルについて考えてみる

Chat GPT 使ってますか?

それはもう本当に色んな使い方が出来るので、逆にどう使っていいのかわからない部分もありますね。
Chat GPT をどう使っているかといった勉強会が増えてきそうです。

自分は仕事では以下のようなことで使ってます。

  • 英語
  • 変数名、メソッド名が不自然じゃないか
  • コードレビュー(もっといい書き方がないか)

などです。

モデル について聞いてみたかったのですが、 結構勉強になったのでここでは簡易的なサンプルに置き換えてやってみました

会話形式でやってみます。

Q. オンライン書店のドメインモデルの一例を教えてください。

(あ、今は書店だけど、今後は本以外も売っていく可能性は大いにあるな…)
Q. 後に書籍以外も売る可能性があるのですが、BookはItemにしたほうがいいですか?

(Itemは広すぎるかな…?)
Q. Itemを消して、 Book Music Movie などに分けるのは好ましくないですか?

(う~ん…どんな固有の特性や振る舞いがあるか今のところ想像がつかないんだよね…、 とはいえ商品の種類が多くなることを考えると…)

Q. Item をインターフェースにして後のBookなどは具体的な実装でなんとかしようと思いますが、どうですか?

~終~

本来は、もっと説明が必要になることを聞いていたのですが、自分の言葉が足りな過ぎて、ちょっとずれた回答が来ることがありましたね。
逆に Chat GPT に誤解されずに回答がさくさく来るような人は、人に説明するのも上手いんだろうなと思いました。
コンテキスト(使いたかった)も説明しないといけないので、ドメインを洗練させるために言葉にしてChat GPT に確認してもらうのも面白そうです。

補足情報を結構くれるので、この部分分からなかったから聞いてみようとなるのもすごいですね。

的外れな回答(特に3.5)をする場合もあるので情報が最終的には自分で回答の確認をした方が良いですがそれでも凄いです。
課金が必要にはなりますが、仕事や大事な場面で利用する場合はGPT-4 の方がいいかなと思います。

Maven IntelliJでデバッグできない

Maven。♪それは君が見た光~ 僕が見た希望~♪

3年ぶりぐらいに mvn とか使った私です。

ちょっととあるJavaで書かれたたオープンソースのプロジェクトのソースコードが読みたくて、ダウンロードしたけれども、IntelliJですぐデバッグできなかったのでメモです。

① Run → Edit Configurationsをクリック

②+マークをクリックした後、Mavenを選択

③Runのところに、本来はテストコードを走らせるところに

mvn test

なので

test

だけ入力すればいいんですが、IntelliJでデバッグするために

-DforkCount=0

というオプションが必要です。

なので、IntelliJのRunの欄に下記のように入力します。

-DforkCount=0 test


【AWS】【Lambda】【Boto3】稼働中のEC2インスタンスを取得する

ご無沙汰しております。オンラインコンサルタントの直井です。だいぶ気温も上がり、桜の花びらが開き始め春の訪れを感じることができるようになってきました。

さて、今回はLambda(Python)を使って稼働中のEC2インスタンスの情報を取得する方法をご説明致します。

import json
import boto3

def lambda_handler(event, context):
    ec2 = boto3.client('ec2')
    try:
        name_tag_key = 'tag:aws:autoscaling:groupName'
        name_tag_value = '' #特定のNameタグがついているインスタンスに絞り込み
        instance_state_key = 'instance-state-name'
        instance_state_value = 'running' #稼働中のインスタンスに絞り込み
        reservations = ec2.describe_instances(
                Filters=[{'Name':name_tag_key ,'Values':[name_tag_value],},{'Name': instance_state_key,'Values': [instance_state_value]}])
    except ClientError as e:
        print('#ClientError!! at get_instance()')
        raise e

tag:aws:autoscaling:groupNameでASGのNameタグが付与されているインスタンスに絞り込みます。更に、instance-state-nameがrunningのインスタンスへ絞り込みます。

意外に稼働中(runnning)への絞り込みが足りず終了したばかりのインスタンスを取得してしまうことがしばしあります。ご安全に