Slide 1

Slide 1 text

Pub、使ってますか? 2015-06-06 Dart Meetup Tokyo #1

Slide 2

Slide 2 text

自己紹介 • Suguru Inatomi a.k.a. @laco0416 • 株式会社トップゲート所属 • Dartは趣味 • 仕事ではGolang、TypeScript使ってます • Dartで仕事がしたい

Slide 3

Slide 3 text

Pub、使ってますか?

Slide 4

Slide 4 text

What is Pub? • Dart開発に便利な機能を備えたコマンドラインツール • pubspec.yamlを使った依存パッケージ管理 • localhostに開発サーバーの立ち上げ • Dart webアプリのJSコンパイル • その他いろいろな機能 • Dartをインストールすれば一緒に入ってくる

Slide 5

Slide 5 text

> pub version Pub 1.10.0

Slide 6

Slide 6 text

Pub commands • pub build • pub cache • pub deps • pub downgrade • pub get • pub global • pub publish • pub run • pub serve • pub upgrade • pub uploader

Slide 7

Slide 7 text

Pub build • webディレクトリ以下のDartファイルをJavaScriptにコンパイル • buildディレクトリ以下にHTMLやその他アセットと共に展開 • エントリポイントを持つDartファイルだけがJS化する

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

>pub build --mode • pub build --mode=でビルドモードを切り替えられる • ビルドモードはTransformer内で処理の分岐に使われる • dart2jsが使うのはreleaseとdebug • 何も指定しなければrelease

Slide 10

Slide 10 text

release debug

Slide 11

Slide 11 text

σΟϨΫτϦࢦఆͰϏϧυ • pub build でビルドするディレクトリを指定 • 何も指定しなければwebディレクトリが選択される • 逆にweb以外を明示的に指定するとwebはビルドされなくなる • --allフラグで組み込みのディレクトリをすべてビルド pub build benchmark example/foo bar pub build --all == pub build benchmark bin example test web

Slide 12

Slide 12 text

Pub build & Dart2js • pub buildはdart2jsコマンドを叩く • コマンドライン引数はpubspec.yaml内で設定できる https://www.dartlang.org/tools/dart2js/#options

Slide 13

Slide 13 text

Pub get • pubspec.yamlに記述された依存パッケージをダウンロードする • ダウンロードされたパッケージのリンクがpackagesフォルダに入る • 自分のlibディレクトリもpackagesフォルダにリンクされる

Slide 14

Slide 14 text

>pub get

Slide 15

Slide 15 text

dependencies • 基本的に pub.dartlang.org からダウンロードされる • URLを指定することで任意の場所からDLできる • Gitリポジトリの指定もできる • ローカルパスの指定もできる

Slide 16

Slide 16 text

いろいろなdependencies

Slide 17

Slide 17 text

version constraints • any : なんでも。共存可能な最新を選択 • "1.2.3" : 単一バージョン指定 • ">=1.2.0", "<=1.2.0" : 1.2.0以上, 以下 • ">1.2.0", "<1.2.0" : 1.2.0超, 未満 • ">=1.2.0 <1.3.0" : 範囲指定も可能

Slide 18

Slide 18 text

"^1.2.3" • caret syntax • Dart 1.8.3から追加された記法 • semantic versionに準拠して互換性のある範囲を自動指定 • 使用するにはsdkバージョンの明示的指定が必要

Slide 19

Slide 19 text

まだpubspec.yaml 手書きしてるの?

Slide 20

Slide 20 text

den

Slide 21

Slide 21 text

\デン!/

Slide 22

Slide 22 text

https://pub.dartlang.org/packages/den

Slide 23

Slide 23 text

den • pubspec.yamlを記述してくれるツール • > den install hoge • 依存パッケージ管理だけじゃなくversioningも賢くやってくれる • 作者はGoogle Developer Expertのseaneagan氏

Slide 24

Slide 24 text

>den spec • >den specでpubspec.yamlを初期化して作成する • プロンプト形式で初期情報を設定する • git管理されていればgitから情報取得してくれる

Slide 25

Slide 25 text

>den install • >den install hoge でhogeを依存パッケージに含める • hoge#version 形式でバージョン指定できる • デフォルトは "^最新" • gitからは >den install git://github.com/owner/repo.git -sgit • pathからは >den install path/to/foo -spath

Slide 26

Slide 26 text

>den bump • 自身のバージョンを上げる • パッケージ配布するときに超便利 den bump patch : 1.2.3 => 1.2.4 den bump minor : 1.2.3 => 1.3.0 den bump major : 1.2.3 => 2.0.0 den bump build : 1.2.3 => 1.2.3+1 den bump release --pre : 1.2.3 => 1.2.3-dev.1 den bump release : 1.2.3-dev.1 => 1.2.3 den bump breaking : 0.5.3 => 0.6.0 : 1.2.3 => 2.0.0 den bump 2.0.0-preview

Slide 27

Slide 27 text

Pub global

Slide 28

Slide 28 text

Pub global • その名の通りマシン内でグローバルに使えるパッケージを管理する • いわゆる npm -g • Dartのコマンドラインツールのエコシステムが完成

Slide 29

Slide 29 text

activate • 有効化: >pub global activate hoge • hogeパッケージをグローバルから呼び出せるようになる • --source git [email protected] • --source path ~/... • 無効化: >pub global deactivate hoge

Slide 30

Slide 30 text

run • >pub global run hoge:foo • hogeパッケージのbin/foo.dartを実行する • 呼び出されるdartファイルはエントリポイントを備えている必要が ある • 毎回 >pub global run hoge:foo って書きたくない • >foo で実行したくない?

Slide 31

Slide 31 text

--executable • グローバルパッケージのアプリケーションを直接PATHに追加する • >pub global activate hoge --executable=foo --overwrite • --executableに指定されたfooは ~/.pub-cache に追加される • PATHに ~/.pub-cache/bin を追加する必要あり。 • ↑のコマンド長いし自分のパッケージはもっと簡単に使ってほしい…

Slide 32

Slide 32 text

executables: • pubspec.yamlにパッケージ内の実行可能スクリプトを宣言する • ユーザーはactivateするだけでいい • <エイリアス>: 呼び出されるファイル名(bin/foo.dart) • 右辺が空なら bin/<エイリアス>.dart が呼び出される

Slide 33

Slide 33 text

自作ツールを配布する

Slide 34

Slide 34 text

1. mkdir my-awesome-tool 2. cd my-awesome-tool 3. den spec 4. コードを書く 5. pub publish

Slide 35

Slide 35 text

ローカルで自作ツールを使う

Slide 36

Slide 36 text

1. コードを書く my-util/bin/my-util.dart 2. pubspec.yamlにexecutables定義 3. >pub global activate --source path myutil 4. >my-util

Slide 37

Slide 37 text

pub globalの注意点 • dart foo.dartとpub global run fooは実行環境が違う • pub global runでの実行時はlocalhost上にUriがある • Platform.script.path 等、実行環境依存の処理はできない

Slide 38

Slide 38 text

Platform.script.path

Slide 39

Slide 39 text

ϩʔΧϧͷ%BSU8FCΞϓϦΛQVCHMPCBMܦ༝Ͱ QVCTFSWF͠Α͏ͱͯ͠εΫϦϓτͷύε͕औΕͳͯ͘٧Μͩ࿩ • bin/bar.dartから../webをserveしたかった • >dart bin/bar.dartなら成功する

Slide 40

Slide 40 text

ղܾࡦ • どうやらPlatformクラスを経由するとそういうことになるらしい • 相対パスが正解だった

Slide 41

Slide 41 text

Pub serve

Slide 42

Slide 42 text

Pub serve • 開発用サーバーを一発で立ち上げてくれる便利なやつ • pub serve + DartiumがDart Webアプリ開発の基本 • ローカルファイル変更をリアルタイム検知 • Dart実行できないブラウザからアクセスすると自動でdart2js

Slide 43

Slide 43 text

--port • >pub serve --port=8081 => http://localhost:8081 • 任意のポートでserve可能 • 実は --hostname=127.0.0.1 でホストネームが変えられる • >pub serve --hostname=127.0.0.1 
 => http://127.0.0.1:8080

Slide 44

Slide 44 text

>pub serve --mode • buildと同じようにビルドモードを切り替えられる • 何も指定しなければrelease • Dartium以外でのデバッグでsourcemapが使えるので
 debugモードがオススメ

Slide 45

Slide 45 text

σΟϨΫτϦࢦఆͰserve • >pub serve で配置するディレクトリを指定 • 何も指定しなければwebとtestが選択される • フロントエンドテストのサーバー起動もpub serveが行える pub serve benchmark example/foo bar

Slide 46

Slide 46 text

Pub commands • pub build • pub cache • pub deps • pub downgrade • pub get • pub global • pub publish • pub run • pub serve • pub upgrade • pub uploader ύοέʔδΛ഑෍͢Δ CJO಺ͷεΫϦϓτΛ
 ࣮ߦ ґଘؔ܎Λߋ৽͢Δ Ͱ͖Δ͚ͩ৽͘͠ ύοέʔδͷ࡞ऀ৘ใΛ
 ؅ཧ͢Δ QVCHFUͷΩϟογϡΛ ؅ཧ͢Δ ґଘҰཡΛදࣔ͢Δ ґଘؔ܎Λߋ৽͢Δ
 Ͱ͖Δ͚ͩݹ͘

Slide 47

Slide 47 text

おまけ

Slide 48

Slide 48 text

GET pub.dartlang.org/api/packages • 実はAPIで更新日付順の
 パッケージ一覧を取得できる • 偶然見つけた • パッケージビューアみたいなものは
 作れそう • 残念ながら検索などの他のAPIは
 まだ見つかってない

Slide 49

Slide 49 text

5IBOLTGPSMJTUFOJOH © laco0416, 2015