こんにちは、らこです。Dartアドベントカレンダー3日目も私が担当します。
Stagehandとは?
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を投げました。
「独自のテンプレートを追加できるようにしてほしい!」という要望に対して、Seth氏の回答は「それならyeomanのgenerator-generatorを使うほうがいい」とのことでした。Seth氏はDartだからといってNode.jsのツールを使ってはいけないみたいなのは全然ないっぽくて、むしろ有用だから使い分けていこうなみたいな事を言われたと思う。Stagehandは選りすぐりのテンプレートだけを提供して、質を高めていくつもりらしいです。
おまけ2
それでもやっぱりテンプレート少ねえなと思ったので自分でテンプレート書いてPR投げました。
AngularDartがちょうど1.0になった頃だったので、AngularDartを使ったWebアプリのテンプレートを作って投げてみたら結構感触よくてあっさり採用されました。テンプレート少ないのは単純に手が足りてないのも大きいみたいです。見た感じ実質作業してるの二人くらいのようですし。
しかし採用決定されたのはいいですが未だにジェネレータが実装されません。何故かというと、AngularDartが依存してるcore_transformersにバグがあって、アーカイブのDL以外のインストール方法(aptやbrew)でインストールされたSDKのシンボリックリンクが解決できない事案が発生してるからです。
私はアーカイブ落として展開してたので問題なかったんですが、Seth氏は自分のMacにbrewでDartを入れてるので、動かねえぞ~と問題発覚して今に至るまで凍結状態になってます。core_transformers早くして!
おまけ3
そうやっているうちにいつのまにかGitHub上にAppEngine用のプロジェクトテンプレートが追加されてました。
これはジェネレータまで実装されてて、実はもう使えるっぽいんですが、CHANGELOGやREADMEにもまだ書かれてないので使うなってことだと思いますし、アナウンスを待ちます。
以上、開発途上感がハンパないDartの新プロジェクト「Stagehand」の紹介でした。機能自体はほとんど完成されててめっちゃ便利なので普段せっせこ自分でディレクトリ作ってpubspec.yaml置いて/web
とか/lib
とか/bin
とか作ってる人は一度試してみるといいと思います。
明日はzukkunさんです。