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
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
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
120
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
270
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
これからAgentCoreを触る方へトレンドはGatewayです
har1101
4
380
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
190
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
220
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
170
ふつうのFeature Flag実践入門
irof
8
4.2k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.3k
Leo the Paperboy
mayatellez
7
1.9k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Code Review Best Practice
trishagee
74
20k
A Tale of Four Properties
chriscoyier
163
24k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
We Are The Robots
honzajavorek
0
260
Designing Powerful Visuals for Engaging Learning
tmiket
1
430
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
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