goはランタイムというミニフレームワークのプロトタイプをpypiにアップロードした
以下の記事のミニフレームワークのプロトタイプが動くようになったので、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を見たほうが早いかもしれません。