SlideShare a Scribd company logo
1 of 77
Download to read offline
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

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Scott Wlaschin
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpkyon mm
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターンSoudai Sone
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介torisoup
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こうShinnosuke Tokuda
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム信之 岩永
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能TomomitsuKusaba
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersShota TAMURA
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 

What's hot (20)

Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)Domain Modeling Made Functional (DevTernity 2022)
Domain Modeling Made Functional (DevTernity 2022)
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jpテストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
Riverpodでテストを書こう
Riverpodでテストを書こうRiverpodでテストを書こう
Riverpodでテストを書こう
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 

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
 
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_shibamuraHiroshi 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 FrameworkTadahiro Higuchi
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMFAtomu 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 NETMFAtomu 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 NETMFAtomu 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 JGGUGUehara Junji
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Visual Studio による開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化Fujio Kojima
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 

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 による開発環境・プログラミングの進化
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 

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_Summarycch-robo
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_fluttercch-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 widgetcch-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-practicecch-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

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

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