SlideShare a Scribd company logo
Dart / Flutter
コードファイルジェネレート入門
build_runner と source_gen パッケージで
アノテーション連携コードファイルを生成
1
GDG古都 Meetup
robo
Flutter Meetup Osaka #6
自己紹介
名前
robo (兼高理恵)
好きなもの
モバイル端末
おしごと
アプリの設計から実装まで
所属
GDG Kyoto (staff) WTM Kyoto (staff) Flutter Osaka (staff)
2
はじめに
flutter 公式サイトでは、
Simple app state management ページを設けて、
provider パッケージを使った実装が紹介されていますが
昨今の Flutter 開発でのアーキテクチャは、
MVVM + Repository に落ち着いてきているようです。
3
【参照】 Flutter はプロダクション開発に耐えうるのか
https://speakerdeck.com/wasabeef/flutter-ready-for-production
昨今の Flutter 開発でのアーキテクチャ
MVVM + Repository パターンの
DI / Service Locator と State management のために、
StateNotifier + Reverpod パッケージが基本のようで
4
riverpod 0.12.3
https://pub.dev/packages/riverpod
state_notifier 0.6.0
https://pub.dev/packages/state_notifier
昨今の Flutter 開発でのアーキテクチャ
先鋭的な現場では、同じパッケージ開発者による、
Flutter Hooks や Freezed が導入されているそうです。
5
freezed 0.12.7
https://pub.dev/packages/freezed
flutter_hooks 0.15.0
https://pub.dev/packages/flutter_hooks
コード自動生成で機能豊富なクラスを提供
Freezed は、プロパティのみの単純なクラスに
@freezed アノテーションの付加+アルファ①
するだけで、
immutable 保証オブジェクトの生成や JSON シリアライズ、
copyWith による 値コピー、hashCode メソッドや == オペレータの
上書き…までできるようにするサポートクラスを生成します。
6
① +アルファについて
・pubspec.yaml への 依存パッケージ追加だけでなく、
 元コードのクラスに 生成するクラスを with ミキシイン指定したり、
 生成クラスとの連携のため part '生成パッケージパス'; を追加した上で
  flutter pub pub run build_runner build コマンドの実行が必要です。
アノテーション情報を利用する
コードファイル生成入門
      
7
アノテーション+コードファイル生成の基本
Freezed のように、クラスにアノテーションを付けて、
サポートクラスのコードファイルを生成(ジェネレート)するには、
1. クラスにアノテーションを追加(アノテーションで対象コードを指定)
2. オリジナルクラスのコード解析と サポートクラスのコード生成の起動
3. アノテーションが付加されたクラスのコードを解析
4. コード解析内容から、サポートクラスのコード(コードファイル)を生成
…のフローを取ります。
Flutter / Dart では、これらの機能基本を外部パッケージで提供 (次頁)
しています。
8
Element 内部情報解析器の追加
サポートコード生成ロジックの追加 ビルダーとビルド設定の追加
ジェネレータの追加
コード解析とコード生成の基本パッケージ
● build_runner
オリジナルクラスのコード解析と サポートクラスのコード生成を行なわせる
コマンドラインツールのパッケージ。
● source_gen
アノテーション付加クラスの構文要素を提供する ジェネレータクラス や、
目的別コードファイル生成を行う ビルダークラス を提供してくれる
コード解析生成支援パッケージ。
● build ⇒ コードファイル生成 (ビルド) に関する基盤機能を提供
● analyzer ⇒ コード解析 (Class, Field Element 等) に関する構文解析基盤を提供
● build_config ⇒ ビルド指定機能 (build.yaml ⇒ ビルダークラスやソース元等の設定) を提供
9
マルチプロジェクト・リポジトリの作成
アノテーションによるコード解析とコード生成を行う場合、
アノテーション定義と コード解析+コード生成と 動作確認の用途で
プロジェクト (パッケージ/ライブラリ) が分けられます。
これら関連プロジェクト①
は、
1つのリポジトリに束ねて管理するのが一般的なようです。
①アノテーション (annotations)、コード解析+コード生成 (generator)、利用例 (example)
(次頁に具体例)
10
11
analysis_options.yaml を
各プロジェクトの
ルートディレクトリに配置しても可
pubspec.yaml や、
build.yaml, lib を除き各
ファイルやディレクトリ
名は任意です。
builder.dart は、
ビルダーを明示する
慣習的なファイル名で
す。
マルチプロジェクト・リポジトリの作成
マルチプロジェクトの作成に決まったルールはありませんが、
flutter create コマンドを使って入れ子のプロジェクトが作れます。
1. リポジトリ用に、パッケージテンプレートのプロジェクト
①
を作る。
$ flutter crete --template=package xxx_repository
2. ①のディレクトリ内で、アノテーション
②
とジェネレータ③
用に
パッケージテンプレート、example 用にアプリのプロジェクト④
を作成する。
$ flutter crete --template=package xxx_annotations
$ flutter crete --template=package xxx_generator
$ flutter crete example
3. 前頁を参考に①②③④から不要なファイルやディレクトリを削除する。
flutter create コマンドは、IntelliJ や VSCODE などの IDE 設定ファイルや 
.gitignore ファイルのテンプレートも作ってくれます。
12
マルチプロジェクトの初期設定
● アノテーション用プロジェクト
pubspec.yaml 設定は、 dependencies: dev_dependencies: 特になし。
● ジェネレータ用プロジェクト
dependencies: に analyzer, build, build_config, source_gen を追加、
さらにアノテーション用パッケージ (プロジェクトへの相対パス指定可 ) を追加。
dev_dependencies: に build_runner, test を追加。
プロジェクトルートに build.yaml を新規追加 (空実装で可) 。
● example用プロジェクト
dependencies: に アノテーション用パッケージを追加 (上記備考参照)、
dev_dependencies: に build_runner, test を追加、
さらにジェネレータ用パッケージ (プロジェクトへの相対パス指定可 ) を追加。
13
14
プロジェクトの 例
ジェネレータプロジェクトの 例 アノテーションプロジェクトの 例
省略
アノテーション作成
Flutter / Dart では、
const 生成可能な 値 (value) をもつクラスをアノテーションとして利用できます。
クラスに情報を付加する ClassInfo アノテーションと、
クラスフィールドに情報を付加する FieldInfo アノテーションを
サンプルとして作ってみました。
アノテーションのパッケージ (プロジェクト) をインポートした 
ジェネレータや example プロジェクトのコード中では、
のように使えます。
15
アノテーション作成 (コード例)
16
部( )
xxx_annotations.dart ファイルと
annotations.dart ファイルの配置は、
マルチプロジェクト具体例を参照ください。
ライブラリ公開指定部( )
アノテーション利用
example プロジェクトで、作成したアノテーションを使ってみましょう。
単純なプロパティ・フィールドを持つクラスを作成して、
クラス宣言の上で @ClassInfo を フィールド宣言で @FieldInfo を付加します。
 サンプルとして、名前と値段のフィールドがあるお菓子のモデルにおいて、
 名前と値段の構成が菓子ごとにバラバラ (変数名や変数型が異なる! ) な例があり、
 共通機能として名前と値段を表示する display() メソッドが必要とします。
 ここに「フィールドの役割がわかるようにアノテーションを追加」しました。
 ですが現状では、アノテーションは何の役にも立ってはいません。
17
アノテーション利用 (コード例)
18
付加部( )
本来のデータ構造
(菓子名 String name と 値段 int price)
アノテーション利用 (コード例)
19
付加部( )
〜右となりに続く〜
〜左となりからの続き〜
共通機能 display のため Product をあとから
追加したとしています。
想定外のデータ構造
(String namae と String nedan)
アノテーション利用 (コード例)
20
全体部( )
大福
 
( )
アノテーションで利用する
識別用情報クラス
共通機能 display メソッドをあとから追加したので、以下のすり合わせをしています。
 
現状ではアノテーションの効果はありません。
オリジナルクラスのコード解析 と サポートクラスのコード生成
アノテーション付加クラスのコード解析
+コード出力
21
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析&出力
アノテーションは、コンパイラに情報を提供しますが、このままでは何の役にも立ちません。
サポートクラスのコード(コードファイル)を生成するため、
まずはアノテーション付加されたクラスのコード解析が必要です。
source_gen パッケージには、
コード解析サポートとして アノテーション付加クラスの構文要素 の引数提供と、
コード生成サポートとして 返却値を生成する出力コードとして扱う、
generateForAnnotatedElement メソッド を持つ
GeneratorForAnnotation<対象アノテーション型> 抽象クラス があります。
22
build_runner 実行時に メソッドを実行してもらうには、
ビルダー中で GeneratorForAnnotation 実装オブジェクトを生成させる設定が必要です。
本件については、後段の章で説明いたします。
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析&出力
23
source_gen package > documentation > source_gen > GeneratorForAnnotation<T>
https://pub.dev/documentation/source_gen/latest/source_gen/GeneratorForAnnotation-class.html
generateForAnnotatdeElement の引数
・element:アノテーションが付加
 されたコードの構文要素
・annotation:アノテーション情報
 (ここから設定値を取り出します )
・buildStep:ビルドシステムの
 ビルド情報 (コード元やアセットの読込 )
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(注意)
● このメソッド が抽出してくれるアノテーションは、
1. ジェネリクスで指定した アノテーション利用クラス型 かつ、
2. ライブラリのトップレベルに存在するアノテーションに限定されます。
つまり抽出されるアノテーションが付加されたコードは、
XXX.dart ファイルのトップレベルとなるプロパティ定義や、
関数定義 および クラス定義に付加されたものしか対象となりません。
このため クラスフィールド のアノテーションについては、
独自に抽出する必要があることに御注意ください。
24
オリジナルクラスのコード解析 と サポートクラスのコード生成
アノテーション付加クラスのコード解析
+コード出力
ジェネレータ作成
25
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析&出力
● ジェネレータ作成
メソッドを使うには、
GeneratorForAnnotation 継承クラスを作り メソッドを実装します。
サンプルとして、ClassInfo アノテーションを対象に、
引数 element から、アノテーションが付加された Element (構文要素) 名と、
引数 annotation から、アノテーション設定値 (指定フィールドの値) を取得して、
アノテーションが付加された Element 名称と アノテーション設定値を出力する
InfoGenerator 派生クラスを作ってみました。
26
27
引数から のアノテーション情報を取得する。
コメントとして、アノテーション付加された構文要素とアノテーションの情報を出力する。
【出力例】
アノテーションに
対応させた
ConstantReader から
read() で定数値を取得
【注意】最終章完了段階を経た場合の出力例です。
オリジナルクラスのコード解析 と サポートクラスのコード生成
アノテーション付加クラスのコード解析
+コード出力
コード解析器作成
28
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(留意)
generateForAnnotatedElement が抽出してくれるアノテーションは、
ライブラリのトップレベルに存在するアノテーションに限定されます。
このため クラスフィールド のアノテーション については、
独自に抽出する必要があることにふれました。
つまりアノテーション付加されたクラスの内部を調べるため、
Element 内部のコード解析 (構文の全走査) をする必要があります。
29
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(留意)
generateForAnnotatedElement メソッド を用いて、
アノテーション付加されたクラス内部のコード解析をする手法については、
個人的見解として Visitor パターン を使った構文全走査を採用しました。
(Visitor パターンを使えば、ツリー構造全体を再帰的に全走査することができます
)
構文要素(Element) から、Visitor パターンを使って全走査させるには、
Element#visitChildren(ElementVisitor visitor):void メソッドが利用できます。
30
analyzer package > documentation > element > ElementVisitor<R> abstract class
https://pub.dev/documentation/analyzer/latest/dart_element_element/ElementVisitor-class.html
analyzer package > documentation > element > Element visitChildren abstract method
https://pub.dev/documentation/analyzer/latest/dart_element_element/Element/visitChildren.html
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(留意)
Element#visitChildren(ElementVisitor visitor):void メソッドを使うには、
ElementVisitor 抽象クラスを継承した 独自Visitor クラスの作成が必要です。
関数の内部構造解析まではできていませんが、
クラスフィールドに付加されたアノテーションの 検知や 設定値取得が
可能なサンプルクラス ChildrenVisitor (ElementVisitor 継承クラス) を
作成しましたので紹介します。
この Visitor クラスはサンプルのため、
走査した Element 情報の出力 (ログ出力またはコード出力) しかできません。
(コードを改造すれば特定条件での対応も追加できると思います)
31
32
アノテーション検出+値取得用
必要なインポート
33
以降の3メソッドは、上記メソッドと同様実装のため省略
…
…
…
ClassInfoアノテーション検出と設
定値の取得を追加している。
34
以降の4メソッドは、前記メソッドと同様実装のため省略
…
…
…
…
FieldInfo アノテーション検出と設
定値の取得を追加している。
インポートするパッケージ名を取
得するため addImportInfo を呼
び出しています。
35
以降の10メソッドは、前記メソッドと同様実装のため省略
…
…
…
…
…
…
…
…
…
…
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(補足)
サンプルクラス ChildrenVisitor についての補足説明
1. log 出力 (build_runner 実行時のコンソール出力)
2. で、エレメント名とエレメント内容(#toString()) を出力
3. で、ImporElementのインポートパッケージ名取得に対応
4. TypeCheckerで、ClassInfo と FieldInfo アノテーションの検出+設定値取得
詳細説明については次頁を参照
36
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析(補足)
1. log 出力 (build_runner 実行時のコンソール出力)
build パッケージのトップレベルには、log (Logger オブジェクト) が定義済です。
このため build をインポートすれば、log.info(メッセージ) が使えます。
2.
実装参照 の内容を で出力しているだけです。
 
3.
実装参照 上記にパッケージ名として を追加しています。
 
37
オリジナルクラスのコード解析と サポートクラスのコード生成
4.ClassInfo と FieldInfo アノテーションの検出+設定値取得
source_gen の TypeChecker を使えば、
アノテーション利用型用のオブジェクトを生成することで、
アノテーションの 検知 と 設定値取得 が可能になります。
● コンストラクタ TypeChecker.fromRuntime(T)
● TypeChecker#hasAnnotationOf(element):bool
Element にアノテーションが付加されているか否かが判別できます。
● TypeChecker#firstAnnotationOf(element)
.getField(フィールド名).toTypeValue():DartType
このメソッドチェーンで アノテーションの設定値 が取得できます。
この例では、アノテーション値が Type として toTypeValue() を使っています。
様々な toXxxValue があるので、アノテーション値が String なら toStringValue() が使えます。
38
source_gen package > documentation > source_gen > TypeChecker abstract class
https://pub.dev/documentation/source_gen/latest/source_gen/TypeChecker-class.html
オリジナルクラスのコード解析と サポートクラスのコード生成
4.ClassInfo と FieldInfo アノテーションの検出+設定値取得
ChildrenVisitor における ClassInfo での利用例
39
〜省略〜
〜省略〜
【補足】 の 検出+設定値取得 も同様実装です。
40
アノテーション検出に
TypeChecker を利用
source_gen/source_gen/lib/src/generator_for_annotation.dart
https://github.com/dart-lang/source_gen/blob/master/source_gen/lib/src/generator_for_annotation.dart
【参考例】
の
でも
は、使われています。
オリジナルクラスのコード解析 と サポートクラスのコード生成
アノテーション付加クラスのコード解析
+コード出力
ジェネレータ にコード解析器を組み込む
41
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析&出力
ChildrenVisitor により、
アノテーション付加されたクラス内部の コード解析 (構文全走査)
および 構文情報の出力(コード解析出力) が可能になりました。
InfoGenerator サンプルクラスに組み込んで、
アノテーション付加されたクラス内部の 解析情報を出力させてみましょう。
サンプルについては次頁を参照  
42
43
引数から のアノテーション情報を取得する。
アノテーションが付加された要素の内部情報を全走査して取得する。
ContentReader から
read() で定数値を取得
アノテーション付加クラスの
Element は、visit されないので、
直接 Visitor に追加。
44
出力例
FieldInfo アノテーションも検出され、
設定値が出力されています。
この内容は、
最終章完了段階を経た場合の Daifuku クラス出力例です。
現段階では、ビルダーや build.yaml 設定がないため
クラス内容解析結果を出力することはできません。
オリジナルクラスのコード解析と サポートクラスのコード生成
アノテーション付加クラスのコード解析&出力
ChildrenVisitor は、
Element 内部を全走査して 全ての構文要素を出力 することができます。
ですがアノテーション付加されたクラス内部には、
アノテーションが付加されていないクラス情報や import 情報などはありません。
引数 buildStep を利用すれば、
ビルド中のライブラリ (xxx.dart ファイル) ⇒ LibraryElement が取得できます。
InfoGenerator を改造してライブラリ内部の 解析情報を出力させてみましょう。
サンプルについては次頁を参照  
45
46
引数の は、アノテーションが付加された要素のみのため、
ソースファイル全体を持っている から情報を全走査して取得する。
BuildStep の inputLibrary から、
LibraryElement を非同期取得
47
〜 省略 〜
〜 省略 〜
出力例
FieldInfo アノテーションも検出され、
設定値が出力されています。
アノテーションのない Product も出力
import もパッケージ付きで出力
【注意】最終章完了段階を経た場合の出力例です。
オリジナルクラスのコード解析 と サポートクラスのコード生成
アノテーション付加クラスのコード解析
+コード出力
サポートコード生成ロジックを組み込む
48
オリジナルクラスのコード解析と サポートクラスのコード生成
サポートコード生成ロジックの組み込み
課題例では、
菓子モデルにより 名前と値段の プロパティ名と プロパティ型 が異なります。
このため同一挙動の display() を両者に適用するアイディアとして、
右記のような個別クラスを生成し、
Daifukuモデルの場合は、緑色のコード
Chocolateモデルの場合は、水色のコード
…を生成してみます。
(Xxx はベースとなるモデル型名)
49
クラスのパッケージ名
オリジナルクラスのコード解析と サポートクラスのコード生成
サポートコード生成ロジックの組み込み
前頁のアイディアは、
import パッケージ名、クラス名、名称名、名称型、値段名、値段型 の
情報があれば、テンプレートからサポートコードの生成が可能になります。
ChildrenVisitor により、
アノテーション付加されたクラス内部の コード解析 (構文全走査) ができるので、
ChildrenVisitor と コード出力全体を統括する InfoGeneration ジェネレータ に、
サポートコード生成ロジックを追加してみましょう。
サンプルについては次頁を参照  
50
51
クラスの元実装の先頭に、
これらサポートコード生成ロジックを新規追加
52
メソッドの元実装に、
サポートコード生成ロジックの _className
⇒ クラス名パラメータ設定を追加
53
メソッドの元実装に、
サポートコード生成ロジックの
_itemNameName _itemNameType
⇒ 名称パラメータの名前と型設定および
_itemPriceName _itemPriceType
⇒ 値段パラメータの名前と型設定を追加
54
引数から のアノテーション情報を取得する。
アノテーションが付加された要素の内部情報を全走査して取得する。
引数の は、アノテーションが付加された要素のみのため、
ソースファイル全体を持っている を取得する。
引数 element 自体の
クラス情報や import 情報は、
では
取得できないので、
サポートコード生成ロジックの
_className と _importPackage を
外部から注入しています。
55
出力例
この内容は、
最終章完了段階を経た場合の Daifuku クラス出力例です。
現段階では、ビルダーや build.yaml 設定がないため
コード生成内容結果を出力することはできません。
オリジナルクラスのコード解析 と サポートクラスのコード生成
build_runer によるコードファイル生成
build.yaml 設定 と ビルダー作成
56
オリジナルクラスのコード解析と サポートクラスのコード生成
によるコードファイル生成
ジェネレータを作成しましたが、
このままでは、 を実行しても コードファイル生成されません。
からは、コードファイル生成に使う ビルダー が不明だからです。
● ビルダーについての補足
1. ジェネレータと ファイル拡張子を指定して コードファイルを生成します。
慣習的にビルダーのファイル名は、 にします。
2. の ディレクティブに、
インポート先や ファクトリ先を設定して から起動させます。
ビルダーと の  
サンプルについては次頁を参照
57
ビルダー作成
● は、
引数指定の ジェネレータで、コード解析とコード出力 を行わせます。
XXX.dart ファイルから、引数指定拡張子 のコードファイルを生成します。
(例 拡張子指定 ⇒ )
58
は、 コードファイルから、 を生成します。
ファクトリ関数
source_gen package > documentation > source_gen > LibraryBuilder class
https://github.com/dart-lang/sdk/blob/master/pkg/analyzer/doc/tutorial/tutorial.md
ビルダー作成 (補足)
パッケージは、
part of ‘オリジナルコードファイル’ の有無と、
共有ファイル作成の有無により、3つのビルダーを提供します。
● 記述を含まないコードファイルを作成 (前述)
● 記述を含むコードファイルを作成
● 記述を含む 指定 と、
記述を含まない コードファイルを作成
59
source_gen package > documentation > source_gen > SharedPartBuilder class
https://pub.dev/documentation/source_gen/latest/source_gen/SharedPartBuilder-class.html
source_gen package > documentation > source_gen > PartBuilder class
https://pub.dev/documentation/source_gen/latest/source_gen/PartBuilder-class.html
作成
60
プロジェクトルートに配置
build/docs/build_yaml_format.md
https://github.com/dart-lang/build/blob/master/docs/build_yaml_format.md
ビルダーを明示する任意の識別名
ビルダー定義実態ファイル先の指定
ビルダー生成ファクトリ関数の指定
生成コードファイルの拡張子指定
オリジナルクラスのコード解析と サポートクラスのコード生成
によるコードファイル生成
generator パッケージ①
に、ビルダー と を作成したので、
にアノテーションと ジェネレータの依存を追加すれば、
の実行でコードファイル生成が行えるようになりました。
① generator パッケージ (コード解析+コード生成 を行う) ⇒ xxx_generator プロジェクト
61
依存設定追加例
オリジナルクラスのコード解析 と サポートクラスのコード生成
build_runer によるコードファイル生成
build_runner 実行+コードファイル生成
62
オリジナルクラスのコード解析と サポートクラスのコード生成
によるコードファイル生成
example プロジェクト に作成した、
アノテーションを利用するサンプルコードを活用して、
の実行でコードファイル生成を行ってみましょう。
(exampleの pubspec.yaml にアノテーション+ジェネレータの依存性を追加しておくこと )
● example プロジェクトのルートで、ターミナルから以下を実行します。
 
 
もしくは、上記の の代わりに2コマンドを実行
と
が実行され、コードファイル生成が行われます。
63
64
実行終了後に、
という
コードファイルが生成されています。
65
実行終了後に、
という
コードファイルが生成されています。
オリジナルクラスのコード解析と サポートクラスのコード生成
によるコードファイル生成
example プロジェクト に の実行で、
サポートコードファイル (サポートクラス) が生成されましたので、
元の main.dart ファイルのコードをサポートクラスを使うよう修正します。
サンプルについては次頁を参照  
66
修正前コード
67
全体部( )
大福
 
共通機能 メソッドをあとから追加したので、
による強制的なすり合わせをしています。
$ dart lib/main.dart 実行結果
大福 100 yen
Milk Chocolate 120 yen
修正後コード
68
全体部( )
大福
オリジナルのモデルクラスをラップした
DaifukuBase と ChocolateBase クラスを生成したので、
モデルクラス名と import 先パッケージの変更で、
あとから追加した共通機能 メソッドが使えます。
$ dart lib/main.dart 実行結果
大福 100 yen
Milk Chocolate 120 yen
お疲れ様でした
コードファイルジェネレート入門
完了です。
69
アノテーション情報を利用する
コードファイル生成入門
【参考資料一覧】  
70
公式サイトのドキュメント制限
 Dart 言語公式サイトに、build_runner のページがありますが
 build_runner コマンドと 依存性の設定 (pubspec.yaml) および、
 ビルド方法指定 (build.yaml 設定) へのリンク紹介のみです。
コードファイル生成の詳細情報は、見つかりませんでした。
71
Build FAQ
https://dart.dev/tools/build_runnerhttps://github.com/dart-lang/build/blob/master/docs/faq.md
build_runner
https://dart.dev/tools/build_runner
Getting started with build_runner
https://github.com/dart-lang/build/blob/master/docs/getting_started.md
# build_runner を実行するコマンドライン
$ dart pub run build_runner build # Dart SDK
$ flutter pub run build_runner build # Flutter SDK
コードファイル生成 基本資料(独自調査概要)
● build
コードファイル生成 (ビルド) に関する基盤機能を提供します。
● build_config
ビルダークラスやソース先などの ビルド指定 (build.yaml) を提供します。
● analyzer
ソースコード解析に必要な Class, Field の構文要素(Element) を提供します。
● build_runner
ビルド指定 (build.yaml) をもとにコードファイル生成ビルドを行います。
● source_gen
アノテーション要素やビルダー提供などソース生成とコードファイル生成を補助する
機能を提供します。
72
前ページの build リポジトリ資料から独自展開した、関連公式パッケージ概要
コードファイル生成 基本資料(独自調査結果)
73
source_gen 0.9.10+1
https://pub.dev/packages/source_gen
build_config 0.4.5
https://pub.dev/packages/build_config
build_runner 1.11.1
https://pub.dev/packages/build_runner
analyzer 0.41.2
https://pub.dev/packages/analyzer
build 1.6.2
https://pub.dev/packages/build
基本パッケージ
これらのリンク先は、
全て dart-lang リポジトリで管理する
公式パッケージです。
パッケージ紹介ページの説明だけでなく
Github リポジトリの docs ディレクトリにある
markdown (.md) ドキュメントも
同時に確認したほうが良いと思います。
コードファイル生成 基本資料(独自調査補足)
74
sdk/pkg/analyzer/doc/tutorial/tutorial.md
https://github.com/dart-lang/sdk/blob/master/pkg/analyzer/doc/tutorial/tutorial.md
build/docs/writing_an_aggregate_builder.md
https://github.com/dart-lang/build/blob/master/docs/writing_an_aggregate_builder.md
build/docs/build_yaml_format.md
https://github.com/dart-lang/build/blob/master/docs/build_yaml_format.md
sdk/pkg/analyzer/doc/tutorial/
https://github.com/dart-lang/sdk/tree/master/pkg/analyzer/doc/tutorial
build/docs/
https://github.com/dart-lang/build/tree/master/docs
基本パッケージ紹介ページから辿れるGithub リポジトリの docs 資料
コードファイル生成(参考先)
75
freezed 0.12.7
https://pub.dev/packages/freezed
自動コード生成を駆使してFlutter開発を楽にする
https://qiita.com/kikuchy/items/cdd95bb9a02c4edf8f12
Flutter Series: 4. Annotation-based Code Generation Applications
https://developpaper.com/flutter-series-4-annotation-based-code-generation-applications/
[Part 2] Code generation in Dart: Annotations, source_gen and build_runner
https://medium.com/flutter-community/part-2-code-generation-in-dart-annotations-source-gen-and-build-runner-bbceee28697b
[Part 1] Code generation in Dart: the basics
https://medium.com/flutter-community/part-1-code-generation-in-dart-the-basics-3127f4c842cc
Github のソースコードも参考にしました。
公式パッケージ外で参考にした資料
この情報が、
  お役に立てば幸いです。
76
サンプルリポジトリを公開していますので、よろしければ御参照ください。
cch-robo/model_assist - https://github.com/cch-robo/model_assist
77
ご清聴、
ありがとうございました。
情報修正があれば更新します
最新版スライドは こちらから

More Related Content

What's hot

ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
Recruit Lifestyle Co., Ltd.
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
Unity Technologies Japan K.K.
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
Unity Technologies Japan K.K.
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
Unity Technologies Japan K.K.
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
Ore Product
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
 
go_router が隠してくれるもの
go_router が隠してくれるものgo_router が隠してくれるもの
go_router が隠してくれるもの
cch-robo
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
 
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
TylerShukert
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
増田 亨
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
Yoshitaka Kawashima
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Shinnosuke Tokuda
 

What's hot (20)

ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
 
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう【CEDEC2018】Scriptable Render Pipelineを使ってみよう
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
go_router が隠してくれるもの
go_router が隠してくれるものgo_router が隠してくれるもの
go_router が隠してくれるもの
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
FlutterとSupabaseでRDBを使った サーバーレスアプリ開発
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 

Similar to Dart / Flutter コードファイルジェネレート入門

【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
日本マイクロソフト株式会社
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
 
PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発
konekto
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
Hiroshi Okunushi
 
Windows® API Code Pack for Microsoft® .NET Framework
Windows® API Code Pack for Microsoft® .NET FrameworkWindows® API Code Pack for Microsoft® .NET Framework
Windows® API Code Pack for Microsoft® .NET Framework
Tadahiro Higuchi
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
Atomu Hidaka
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
Takao Tetsuro
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
Akira Inoue
 
2015 1025 OSC-Fall Tokyo NETMF
2015 1025 OSC-Fall Tokyo NETMF2015 1025 OSC-Fall Tokyo NETMF
2015 1025 OSC-Fall Tokyo NETMF
Atomu Hidaka
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
Yuki Igarashi
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
ロフト くん
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
de:code 2017
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
Fujio Kojima
 

Similar to Dart / Flutter コードファイルジェネレート入門 (20)

【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発PHPにおけるRIA事情と開発
PHPにおけるRIA事情と開発
 
Mvc conf session_2_shibamura
Mvc conf session_2_shibamuraMvc conf session_2_shibamura
Mvc conf session_2_shibamura
 
Windows® API Code Pack for Microsoft® .NET Framework
Windows® API Code Pack for Microsoft® .NET FrameworkWindows® API Code Pack for Microsoft® .NET Framework
Windows® API Code Pack for Microsoft® .NET Framework
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
 
2015 1025 OSC-Fall Tokyo NETMF
2015 1025 OSC-Fall Tokyo NETMF2015 1025 OSC-Fall Tokyo NETMF
2015 1025 OSC-Fall Tokyo NETMF
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
 

More from cch-robo

Flutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_SummaryFlutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_Summary
cch-robo
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutter
cch-robo
 
Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告
cch-robo
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
cch-robo
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
 
Dart言語の進化状況
Dart言語の進化状況Dart言語の進化状況
Dart言語の進化状況
cch-robo
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
cch-robo
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
cch-robo
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
cch-robo
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widget
cch-robo
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
cch-robo
 
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるBefore lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
cch-robo
 
Flutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までFlutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux まで
cch-robo
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
cch-robo
 
Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_introcch-robo
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。
cch-robo
 
ZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみる
cch-robo
 
FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法
cch-robo
 

More from cch-robo (18)

Flutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_SummaryFlutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_Summary
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutter
 
Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Dart言語の進化状況
Dart言語の進化状況Dart言語の進化状況
Dart言語の進化状況
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
Dartでサーバレスサービス
DartでサーバレスサービスDartでサーバレスサービス
Dartでサーバレスサービス
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widget
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
 
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるBefore lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
 
Flutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までFlutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux まで
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
 
Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_intro
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。
 
ZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみる
 
FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法
 

Recently uploaded

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 

Recently uploaded (15)

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 

Dart / Flutter コードファイルジェネレート入門