【完成コードの使い方】pubspec.yaml・main.dart・画像素材を準備する
この節で学ぶこと
前の節では、NETFLIX風アプリの完成形を見ながら、アプリ全体の雰囲気をつかみました。
今回の節では、完成コードを動かすために必要な準備をしていきます。
アプリ開発では、いきなり main.dart を書き始めるのではなく、まず「必要なファイルがそろっているか」「画像素材が正しい場所にあるか」「パッケージが読み込める状態になっているか」を確認することが大切です。
今回見る主なファイルは、次の3つです。
| ファイル・フォルダ | 役割 |
|---|---|
pubspec.yaml | アプリで使うパッケージや画像素材を登録するファイル |
lib/main.dart | アプリ本体のコードを書くファイル |
assets/images/ | ロゴやアイコン画像を入れておくフォルダ |
この3つが正しく準備できると、完成コードを動かすための土台が整います。
まずはフォルダ構成を確認しよう
今回のアプリでは、プロジェクトの中身がだいたい次のようになっていればOKです。
netflix_like_app/
├── assets/
│ └── images/
│ ├── logo.svg
│ └── icon.png
├── ios/
│ └── Runner/
│ └── Info.plist
├── lib/
│ └── main.dart
└── pubspec.yaml
最初は、全部の意味が分からなくても大丈夫です。
今はまず、
pubspec.yaml
lib/main.dart
assets/images/logo.svg
assets/images/icon.png
この4つがあるかを確認してください。
この4つが、今回の教材で特によく使うファイルです。
pubspec.yamlとは?
pubspec.yaml は、Flutterアプリの「設定ファイル」です。
もう少し普段の言葉で言うと、アプリに必要なものを書いておく 持ち物リスト のようなものです。
たとえば、今回のアプリでは次のようなものを使っています。
| 必要なもの | 何に使うか |
|---|---|
| YouTube再生 | 作品の動画を表示する |
| Google Fonts | 文字の見た目を整える |
| SVGロゴ表示 | logo.svg を画面に表示する |
| 共有機能 | iOSの共有画面を表示する |
| アプリアイコン生成 | icon.png をアプリのアイコンにする |
| 画像素材 | ロゴやアイコンを読み込む |
これらをFlutterに伝えるのが、pubspec.yaml の役割です。
今回使うpubspec.yaml
今回の完成コードでは、pubspec.yaml は次のような形になります。
name: netflix_like_app
description: Netflix-like Flutter UI mock app with YouTube playback.
publish_to: 'none'
environment:
sdk: ^3.6.0
dependencies:
flutter:
sdk: flutter
youtube_player_iframe: ^5.2.2
google_fonts: ^7.0.0
flutter_svg: ^2.0.17
share_plus: ^12.0.1
flutter_launcher_icons: ^0.14.3
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^5.0.0
flutter:
uses-material-design: true
assets:
- assets/images/
flutter_launcher_icons:
android: true
ios: true
image_path: 'assets/images/icon.png'
remove_alpha_ios: true
ここで大切なのは、全部を暗記することではありません。
まずは、「どこに何を書くか」をざっくりつかめば大丈夫です。
dependenciesとは?
dependencies は、アプリを動かすために必要なパッケージを書く場所です。
パッケージとは、便利な機能をまとめて使えるようにしたものです。
今回使っているパッケージを見てみましょう。
| パッケージ | 役割 |
|---|---|
youtube_player_iframe | YouTube動画をアプリ内で再生する |
google_fonts | Google Fontsのフォントを使う |
flutter_svg | SVG形式のロゴ画像を表示する |
share_plus | iOSやAndroidの共有画面を表示する |
flutter_launcher_icons | アプリアイコンを自動生成する |
たとえば、flutter_svg がないと、次のようなコードは使えません。
SvgPicture.asset(
'assets/images/logo.svg',
)
つまり、pubspec.yaml にパッケージを書くことで、main.dart の中でその機能を使えるようになります。
assetsとは?
assets は、アプリで使う画像やファイルを登録する場所です。
今回のコードでは、次のように書いています。
flutter:
uses-material-design: true
assets:
- assets/images/
これは、
assets/images/ フォルダの中にある画像をアプリで使います
という意味です。
今回、この中には次の画像を入れています。
| ファイル | 使い道 |
|---|---|
logo.svg | アプリ内のロゴ |
icon.png | ホーム画面に表示されるアプリアイコン |
ここでよくあるミスは、ファイルの場所がずれていることです。
たとえば、コードではこう書いているのに、
'assets/images/logo.svg'
実際のファイルがこちらにあると、表示されません。
assets/logo.svg
Flutterでは、ファイルの場所をかなり正確に見ます。
assets/images/logo.svg と書いたら、本当にその場所にファイルが必要です。
YAMLで気をつけること
pubspec.yaml は、書き方に少しクセがあります。
特に大切なのは、空白の位置 です。
たとえば、これはOKです。
flutter:
uses-material-design: true
assets:
- assets/images/
でも、次のように空白がずれるとエラーになることがあります。
flutter:
uses-material-design: true
assets:
- assets/images/
YAMLでは、空白にも意味があります。
見た目は少し地味ですが、Flutterではかなり大切なファイルです。
main.dartとは?
main.dart は、アプリ本体を書くファイルです。
Flutterアプリは、基本的にここから始まります。
今回のコードでも、最初の方に次のようなコードがあります。
void main() {
runApp(const NetflixLikeApp());
}
これは、
NetflixLikeAppというアプリを起動してください
という意味です。
Flutterアプリは、まず main() から始まり、runApp() で画面を表示します。
main.dartの中には何が入っている?
今回の main.dart は少し長いですが、中身は大きく分けると次のようになっています。
| 部分 | 内容 |
|---|---|
| import | 使うパッケージを読み込む |
| NetflixLikeApp | アプリ全体の設定 |
| NetflixColors | 色の管理 |
| MovieItem | 作品データの設計 |
| movies | 作品データ一覧 |
| SplashScreen | 起動画面 |
| NetflixShellPage | 下部ナビゲーションの管理 |
| NetflixHomePage | Home画面 |
| ClipsPage | Clips画面 |
| SearchPage | 検索画面 |
| MyNetflixPage | My Netaflix画面 |
| MovieDetailPage | 作品詳細画面 |
| YouTubePlayerPage | YouTube再生画面 |
こうして分けて見ると、長いコードも少し見やすくなります。
最初から全部を理解しようとしなくて大丈夫です。
まずは、「このクラスはこの画面を作っているんだな」くらいでOKです。
importとは?
main.dart の一番上には、次のようなコードがあります。
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:share_plus/share_plus.dart';
import 'package:youtube_player_iframe/youtube_player_iframe.dart';
import は、必要な道具を使えるようにするための準備です。
たとえば、次のようなイメージです。
| import | 使えるようになるもの |
|---|---|
flutter/material.dart | Flutterの基本UI |
flutter_svg/flutter_svg.dart | SVG画像の表示 |
google_fonts/google_fonts.dart | Google Fonts |
share_plus/share_plus.dart | 共有機能 |
youtube_player_iframe/youtube_player_iframe.dart | YouTube再生 |
もし flutter_svg を使っているのに、importを書いていないと、
SvgPicture が見つかりません
というようなエラーになります。
つまり、pubspec.yaml は「パッケージをアプリに入れる場所」、import は「そのパッケージをこのファイルで使うための準備」です。
画像素材を準備しよう
今回使う画像素材は、主に2つです。
assets/images/logo.svg
assets/images/icon.png
それぞれの役割は次の通りです。
| ファイル | 役割 |
|---|---|
logo.svg | アプリ内に表示するロゴ |
icon.png | スマホのホーム画面に表示されるアプリアイコン |
logo.svg は、アプリの中で次のように使われています。
SvgPicture.asset(
'assets/images/logo.svg',
height: height,
fit: BoxFit.contain,
)
icon.png は、flutter_launcher_icons の設定で使われています。
flutter_launcher_icons:
android: true
ios: true
image_path: 'assets/images/icon.png'
remove_alpha_ios: true
ここで大切なのは、logo.svg と icon.png は使われ方が違うということです。
logo.svg はアプリの画面内に表示する画像です。
icon.png はアプリそのもののアイコンとして使う画像です。
パッケージを読み込む
pubspec.yaml を書いたら、ターミナルで次のコマンドを実行します。
flutter pub get
これは、pubspec.yaml に書かれたパッケージをFlutterに読み込ませるコマンドです。
普段の言葉で言うと、
必要な道具を全部そろえてください
という指示です。
このコマンドを実行しないと、main.dart でパッケージを使おうとしてもエラーになることがあります。
アプリアイコンを反映する
assets/images/icon.png をアプリアイコンとして使うには、次のコマンドを実行します。
dart run flutter_launcher_icons
これで、iOSやAndroid用のアイコン画像が自動で作られます。
もしうまく反映されない場合は、次のように実行します。
flutter clean
flutter pub get
dart run flutter_launcher_icons
flutter run
iPhoneシミュレーターや実機で古いアイコンが残る場合は、一度アプリを削除してからもう一度実行すると反映されやすいです。
アプリを起動する
準備ができたら、アプリを起動します。
flutter run
成功すると、黒いスプラッシュ画面が表示され、そのあとHome画面に移動します。
最初に確認するポイントは次の通りです。
| 確認する場所 | 見るポイント |
|---|---|
| Splash画面 | ロゴと説明文が表示されるか |
| Home画面 | 背景画像や作品一覧が表示されるか |
| BottomNavigationBar | Home / Clips / Search / My Netaflix が表示されるか |
| Search画面 | 検索欄が表示されるか |
| Clips画面 | 縦スクロールできるか |
| 詳細画面 | PlayやShareボタンが表示されるか |
全部が完璧に動かなくても、まずは画面が立ち上がれば大きな前進です。
よくあるエラーと確認ポイント
Q. ロゴが表示されません。
まず、ファイルの場所を確認してください。
assets/images/logo.svg
次に、pubspec.yaml に次の設定があるか確認します。
flutter:
uses-material-design: true
assets:
- assets/images/
さらに、main.dart にこのimportがあるか確認します。
import 'package:flutter_svg/flutter_svg.dart';
Q. パッケージが見つからないと言われます。
flutter pub get を実行してください。
flutter pub get
それでも直らない場合は、アプリを止めてからもう一度実行してみます。
flutter clean
flutter pub get
flutter run
Q. アプリアイコンが変わりません。
まず、icon.png の場所を確認します。
assets/images/icon.png
次に、pubspec.yaml の設定を確認します。
flutter_launcher_icons:
android: true
ios: true
image_path: 'assets/images/icon.png'
remove_alpha_ios: true
そのあと、次のコマンドを実行します。
dart run flutter_launcher_icons
それでも変わらない場合は、アプリを一度削除してから再インストールしてください。
Q. pubspec.yamlでエラーが出ます。
多くの場合、空白の位置が原因です。
特に、次の部分を確認してください。
flutter:
uses-material-design: true
assets:
- assets/images/
flutter: の下は、半角スペース2つ分あけるのが基本です。
まずカスタマイズしてみよう
ここまで準備できたら、少しだけカスタマイズしてみましょう。
今回は、アプリ名を変えてみます。
MaterialApp の中にある次の部分を探してください。
title: 'NETAFLIX',
これを、たとえば次のように変えます。
title: 'MOVIE LAB',
保存して、アプリを再起動してみましょう。
この title は、画面に大きく表示されるものではありませんが、アプリ内部の名前として使われます。
次に、iOSのホーム画面に表示される名前も変えたい場合は、Info.plist の次の部分を見ます。
<key>CFBundleDisplayName</key>
<string>Netflix Mock</string>
ここを次のように変えることができます。
<key>CFBundleDisplayName</key>
<string>NETAFLIX</string>
このように、Flutter側の設定とiOS側の設定が別々にあることも、少しずつ覚えていきましょう。
チャレンジ
チャレンジ1:assets/images/に画像があるか確認しよう
次の2つのファイルがあるか確認してください。
assets/images/logo.svg
assets/images/icon.png
見つからない場合は、フォルダ名やファイル名が間違っていないか確認しましょう。
チャレンジ2:pubspec.yamlのassets設定を確認しよう
次の設定があるか確認してください。
flutter:
uses-material-design: true
assets:
- assets/images/
空白の位置も含めて確認しましょう。
チャレンジ3:アプリ名をカスタマイズしてみよう
MaterialApp の中にある、
title: 'NETAFLIX',
を好きな名前に変えてみましょう。
例:
title: 'MOVIE LAB',
チャレンジ4:iOSに表示されるアプリ名を変えてみよう
ios/Runner/Info.plist の中にある、
<key>CFBundleDisplayName</key>
<string>Netflix Mock</string>
を探して、表示名を変えてみましょう。
例:
<key>CFBundleDisplayName</key>
<string>NETAFLIX</string>
チャレンジの答え
チャレンジ1の答え
正しい配置は次の形です。
assets/
└── images/
├── logo.svg
└── icon.png
assets/image/ や asset/images/ のように、少しでも名前が違うと読み込めません。
チャレンジ2の答え
正しい書き方は次の通りです。
flutter:
uses-material-design: true
assets:
- assets/images/
assets: の前の空白、- assets/images/ の前の空白が大切です。
チャレンジ3の答え
変更前:
title: 'NETAFLIX',
変更後の例:
title: 'MOVIE LAB',
これはFlutterアプリ内部のタイトルです。
チャレンジ4の答え
変更前:
<key>CFBundleDisplayName</key>
<string>Netflix Mock</string>
変更後の例:
<key>CFBundleDisplayName</key>
<string>NETAFLIX</string>
iPhoneのホーム画面に表示される名前を変えたいときに関係します。
この節のまとめ
この節では、完成コードを動かすための準備をしました。
大切なポイントは次の通りです。
pubspec.yamlは、アプリで使うパッケージや画像素材を登録するファイル。main.dartは、Flutterアプリ本体を書くファイル。assets/images/には、ロゴやアイコン画像を入れる。- パッケージを追加したら、
flutter pub getを実行する。 - アプリアイコンを反映するには、
dart run flutter_launcher_iconsを実行する。 - 画像が表示されないときは、ファイルの場所と
pubspec.yamlの設定を確認する。
次のステップ
次の節では、アプリ起動時に表示される スプラッシュ画面 を見ていきます。
黒い背景の中央にロゴを表示し、その下に、
このアプリは授業の一環で作成しました。
という説明文を出しています。
次は、アプリを開いた瞬間の第一印象を作る部分を学んでいきましょう。
