Replit Agent 触ってみた4

tl;dr

  • マークダウンサポート実装: Replit Agentを用いて、Markdownの入力・プレビュー・レンダリング機能の実装状況とその動作を確認した。
  • クラッシュ問題のデバッグ: ポート競合などのエラー発生時に、プロセス停止や設定ファイルの見直しなどで問題解決を試みた。
  • Agentの能力と限界: 問題解決への積極的なアプローチと、実際の動作における人間の直感に及ばない部分の両面について考察した。

1. Replit Agent によるマークダウンサポート実装の詳細

今回は マークダウンサポートを実装する。まず、react-markdownremark-gfm がプロジェクトにインストールされた。

スクリーンショット 2025-01-25 9.54.17

Message 欄にこのようにマークダウンを入力する。

スクリーンショット 2025-01-25 10.13.57

プレビューもできる

スクリーンショット 2025-01-25 10.14.51

投稿した後のメッセージもこのようにマークダウンがレンダリングされている

スクリーンショット 2025-01-25 10.23.32

2. Replit Agent によるアプリケーションクラッシュ問題のデバッグ

と、ここまでは順調に進んでいたが、急にアプリケーションが表示されなくなってしまった。

サーバーは起動しているようなのだが、どうもアプリにアクセスできない。ポート5000番が競合している可能性があります、とのこと。

Error: listen EADDRINUSE: address already in use 0.0.0.0:5000

そこで修正もお願いすると killall コマンドを使ってプロセスを停止しようとしているのだが、そもそも killall コマンドが見つからない。

スクリーンショット 2025-01-25 10.29.39

しょうがないのでアシスタントのほうに聞いてみた。 pkill -f "tsx server/index.ts" でプロセスを停止するとのこと。それをシェルから実行した。

スクリーンショット 2025-01-25 10.31.41

その後、Replit Agent はエラーログを分析し、TypeScript のコンパイルエラートップレベルの await が原因であることを示唆し、実際に tailwind.config.tsvite.config.ts などの設定ファイルに問題がないかを確認したり、db/index.tsserver/routes.ts にログ出力処理を追加したりしていた。さらにデータベース接続の初期プロセスでの構文エラーも修正してくれた。

スクリーンショット 2025-01-25 11.21.00

また、ポート設定を環境変数で明示的に指定するように変更し、問題を解決しようと試みていた。

データベース接続自体は成功していたものの、テーブルが作成されていない可能性も考慮し、Agent が自律的に調査を行った。この過程で、Replit 環境の動的なホスト名に対応するために、process.env.REPL_SLUGprocess.env.REPL_ID を使用してホスト名を構築することが提案された。

スクリーンショット 2025-01-25 11.41.39

少々めんどくさいが、最後に正常動作していた状態に戻すことにした。checkpoint を探し、rollback ボタンを押して以前の状態に戻した(チャットをさかのぼらなければならないのが面倒だったが)。

ロールバックを試みるも、今度はシステムの反応が遅いとのこと。「再試行させていただきます」と言っていたものの、AI が勝手にやってくれるわけではなく、結局自分でロールバックした。

スクリーンショット 2025-01-25 13.14.54

しかし、これらの試行錯誤にもかかわらず、アプリケーションのクラッシュ問題は解決に至らなかった。Replit の環境そのものに起因するのではないかと思っている。

3. Replit Agent の能力と限界

Replit Agent の能力

  • 問題解決への意欲と具体的な行動: Replit Agent は、与えられたタスクに対して単に指示通りに実行するだけでなく、積極的に追加機能を提案して問題解決のために様々なアプローチを試みる意欲を示した。例えば、マークダウンサポートの実装時に、絵文字リアクションや返信スレッドといった追加機能まで提案していた。また、アプリケーションのクラッシュ問題が発生した際には、エラーログの分析、設定ファイルの確認、コード修正、サーバー再起動など、様々な解決策を根気強く試行していたのが強く印象に残った。
  • 人間のような思考プロセス: Replit Agent は、まるで人間がデバッグを行うように、仮説を立て、検証し、問題の切り分けを試みるなど、段階的に問題解決を進めようとした。
  • 高いコミュニケーション能力: Replit Agent は、質問、提案、確認、状況報告 など、様々な場面で丁寧なコミュニケーションを心がけているように感じた。不明な点があれば、曖昧な表現を使わずに具体的な質問で確認を行い、提案をする際も理由やメリットを丁寧に説明してくれる。状況が変化した場合や作業が完了した場合など、適切なタイミングで状況報告も行ってくれた。例えば、「エラーログを確認しましたが、原因を特定できませんでした。他に確認すべき点はありますでしょうか?」 と質問したり、「設定ファイルの修正が完了しました。アプリケーションを再起動して、動作確認をお願いします。」 と状況報告を行っていた。

Replit Agent の限界

  • 人間の知識や経験、直感に及ばない部分: AIアシスタントは、過去のデータやパターンに基づいて問題解決を試みるが、人間のような長年の経験や、そこから培われる直感的な判断力には及ばない。アプリケーションクラッシュ問題のデバッグにおいても、経験豊富なプログラマーであれば、エラーログを見ただけで、過去の類似事例から問題の根本原因を直感的に推測し、効率的に原因を特定できた可能性がある。