抽象プログラミング言語パッケージマネージャー「grimo」
0. 利用方法
* 現在パッケージマネージャーは各々ご自身のAWSアカウントにおけるS3バケットに格納する形になっています。
バージョンアップに従って、全員共有バケットにする予定です。
-
grimo のインストール
pip install grimo
-
AWS S3 バケットの作成
grimo では、パッケージを AWS S3 バケットに保存します。 まだ S3 バケットを作成していない場合は、AWS マネジメントコンソールから "grimo" という名前のバケットを作成してください。
-
AWS 認証情報の設定
grimo が S3 バケットにアクセスできるように、AWS の認証情報を設定する必要があります。 環境変数 AWS_SECRET_ACCESS_KEY と AWS_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/
│ ├── grimo.toml # パッケージのメタデータ
│ ├── def.md # パッケージの定義
│ ├── util.md # パッケージのユーティリティ
│ ├── var.md # パッケージの変数
│ └── ...
grimo.toml ファイルには、パッケージのメタ情報を以下のように記述します。
# パッケージ名
name = "i18niwatoko"
# パッケージバージョン (SemVer 形式)
version = "1.1.0"
# パッケージの説明
description = "多言語翻訳ツール"
# 作者名
author = "dai.motoki"
# 作者のメールアドレス
email = "motoki.daisuke@kandaquantum.co.jp"
# パッケージのライセンス
license = "MIT"
# Supabase Storage 上のファイルパス (アップロード後に設定されます)
# file_path = "i18niwatoko/1.0.0/i18niwatoko.tar.gz"
# その他の項目 (任意)
language = "python"
category = "utilities"
tags = ["translation", "i18n"]
homepage = "https://example.com/i18niwatoko"
repository = "https://github.com/your-username/i18niwatoko"
readme = """
# i18niwatoko
多言語翻訳ツールです。
grimo install i18niwatoko
- i18niwatoko = [i18niwatoko]
- 元ファイル = [./翻訳したいファイル]
"""
dependencies = "{ "rich" : "^13.3.5", "claude3" : "^1.0.0" }"
End of Selection
パッケージをアップロードするには、`package_name` ディレクトリで以下のコマンドを実行します。
```bash
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 ディレクトリに格納されます。
以下のようなバージョン指定ルールがサポートされています。
-
特定バージョンの指定:
grimo install <package>@3.3.2
上記の例では、バージョン 3.3.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 より小さい範囲でインストールします。
-
メジャー/マイナーバージョンの範囲指定:(未実装)
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 未満)でインストールします。
-
最新バージョンのインストール:
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',
'streamlit',
],
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へのアップロード方法
-
PyPIアカウントの作成:
-
setup.pyの準備:
setup.py ファイルが正しく記述されていることを確認します。
-
必要なパッケージのインストール:
- パッケージをアップロードするために、
twine をインストールします。
pip install twine
-
パッケージのビルド:
-
PyPIへのアップロード:
twine を使用してパッケージをPyPIにアップロードします。
twine upload dist/*
-
アップロードの確認:
- アップロードが成功したかどうかを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. ローカルリポジトリの作成と初期化
cd grimo
git init
2. アプリケーションファイルの追加とコミット
git add .
git commit -m "Initial commit"
3. Heroku リモートリポジトリの追加
git remote add heroku https://git.heroku.com/grimo.git
4. アプリケーションのデプロイ
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) | まだ | 構築中 |