話題のCode InterpreterでChatGPT環境にNode.jsをインストールしてみる


インストールというか環境に設置だけ出来たって話です。 2023年7月12日時点話題ですが、ちょっとしたらやれるようになりそうな気がしますよね。

（半分釣りタイトルになってしまいました。期待した人すみません。）

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コードインタープリターやばいなぁ、プログラム実行してミスがあったら自分でエラー調べて修正コード実行してまたエラー出たら直して...を再帰的にやってくれる <a href="https://twitter.com/hashtag/chatgpt?src=hash&amp;ref_src=twsrc%5Etfw">#chatgpt</a> <a href="https://twitter.com/hashtag/CodeInterpreter?src=hash&amp;ref_src=twsrc%5Etfw">#CodeInterpreter</a> <a href="https://twitter.com/hashtag/python?src=hash&amp;ref_src=twsrc%5Etfw">#python</a> <a href="https://t.co/YS6kg3GBBR">https://t.co/YS6kg3GBBR</a> <a href="https://t.co/KB0GLQL2ou">pic.twitter.com/KB0GLQL2ou</a></p>&mdash; 菅原のびすけ （プロトアウト9期募集中) (@n0bisuke) <a href="https://twitter.com/n0bisuke/status/1679033448080498688?ref_src=twsrc%5Etfw">July 12, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## Python使えるらしいけどNode.js使えないのかな

コードインタープリター、話題ですね。

Code InterpreterはPythonの実行ができますが、Node.jsなど他の実行環境は使えないみたいです。

数日前の使えるようになったタイミングでもこんなこと言われてました。

> ![スクリーンショット 2023-07-12 16.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/11931fe3-da1e-32fe-f805-3bcb7fd81c42.png "スクリーンショット 2023-07-12 16.25.48.png")

## ネットワークには繋がらない問題

Pythonのコードを実行できたりしますが、環境上ネットワークに繋げられない制約とのことです。

[volta](https://volta.sh/)というNode.jsのインストーラーを入れようかと思いお願いしてみましたが、ネットワークアクセスは禁止していてcurlとかは使えない模様でした。

`curl https://get.volta.sh | bash` これを実行してください。

> ![スクリーンショット 2023-07-12 16.30.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/0810461b-5a93-c46b-2269-df690070fa1e.png "スクリーンショット 2023-07-12 16.30.20.png")

## データをアップロードすると扱えるらしい

こちらの記事を見てたら日本語フォントをアップロードして使うことができていました。

https://blog.kinto-technologies.com/posts/2023-07-11-ChatGPT-GPT4-Code-Interpreter-%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E5%AF%BE%E5%BF%9C/

**ということはNode.jsのバイナリをアップロードしたらいけそうなのでは？**

## Node.jsのインストールにチャレンジ

バイナリファイルをDLして環境で実行できないか試してみます。

### ファイルをDL - Linux x86_64（AMD64）

バイナリは何をDLするべきかって話ですが、 **環境はLinuxベースのx86_64（AMD64）** と教えてくれました。

> ![スクリーンショット 2023-07-12 16.34.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/eb914b0b-2a58-3515-9ce4-183bcaede08a.png "スクリーンショット 2023-07-12 16.34.51.png")

ということでLinux Binaries (x64)をDLしてみます。

> ![スクリーンショット 2023-07-12 16.35.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/46a90fe0-4891-e16b-3df5-34fc7a2a6c7c.png "スクリーンショット 2023-07-12 16.35.59.png")

### ファイルの解凍

DLすると圧縮ファイル形式なので、アップロードして解凍してもらいます。

> ![スクリーンショット 2023-07-12 16.46.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/4524cc44-f678-05e6-2584-beaa152fb310.png "スクリーンショット 2023-07-12 16.46.05.png")

> ![スクリーンショット 2023-07-12 16.46.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/1452a91b-9442-a972-18c6-ad5ea4fbdc33.png "スクリーンショット 2023-07-12 16.46.33.png")

無事に解凍してもらえたみたいです。

**`/mnt/data/nodejs-x64`** に保存される模様です。

ちなみにChatGPTが書いたここでのコードはこんな感じらしいです。記事の最後に書きますが、このコードになるまで自分でデバッグ繰り返してくれました。恐ろしい。。

```python
# Import the tarfile and os modules again
import tarfile
import os

# Define the path of the new tar file
tar_file_path = "/mnt/data/node-v18.16.1-linux-x64.tar.xz"

# Define the directory where to extract the new tar file
extract_dir = "/mnt/data/nodejs-x64"

# Create the directory if it doesn't exist
os.makedirs(extract_dir, exist_ok=True)

# Open the tar file
with tarfile.open(tar_file_path, "r:xz") as tar:
    # Extract the tar file
    tar.extractall(path=extract_dir)

# List the files in the extracted directory
os.listdir(extract_dir)
```

### 解凍されたフォルダ内のファイルを教えてもらう

問題なく進んできたので一覧表示してもらいます。

> ![スクリーンショット 2023-07-12 16.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/54971fd9-867f-9e59-db41-ac3c2370a096.png "スクリーンショット 2023-07-12 16.51.49.png")

本体がいそうな`bin`フォルダ内が気になりますね。

さらに聞いたら一覧が表示されました。

> ![スクリーンショット 2023-07-12 16.53.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/349ef289-0d09-abce-2b11-e76f3890ffed.png "スクリーンショット 2023-07-12 16.53.04.png")

### "/mnt/data/nodejs-x64/node-v18.16.1-linux-x64/bin/node"としてインストールできた

パスを通してないですが、この場所に展開できた模様です。

```
/mnt/data/nodejs-x64/node-v18.16.1-linux-x64/bin/node
```

> ![スクリーンショット 2023-07-12 16.59.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/d95fecca-0f0e-0ea9-a2b3-c69f530edecd.png "スクリーンショット 2023-07-12 16.59.29.png")

### 実行権限を付与

念の為バイナリに実行権限を付与しておきます。

> ![スクリーンショット 2023-07-12 17.40.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/9c6ef930-f98f-38d8-c318-b6e62036e729.png "スクリーンショット 2023-07-12 17.40.08.png")

`os.chmod`は使えるみたいですね。

```python
# Import the tarfile and os modules again
import tarfile
import os
import stat

# Open the tar file
with tarfile.open(tar_file_path, "r:xz") as tar:
    # Extract the tar file
    tar.extractall(path=extract_dir)

# Change the permissions of the node binary to add the execute permission
os.chmod(node_bin_path, os.stat(node_bin_path).st_mode | stat.S_IEXEC)

# Check the permissions of the node binary
os.stat(node_bin_path)
```

### インストール"は"できたっぽい

ぽいって感じですが。。。実行は怪しい雲行き。

> ![スクリーンショット 2023-07-12 17.13.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/02acaf6a-e4ba-006e-0a96-d9aa979b19d5.png "スクリーンショット 2023-07-12 17.13.43.png")

## 実行してみる

まずはそのまま実行してみると予想通りの反応です。
**Pythonのみサポートと怒られます。**

> ![スクリーンショット 2023-07-12 17.02.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/88dba06d-98fb-bc68-0f76-6088f7154a71.png "スクリーンショット 2023-07-12 17.02.15.png")

### PythonのみサポートらしいのでPythonで実行してもらう

PythonのみサポートらしいのでPythonからShell実行してもらいます。

Pythonだと`subprocess`を使えばシェルコマンド実行できるっぽいので以下をお願いしてみます。

```python
subprocess.run(["/mnt/data/nodejs-x64/node-v18.16.1-linux-x64/bin/node"], shell=True)
```

> ![スクリーンショット 2023-07-12 17.09.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/9ab8a9f3-4233-e06e-6e84-15e326937772.png "スクリーンショット 2023-07-12 17.09.30.png")

ぐぬぬ。。

まぁそうですよね。subprocessは使えないようにしてる模様です。

`os.system()`だとどうでしょ？

> ![スクリーンショット 2023-07-12 17.14.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/e0985c06-a93d-9d3d-a387-099e83043356.png "スクリーンショット 2023-07-12 17.14.18.png")

うん、まぁ予想通り。この辺が一旦限界ですかねぇ。

### 悪あがきでSeleniumからJavaScriptを実行...?

まぁ予想通りですが、これもできないです。

> ![スクリーンショット 2023-07-12 17.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/69969f3d-e921-3500-3843-10d96141777a.png "スクリーンショット 2023-07-12 17.16.28.png")

参考:

https://selenium-world.net/selenium-tips/3948/

## まとめ

ファイルの解凍と設置、ファイルの一覧表示などはできて、権限付与もできて、 **Node.jsのインストールっぽい状態まではいけた** 感じがします。実行ができない状態です。

- できなかった
	- ネットワークアクセス
	- Python以外のプログラミング実行
	- シェルコマンドの実行
		- Pythonでもsubprocessやos.systemなどのコマンド実行系はできない
- できた
	- ファイルの一覧取得
	- 解凍
	- ファイルに権限の付与

### コードを書く => エラーが出て直すを再帰的にやってくれる がすごかった

最後によもやま話です。

現状やれることは限られてますが、これ使ってみててやばいなって思ったポイントです。

途中の解凍して一覧表示する際に何回かChatGPT自身でエラーがでて、コードを修正てしを繰り返してくれていました。

エンジニアたちがやるようなプロセスを勝手にやってくれるの凄すぎますね。

現時点だとローカルでの処理が出来るので、 **データ分析のためにPython勉強してますって人はもう現時点で（勉強）要らないかも** しれませんね。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コードインタープリターやばいなぁ、プログラム実行してミスがあったら自分でエラー調べて修正コード実行してまたエラー出たら直して...を再帰的にやってくれる <a href="https://twitter.com/hashtag/chatgpt?src=hash&amp;ref_src=twsrc%5Etfw">#chatgpt</a> <a href="https://twitter.com/hashtag/CodeInterpreter?src=hash&amp;ref_src=twsrc%5Etfw">#CodeInterpreter</a> <a href="https://twitter.com/hashtag/python?src=hash&amp;ref_src=twsrc%5Etfw">#python</a> <a href="https://t.co/YS6kg3GBBR">https://t.co/YS6kg3GBBR</a> <a href="https://t.co/KB0GLQL2ou">pic.twitter.com/KB0GLQL2ou</a></p>&mdash; 菅原のびすけ （プロトアウト9期募集中) (@n0bisuke) <a href="https://twitter.com/n0bisuke/status/1679033448080498688?ref_src=twsrc%5Etfw">July 12, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ネット接続や他言語の実行とかも出来るようになっていったらいよいよコード書かなくていい時代に...みたいなこと思ってましたがもうこれはその時代になったと思っていいんでしょうね。 

現時点だと特定の領域に限られますが時間の問題な感じがすごいです。

考えさせられます。