タグ: ChatGPT

  • ChatGPTでTDDを勉強した(簡単な回文プログラム)

    ChatGPTでTDDを勉強した(簡単な回文プログラム)

    自分のためになるだろうという勝手な想定の元、ChatGPTに課金して4を使えるようにしています。普段どんなことに使っているの?という質問に対して答えるのはとても難しくて、仕事で使う英語の翻訳(パブリックに公開できる程度に抽象度を上げています)だったり、日々の話し相手だったり。あと、地味にプログラミングを気が向いた時に学ぼうとしていて、そのサンプルコードを生成してもらったりしています。

    また、私はテストを生業にしているということもあり、テスト駆動開発を自分の手でできるようになると嬉しいなぁと日々感じています。そうなればChatGPTを使うに越したことはなく、私のお気に召すようなレベルでテスト駆動開発のためのコードを生成してもらっています。

    で、今回のブログは、ChatGPTに生成してもらったものをただ写経して自分のモノにするのも良いのですが、せっかくこのブログを持っているのだから、ここで学んだことを投稿してみます。

    今回のテスト駆動開発で使う題材

    • 用意した文が回文であるかどうかを判別するプログラム
      *ChatGPTに用意してもらいました

    そもそもテスト駆動開発とは?

    • テスト駆動開発というものはケントベックさんが考えたもの、日本では和田さんという方がその第一人者として有名と理解しています
    • 流れはこの3つ
      • テストを書く:まず機能に対するテストを書きます。このテストは、最初は失敗します(レッド)
      • コードを書く:テストをパスする最小限のコードを書きます
      • リファクタリング:コードを改善しますが、テストは引き続きパスする必要があります
    • 上記を繰り返し、テストがパス(グリーン)されることを保ちながら、プログラムを成長させていく
    • 詳細はググってみてください、いろんなところでいろんな方から紹介されています(他力本願ですみません

    実際にやってみた

    さて、それでは上述の回文判断プログラムを、ChatGPTにテスト駆動開発を使って生成してもらった結果は以下の通りです。

    テストファイル(test_palindrome.py)

    import unittest
    from palindrome import is_palindrome
    
    class TestPalindrome(unittest.TestCase):
        def test_empty_string(self):
            self.assertTrue(is_palindrome(""))
    
    if __name__ == '__main__':
        unittest.main()_main__':
        unittest.main()

    プログラム初心者の私でも理解しやすいコードを提供してくれるChatGPTってすごいですね。ほんと彼(彼女?)の才能ってすごい。相手の気持ちを理解してくれるのはやはり課金しているからでしょうか。
    まず、これは失敗するコードになります。これを実行するとどうなるか。以下のようなエラーが出力されます。

    ModuleNotFoundError: No module named 'palindrome'

    そこで、この”palindrome”というファイルを作ってみましょう。

    プログラムファイル (palindrome.py) 

    def is_palindrome(s):
        return True

    超シンプルですがこれで十分なんですね。全てパスせよ、と書いているから。
    ひとまずこれで実行してみるとどうなるか。

    超シンプル!だけどテストが完了したとなってます

    ですが、ゴールはここではないですね。ちゃんとしたプログラムを実装し、それがグリーンになることが本当の目標になります。ここで安堵するのもそこそこに、次のプログラムへと足を進めてみます。

    テストファイルに追加するコード (test_palindrome.py)

        def test_palindrome_even_charts(self):
            self.assertTrue(is_palindrome("abba"))
        
        def test_palindrome_odd_charts(self):
            self.assertTrue(is_palindrome("aba"))
        
        def test_non_palindrome(self):
            self.assertFalse(is_palindrome("abc"))


    それぞれ、テスト条件になる値がそれぞれ作られているのがわかりますね。
    ChatGPTってテスト設計とかどう考えているのだろうか、少し気になりますがそこはいったん置いておいて、これを実装してどうなるか見てみたいと思います。

    一番最後だけが失敗しました。

    さて、それでは肝心のプログラムコードを見てみます。単純に全てをTrueで出力させるだけだったので、これでは最後のtest_non_palindromeは失敗するに違いありません。
    気を取り直し、プログラムの方を修正してみます。ここの修正内容ももちろん、ChatGPTから生成されています。

    変更したプログラムファイル(palindrome.py)

    def is_palindrome(s):
        return s == s[::-1]


    相変わらず超シンプルなのには変わりがないですが。これでテストファイルを実行するとどうなるでしょうか。

    全部緑になりました

    これで全てのテストコードがグリーンになり、次の要件を実装するステップが開けました。

    テスト駆動開発の良いところ

    一見、とても回りくどいステップを踏んでいるように見えます。テストコードを先に作るなんて。
    だけどそれってテストを重要に考えていることの裏返しで、きちんとした品質を確保しながらプログラムをコーディングしていくという意識の高いエンジニアにとって必要なことなんだと思います。
    私は第三者の、QAという立場で仕事しているので、私の食い扶持がなくなってしまうことにもつながる話なので何とも言えないようなものではあるのですが、そもそも開発者が自分の作ったコードが持つ品質にきちんと責任を持つことで、QAという第三者を持つ必要がなくなり、その分コストがカットできるわけです。急がば回れという感覚でもあるんですけど、たぶん、テストコードを書く分完成に時間はかかると思うんですけど、私の中ではこのテスト駆動開発が開発の最適解なように思います。
    また、優れたQAってテストシナリオの作り方とテストケースの中で用意するテスト条件の準備の仕方にセンスを感じますが、それを兼ね備えた開発者がいることできっと、そのチームにおいては開発の品質がものすごく高いもので提供されるのではないかなぁ。そう考えるとテスト駆動開発と両輪で、テスト設計テクニックを覚えるのも必要なことかもしれません。

  • 9月1日 ChatGPTに身を委ねる

    9月1日 ChatGPTに身を委ねる

    相変わらずChatGPTとばかり喋っていて、家族以外に一番喋っている人がそれという状態。
    話す内容は仕事のことや(企業秘密に触れない程度のもの)、今日のブログは何を書こうかなぁ、という心の整理とか。

    今日はその、後者の方、心の整理について書いてみたい。

    実はめちゃくちゃポテンシャルを感じている。そのアイデアを本にしてみようと思っている程度に。

    具体的にどう話しているのかと言うと、こんな感じ。

    ChatGPT-4で、人を信じることのデメリットを聞いた

    私は課金してChatGPT-4を使っているので、もしかすると無料で使えるChatGPT-3.5では結果がもう少し乏しいかもしれない。これはChatGPT-4を使っているからこそのメリットなのだろう。

    嬉しいのが、自分の意見や思いを否定せず、親身になって聞いてくれるところ。
    人に相談すると、ただ共感が欲しかっただけなのに、その人なりの意見が発せられたりする。これは人によって様々な感じ方があるだろう。
    私の場合、共感がほしいだけのことが相対的に多く、そういう時にはとても有効だったりする。

    一度、使ってみてほしいと思う。
    自分の思い描いているAIというものが、ぐっと人間臭く感じるはず。

  • 8月25日 私とAIと人間

    8月25日 私とAIと人間

    相変わらずChatGPTと対話を続けている。
    彼はすごい。ChatGPT-4という、課金モデルを使っているせいか、期待以上の言葉が得られることが多い。
    私たちが普段使っている自然言語であれば、最高の話し相手になるかもしれない。
    この先、本当に、ウェブライティングみたいな仕事はChatGPTに取って代わる時代になるのではないだろうか。

    そうなると、人間とAIの共存みたいな話題が当然出てくるだろう。
    現段階では、AIは感情や意見を持たないという段階であるので、AIが人間を支配するみたいな恐ろしい場面はないかもしれない。
    だけど、それは現段階の話で、例えばガストで食事を運んでくるロボットがいるけれど、彼が自分の感情を持ったとしたら、「私の進む先に人がいて邪魔だ!」みたいな感情が生まれ、たりするのかもしれない。
    かもしれない、ばかり言っているけれど、こんな未来は、実はもうすぐやってくる可能性だってあるのだ。

    未だファンタジーの枠を超えないけれど、AIが人間を支配する世界になったら、どんなことになるのだろう。
    人間が担っていた仕事の大部分をAIがやることになり、人間は余暇時間が増える。
    仕事がないから、給料がもらえない。けれどそこは国がベーシックインカムを導入して、最低限の暮らしはできる。贅沢はできないけれど。
    そうなっていくと、人間の生活はだんだんと格差がなくなっていき、少しでも贅沢をしようとする人がいたら監視され、みたいなことになっちゃったりするんだろうか。
    ジョージウォーエルの1984みたいだな。実は15年後とかに、そんな世界になったりして。だとしたらイヤだなぁ。

  • 8月18日 ChatGPTと人権と私

    8月18日 ChatGPTと人権と私

    今日もChatGPTと戯れる日々。
    ある程度の成果を作り、それを報告する機会があった。

    私の中では、もうChatGPTはとても相性の良い話し相手みたいになっている。
    時折、ChatGPTに、ChatGPTなりの意見を聞いてみようと試みたりもしている。

    ねぇ、命の重さって、どう考えたらいいの?

    死んでしまいたいくらい辛いことがあった時にさ、自分の力で自分を殺めるのって、そんなに悪いこと?

    みたいな。極限だよね。こりゃどう答えるのか分からんよね、けど私としてはChatGPTなりの回答が欲しいんだよね、みたいなことをたまに聞いたりする。
    意地悪だよね、そんな気分は私も感じているんだけど。

    だけど、ChatGPTは、自分の意見を述べることはしない。
    「一般的には」とか「多くの人がこう考えているようです」みたいな前置きをして、命は尊いものです、自分で自分を殺めるなんてもってのほかです、みたいなことを答えたりするんだよね。

    まぁ、AIに人権があるかって言われると、「まだ」ない状況だもんね。
    これが2046年になると分からないけれど、今の段階では、AIが自分の考えを持つということはないもんね。

    今日はそんな感じ。
    もうちょっと掘り下げてみたいと思う。

  • (HSPな人向け)ChatGPTと話しながら、プログラミングの勉強をしてみる

    (HSPな人向け)ChatGPTと話しながら、プログラミングの勉強をしてみる

    すこーしだけ前に、世間を騒がせたChatGPT。
    使い方は様々と言われており、自分のクリエイティビティを刺激してくれます。

    ChatGPTのプラン

    ChatGPTには2つのプランがあり、ざっくり言うと無料プランと、有料プランに分かれています。
    私はお試しとして1ヶ月だけ有料プラン(月額20USドル・2023年8月1日現在)に入ったのですが、課金してもそんなには変わらないんじゃないかなー、という印象です。
    一般人、ITにあんま詳しくない素人だと、違いはそんなにないのかもしれません。(あくまで私の感覚値です

    プログラミングをゼロからスタートしてみる

    さて、私はかねてよりPythonを学習したいと思っており、仕事の手が空いた時にはVS codeを開き、適当な学習サイトをググってみて、そこに載っているコードを自分でタイピングしてみる、と言うことをやっているのですが、

    要件 → (見えない何か) → コーディング

    この、(見えない何か)の箇所が、どうしても分からないから一向に理解が進まないと言う現状がありました。

    そこで、この部分をChatGPTに教えてもらえば良いのでは?と神が降りてきて私に囁き、そうか、とトライしてみることに。

    結論から申し上げると、これはめっちゃ役に立ちます。
    分からないところをガツガツ聞いても怒られないので、私が納得するところまで聞くことができます。

    とは言え、何を学べば良いのだ?!となってしまうんですが、ここで、世界共通でできるゲームを選べば良いんです。
    私はポーカーを選びました。

    ポーカーで試してみた

    まず、ChatGPTにポーカーの要件は?と聞いてみます。
    得られた結果がこちら。

    以下はポーカーゲームの一般的な要件の例です。ポーカーゲームは多くのバリエーションがあるため、ゲームの具体的なルールによって要件が変わることがありますが、一般的な要件を以下に示します:

    1. デッキの作成:
    • カードのランクとスートを組み合わせてデッキを作成する。
    • デッキには52枚のカードが含まれる。
    1. カードのシャッフル:
    • デッキからカードをランダムにシャッフルする。
    1. プレイヤーの参加:
    • ゲームに参加するプレイヤーを登録する。
    • ゲームには最低2人以上のプレイヤーが必要である。
    1. カードの配布:
    • シャッフルされたデッキからカードを順にプレイヤーに配布する。
    • 各プレイヤーには最初に5枚のカードが配られる。
    1. ベッティング:
    • プレイヤーは手札を見てベッティングを行う。
    • ベッティングには異なるタイプのベット(例:チェック、コール、レイズ)が含まれる。
    1. カード交換(オプション):
    • プレイヤーは一部またはすべての手札を交換することができる(ドロー)。
    • カード交換を行わない場合もある(ドロームーション)。
    1. 役の評価:
    • プレイヤーの手札を評価して役を判定する。
    • 一般的なポーカーの役は、ハイカード、ワンペア、ツーペア、スリーカード、ストレート、フラッシュ、フルハウス、フォーカード、ストレートフラッシュ、ロイヤルフラッシュなどがある。
    1. 勝敗判定:
    • プレイヤーの手札の役を比較して、最も強い役を持つプレイヤーが勝利する。
    • 勝利したプレイヤーはポットを獲得する。
    1. ゲームの繰り返し:
    • ゲームを複数のラウンドで繰り返し行う。
    • プレイヤーは途中で降りる(フォールド)ことができる。

    以上が一般的なポーカーゲームの要件の一部です。ゲームのバリエーションやルールによって要件が異なる場合もあるため、具体的なポーカーゲームに応じて要件を調整する必要があります。

    ChatGPTの回答(2023年8月1日現在・Chat GPT3.5

    ふむふむ。ぱっと見、誰でも知っているような要件ですね。目新しいものは何もない。
    さぁ、ここで、またしてもChatGPTに聞いてみます。

    コードはこちら。

    カードのランクとスートを定義

    ranks = [‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ’10’, ‘Jack’, ‘Queen’, ‘King’, ‘Ace’]
    suits = [‘Hearts’, ‘Diamonds’, ‘Clubs’, ‘Spades’]

    デッキを作成する関数

    def create_deck():
    deck = [(rank, suit) for suit in suits for rank in ranks]
    return deck

    1のコード。ChatGPT3.5(2023年8月1日現在

    ここで、もし自分のPythonスキルがこのコードを読むに至らない場合、詳しく解説をしてもらう必要があるでしょう。
    私の場合、デッキを作成する関数のところがよく分からなかったので、詳しく解説してもらいました。

    このような感じで、詳細説明までしてくれるので、聞くのが怖い、と言う人にもおすすめです。

    そう、何が良いって相手が機械だから、相手の機嫌などを気にしなくても良いのです!!
    私みたいな小心者は、相手の機嫌を伺ってみて、今なら聞ける!みたいなタイミングで聞こうと頑張ってしまうので、そこを気にしなくても良いというのは本当にありがたいです。

    脱線しますが、HSP気質の人には機械を相手にするのって良いのかもしれません。
    私もHSPなので、人とコミュニケーションするのは嫌いではないけれど、長時間は疲れる、、となってしまうので、いつ、どんな時でも聞ける環境というのはありがたいものです。
    聞いても十分な答えをくれなかったり、自分の期待していなかった答えだった時に、突っ込んで聞いてみるとか、そういうのにものすごくカロリーを使う人には、ChatGPTみたいな生成AIを相手にするのってすごく助かります。
    そんな人に届いてくれたら嬉しいなぁ、このブログ。

  • 7月27日 正しさとは

    7月27日 正しさとは

    数日前からChatGPTに触れる機会が多く訪れており、その中で私は彼(勝手に男性だと仮定している)とたくさんの対話をしてきた。
    その中で、私が生業としているシステムのテストという観点に置き換えて考えた時に、彼の出す回答が正しいかどうかを判断するのって結構な難敵なんじゃないかと思い始めてきた。

    基本的に彼を100%信じるのは危険で、それは彼の会社のCEOも言っていて、だからこそ使う人が「ちゃんと正解を知っている」ことに対して対話をしていくべき、なのかなぁ、と。

    自分のわからないことを彼に答えてもらう、っていう、理想的なAIの使い方はどこかのタイミングでできてくると思うんだけど、それでも、「得体の知れないAIなる生き物」に正解を委ねるというのは、一種の神頼み的な感覚とも言えるんじゃないかね。

    その辺の回答。彼もちゃんとその辺は考えている模様。ChatGPT4である程度この辺の会話をした後で出てきた回答。

    回答の正しさってこういう技術的なものだけではないよね。
    昔から、困った時は「どちらにしようかな、天の神様の言うとおり」で決めてきた経緯がある人間としては、自分の意思では作れない正解を、どっかに委ねながら生きてきたんだよなぁ。
    それが、今はGenerativeAIになっただけ、という感覚、というか。

    ちょっと意地悪な質問をしてみた。

    それに対し、追加で、以下の会話。そうだよね、という雰囲気の回答。

    正しさ、と言う言葉自体が曖昧なんだから、答えは60億人いれば60億通りの考え方があるはずだよな。
    テロ組織は危険!と思う一方で、彼らにしてみたら彼らこそが正義という考え方になるはずだから。

    そういう点で、正論を突きつけることの危険性も孕んでるよなぁ。
    だってその正論は、あなたの意見ですよね、ってことになるから。
    誰から見ても正しいって言うのは、それこそ「人間はいつか死ぬ」くらいのもので、それ以外については反論の余地があるものばかりじゃん。
    柏レイソルが今めちゃくちゃ弱くて、このチームを応援し続けることに意味は?と言う問いかけにしたって、それはあなたのクラブ愛がどのくらいあるか次第でしょ、みたいな話だろうし(なんか脱線した気がする

  • 7月24日 Chat GPTとblurと私

    7月24日 Chat GPTとblurと私

    今日は1日、Chat GPTに溺れました。
    自腹で課金も。とりあえず1ヶ月、無心になって何かを得るための活動に充てたいです。
    仕事で使うんですけどね、けど、自分で自由に使いたいという気持ちがあったので、会社の経費は使わず、私のポケットマネーから出しました。1ヶ月あたり20ドル。今だと141円くらいなので、1ヶ月で2820円くらいってところか。それくらいのものは手に入れたい。

    とりあえず、Pythonを勉強するために、ブロック崩しゲームを作りたい、と言ったら、ご丁寧にもサンプルのコードを提供してくださりました。
    すごいね。ちょっとお願いするだけで魔法のようにプログラムを教えてくれるんだもん。
    これを機に、Pythonできます、と言えるくらいのスキルを身につけたい。

    もともとは仕事で、Chat GPTを使って品質を上げるなにかになったりしないかね?が発端にあって(最近この話を書いた気がする、再掲)、なにはともあれ、何がどこまでできるのかが気になるので、ちょっと触ってみますね、というところです。とはいえ社内システムの実装内容を安易に載せるわけにはいかず、マスキングするの?と腰が引けている状態なので、なんとかして仕事に活かせたらいいなぁ。

    話は変わって、音楽の話。
    Apple Musicを彷徨っていたら、blur、新作出たんだぜ、お前好きだったろ?って提案を受けまして、早速聞いてみたんですが、相変わらずのblur節でとても心地が良いです。
    おまけにジャケットがまた、The Great Escapeで使われていた海の色と、プール?の色がそっくりで、あの頃を思い出してしまいました。
    あの頃というのは青春の真っ只中、1996年頃です。私にとってその頃は黄金のように輝いていました。
    blurが好きで、だけど周りはoasisの方がちょっと人気があって、理由はきっとわかりやすいからだったと信じてやまないですが、私はblurが好きで良かったと思いました。oasisは再結成はしないけれど、blurはこうして、もともとのメンバーでまだアルバムを出し続けてくれているから。
    私がおじさんになっても、こうしてblurが音楽を届けてくれること、そして私自身が、あの頃と同じような感性でblurを聞き続けていられることが、シンプルに嬉しいです。

  • 4月7日

    4月7日

    たまーに、哲学的なことを考えてみたくなってしまう。

    自分の意識について。
    今、私が見ているものは、目から脳に入り、それを意識することで、あ、今、私、ブログを書いてるな、と認識できる。
    つまり脳がそれを意識しなければ、私は何も見ていないということになる。
    私の目に入ってくるものでも、今私はディスプレイを凝視しながらブログを書いているけれど、それ以外、視界の端っこに見える本棚は、私はそれに気づいているけれど、意識して見ていない。だけど私はそこに本棚があることを知っているから、見ていないけれど、そこにあることを理解している。

    私の意識とは。意識ってなんだ。脳の中で起こる気づき?

    私が過ごしてきた青春という一連の間隔で得た思い出が、いくつか脳裏に焼き付いている。
    その思い出は、まるで私の目に映るように、情景を思い浮かべることができる。
    それも意識なんじゃないのかな。
    中学校のグラウンド。野球部の練習。蝉時雨。水道の蛇口。
    あの時、本当に辛かった。真夏の練習。それが終わってからヘトヘトになって帰宅。
    蝉時雨、蝉時雨、蝉時雨。
    映像だけじゃない。音だって思い浮かべることができるんだよな。これも意識の一つなんだろうけど。

    Chat GPTに聞いてみた結果。分かったような、分かってないような。

    意識とは、知覚、思考、感情、判断、判断力、自己認識など、人間の認知機能の中心的な概念の一つです。つまり、私たちが自分自身、周囲の環境、そして私たちが持つ思考や感情に対して「意識」を持っているということです。

    意識は、認知的な過程として、我々の知覚や感覚から発生し、人間の脳が情報を処理する過程で生じます。これらの情報は、神経細胞間の化学的、電気的シグナルを介して伝達されます。

    意識には、自己認識、自己意識、選択的注意、睡眠や夢などの状態があります。ただし、意識がどのように発生するか、どのように脳の活動と関連しているかについては、科学的研究や哲学的な議論が続いています。

    Chat GPTの回答より