先週の記事( https://qiita.com/takutaro/items/79d5cfe51138e45060c8 )の続編です。
「なぜpath指定ではsnapshotにpre-compileしてくれないのか・・」と嘆いた訳ですが、Activate時にsnapshotを作成してくれなくても、普段のdartコマンド実行時に似たことをすれば良い訳です。
シェルスクリプトを作りました
snapshotを自動的に作り直し、それを実行します。2回め以降のDartコマンド起動が爆速になります。
bashです。Linuxで軽く動作確認しましたので多分動きます。macOSもbashが標準シェルと聞きましたので、多分動きます、知らんけど。
Windows用(PowerShellとか)は需要と供給(やる気)のバランスを考え、作るのはやめました。
#!/usr/bin/env bash
firstdir=$(pwd)
cd $(dirname $0)
mydir=$(pwd)
myname=$(basename $0)
# エントリポイントとなるdartファイルが存在しない場合はエラーとする
dartname="${mydir}/${myname}.dart"
if [ ! -f $dartname ]; then
echo "${myname}.dart not found."
exit 1
fi
# git管理対象ファイルのうち、一番新しいファイルの日時を取得する
cd $(git rev-parse --show-toplevel)
f=$(ls -t `git ls-files --full-name` 2> /dev/null | head -1)
if [ ! -f $f ]; then
echo "Please manage with git."
exit 1
fi
newest=$(date +%Y%m%d%H%M%S -r $f)
# snapshotファイルの日時を取得する
snapname="${dartname}.snapshot"
if [ -f $snapname ]; then
snaptime=$(date +%Y%m%d%H%M%S -r $snapname)
else
snaptime="00000000000000"
fi
# snapshotファイルが最新でない場合は作り直す
if [[ $newest > $snaptime ]]; then
dart --snapshot=$snapname $dartname || exit 1
fi
# そしてsnapshotを実行!
cd $firstdir
dart $snapname "$@"
上記をコピペして下さい。
- エントリポイントとなるdartファイルと同じ場所に置きましょう
- ファイル名は、エントリポイントとなるdartファイルから拡張子(.dart)を除いたものにして下さい
- 実行権限を付けましょう(chmod +x)
なお実装の都合上、置き場所は git管理 している必要があります。
起動が速いぞ!
個人的に欲しかったやつです。満足満足。