Edited at

cmdshelfによるスクリプト運用のご提案

More than 1 year has passed since last update.


追記


  • 2017/10/28追記: swiftpmコマンドはなくなりました

  • 2018/9/3追記: cmdshelfはRustに移行しました。同時にblobコマンドは無くなりました。homebrewからインストールできます!



これまでのスクリプト運用の課題🐢

アプリのリポジトリにコミットしてしまっていて運用がつらい

- 他のプロジェクトと共有するのが面倒

- 例えばmasterにしかなくてhotfixでそのscriptが使えないという状況があり得る

どこかのOSSだったり、内製したものだったり、自分専用のものだったり、置き場所が点在している



AbemaTV iOSチームの場合

ios/tvos 共通で使い回したいスクリプトたち


  • acknowledgement_generator.swift

  • init_design.sh

  • carthage/update carthage/checkout

現状それぞれにコミットされていたりいなかったりするのを統一したい



構想🤔


  • scriptの管理場所や所有者なんて使う時にはただのノイズ

  • 必要な時に必要なスクリプトを迅速に使いたい

  • $PATHの設定とか正直面倒



そんなあなたに cmdshelf 📚



cmdshelf 📚


  • ~/.cmdshelf.yml でスクリプトの置き場所を管理


  • cmdshelf run hoge.sh でhoge.shがどこにあるか気にすることなく実行できる

  • 自分好みの .cmdshelf.yml を持ち歩ける

  • Written in Swift



.cmdshelf.yml



.cmdshelf.yml



.cmdshelf.yml



.cmdshelf.yml



remoteの追加

$ cmdshelf remote add abema-ios-script https://github.com/abema/inherited-scripts-ios.git

$ cmdshelf list
remote:
abema-ios-script:
carthage/checkout
carthage/update
design/init_design.sh
specific/abema-swift-api-session/validate-unit-test.sh
tools/acknowledgement_generator.swift
tools/outdated-localizables.sh
$ cmdshelf run "carthage/update APIKit"

最新のmasterがcheckoutされる

基本的にコンソールで実行可能なものならなんでもok



blobの追加

$ cmdshelf blob add random https://gist.githubusercontent.com/toshi0383/32728879049e95...

$ cmdshelf list
blob:
random: https://gist.githubusercontent.com/toshi0383/32728879049e95db41ab801b1f05500...
$ cmdshelf run random

blobはローカルパスかhttp(s)のURLいずれかを登録可能

基本的にコンソールで実行可能なものならなんでもok



リポジトリの更新

$ cmdshelf update

remoteとswiftpmを更新



インストール

https://github.com/toshi0383/cmdshelf#install



今後の展望


  • Makefile (CI) サポート

CIにcmdshelfをインストールするのに要する時間が許容範囲かどうか検証が必要

まずはzipダウンロードで入れられるように設定したいとは思っている (どうやんのかな

=> 解決済!



まとめ


  • cmdshelfでラクにスクリプトを共有

  • もう$PATHの設定に煩わされる必要なし👍



オープンソースです

イシューやプルリクなどコントリビュートお待ちしております。

https://github.com/toshi0383/cmdshelf



End

この資料は2017/06/21にチーム内で共有したものほぼそのままになります。

この時から色々と改善を実施したので詳細はリポジトリのCHANGELOGをご覧ください。

https://github.com/toshi0383/cmdshelf