3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DartAdvent Calendar 2018

Day 24

(小ネタ) snapshotを自動作成しちゃうシェルスクリプト for DartVM用コマンド

Last updated at Posted at 2018-12-23

先週の記事( 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管理 している必要があります。

起動が速いぞ!

個人的に欲しかったやつです。満足満足。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?