ChatGPTのCLIアプリケーションを作成し、公開するまでの流れ
この記事は?
OpenAI社のChatAPIを使用し、ターミナル上にChatGPTを組み込むためのライブラリを公開するまでの流れを記述しています。
想定する動作環境は下記の通りになります。- 端末: Intel Mac
- OS: MacOS (Monterey v12.6.1)
- 言語: Ruby (v2.6.10p210)
- ツール: Bundler (v2.4.9)
完成したもの
Github上に作成したものを公開しています。気になる方はコードを見てみてください。
雛形の作成
ただし、雛形を作成する前に自分が公開したい名前と同じ名前のパッケージが存在しないか確認したほうが、後々スムーズにことが進むと思います。
パッケージ名は下記コマンドかRubyGemsのサイトで確認できます。
$gem search YOUR_PACKAGE_NAME
依存パッケージのインストール
$bundle gem xxxx -b
コマンドによって作成されたディレクトリ内のxxxx.gemspec
ファイルに依存関係を記述していきます。(パッケージ名がchat_cli
の場合はchat_cli.gemspec
というファイル名になります。以降は任意のパッケージ名の箇所をchat_cli
とします。)
今回は、下記の3つのパッケージを記述します
-
thor
CLIアプリケーションを作成するためのフレームワーク -
ruby-openai
OpenAIのAPIクライアント -
dotenv
APIキー管理用のパッケージ
Gem::Specification.new do |spec|
...
+ spec.add_dependency, 'thor', '~> 1.2'
+ spec.add_dependency, 'ruby-openai', '~> 3.6'
+ spec.add_dependency, 'dotenv', '~> 2.8'
end
gemspecファイルの記載
Gem::Specification.new do |spec|
spec.name = "chat_cli"
...
- spec.summary = "TODO: Write a short summary, because RubyGems requires one."
- spec.description = "TODO: Write a longer description or delete this line."
- spec.homepage = "TODO: Put your gem's website or public repo URL here."
+ spec.summary = "print Hello."
+ spec.description = "print Hello."
+ spec.homepage = "https://rubygems.org/gems/chat_cli"
spec.required_ruby_version = ">= 2.6.0"
- spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
+ spec.metadata["allowed_push_host"] = "https://rubygems.org/gems/chat_cli"
spec.metadata["homepage_uri"] = spec.homepage
- spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
- spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
+ spec.metadata["source_code_uri"] = "https://github.com/M01tyan/chat_cli"
...
end
.gemspec
のファイルの記述ができたら、$bundle install
コマンドで依存関係をインストールしておきます。
パッケージの作成
実際にパッケージの中身を記載していきます。
今回はThor
フレームワークを使った場合の記述をしていくため、フレームワークを使わない場合や、その他のフレームワークを使用した場合とは多少異なる可能性があります
1. CLIクラスの作成
CLIクラスの中身はコマンドを記述します。下記ではHello
というだけのコマンドを記載してあります。
実際に作成したコードをみたい方はGithubを参照してください。
+ require "thor"
require_relative "chat_cli/version"
module ChatCli
class Error < StandardError; end
+ class CLI < Thor
+ desc "hello", "print Hello."
+ def hello
+ say "Hello"
+ end
+ end
end
2. コマンド実行時にCLIクラスの起動
#!/usr/bin/env ruby
require "chat_cli"
+ ChatCli::CLI.start
作成したパッケージは、$bundle exec exe/chat_cli hello
で実行することができます。
上記コマンドで実行できない場合は、事前に$bundle install
コマンドを実行して、依存関係をインストールしておく必要があります。
パッケージのビルド
$bundle exec rake build
↑こちらのコマンドを実行して、.gem
のパッケージを作成します。.gem
ファイルはプロジェクトディレクトリのpkg/chat_cli-0.1.0.gem
として作成されます。
公開前の動作確認
$gem install pkg/chat_cli-0.1.0.gem
↑こちらのコマンドで公開する前にローカルにgemをインストールして挙動を確認することができます。
また、アンインストールするには↓こちらのコマンドで行えます
$gem uninstall chat_cli
rubygemsにアカウントの作成
↑こちらのリンクからrubygemsにアカウントを作成します。
アカウント作成後は、ターミナルを認証させるために、下記コマンドを実行する必要があります
$curl -u ユーザの名前 https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials
(Homeディレクトリに.gem
ディレクトリが存在しない場合は、作成して上で実行してください)
公開🎉
$gem push pkg/chat_cli-0.1.0.gem
↑こちらのコマンドでビルドしたgemファイルを公開します。
公開されたかどうか確認するためにRubyGemsのサイトで検索してみてください。
Discussion