Connect with us

プログラミング

Flutter入門者にオススメの教材・情報源9選(全部無料)

Published

on

はじめに

Flutterとは?

Flutter(フラッター)はGoogleが開発しているアプリケーション開発フレームワークです。所謂クロスプラットフォーム開発を念頭に設計されており、一つのコードベースでiOS/Android両方で利用できるアプリを開発することができます。

またGoogleは他のプラットフォームでも利用できるように開発を進めており、今後はウェブアプリ/デスクトップアプリの開発もサポートされます。ウェブアプリ開発については現在はテクニカルプレビュー、デスクトップアプリはそれよりももう少し前のテスト段階という感じですが、プロジェクトとして公開されています。これらが順調に成長して、Flutterだけでマルチプラットフォーム展開が可能になったら個人開発者としては非常に嬉しいところです。そんな訳で趣味でぼちぼちFlutterアプリを書いたりしています。

何がすごいの?

クロスプラットフォーム開発が楽

クロスプラットフォーム開発が楽です。クロスプラットフォーム開発できるといっても、OS特有の部分はそれぞれ実装する必要がありますが、よく使うものにはライブラリが用意されていたりするので便利です。例えばGPSへのアクセスとかもパッケージを使えば簡単に実装できます。パッケージがない場合は自分で実装しないといけませんが、それぞれのプラットフォーム標準の方法での実装(Java/KotlinやSwiftを使った実装)もサポートしているので、その部分だけ個別に実装すれば大丈夫です。

デバッグが楽

Flutterはホットリロードという仕組みを備えています。デバッグモードでアプリを実行中にコードを変更すると、即座にその変更が反映されます。ちょっとした変更のときに毎回再ビルドすると地味に作業時間を削られていきますが、Flutterでは再ビルドはそんなに必要ありません。FlutterはアプリのUIも全部コードで書いていくことになるのですが、トライアンドエラーを繰り返しながら見た目を整えていくことが多いのでホットリロードには大変お世話になります。

高速

FlutterはDart言語を使って開発していくのですが、Dartは実行時コンパイラ(Just In Time Compiler/JITコンパイラ)と、事前コンパイラ(Ahead Of Time Comliper/AOTコンパイラ)の両方をサポートしています。

デバッグ時には実行時コンパイラを利用することで前述のホットリロードを実現し、開発効率を高めています。一方開発用のリリースビルドを行う際には事前コンパイラを利用することで、ネイティブARMコードを直接生成します。これによってリリースビルドでは最適化されたパフォーマンスが期待できます。やっぱりGoogle的には60fpsでぬるぬる動くってのは大事なようで、Flutter関連の公演でも「60fps」って単語がちょくちょく出てくる気がします。

Flutterの教材について

Googleがかなり積極的に情報展開しているためか、Flutterに関する良質な情報や教材は多いのですが、数が多すぎてどこから取っ掛かればいいのかよく分からなかったので、個人的に良いなと思った教材なんかをオススメしていきます。

オススメ教材

公式

まずインストールは公式が一番しっかりしてると思います。Windows, macOS, Linuxそれぞれ分けて書いてありますし、ChromeOS向けのドキュメントすらあります。Flutterには"flutter doctor"という診断ツールがあり、それを叩くだけで環境設定の不備を指摘してくれますので非常にインストールはスムーズにいきます。

クロスプラットフォーム開発のお決まりのような感じですが、iOSアプリをビルドするにはXcodeのセットアップも必要になります。公式ページにはこの辺りも丁寧に説明がされています。

また既に他の開発を経験している人に向けた学習の手引きも用意されています。例えばAndroid開発者向けには「Intentと同等の仕組みはあるの?」「Shared Preferencesってどうやってアクセスするの?」といったような内容が含まれており、それぞれの経験者がイメージしやすい概念を軸にFlutterについて教えてもらえます。英語で新しい概念を理解していくのは結構大変ですが、既によく知っている事柄をベースに説明してもらえるとかなり楽です。脳みその疲れ具合が全然違います。この手引きは下記の通り5つ存在しています。Xamarinまでカバーしているという素晴らしいラインナップです。

Udacity : Build Native Mobile Apps with Flutter

こちらもGoogleが提供しているので公式教材ですね。Udacityのコースですが無料で利用できるのでよいと思います。序盤でFlutterの概要や、なぜDartを採用したのか等の説明があるので、ささっと概要を聞きたい人にもオススメです。

Google Code Lab (Write Your First Flutter App)

これまた公式ですが、ハローワールドに次に学ぶべき教材としてはCode Labが一番役に立ちました。Flutterで最初に引っかかる部分としてStateless Widgets(ステートレスウィジェット)/Statefull Widgets(ステートフルウィジェット)がありますが、正直公式の説明だけを読んでてもよく分からず、動くものを作りながら実際の動作を確認するのが一番早いです。Code labで作るサンプルアプリはStateless/Statefullに最初に触れるには良い教材です。

パート1パート2に別れていて、この2つのパートを通してスタートアップの名前をランダムに生成してリスト表示するアプリを作ります。パート1では無限スクロールできるリスト表示をするところまで、パート2では生成したお気に入り機能を実装するところまでを実装できます。それぞれ完全な形でのサンプルコードが模範解答として提供されている(パート1/パート2)ので、何か分からないことがあってもこれを参照できます。

Google Code Lab (Building a Cupertino app with Flutter)

こちらはFlutterを使ってiOS標準っぽい外観のアプリを作成する場合のコードラボです。Flutterは2種類のスタイルのウィジェットを提供しており、Android標準っぽいデザインのMaterial widgets(マテリアルウィジェット)とiOS標準っぽいデザインのCupertino widgets(クパチーノウィジェット)がそれぞれ存在します。

ちなみにこの「Cupertino(クパチーノ)」というのはシリコンバレーにある地名から来ています。クパチーノはAppleの本社があることで有名なので、直接Appleの名前を出さずにiOS向けのデザインであるという共通認識を持たせるのに使われています。Googleってこういうの上手いですよね。

ちなみに教材の中でちょっと引っかかったのは序盤にあるこの文章。

You can technically run a Cupertino app on either Android or iOS, but (due to licensing issues) Cupertino won't have the correct fonts on Android. For this reason, use an iOS-specific device when writing a Cupertino app.

【意訳】技術的にはクパチーノアプリはAndroidでもiOSでも動作します。しかし(ライセンスの問題により)クパチーノアプリはAndroid上では適切なフォントを搭載できません。この理由により、クパチーノアプリはiOS搭載デバイスで利用してください。

https://codelabs.developers.google.com/codelabs/flutter-cupertino/#0

Flutter Widgets of the Week

Flutterの基礎を覚えた後、次に苦戦するのがウィジェットだと思います。Flutterは最初から利用できる便利なウィジェットを沢山用意していますが、種類が多くて最初はどれを使ったらよいか良く分かりませんでした。

Flutter Widgets of the WeekはGoogle公式のYouTube動画シリーズで、Flutterが最初から提供している便利なウィジェットを、1分〜1分30秒程度で一つずつ紹介してくれます。アニメーションを沢山使って直感的に分かりやすいように工夫してくれるのと、短い動画なのにサンプルコードまで紹介してくれたりするので、英語が苦手でも見る価値があると思います。2019年10月現在時点で54本もありますが、一本一本が短いので一気見が可能です。これを一気に見て、自分が作りたいUIに必要そうなウィジェットをメモすることで、アプリを作るイメージが固まってきました。最初はメモを取らずに見ていましたが、さすが多すぎて「あれ?あのウィジェット何だっけ??」と思い出せなくなるケースが何回かあってメモを取ることにしました。若い人ならメモなしでもいけるかも知れません。

Flutter Awesome

公式ウィジェットだけでアプリを作っていくのは趣味グラマーとしては大変なので、便利なパッケージは積極的に利用したいところです。Flutter AwesomeではFlutterのパッケージやプロジェクトが沢山紹介されており、便利なパッケージ探しを行うのに重宝しました。他のプラットフォームでもAwesome-iosとかAwesome-vueとかがありますよね。そんな感じです。ただしFlutter AwesomeはスクリーンショットやアニメGIFなどが掲載できるので、直感的に理解しやすい形でパッケージが紹介されています。Awesome-vueとかだと基本的には文字ベースの簡単な紹介なので、一個一個リンクを踏んで行かないと自分が欲しいものかどうか分からないのですが、Awesome Flutterは欲しいものを探しやすいです。

pub.dev

pub.devはDartのパッケージの閲覧ができるサイトで、node.jsでいうnpmjs.comみたいなものです。ここでよかったのはトップページに「Top Dart packages」という人気ランキング?みたいなものがあって、それを眺めるだけでもFlutter開発者が良く使っているであろうパッケージが分かったことです。「あー、http通信ってこれ使っておけばいいのね」みたいなのがぼんやりと把握できました。

Pragmatic State Management in Flutter (Google I/O'19)

Flutterで難しい問題として状態管理があると思います。例えばスライダーUIと円グラフを連動させたい場合、それぞれが持っている値を共有してあげないといけません。このYouTube動画では、データをどのようにハンドリングするべきなのか、ライブコーディングしながら、その実践的な方法について紹介されています。

Flutterの状態管理には様々なアプローチがあり、アプリの複雑度によってベストなアプローチは違ってきます。

Dart入門 - Dartの要点をつかむためのクイックツアー

あんまり言語をきっちり勉強してから動く方ではないので、Dartに関してはCode labのサンプルを見たりしながら覚えていきました。Kindle Unlimitedで利用できたので、こちらの書籍は参考にしたりしました。

おわりに

この記事ではFlutter開発を行う上で参考になった教材や情報源について紹介しました。FlutterはGoogleが公式にかなり多くの教材を提供している関係で、良質の教材が揃っていると思います。今後Flutterがウェブ、デスクトップにも進出してくれば活躍の機会も増えますので、今のうちに勉強しておき流行りに乗り遅れないようにしたいですね。

Continue Reading
Click to comment

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

プログラミング

Electron/Node.jsのABIバージョンの一覧と動的に取得すつためのモジュール

Published

on

はじめに

Electronでアプリを作っていると、使っているモジュールの再ビルドなどが必要になるケースがあります。その際にはElectronとNode.jsのABIバージョンの情報が必要になります。

このABI (Application Binary Interface : アプリケーション・バイナリー・インターフェイス)のバージョンはElectronとNode.jsのバージョンで定められているのですが、情報が探し難かったので自分のための備忘録を兼ねてこの記事でまとめたいと思います。

ElectronのABIバージョン一覧

ElectronのリリースノートなどにもABIバージョンに関する記載がなかったので、一覧にしました。基本的にはElectronのメジャーバージョンで一意に決まるようですが、Electron 4.x.yだけマイナーバージョンでもABIバージョンが更新されているので注意が必要です。

ElectronバージョンABIバージョン
2.x.y57
3.x.y64
4.x.y<4.0.4未満>
64
<4.0.4以降>
69
5.x.y70
6.x.y73
7.x.y75
8.x.y76
9.x.y80

なお、この一覧は後述のnode-abiパッケージ内の情報を参照しました。

Node.jsのABIバージョン一覧

Node.jsに関しては、公式のリリース一覧を見れば確認することができます。「NODE_MODULE_VERSION」という列がABIバージョンだという説明があります。

[1]: NODE_MODULE_VERSIONは、Node.jsのABI(アプリケーションバイナリインタフェース)のバージョン番号を指します。このバージョンは、再コンパイルすることなくC++アドオンのバイナリーをロード可能か確認するために使われます。

https://nodejs.org/ja/download/releases/#ref-1

ABIバージョンを動的に取得するモジュール

ビルドの自動化などのために、動的にABIバージョンを取得して利用したいケースもあると思います。node-abiを使えばABIバージョンからElectron/Node.jsのバージョンを取得したり、逆にElectron/Node.jsのバージョンからABIバージョンを取得することができます。

Continue Reading

プログラミング

使ってみて便利だったFlutterパッケージ4選

Published

on

Flutter/Dartには様々な便利なパッケージが公開されており、うまく利用することで開発の工数を大幅に削減することができます。この記事ではAndroid/iOSアプリをFlutterで開発した際に便利だったパッケージを紹介します。

cached_network_image

アプリを作っているとインターネット上から取得してきた画像を表示しなければならないシーンがあります。そういった場合、ネットワーク状態が不安定だったりサーバ側からの応答が遅かったりと、ローカル画像表示では問題にならない様々なトラブルを想定しなければなりません。

cached_network_imageはネットワーク上から画像を表示する場合に便利なパッケージです。ロード中のプレイスホルダー表示や、画像ダウンロードに失敗した場合のエラー表示を下記のような形でスッキリと記載することができます。

ちなみにFlutter1.10.15からはFlutterのImageProviderに大きな変更があったようで、その環境で利用する場合には2019年12月現在はではRC版であるバージョン2.0.0-rcをを利用する必要があります。

(2020年1月更新) 2.0.0からrcが取れてめでたく正式バージョンになりました。これで気兼ねなく使うことができます。

flutter_launcher_icons

Android/iOSアプリを開発するときに意外と面倒なのがアプリアイコンの設定です。flutter_launcher_iconsは、アイコン画像ファイルを一枚配置してコマンドを叩くだけでこれらの設定を完了してくれるという便利パッケージです。

まずpubspec.yamlでアイコン画像の指定を行います。ちなみにflutter_launcher_iconsはFlutterアプリに組み込むパッケージではないので、dev_dependanciesとして導入すればいいみたいです。僕は普通のdependanciesに入れてしまいましたが普通に動きました。

あとはコマンドを叩くだけです。ターミナルで次のようにコマンドを入力するだけです。アイコンファイルを更新した場合ももう一度このコマンドを叩けば上書きしてくれます。

webview_flutter

Flutterアプリ内部で特定のウェブページを開きたい場合があります。アプリのプライバシーポリシーなどは、誰でも見れるようにウェブ上に公開する必要があることに加えて、アプリ上でも表示してあげないといけません。ウェブページ+WebViewを活用することで工数を抑えつついい感じの実装ができます。

webview_flutterはWebViewを利用するためのパッケージです。iOS向けにはWKWebView、Android向けにはWebViewが内部的には使われているようです。2020年1月現在Developers Preview扱いではありますが、使っている限りでは普通に使えます。

url_launcher

WebViewは凄く便利な仕組みですが、外部アプリで特定のURLを開きたいケースもあります。例えばAmazon アソシエイトはAmazonのウェブページをWebViewで表示することを禁じているので、AmazonのページはブラウザかAmazonショッピングアプリで開くようにしないといけません。

そんな場合に便利なパッケージがurl_launcherです。一般的なhttp/httpsから始まるURLであればデフォルブラウザで開いてくれます。またAndroidの場合はカスタムURLスキームにも対応しているようで、Amazonショッピングアプリが入っている状態ではきっちりAmazonショッピングアプリでURLを開いてくれます。

この他、mailto/tel/smsから始まるURIにも対応しており、それぞれメールアプリ/電話アプリ/SMSアプリと連携できるようです。便利。

なおiOSで利用する場合、forceSafariCVというオプションをfalseに指定しておかないとWebViewとして開くことになります。

Continue Reading

プログラミング

Product Hunt(プロダクトハント)で気になったプロダクト 2019年11月1日( Hexometer/Previewmojo/Startup Gifs)

Published

on

Product Huntはユーザー投稿型のサイトで、作成したプロダクトに関する概要を投稿することができるようになっています。投稿に対してはユーザーが投票できるようになっており、日毎/週毎/月毎にその日のNo.1のプロダクトが決定され、Product Huntで上位になったプロダクトはちょっとした箔が付く感じになります。

Product Huntで11月1日に投稿されたプロダクトのうち、個人的に気になったものをいくつか紹介していきます。

Hexometer

概要

Hexometerはウェブサイトの解析・モニタリングツールです。AI技術と2800ものデータポイントを利用してウェブページを解析してくれるというのがウリです。他の多くの解析ツール同様、URLをスキャンを入力するだけで、解析結果をわかりやすく表示してくれます。

使い方

URLを入力して解析結果を見るだけなのでとても簡単です。見られる情報には下記のようなものがあります。画像は全て当ブログのトップページのURLを入力したときのものです。SEO対策に役立ちそうな情報が色々得られるので、

ドメイン/Whoisデータ

ドメインを取得した日だったり、そのドメインの有効期限まで分かります。

ドメイン/Whois 情報

ページのアセット内訳

ウェブページを構成する画像ファイル、Javascriptファイル、CSSファイルなどの占める容量を表示してくれ、総合的な表示の速さを教えてくれます。ウェブページをダイエットさせて高速化させるときの勘所が大体分かりそうです。

アセット

ウェブページのロード時間内訳

ウェブページをロードする際にかかっている時間の内訳を見ることができます。通信時のラウンドトリップタイムやサーバのレスポンス時間も確認できるので、これもウェブページの高速化に役立ちそうです。

ロードタイム

ウェブサイトで使われている技術スタック

ウェブページで使っている技術スタックがざっくり分かります。ライバルのページが何か面白いギミックを入れているときには、そのページが使っているものなんかを調べるのにもいいかも知れません。

技術スタック

メタデータチェック

メタデータが正しく埋め込まれていないページを探し出してくれます。

メタデータチェック

料金プラン

料金プランは下記のようになっており、無料プランでは解析できるウェブサイトの数が1つに限定されます。ベータ版として提供されているためか、今時点では普通に複数のウェブサイトの確認が可能でした。有料プランとしては月額8.25ドル(年払いで一括99ドル)のビジネスプランが用意されています。また解析可能なURLの数を任意に設定できるプレミアムプランも用意されています。

料金プラン

Previewmojo

概要

PreviewmojoはソーシャルメディアなどでURLを共有するときに作られるOGP画像をいい感じに生成してくれるツールです。ウェブページの内容を自動で解析して必要な情報をOGP画像として描画してくれます。読むのにかかる時間の目安を表示してくれる機能なんかいいですね。

サンプル

使い方

デザイン

ウェブページ上で画像のデザインを設定します。簡単なレイアウトやブランドカラーなどを設定可能です。

デザイン

ウェブサイトへの埋め込み

ウェブサイトに埋め込むためのコードを挿入します。Wordpress用、Ghost用の他、ピュアなHTMLで記述されたものも用意されています。Product Hunt上の質疑によれば、近いうちにWordpressプラグインも作りたいと考えているようです。

埋め込み用のコード

料金プラン

料金プランは下記の通りです。ドメイン1つであれば月額9ドル。5つまでのProプランは月額19ドル。年払いでさらにお得になります。

料金プラン

Startup Gifs

概要

Startup Gifsはスタートアップ関連?の面白Gifアニメを集めたコレクションです。

使い方

好きなGifをクリックするとクリップボードにGiphyのリンクがコピーされます。GiphyのリンクはSlackなどに貼れば自動で描画されますので、スタンプのようにして利用することができます。

Continue Reading

Trending