Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pub使ってますか?
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
laco
June 06, 2015
Programming
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pub使ってますか?
Dart Meetup Tokyo #1
laco
June 06, 2015
More Decks by laco
See All by laco
Angular2とMVVM
laco0416
5
5.7k
ASP.NetでAPIを作ってみた
laco0416
0
510
OSC_F_2013 LT
laco0416
0
140
Other Decks in Programming
See All in Programming
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
150
Modding RubyKaigi for Myself
yui_knk
0
890
柔軟なPDFレイアウトエディタを支える型システム設計 — Discriminated UnionとConditional Typeの実践
minako__ph
4
1.4k
Webフレームワークの ベンチマークについて
yusukebe
0
140
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
300
Swiftのレキシカルスコープ管理
kntkymt
0
210
OSもどきOS
arkw
0
460
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
840
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
320
AIとRubyの静的型付け
ukin0k0
0
540
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
So, you think you're a good person
axbom
PRO
2
2.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The untapped power of vector embeddings
frankvandijk
2
1.7k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
400
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Transcript
Pub、使ってますか? 2015-06-06 Dart Meetup Tokyo #1
自己紹介 • Suguru Inatomi a.k.a. @laco0416 • 株式会社トップゲート所属 • Dartは趣味
• 仕事ではGolang、TypeScript使ってます • Dartで仕事がしたい
Pub、使ってますか?
What is Pub? • Dart開発に便利な機能を備えたコマンドラインツール • pubspec.yamlを使った依存パッケージ管理 • localhostに開発サーバーの立ち上げ •
Dart webアプリのJSコンパイル • その他いろいろな機能 • Dartをインストールすれば一緒に入ってくる
> pub version Pub 1.10.0
Pub commands • pub build • pub cache • pub
deps • pub downgrade • pub get • pub global • pub publish • pub run • pub serve • pub upgrade • pub uploader
Pub build • webディレクトリ以下のDartファイルをJavaScriptにコンパイル • buildディレクトリ以下にHTMLやその他アセットと共に展開 • エントリポイントを持つDartファイルだけがJS化する
None
>pub build --mode • pub build --mode=<mode>でビルドモードを切り替えられる • ビルドモードはTransformer内で処理の分岐に使われる •
dart2jsが使うのはreleaseとdebug • 何も指定しなければrelease
release debug
σΟϨΫτϦࢦఆͰϏϧυ • pub build <directories>でビルドするディレクトリを指定 • 何も指定しなければwebディレクトリが選択される • 逆にweb以外を明示的に指定するとwebはビルドされなくなる •
--allフラグで組み込みのディレクトリをすべてビルド pub build benchmark example/foo bar pub build --all == pub build benchmark bin example test web
Pub build & Dart2js • pub buildはdart2jsコマンドを叩く • コマンドライン引数はpubspec.yaml内で設定できる https://www.dartlang.org/tools/dart2js/#options
Pub get • pubspec.yamlに記述された依存パッケージをダウンロードする • ダウンロードされたパッケージのリンクがpackagesフォルダに入る • 自分のlibディレクトリもpackagesフォルダにリンクされる
>pub get
dependencies • 基本的に pub.dartlang.org からダウンロードされる • URLを指定することで任意の場所からDLできる • Gitリポジトリの指定もできる •
ローカルパスの指定もできる
いろいろなdependencies
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" : 範囲指定も可能
"^1.2.3" • caret syntax • Dart 1.8.3から追加された記法 • semantic versionに準拠して互換性のある範囲を自動指定
• 使用するにはsdkバージョンの明示的指定が必要
まだpubspec.yaml 手書きしてるの?
den
\デン!/
https://pub.dartlang.org/packages/den
den • pubspec.yamlを記述してくれるツール • > den install hoge • 依存パッケージ管理だけじゃなくversioningも賢くやってくれる
• 作者はGoogle Developer Expertのseaneagan氏
>den spec • >den specでpubspec.yamlを初期化して作成する • プロンプト形式で初期情報を設定する • git管理されていればgitから情報取得してくれる
>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
>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
Pub global
Pub global • その名の通りマシン内でグローバルに使えるパッケージを管理する • いわゆる npm -g • Dartのコマンドラインツールのエコシステムが完成
activate • 有効化: >pub global activate hoge • hogeパッケージをグローバルから呼び出せるようになる •
--source git
[email protected]
• --source path ~/... • 無効化: >pub global deactivate hoge
run • >pub global run hoge:foo • hogeパッケージのbin/foo.dartを実行する • 呼び出されるdartファイルはエントリポイントを備えている必要が
ある • 毎回 >pub global run hoge:foo って書きたくない • >foo で実行したくない?
--executable • グローバルパッケージのアプリケーションを直接PATHに追加する • >pub global activate hoge --executable=foo --overwrite
• --executableに指定されたfooは ~/.pub-cache に追加される • PATHに ~/.pub-cache/bin を追加する必要あり。 • ↑のコマンド長いし自分のパッケージはもっと簡単に使ってほしい…
executables: • pubspec.yamlにパッケージ内の実行可能スクリプトを宣言する • ユーザーはactivateするだけでいい • <エイリアス>: 呼び出されるファイル名(bin/foo.dart) • 右辺が空なら
bin/<エイリアス>.dart が呼び出される
自作ツールを配布する
1. mkdir my-awesome-tool 2. cd my-awesome-tool 3. den spec 4.
コードを書く 5. pub publish
ローカルで自作ツールを使う
1. コードを書く my-util/bin/my-util.dart 2. pubspec.yamlにexecutables定義 3. >pub global activate --source
path myutil 4. >my-util
pub globalの注意点 • dart foo.dartとpub global run fooは実行環境が違う • pub
global runでの実行時はlocalhost上にUriがある • Platform.script.path 等、実行環境依存の処理はできない
Platform.script.path
ϩʔΧϧͷ%BSU8FCΞϓϦΛQVCHMPCBMܦ༝Ͱ QVCTFSWF͠Α͏ͱͯ͠εΫϦϓτͷύε͕औΕͳͯ͘٧Μͩ • bin/bar.dartから../webをserveしたかった • >dart bin/bar.dartなら成功する
ղܾࡦ • どうやらPlatformクラスを経由するとそういうことになるらしい • 相対パスが正解だった
Pub serve
Pub serve • 開発用サーバーを一発で立ち上げてくれる便利なやつ • pub serve + DartiumがDart Webアプリ開発の基本
• ローカルファイル変更をリアルタイム検知 • Dart実行できないブラウザからアクセスすると自動でdart2js
--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
>pub serve --mode • buildと同じようにビルドモードを切り替えられる • 何も指定しなければrelease • Dartium以外でのデバッグでsourcemapが使えるので debugモードがオススメ
σΟϨΫτϦࢦఆͰserve • >pub serve <directories>で配置するディレクトリを指定 • 何も指定しなければwebとtestが選択される • フロントエンドテストのサーバー起動もpub serveが行える
pub serve benchmark example/foo bar
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ͷΩϟογϡΛ ཧ͢Δ ґଘҰཡΛදࣔ͢Δ ґଘؔΛߋ৽͢Δ Ͱ͖Δ͚ͩݹ͘
おまけ
GET pub.dartlang.org/api/packages • 実はAPIで更新日付順の パッケージ一覧を取得できる • 偶然見つけた • パッケージビューアみたいなものは 作れそう
• 残念ながら検索などの他のAPIは まだ見つかってない
5IBOLTGPSMJTUFOJOH © laco0416, 2015