느슨한 엔지니어로 만들 수 있는 CLI 도구

6293 단어 5cli

Who?



트위터 : @carimatics
기분 좋게 엔지니어링이 가능한 환경을 만들고 싶다
라는 마음을 안고 조기성 서리

직장에서는 이렇게 잘 만져
- Shell script
- Perl
- 파이썬
- 자바스크립트
- AWS
- 도커

오늘의 이야기



CLI



만들기



CLI



Command Line Interface



행별로 명령을 실행하기 위한 도구입니다(잡)
좀 더 혼란스럽게 말하면 macOS terminal 또는 Windows cmd입니다.

왜 CLI 도구를 만드는거야?



shell script 쓰고 싶지 않은 것이 임계점을 넘어 폭발했다
파이썬이라도 좋았지만 아무 것도 도전이기 때문에 ...

사용할 라이브러리



urfave/cli


  • flag (옵션)의 퍼스를 간단하게 할 수 있다
  • subcommands 만들기 쉽다
  • git 명령의 add 라든지 commit 라든지

  • Usage를 기술하면 좋은 느낌의 도움말도 만들어 주기 때문에 매뉴얼이 썩기 어렵다


  • 간단한 명령 만들기



    모두 사랑



    카운터!



    동작은 이런 느낌(잡)





    디렉토리 구성


    mycmd
    ├── Gopkg.lock   # 依存関係
    ├── Gopkg.toml   # プロジェクトの設定
    ├── count.txt    # ストレージ(雑)
    ├── main.go      # entry point
    ├── modules      # 今回作ったコマンド処理本体
    │   └── commands
    │       └── counter
    │           └── counter_command.go
    └── vendor       # 外部ライブラリ
        └── github.com
            └── urfave
                └── cli
    

    할 일



    이것만!
  • 응용 프로그램 설정
  • Command 등록
  • Action 등록
  • SubCommand 등록


  • 애플리케이션 설정


    app := cli.NewApp()
    app.Name    = "mycmd"
    app.Usage   = "The sample application"
    app.Version = "0.0.1"
    

    Command 등록



    이번에는 counter 명령 추가
    app.Commands = []cli.Command{
        counter.CounterCommand(count),
    }
    

    명령을 치면 다음과 같이 표시됩니다.


    $ mycmd 
    NAME:
       mycmd - The sample application
    
    USAGE:
       mycmd [global options] command [command options] [arguments...]
    
    VERSION:
       0.0.1
    
    COMMANDS:
         counter  Execute count up/down
         help, h  Shows a list of commands or help for one command
    
    GLOBAL OPTIONS:
       --help, -h     show help
       --version, -v  print the version
    

    Action 등록



    CounterCommand


    cli.Command{
        Name:  "counter",
        Usage: "Execute count up/down",
        Action: func(context *cli.Context) error {
            printCurrentCount(count)
            return nil
        },
        Subcommands: []cli.Command{
            upCommand(count),
            downCommand(count),
        },
    }
    

    명령을 두드리면


    $ mycnt counter
    current count: 0
    

    SubCommand 등록



    다운


    cli.Command{
        Name:  "down",
        Usage: "Down count",
        Action: func(context *cli.Context) error {
            count--
            printCurrentCount(count)
    
            saveCount(count)
            return nil
        },
    }
    

    명령을 두드리면


    $ mycnt counter
    current count: -1
    

    요약



    CLI 도구 쉽게 만들 수 있습니다 ~!

    모두가 더 유익한 명령을 만들자!

    좋은 웹페이지 즐겨찾기