Skip to main content

自然言語でプログラミングを行うことができる新しいプログラミング言語

Project description

要件定義書: niwatoko - 自然言語プログラミング言語のPythonパッケージ

1. 目的

niwatoko は、自然言語でプログラミングを行うことができる新しいプログラミング言語です。このプロジェクトの目的は、niwatoko のPythonパッケージを開発し、ユーザーが自然言語を使ってプログラムを記述し、実行できるようにすることです。パッケージには、自然言語処理のための認識系AIと、プログラムの出力を生成するための生成AI(テキスト生成や画像生成)が組み込まれます。

2. パッケージの基本構造

niwatoko/
├── niwatoko/
│   ├── __init__.py
│   ├── parser.py
│   ├── interpreter.py
│   ├── foundation_model/
│   │   ├── recognition/
│   │   │   ├── stt/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── openai.py
│   │   │   │   └── claude.py
│   │   │   ├── vision/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── openai.py
│   │   │   │   └── claude.py
│   │   ├── interpretation/
│   │   │   ├── llm/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── openai.py
│   │   │   │   └── claude.py
│   │   │   ├── code/
│   │   │   │   ├── __init__.py
│   │   │   │   └── ...
│   │   ├── generation/
│   │   │   ├── image/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── openai.py
│   │   │   │   └── claude.py
│   │   │   ├── tts/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── openai.py
│   │   │   │   └── claude.py
│   └── utils/
│       ├── __init__.py
│       └── ...
├── tests/
│   ├── __init__.py
│   ├── test_parser.py
│   ├── test_interpreter.py
│   ├── foundation_model/
│   │   ├── recognition/
│   │   │   ├── test_stt.py
│   │   │   └── test_vision.py
│   │   ├── interpretation/
│   │   │   ├── test_llm.py
│   │   │   └── test_code.py
│   │   └── generation/
│   │       ├── test_image.py
│   │       └── test_tts.py
│   ├── test_docs/
│   │   ├── test_doc1.md
│   │   ├── test_doc2.md
│   │   └── test_doc3.md
│   └── ...
├── docs/
│   ├── conf.py
│   ├── index.rst
│   └── ...
├── README.md
├── LICENSE
├── setup.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
└── .github/workflows/
    ├── ci.yml
    └── cd.yml
  • niwatoko/: パッケージのメインディレクトリ。パーサー、インタープリター、AIモジュールなどが含まれます。
  • tests/: テストコードを格納するディレクトリ。
  • docs/: Sphinxを使用して生成されるドキュメントのソースファイルを格納するディレクトリ。
  • README.md: パッケージの概要、インストール方法、使用方法などを説明するファイル。
  • LICENSE: パッケージのライセンスを記載するファイル。
  • setup.py: パッケージのメタデータとインストール方法を定義するファイル。
  • requirements.txt: パッケージが依存する外部ライブラリを記載するファイル。
  • Dockerfile: Dockerイメージのビルド手順を記述するファイル。
  • docker-compose.yml: 複数のDockerコンテナを定義・実行するための設定ファイル。
  • .github/workflows/: GitHub ActionsによるCI/CDワークフローの設定ファイルを格納するディレクトリ。

3. setup.pyの書き方

from setuptools import setup, find_packages

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setup(
    name="niwatoko",
    version="0.1.0",
    description="A natural language programming language",
    long_description=long_description,
    long_description_content_type="text/markdown",
    author="Your Name",
    author_email="your.email@example.com",
    url="https://github.com/yourusername/niwatoko",
    packages=find_packages(),
    install_requires=[
        "numpy",
        "nltk",
        "tensorflow",
        "torch",
        "transformers",
        "pillow",
    ],
    classifiers=[
        "Development Status :: 3 - Alpha",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: MIT License",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
    ],
)
  • name: パッケージ名を指定します。
  • version: パッケージのバージョンを指定します。
  • description: パッケージの短い説明を記載します。
  • long_description: パッケージの詳細な説明を記載します。通常、README.mdの内容を指定します。
  • author: 作者名を記載します。
  • author_email: 作者のメールアドレスを記載します。
  • url: パッケージのWebサイトやリポジトリのURLを指定します。
  • packages: パッケージに含めるPythonモジュールを指定します。find_packages()を使用して自動的に検出できます。
  • install_requires: パッケージが依存する外部ライブラリを指定します。

4. init.pyの役割

__version__ = "0.1.0"

from .parser import parse
from .interpreter import interpret
  • __init__.pyは、パッケージの初期化処理を行うファイルです。
  • __version__変数を定義して、パッケージのバージョンを指定します。
  • パッケージの公開APIとなる関数やクラスを__init__.pyでimportすることで、ユーザーがパッケージを使用しやすくなります。

5. README.mdの書き方

# niwatoko

niwatoko is a natural language programming language that allows users to write programs using natural language. It is implemented as a Python package and includes recognition AI for natural language processing and generative AI for program output (text and image generation).

## Installation

To install niwatoko, use pip:

pip install niwatoko


## Usage

Here's a simple example of how to use niwatoko:

```python
from niwatoko import parse, interpret

program = """
Create a function that takes two numbers as input and returns their sum.
"""

ast = parse(program)
result = interpret(ast)
print(result)

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please read CONTRIBUTING.md for details on how to contribute to this project.

Support

If you have any questions or need support, please open an issue on the GitHub repository.


- パッケージの概要を説明します。
- インストール方法を記載します。
- 使用方法を具体的なコード例とともに説明します。
- ライセンスについて言及し、LICENSEファイルへのリンクを貼ります。
- 貢献方法について説明し、CONTRIBUTING.mdファイルへのリンクを貼ります。
- サポート方法を記載し、GitHubのissueページへのリンクを貼ります。

## 6. LICENSEファイル
- LICENSEファイルは、パッケージのライセンスを明記するためのファイルです。
- 主要なオープンソースライセンスには以下のようなものがあります。
  - MIT License: 非常に寛容なライセンスで、商用利用、修正、配布、私的利用が認められています。
  - Apache License 2.0: 商用利用、修正、配布、特許の使用が認められています。ライセンス条文の提供が必要です。
  - GNU General Public License (GPL): 強いコピーレフトライセンスで、派生物はGPLで公開する必要があります。
  - BSD License: MITライセンスと同様に寛容なライセンスですが、ライセンス条文の提供が必要です。

## 7. パッケージのバージョン管理
- セマンティックバージョニングに基づいて、MAJOR.MINOR.PATCH形式でバージョンを表現します。
- APIの互換性が損なわれる変更を行った場合は、MAJORバージョンを上げます。
- 後方互換性を保ちつつ機能を追加した場合は、MINORバージョンを上げます。
- バグ修正などの小さな変更は、PATCHバージョンを上げます。

## 8. テストの書き方
- テストファイルの命名規則は、`test_*.py`または`*_test.py`とします。
- テストクラスは、`unittest.TestCase`を継承して定義します。
- テストメソッドの命名規則は、`test_`で始めます。
- `assert`メソッドを使用して、期待する結果と実際の結果を比較します。
- `coverage.py`などのツールを使用して、テストのカバレッジを測定します。
- CLIコマンドの実行結果をキャプチャして、期待する出力と比較するテストを作成します。
- 異なるコマンドラインオプションを指定した場合のテストを作成します。
- エラー処理のテスト(不正な引数を渡した場合など)を作成します。

## 9. ドキュメントの作成方法
- Sphinxを使用してドキュメントを作成します。
- `sphinx-quickstart`コマンドを実行して、Sphinxプロジェクトを作成します。
- reStructuredText記法を使用して、ドキュメントのソースファイルを作成します。
- `"""docstring"""`を使用して、モジュール、クラス、関数のドキュメントを記述します。
- `conf.py`ファイルでSphinxの設定を行います。
- `make html`コマンドを実行して、HTMLドキュメントを生成します。

## 10. Docker化とCI/CDの設定
- `Dockerfile`を作成して、アプリケーションのDockerイメージをビルドします。
- `docker-compose.yml`ファイルを作成して、複数のDockerコンテナを定義し、実行します。
- DockerイメージをビルドしてDocker Hubなどのコンテナレジストリにプッシュします。
- GitHub Actionsを使用して、CI/CDパイプラインを設定します。
  - `ci.yml`ファイルでテスト、リンター、コードフォーマッターなどを実行します。
  - `cd.yml`ファイルでDockerイメージのビルドとプッシュ、デプロイメントを自動化します。

## 11. WebアプリケーションのUI設定
- Streamlitを使用してWebアプリケーションのUIを設定します。
  - `streamlit`ライブラリをインストールします。
  - `app.py`ファイルを作成し、Streamlitアプリケーションを定義します。
  - UIコンポーネントを配置し、入力を受け取り、処理結果を表示します。
- Gradioを使用してWebアプリケーションのUIを設定します。
  - `gradio`ライブラリをインストールします。
  - `app.py`ファイルを作成し、Gradioアプリケーションを定義します。
  - UIコンポーネントを配置し、入力を受け取り、処理結果を表示します。

パッケージの開発にあたっては、PEP 8などのPythonコーディング規約に従い、可読性と保守性を重視します。また、適切なモジュール化とオブジェクト指向設計を行い、拡張性と再利用性を高めます。

パッケージの公開には、PyPIを利用します。`setup.py`ファイルを適切に設定し、`python setup.py sdist bdist_wheel`コマンドでパッケージを作成した後、`twine upload dist/*`コマンドでPyPIにアップロードします。

CI/CDの設定には、GitHub Actionsを使用します。`.github/workflows/`ディレクトリにYAMLファイルを作成し、テスト、リンター、コードフォーマッター、Dockerイメージのビルドとプッシュ、デプロイメントなどの自動化タスクを定義します。



## メモ


はい、VercelでSphinxのドキュメントを公開することができます。Vercelは静的サイトホスティングに特化したサービスで、Sphinxのような静的サイトジェネレーターとの相性が良いです。

Vercelを使ってSphinxドキュメントを公開する手順は以下の通りです。

1. Sphinxプロジェクトをビルドする
```bash
sphinx-build -b html . _build/html && open _build/html/index.html
  1. Vercel用の設定ファイル vercel.json をプロジェクトルートに作成する
{
  "version": 2,
  "builds": [
    {
      "src": "*.html",
      "use": "@vercel/static"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/_build/html/$1"
    }
  ]
}

この設定では、_build/html ディレクトリ以下の静的ファイルを公開するように指定しています。

  1. Vercelにプロジェクトをデプロイする
    VercelのCLIをインストールし、プロジェクトルートで以下のコマンドを実行します。
$ vercel --prod

Vercelのコマンドが見つからないというエラーが発生していますね。 VercelのCLIがインストールされていない可能性があります。

以下の手順でVercel CLIをインストールしてください。

  1. Node.jsとnpmがインストールされていることを確認する
    Vercel CLIはNode.jsとnpmを使用するため、あらかじめインストールしておく必要があります。ターミナルで以下のコマンドを実行し、バージョンが表示されればインストール済みです。
$ node -v
$ npm -v
  1. Vercel CLIをインストールする
    npmを使ってVercel CLIをグローバルにインストールします。
$ npm install -g vercel
  1. インストールを確認する
    インストールが完了したら、以下のコマンドでバージョンを確認します。
$ vercel --version

バージョンが表示されれば、Vercel CLIのインストールは成功です。

  1. Vercelにログインする
    Vercel CLIを使ってデプロイするには、Vercelアカウントにログインする必要があります。以下のコマンドを実行し、メールアドレスとパスワードを入力してログインします。
$ vercel login

以上の手順でVercel CLIをインストールし、ログインができたら、再度 vercel --prod コマンドを実行してデプロイしてみてください。 Vercel CLIが正しくインストールされていれば、デプロイが開始されるはずです。 すると、プロジェクトがVercelにデプロイされ、割り当てられたURLが表示されます。

  1. 自動デプロイの設定(オプション)
    VercelはGitHubなどのリポジトリと連携して、pushされたら自動でデプロイすることもできます。Vercelのダッシュボードからプロジェクトの設定を行うことで簡単に自動デプロイを設定できます。

以上の手順により、VercelでSphinxドキュメントを公開することができます。 Vercelは無料プランでも十分な機能を提供しているため、手軽にSphinxドキュメントをホスティングするのに適したサービスと言えます。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

niwatoko-1.2.1.tar.gz (36.9 kB view details)

Uploaded Source

Built Distribution

niwatoko-1.2.1-py3-none-any.whl (47.6 kB view details)

Uploaded Python 3

File details

Details for the file niwatoko-1.2.1.tar.gz.

File metadata

  • Download URL: niwatoko-1.2.1.tar.gz
  • Upload date:
  • Size: 36.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for niwatoko-1.2.1.tar.gz
Algorithm Hash digest
SHA256 2d4b621f1017d616b8df52e46950c6ebce0f2ec705a08228a284b290464d7062
MD5 29d7b4b1ced13b06cc3e1adbeea66403
BLAKE2b-256 b50bce8d2a4222c8c28c4e2f316f3ae6304b1b255bcece64b46dad2444ca0898

See more details on using hashes here.

File details

Details for the file niwatoko-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: niwatoko-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.5

File hashes

Hashes for niwatoko-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b666ffd428fc0f04f19550027b7b497c07d97a6424d54388d56938561dec4768
MD5 5234b7e410fdeeca99836fb807176fa9
BLAKE2b-256 9d881eb82bed011191f18af9c0633b6e3c3144f9d0985338507c3b2244d38d48

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page