« Heroku Postgresのロールバック | メイン | Scalaアプリケーションの最速Herokuデプロイ »

2014年12月 4日 (木)

Gruntからherokuコマンドを実行する

ども。 Salesforce World Tour Tokyo, DeveloperZoneからこんにちは。

Heroku Advent Calendar 2014 4日目。2日ぶり3度目の登板の小西です。(--
今日を乗り切れば明日からはしばらくは乗り切れるようなので雑に埋めておきます。

本日のネタはこちら

https://gist.github.com/shunjikonishi/b42decee4446c0652cdd

さらっと作ったpgbackups:restoreをGruntから実行するタスクです。

child_process.execでherokuコマンドを叩いているだけなので、Nodeを使ったことのある人にはなんの新規性も無いかと思いますが、Grunt使っている人でも自分でタスクを書いたことの無い人も多いと思うのでさらっとご紹介します。

このタスクが行っている処理内容は以下です。

  • heroku pgbackups:urlを実行してrestoreしたいバックアップのダウンロードURLを取得する
  • heroku pgbackups:restoreを実行してリストア

いじょ。

バックアップを取得したアプリケーションとリストアしたいアプリケーションが同じであれば、pgbackups:urlを実行せずともバックアップIDでいきなりpgbackups:restoreを実行してしまえば良いんですが、開発環境で作ったデータをテスト環境でリストアするケースも多いので、このようにしています。

Gruntfileでタスクを定義する際に渡せるパラメータは以下です。

  • app: リストアを実行するアプリケーション名
  • backupId: リストアするバックアップのID
  • backupApp: バックアップを生成したアプリケーション名。省略時はappと同じ

いじょ。


JavaScriptはちょっと書けるけどNodeは触ったことがないという人向けにさらっとポイントを説明すると以下のような感じです。

  • gruntタスクの定義にはgruntオブジェクトを使用する
  • タスク名と説明(registerMultiTaskの最初の2つの引数)以外は変える必要が無い
  • コマンド実行にはchild_process#execを使用する
  • 複数のコマンドを連続して実行する場合はコマンド実行は非同期なのでコマンド終了時にemitterでイベントを発行し、それを受けて次のコマンドを実行するようにする
  • この例ではpgbackups:urlの終了時に「url」イベントを発行し、それを受けてpgbackups:restoreを実行する
  • 全部のコマンドを実行したらthis.asyncで返ってくるdoneメソッドを実行することでタスクが完了する

いじょ。


こんだけわかっていれば後は見よう見まねで書けるんじゃないですかね。(^^;;;

ちなみにこのrestorePgbackupsタスクはテスト専用の環境でデータを初期化するために使用していてわりと重宝しています。

□□□□

SFハッカソンに参加するので、ここから先は本当にしばらく気配を消します。

14日以降まで繋がっていればまた復活するかもしれませんが。。。(^^;;;

がんばれ! Heroku Advent Calendar

コメント

コメントを投稿

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart