Skip to main content

Abstract Programming Language Package Manager

Project description

"grimo" のREADMEに含めるすべてのリードインを記述します。

抽象プログラミング言語パッケージマネージャー「grimo」

0. 利用方法

* 現在パッケージマネージャーは各々ご自身のAWSアカウントにおけるS3バケットに格納する形になっています。 バージョンアップに従って、全員共有バケットにする予定です。

  1. grimo のインストール

    pip install grimo
    
  2. AWS S3 バケットの作成

    grimo では、パッケージを AWS S3 バケットに保存します。 まだ S3 バケットを作成していない場合は、AWS マネジメントコンソールから "grimo" という名前のバケットを作成してください。

  3. AWS 認証情報の設定

    grimo が S3 バケットにアクセスできるように、AWS の認証情報を設定する必要があります。 環境変数 AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_ID に、それぞれあなたの AWS シークレットアクセスキーとアクセスキー ID を設定してください。

    export AWS_SECRET_ACCESS_KEY=xxx
    export AWS_ACCESS_KEY_ID=xxx
    

コマンドラインオプション

grimo では、以下のコマンドラインオプションが利用可能です。

                        利用可能なサブコマンド
    install             パッケージをインストールする(利用可)
    upload              パッケージをアップロードする(利用可)
    search              パッケージを検索する(利用可)
    update              パッケージをアップデートする(未開発)
    uninstall           パッケージをアンインストールする(未開発)

パッケージのアップロード

grimo upload コマンドを使って、独自のパッケージをアップロードできます。パッケージは以下のディレクトリ構造で作成してください。

project/
├── package_name/
│   ├── metadata.toml # パッケージのメタデータ
│   ├── def.md # パッケージの定義
│   ├── util.md # パッケージのユーティリティ
│   ├── var.md # パッケージの変数
│   └── ...

metadata.json ファイルには、パッケージのメタ情報を以下のように記述します。

{
  "name": "package_name",
  "version": "1.0.0",
  "language": "python",
  "description": "package_description",
  "category": "ai",
  "tags": [
    "tool",
    "development"
  ]
}

パッケージをアップロードするには、package_name ディレクトリで以下のコマンドを実行します。

grimo upload .

検索コマンド

grimo search コマンドは、指定されたクエリに基づいてパッケージを検索するために使用されます。 以下のように使用します。

grimo search <query> [オプション]

引数

  • <query>: 検索クエリを指定します。 例: grimo search "banner"

オプション

  • -l, --language <言語>: 検索対象の言語を指定します。
  • -c, --category <カテゴリ>: 検索対象のカテゴリを指定します。
  • -t, --tags <タグ>: 検索対象のタグを指定します。 複数のタグをスペースで区切って指定できます。

  • 基本的な検索:

    grimo search "example query"
    
  • 言語を指定して検索:

    grimo search "example query" --language "python"
    
  • カテゴリを指定して検索:

    grimo search "example query" --category "utilities"
    
  • タグを指定して検索:

    grimo search "example query" --tags "tag1" "tag2"
    

パッケージのインストール

grimo install コマンドを使って、パッケージをインストールできます。 インストールされたファイルは grimoires ディレクトリに格納されます。 以下のようなバージョン指定ルールがサポートされています。

  1. 特定バージョンの指定:

    grimo install <package>@3.3.2
    

    上記の例では、バージョン 3.3.2 を厳密に指定してインストールします。

  2. バージョンの範囲指定:

    grimo install "<package>@[3.3.2, 3.6.3]"
    

    上記の例では、バージョン 3.3.2 以上、3.6.3 以下の範囲でインストールします。

    grimo install "<package>@(3.3.2, 3.6.3)"
    

    上記の例では、バージョン 3.3.2 より大きく、3.6.3 より小さい範囲でインストールします。

  3. メジャー/マイナーバージョンの範囲指定:(未実装)

    grimo install <package>@M3.3.2
    

    上記の例では、バージョン 3.x.x の範囲(3.3.2 以上、4.0.0 未満)でインストールします。

    grimo install <package>@m3.3.2
    

    上記の例では、バージョン 3.3.x の範囲(3.3.2 以上、3.4.0 未満)でインストールします。

  4. 最新バージョンのインストール:

    grimo install <package>@latest
    

    上記の例では、パッケージの最新バージョンをインストールします。

インストールされたパッケージは、grimoires ディレクトリ内に保存されます。

開発者向け

全体のフロー図

全体フロー

パッケージの基本構造

grimo/
├── grimo/                # パッケージのコアロジック
│   ├── __init__.py
│   ├── core.py
│   ├── utils.py
│   ├── package.py      # パッケージ操作関連モジュール
│   ├── storage.py      # ストレージ操作関連モジュール
│   └── ...
├── tests/
│   ├── test_core.py
│   ├── test_utils.py
│   ├── test_package.py
│   ├── test_storage.py
│   └── ...
├── auth/
    ├── Procfile
    ├── requirements.txt
    └── server.py
├── docs/
│   ├── conf.py
│   ├── index.rst
│   └── ...
├── README.md
├── LICENSE
├── setup.py
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .github/workflows/
│   ├── ci.yml
│   └── cd.yml
└── app.py                # Streamlit/Gradio アプリケーション

setup.pyの記述

from setuptools import setup, find_packages

setup(
    name='grimo',
    version='0.1.0',
    description='Abstract Programming Language Package Manager',
    long_description=open('README.md', 'r').read(),
    author='Your Name',
    author_email='your@email.com',
    url='https://github.com/your-username/grimo',
    packages=find_packages(exclude=['tests']),
    install_requires=[
        'requests',
        'click',
        'colorama',
        'boto3',          # AWS SDK for Python
        'streamlit',      # or 'gradio'
    ],
    entry_points={
        'console_scripts': [
            'grimo=grimo.cli:main',
        ],
    },
    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',
        'Programming Language :: Python :: 3.10',
    ],
)

setup.pyを利用したPyPIへのアップロード方法

  1. PyPIアカウントの作成:

    • まず、PyPI にアカウントを作成します。
  2. setup.pyの準備:

    • setup.py ファイルが正しく記述されていることを確認します。
  3. 必要なパッケージのインストール:

    • パッケージをアップロードするために、twine をインストールします。
      pip install twine
      
  4. パッケージのビルド:

    • パッケージをビルドします。
      python setup.py sdist bdist_wheel
      
  5. PyPIへのアップロード:

    • twine を使用してパッケージをPyPIにアップロードします。
      twine upload dist/*
      
  6. アップロードの確認:

    • アップロードが成功したかどうかをPyPIのウェブサイトで確認します。

1. 目的

多様なプログラミング言語のパッケージを一元管理できる、強力かつユーザーフレンドリーな抽象プログラミング言語パッケージマネージャー「grimo」をPythonで実装する。grimoは、プログラミング言語に依存せず、あらゆるパッケージの検索、インストール、アップグレードをシームレスに実行できるツールを目指します。

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

3. setup.pyの記述

4. init.py の役割

  • パッケージの初期化処理
  • __version__ 変数でパッケージバージョンを定義
  • パッケージの公開APIをインポート

5. README.md の記述内容

  • パッケージの概要: grimoの目的、機能、メリットを具体的に記述
  • インストール方法: pip install grimo 等の手順を明記
  • 使用方法: 基本的なコマンド (grimo install, grimo search など) の使用例を提示
  • サポートするプログラミング言語とパッケージ: 具体的に記載
  • ライセンス: パッケージのライセンス情報を記載
  • 貢献方法: バグ報告、プルリクエスト、ドキュメント改善などの方法を説明
  • サポート方法: 問い合わせ先 (メーリングリスト、Issue tracker、Slackチャンネルなど) を記載

6. LICENSE ファイル

  • MIT License
  • Apache License 2.0
  • GNU General Public License (GPL)
  • BSD License 上記から選択、またはその他の適切なライセンスを明記

7. パッケージのバージョン管理

  • セマンティックバージョニング (MAJOR.MINOR.PATCH) を採用

8. テスト

  • ユニットテストと統合テストを実施
    • unittest モジュールを使用
    • テストケース: 正常系、異常系、境界値などを網羅
    • カバレッジ測定: coverage.py などを使用
    • CLIコマンドの実行結果を検証:
      • 異なるコマンドラインオプション、引数の組み合わせをテスト
      • 想定される標準出力、標準エラー出力を検証
      • エラー処理 (不正な引数、ファイルが存在しない場合など) をテスト

9. ドキュメント作成

  • Sphinx を使用し、以下の内容を記述
    • インストール方法
    • コマンドリファレンス: grimo install, grimo search など、各コマンドの詳細な説明、オプション、使用例を記載
    • APIドキュメント
    • パッケージの依存関係
    • 開発者向けドキュメント: 貢献方法、テスト方法、コーディング規約など
    • ドキュメントはHTML形式で生成し、Vercel等を用いてWeb上に公開

10. Docker化とCI/CD

  • Docker:
    • Dockerfile でビルドと実行環境を定義
    • docker-compose.yml で複数コンテナ (アプリケーション、データベースなど) を定義
  • CI/CD:
    • GitHub Actions を使用
    • ci.yml:
      • push, pull request 毎に実行
      • コードチェック (flake8, pylint など)、テスト実行、カバレッジ測定
    • cd.yml:
      • タグプッシュ時に実行
      • Dockerイメージのビルド、Docker Hub への push
      • PyPI へのパッケージリリース

11. Webアプリケーション (Streamlit/Gradio)

  • UI:
    • パッケージの検索:
      • キーワード検索
      • プログラミング言語、カテゴリ、タグによる絞り込み
    • パッケージの詳細表示:
      • パッケージ名、バージョン、説明、作者、ライセンス、依存関係などを表示
      • README.md の内容を表示
    • パッケージのインストール、アップデート、アンインストール:
      • プログレスバーを表示
      • エラー発生時はエラーメッセージを表示
    • パッケージのアップロード:
      • パッケージ名、バージョン、説明、プログラミング言語、カテゴリ、タグなどを設定
      • パッケージファイルをアップロード
  • バックエンド:
    • grimo パッケージのコマンドを呼び出して処理を実行
    • AWS S3 などのストレージサービスと連携し、パッケージファイルを保存、取得

12. ストレージ

  • AWS S3 を使用
    • Terraform を使用して S3 バケットを作成、管理
    • パッケージファイル (テキスト、画像、動画など) を保存
  • grimo.storage モジュール:
    • S3 へのファイルアップロード、ダウンロード、削除機能を提供
    • ファイルのメタデータ (パッケージ名、バージョン、説明など) を保存、取得する機能を提供

13. その他

  • ロギング: 処理の記録、エラー発生時の原因究明に役立てる
  • エラー処理: 想定されるエラーを適切に処理し、分かりやすいエラーメッセージを表示
  • セキュリティ: パッケージのアップロード、ダウンロード時のセキュリティ対策を実施
  • パフォーマンス: 処理速度の向上、リソース使用量の削減に取り組む

14. 開発体制

  • チームで開発を行う場合は、GitHub Flow などの開発フローを定義し、円滑な開発を進める

15. 今後の展望

  • パッケージの依存関係解決機能の追加
  • 仮想環境管理機能の追加
  • GUIクライアントの開発
  • プラグイン機構による拡張性の向上

grimo における認証サーバーを herokuにて立ち上げ

Heroku で grimo という名前のアプリを作成したとのことですね。引き続き、FastAPI アプリケーションを grimo にデプロイして起動する方法を説明します。

1. ローカルリポジトリの作成と初期化

# grimo ディレクトリに移動
cd grimo

# Git リポジトリの初期化
git init

2. アプリケーションファイルの追加とコミット

# ファイルを追加
git add .

# コミット
git commit -m "Initial commit" 

3. Heroku リモートリポジトリの追加

# Heroku リモートリポジトリの追加
git remote add heroku https://git.heroku.com/grimo.git

4. アプリケーションのデプロイ

# Heroku にプッシュ
git push heroku main

5. アプリケーションの起動

# アプリケーションの起動
heroku open 

これで、grimo アプリケーションが Heroku 上で起動します。

補足

  • heroku open コマンドは、Heroku 上で実行されているアプリケーションへのリンクを開きます。
  • アプリケーションが正常に起動しないと、heroku logs コマンドでログを確認して問題を診断してください。

さらなる手順

  • 環境変数の設定: heroku config:set コマンドを使って環境変数を設定できます。
  • データベースの接続: Heroku はさまざまなデータベースサービスをサポートしています。必要に応じて適切なデータベースサービスを追加してください。
  • ログの確認: heroku logs コマンドでアプリケーションのログを確認できます。

詳細については、Heroku の公式ドキュメントを参照してください。 https://devcenter.heroku.com/

これで、Heroku 上に FastAPI アプリケーションをデプロイして、Web サービスとして公開できるようになります。

設計思想

項目 インタプリタ コンパイラ
フレームワーク Zoltraak 構築中 まだ
プログラミング言語 Niwatoko まだ 構築中
パッケージマネージャー Grimo まだ 構築中
パッケージ(banner, i18niwatoko) まだ 構築中

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

grimo-1.3.45.tar.gz (288.6 kB view details)

Uploaded Source

Built Distribution

grimo-1.3.45-py3-none-any.whl (294.3 kB view details)

Uploaded Python 3

File details

Details for the file grimo-1.3.45.tar.gz.

File metadata

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

File hashes

Hashes for grimo-1.3.45.tar.gz
Algorithm Hash digest
SHA256 eb59e08482ecdf7a47c04b65c3c8ef71e19b8ff0522398780c072c6a81517308
MD5 cabfe5155c41180d709f003a938e0935
BLAKE2b-256 c3a7e50b29756d92817d3006db20135b31b994ab31a7bdd43ec0b02138f75e51

See more details on using hashes here.

File details

Details for the file grimo-1.3.45-py3-none-any.whl.

File metadata

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

File hashes

Hashes for grimo-1.3.45-py3-none-any.whl
Algorithm Hash digest
SHA256 0ed7148674af28ce1d989b7ac7ffad9ac52fdba0a6f3c07f8659868bd7447826
MD5 daa0486200ab387a3bbd1add9a12367c
BLAKE2b-256 6b5bd46709a2e3d0dd0abbe88371d88e78b264f41b8cade220d5e1e52a61e492

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