未熟学生エンジニアのブログ

TetsuFeの個人開発ブログ

TetsuFeはテツエフイー と読みます。FlutterやWeb周り全般、チーム開発について語るブログ

ターミナルのプロンプトにflutterのchannelを表示する

注意: 実用性は低いです

サンプル

f:id:swiftfe:20200503201948p:plain f:id:swiftfe:20200503202305p:plain

モチベーション

  • flutterのweb supportを使うにはbeta channelを使う必要があるが、他のweb supportの必要のないプロジェクトではmasterを使いたい
  • masterとbetaをすぐ判別がつくようにしたい

Building a web application with Flutter - Flutter より

As of 1.12, Flutter has early support for running web applications, but you need to be running the beta channel of Flutter at present. If you experience a problem that hasn’t yet been reported, please file an issue and make sure that “web” appears in the title.

zshrcのカスタマイズ

環境

git-promptを使っている場合

~/.zshrc

# flutterのパスを追加
export PATH=/Users/xxx/development/flutter/bin:$PATH

# flutter channelの結果から、現在のchannel名を取得 (* stable なら、stableを取得)
flutter_channel=$(flutter channel | tr '\n' ':' | sed -E "s/.+\* ([^:]+):.*/\1/")

# gitのプロンプト設定
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
git_prompt_sh=/usr/local/etc/bash_completion.d/git-prompt.sh
if [ -e $git_prompt_sh ]; then
 source $git_prompt_sh
 
 # $flutter_channelをプロンプトに表示
 precmd () { __git_ps1 "%F{cyan}(flutter: $flutter_channel)%f " "%F{yellow}%c%f $ " " (%s) " }
fi

git-promptを使わない場合

git-promptを使っているのでわかりにくいですが、内部ではzshのPROMPT変数?を使うことで実現しているため、git-promptを使っていない人はPROMPT(bashの場合はPS1だったはず)を使うことで同様に使うことができます。

~/.zshrc

# flutterのパスを追加
export PATH=/Users/xxx/development/flutter/bin:$PATH

# flutter channelの結果から、現在のchannel名を取得 (* stable なら、stableを取得)
flutter_channel=$(flutter channel | tr '\n' ':' | sed -E "s/.+\* ([^:]+):.*/\1/")

# プロンプト設定
PROMPT="%F{cyan}(flutter: $flutter_channel) $ "

簡単な解説

$ flutter channelの出力は以下のようになります。

Flutter channels:
  beta
  dev
  master
* stable

この * stable のように * がついているのが現在のchannelになるので、sedにより正規表現で「stable」だけを抜き出します。それだけです。

この方法の問題点

  • シェルの起動が重くなる
  • $ flutter channel が重いため、コマンド実行ごとに channel 表示を切り替える用途には待ち時間の問題上、使えない
  • $ flutter channel stable などを使った際、表示は切り替わらず、シェルを再起動する必要あり
    • しかも切り替えたあとすぐは余計な出力が出るためにsedの処理に1分ほど時間がかかる
    • しかし、Android Studioで他のプロジェクトを開いた際にはシェルが再起動されるので実用上あまり問題はない

参考