Dartのプロジェクトジェネレータ Stagehand

  • 7
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こんにちは、らこです。Dartアドベントカレンダー3日目も私が担当します。

Stagehandとは?

image

http://stagehand.pub/

Stagehandとは、GoogleのDartチームが開発したプロジェクトスキャフォールディングツールです。Stagehandを使えば、コマンドラインで簡単にDartアプリケーションのテンプレートから自分のプロジェクトを生成できます。現在Stagehandに搭載されているテンプレートは以下のプロジェクトです。

  • webapp : 簡単なWebアプリ
  • consoleapp : 簡単なコンソールアプリ
  • package : ライブラリやアプリケーションの起点
  • polymerapp - Polymer.dartを使ったWebアプリ
  • shelfserver - shelfを使ったWebサーバーアプリ

Stagehandはまだβ版で、利用者からのフィードバックを強く求めています。開発はそこそこに活発で、GitHubにIssueやPRを投げると大体ちゃんと対応してくれます。

使い方

インストール方法

まずは最新のDart環境を作りましょう。Dart1.7以降はpubが改善され、activateしたパッケージが直接実行できるので便利です。

Dart1.7以降をインストールしたら、コマンドラインで以下のコマンドを実行します。

pub global activate stagehand

pubにパスが通ってなければ、dart/binをPATHに追加しておきましょう。
global activateできたら、あとは実行するだけです。

プロジェクトの生成

Stagehandは、コマンドが実行されたディレクトリをプロジェクトのルートディレクトリとして、そのディレクトリ名をプロジェクト名とします。なので、まずは作りたいプロジェクトの名前でディレクトリを作りましょう。

mkdir myDartApp
cd myDartApp
stagehand webapp

これでmyDartAppという名前のWebアプリケーションが完成します。生成されたプロジェクトはどれもすぐに実行できる状態になっているので、動かしながら自分のアプリケーションに改造していくことができます。

プロジェクト生成時にauthorオプションを渡すことも出来ます。

stagehand webapp --author laco

使ってみた感想

DartEditorを使ってない人にオススメ

私はWebStormでDartを書いているので、プロジェクトのテンプレートがWebアプリとコンソールアプリの2種類しかなくて、ちょこっと不便だったのがそこそこに解消されました。特にPolymer.dartに関しては何かしら試そうと思って環境を作ろうとするとWebアプリ用のプロジェクトを作って、pubspec.yamlを書いてpub getして、HTMLにいろいろ書いてと手間があったのですがコマンド1つなので重宝してます。

特にWebStormと相性がいいです。WebStormでEmpty Projectを作成して、WebStorm内のTerminalでStagehandを叩くのが最近の流れになってます。

ドキュメントがなさすぎる

上のauthorオプションはソースコード見ないとわからないです。本当に駆け出しのプロジェクトなのでドキュメンテーションが足りてないですが今後どうにかなると思います。

おまけ

ここからが本番なんですが、Stagehandのテンプレート、少ないと思うんですよ。Polymer.dartにしてもshelfにしてもDart Teamのライブラリですし、もっと多様性が欲しいなと思ってIssueを投げました。

https://github.com/google/stagehand/issues/127

「独自のテンプレートを追加できるようにしてほしい!」という要望に対して、Seth氏の回答は「それならyeomanのgenerator-generatorを使うほうがいい」とのことでした。Seth氏はDartだからといってNode.jsのツールを使ってはいけないみたいなのは全然ないっぽくて、むしろ有用だから使い分けていこうなみたいな事を言われたと思う。Stagehandは選りすぐりのテンプレートだけを提供して、質を高めていくつもりらしいです。

おまけ2

それでもやっぱりテンプレート少ねえなと思ったので自分でテンプレート書いてPR投げました。

https://github.com/google/stagehand/pull/128

AngularDartがちょうど1.0になった頃だったので、AngularDartを使ったWebアプリのテンプレートを作って投げてみたら結構感触よくてあっさり採用されました。テンプレート少ないのは単純に手が足りてないのも大きいみたいです。見た感じ実質作業してるの二人くらいのようですし。

しかし採用決定されたのはいいですが未だにジェネレータが実装されません。何故かというと、AngularDartが依存してるcore_transformersにバグがあって、アーカイブのDL以外のインストール方法(aptやbrew)でインストールされたSDKのシンボリックリンクが解決できない事案が発生してるからです。

https://github.com/google/stagehand/pull/140

私はアーカイブ落として展開してたので問題なかったんですが、Seth氏は自分のMacにbrewでDartを入れてるので、動かねえぞ~と問題発覚して今に至るまで凍結状態になってます。core_transformers早くして!

おまけ3

そうやっているうちにいつのまにかGitHub上にAppEngine用のプロジェクトテンプレートが追加されてました。

https://github.com/google/stagehand/tree/master/templates/appengineapp

これはジェネレータまで実装されてて、実はもう使えるっぽいんですが、CHANGELOGやREADMEにもまだ書かれてないので使うなってことだと思いますし、アナウンスを待ちます。


以上、開発途上感がハンパないDartの新プロジェクト「Stagehand」の紹介でした。機能自体はほとんど完成されててめっちゃ便利なので普段せっせこ自分でディレクトリ作ってpubspec.yaml置いて/webとか/libとか/binとか作ってる人は一度試してみるといいと思います。

明日はzukkunさんです。

この投稿は Dart Advent Calendar 20143日目の記事です。
  • この記事は以下の記事からリンクされています
  • WebStormでDart開発からリンク