goはランタイムというミニフレームワークのプロトタイプをpypiにアップロードした

github.com

以下の記事のミニフレームワークのプロトタイプが動くようになったので、0.0.1をpypiにアップロードしました。

このプロトタイプに含まれる機能はCLIの定義を手軽にすると言う部分です。少しだけ特殊なのは、go用のツールなのにpython製と言うところかもしれません。

install

インストールはいつものようにpipでやります。

pip install egoist

コンセプト

コンセプトについては冒頭に紹介した記事が詳しいですが雑にまとめるこうです。

  • コード生成はIaC (Infrastructure as Code) におけるデプロイのようなもの
  • メタプログラミングをpreprocessのタイミングで行い実行時には行わない
  • アプリケーションコードとはランタイムのこと

作り始めた頃に書いたメモはこちら

hello world

それではhello worldです。まっさらな状態から始めてみます。慣れれば1分くらいでできます。

egoist init

"egoist init"と入力して実行してみてください。

$ .

0 directories, 0 files

$ egoist init
level:INFO  message:create definitions.py                       name:egoist.cliL23

definitions.pyという定義ファイルが作られます。

$ tree
.
└── definitions.py

0 directories, 1 file

python definitions.py gnerate

次は、この作られた定義ファイルを実行してみます。どのようなコマンドが用意されているかは -h で確認できます。

$ python definitions.py -h
usage: definitions.py [-h] [--logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}]
                      {describe,generate} ...

optional arguments:
  -h, --help            show this help message and exit
  --logging {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}

subcommands:
  {describe,generate}
    describe
    generate

サブコマンドの紹介のコメントも無いような不親切なヘルプメッセージですが、今回使うのはgenerateの方です。これを実行してみます。

$ python definitions.py generate
[D] create  cmd/hello
[F] create  cmd/hello/main.go

$ tree
.
├── cmd
│   └── hello
│       └── main.go
└── definitions.py

2 directories, 2 files

main.goができました。実行してみましょう。

$ go run cmd/hello/main.go
hello 
$ go run cmd/hello/main.go --name world
hello world

どうやら -name という引数だけが取れるようなgoのコードが生成されたようです。

$ go run cmd/hello/main.go --help
hello - hello message

Usage:
  -name string
        -
exit status 1

はい。ここまでがhello worldです。

まとめ

まとめると、以下です。

  • egoist init
  • 生成されたdefinitioins.pyを python definitioins.py generate

おしまい。

とはいえ、これだけだと何が何だか分からないですね。あとで詳しい解説の記事を書く予定です。

gist

https://gist.github.com/podhmo/076cff15ff0c6fbd4c389d0fa8a128b1

追記

書きました。

単純な機能の紹介程度ならgetting startedを見たほうが早いかもしれません。