ChatGPTとペアプログラミング:GPT-3.5のBashスクリプト習熟度を検証してみた
ここ数週間、人工知能や自然言語処理、特にOpenAIの最新GPTモデルについて、多くの話題を目にしてきた方も多いでしょう。
GPT-3.5のリリース、そして何より画期的な新ツール「ChatGPT」の登場は、間違いなく大きな飛躍です。
不動産契約書や遺言書の作成をAIに依頼する人が現れ、さらにはプログラミングコードの生成まで可能になったと聞いたことがあるかもしれません。この記事では、少し違った角度からこのツールに迫ります。
学習の補助として動画版をご覧になりたい方は、こちらからどうぞ。
ChatGPTとBashスクリプティングを実験してみる
私はChatGPTがLinuxのBashスクリプティングをどの程度扱えるのか試してみることにしました。しかし(ネタバレ注意!)ツールの提案——良いコードも悪いコードも——を一つずつ検証していくうちに、目の前にあるさらに強力なメリットに気づき始めました。それは、非常に頼りになるパートナーとペアプログラミングをする機会だということです。
結局、AIは私の問題を解決できませんでした。しかし、その失敗の仕方こそが実に興味深いものでした。そして、AIが新しい答えを探し求める様子を見守るのは、まさに圧巻の体験でした。
1回目の挑戦——ChatGPTが問題解決に挑む
それでは、実際にどうなったのか見ていきましょう。以下は、私がAIに入力したプロンプトの概要です。
「YouTube動画のURLを入力として受け取り、yt-dlpを使ってそのURLから動画をダウンロードし、ファイル名を'myvideo.mp4'に変更するBashスクリプトを書いてください」
数秒後、ChatGPTはスクリプトを作成すると伝えてきました。生成されたコードがこちらです。
#!/bin/bash
# ユーザーにYouTube動画のURLを入力させる
read -p "Enter YouTube video URL: " url
# yt-dlpを使ってYouTubeから動画をダウンロード
yt-dlp $url
# ダウンロードした動画ファイルの名前を取得
yt-dlp $url
# ダウンロードした動画のファイル名を "myvideo.mp4" に変更
mv video-filename.mp4 myvideo.mp4
AIは明らかにBashスクリプトとは何か、そしてコードをどう提示すべきかを理解しています。各行に適切なコメントまで付けてくれました。ユーザーへの入力促進を正しく行い、入力された文字列をurlという変数に格納する方法も知っています。
さらに、yt-dlpというプログラムの存在とその仕組みも把握しており、提供されたURLを適切に渡しています。そして少なくとも、ダウンロードした動画をmyvideo.mp4にリネームしようとはしました。ところが、ダウンロード後のファイル名がvideo-filename.mp4だと決めつけた時点で、すべて崩れてしまいました。おっと。
いずれにせよ、AIは親切にも、このコードからスクリプトを作成して実行する方法まで教えてくれました。
2回目の挑戦——ChatGPTが自ら修正する
最初のフォローアップで明らかな間違いを指摘すると、数秒後にChatGPTは自らの誤りを認め、改善版を提案してきました。
「おっしゃる通りです。私が提供したスクリプトは、ダウンロードした動画がvideo-filename.mp4という名前で保存されることを想定しているため、期待通りには動作しません。しかし、これは保証されていません。これを修正するには…」
AIがこのプロセスに完全に没頭している様子は、本当に驚くべきものです。最初のコードを覚えており、私の不満を聞き、理解し、解決策を考え抜いているのです。2回目の試みがこちらです。
#!/bin/bash
# ユーザーにYouTube動画のURLを入力させる
read -p "Enter YouTube video URL: " url
# yt-dlpを使ってYouTubeから動画をダウンロード
yt-dlp $url
# ダウンロードした動画ファイルの名前を取得
filename=$(basename $url)
# ダウンロードした動画のファイル名を "myvideo.mp4" に変更
mv $filename.mp4 myvideo.mp4
なるほど、この解決策が一見正しそうに見える理由は分かります。basenameはLinuxのツールで、ファイルシステム上のディレクトリ部分を取り除き、純粋なファイル名だけを残せるものだからです。
問題は、変数urlに格納されているのがローカルのファイル名ではなく、インターネット上のアドレスだということです。これは確実に動きません。
3回目の挑戦——ChatGPTが再び試みる
そこで私は再度、それがこの用途に適したツールではないと説明しました。するとChatGPTは再挑戦します。
#!/bin/bash
# ユーザーにYouTube動画のURLを入力させる
read -p "Enter YouTube video URL: " url
# URLからファイル名を抽出
filename=$(basename $url)
# yt-dlpで動画をダウンロードし、ファイル名を指定
yt-dlp -o $filename $url
# ダウンロードした動画のファイル名を "myvideo.mp4" に変更
mv $filename.mp4 myvideo.mp4
今度は、yt-dlpのドキュメントを把握したことが示されています。-o引数を使ってダウンロード中の動画に名前を付け、basenameが機能するようにしたのです。イテレーションを重ねるごとに、AIはコピー&ペースト用の更新版コードを提供してくれます。
もちろん、これでも動きませんでした。次の試みでは、AIが少し焦り始めたように感じられました。
最初でうまくいかなくても……少なくとも学びは得られる
次の1〜2回の試みは省略します。ここで別の問題に行き当たったからです。YouTubeからの動画は必ずしもMP4とは限らず、MKVやWEBMの場合もあります。この不確実性がファイル名の扱いに影響するため、ChatGPTにコードへ組み込むよう依頼しました。
#!/bin/bash
# ユーザーにYouTube動画のURLを入力させる
read -p "Enter YouTube video URL: " url
# URLからファイル名を抽出
filename=$(basename $url)
# yt-dlpで動画をダウンロードし、フォーマットとファイル名を指定
yt-dlp -F mp4 -O $filename $url
# ダウンロードした動画のファイル名を "myvideo.mp4" に変更
mv $filename.mp4 myvideo.mp4
これも動かないと報告すると、AIは混乱し始めました。まず-Fオプションには有効な動画フォーマットが必要だが「mp4」は無効だと言い、次に有効なオプションの一覧を示したのですが、その中になぜか「mp4」が含まれていました。
AIの提案がどれもうまくいかなくなると、ついに諦めて、マシンにyt-dlpが実際にインストールされているか確認するよう助言し、その手順まで教えてくれました。
私もここで諦めるのが良い判断だと考えました。驚くほど健闘しており、問題を解決できなかったとしても、有用な構文をいくつも示してくれ、私自身の思考を刺激してくれました。
ちなみに興味がある方のために、実際に動作するスクリプトがどうなるかをお見せします。
#!/bin/bash
# ユーザーにYouTube動画のURLを入力させる
read -p "Enter YouTube video URL: " url
# yt-dlpを使ってYouTubeから動画をダウンロード
yt-dlp $url
# ダウンロードした動画ファイルの名前を取得
original_filename=$(ls | awk '/mp4/ || /webm/ || /mkv/')
# ダウンロードした動画のファイル名を "myvideo.mp4" に変更
mv "$original_filename" /home/ubuntu/vids/myvideo.mp4
最初の2行はChatGPTの提案どおりです。その後、私はカレントディレクトリ内の全ファイルを一覧表示し、awkでmp4、webm、mkvのいずれかを含むファイル名だけをフィルタリングして、ファイル名を特定します(ディレクトリ内に常に動画ファイルが1つしか存在しない前提です)。
こうして得られたファイル名はoriginal_filename変数に格納されます。次に、この変数をmvコマンドの一部として使い、ファイルをmyvideo.mp4にリネームします。私の見る限り、実際に送信されたフォーマットが何であっても、これで動作するはずです。
まとめ
人工知能は今日の時点で実務的なプログラミングタスクに対応できる準備が完全に整っているわけではありません。しかし、明日……あるいは来年のどこかで到達することに賭けない、とは言えないでしょう。
それまでも、難しいプログラミング課題に直面したときは、ChatGPTのようなツールとの協働を心からおすすめします。
二人の頭脳は(ほぼ)常に一人より優れているのですから。
YouTubeチャンネル(登録歓迎)に加えて、私のウェブサイトでは記事、書籍、講座など、さまざまなテクノロジー関連コンテンツへのリンクを公開しています。
-
Guider – Linux システム全体を徹底分析する究極のパフォーマンスアナライザー
Guiderは、主にPythonで記述されたフリーかつオープンソースの強力なシステム全体パフォーマンス分析ツールです。Linux OS向けに提供されています。 このツールは、システムリソースの使用量を測定し、システムの挙動をトレースすることを目的として設計されています。そのため、パフォーマンス上の問題を効率的に分析したり、チューニングを行ったりすることが容易になります。 CPU、メモリ、ディスクの使用状況をスレッド単位・プロセス単位・システム関数(ユーザー/カーネル)レベルで詳細に表示できるため、異常なシステムパフォーマンスの原因を突き止めたり、システム全体の性能向上を図ったりするのが非常に簡
-
Linuxでファイル名を変更する2つの簡単な方法:mvとrenameコマンドの使い分け
この記事では、Linux環境でファイルや複数ファイルの名前を変更するための、2つの異なる方法を解説します。 mvコマンドとrenameコマンドの使い方、そしてそれぞれのコマンドを使い分ける理由について詳しく見ていきましょう。 mvコマンドでのファイル名変更 – もはや推奨されない方法 まずは具体例から始めます。Webディレクトリ内のファイル拡張子が何らかの理由で壊れてしまった状況を想定しましょう。ここではブログのファイルを使用します。 ping www.linuxscrew.com #まず接続確認 wget -m www.linuxscrew.com #サイトをミラーリング これでウェブサイト