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

MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門torisoup
 
FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするchigichan24
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計Shinnosuke Tokuda
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門Unity Technologies Japan K.K.
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」U-dai Yokoyama
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~啓 杉本
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しようUnityTechnologiesJapan002
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するTakahito Tejima
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろうUnity Technologies Japan K.K.
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 

What's hot (20)

MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
FlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにするFlutterでBLEを
いい感じにする
FlutterでBLEを
いい感じにする
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計hooks riverpod + state notifier + freezed でのドメイン駆動設計
hooks riverpod + state notifier + freezed でのドメイン駆動設計
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろうUIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 

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_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
 

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_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

持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 

Recently uploaded (12)

2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 

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