Lottieは、モバイルおよびウェブアプリケーションでAdobe After Effectsのアニメーションをレンダリングするためのオープンソースライブラリです。アニメーションはBodymovinプラグインを介してJSON形式にエクスポートされ、iOS、Android、Flutter、Web上で品質を損なうことなくネイティブに再生されます。Airbnb Design — Lottieによると、このライブラリは10万以上のアプリケーションで使用されており、重い動画ファイルやGIFを軽量なベクター形式に置き換えています。
重要なポイント
Lottieは、2015年にAirbnbが作成した、ベクターアニメーションをリアルタイムでレンダリングするためのオープンソースライブラリです。開発者はAdobe After Effectsでアニメーションを作成し、Bodymovinプラグインを介してJSONにエクスポートし、Lottieはターゲットデバイス上でレイヤー、シェイプ、透明度、アニメーション曲線を解釈してそのJSONを再生します。
動画ファイルやGIFとは異なり、Lottieは解像度に依存しません — アニメーションはベクターとしてレンダリングされ、どのDPIのデバイスでも同じように表示されます。JSONアニメーションは平均して同等のGIFや動画よりも5〜10倍小さく、帯域幅が限られたモバイルアプリケーションにとって重要です。
Airbnb Engineeringによると、Lottieの採用により、Precomposed動画シーケンスと比較してアプリ内のアニメーションサイズが80%削減され、すべてのサポート対象デバイスで60 FPSを維持しました。現在、LottieはiOS、Android、Flutter、React Native、Web(HTML CanvasおよびSVG)、およびデスクトッププラットフォームでサポートされています。
Lottieのパフォーマンスはネイティブレンダリングに由来します:iOSではCALayerを使用したCore Animation、AndroidではJNIを介したC++による独自のCanvasレンダラーを使用します。これにより、ミッドレンジのデバイスでも数十のレイヤーを持つ複雑なアニメーションをフレームドロップなしで再生できます。WebViewベースのソリューション(GIF、APNG、動画)とは異なり、Lottieはレンダリング用に別のプロセスを作成せず、フレームデコード用に余分なメモリを消費しません。
読み込みインジケーター、マイクロインタラクション付きアイコン、オンボーディング画面、滑らかさとファイルサイズの小ささが重要なプロモーションアニメーションにLottieを使用してください。
Lottieエコシステムには、8つのプラットフォーム向け公式プレーヤー、ブラウザプレビュー用のLottieFilesエディター、数千の既成アニメーションを備えたマーケットプレイスが含まれています。開発者はJSONをダウンロードし、プロジェクトに統合し、After Effectsを開かずにデザインシステムに合わせて色と速度を調整できます。LottieFilesはAIRリンクを介してアニメーションを読み込む機能を備えたSDKも提供しており、App StoreやGoogle Playにアプリの新しいバージョンを公開せずにデバイス上のアニメーションを更新できます。
LottieのJSONスキーマは、ベクターアニメーションを記述するためのオープンスタンダードであり、コンポジション、レイヤー、シェイプの3つのレベルで構成されています。コンポジションにはメタデータ(キャンバスサイズ、フレームレート、期間)が含まれます。
ルートJSONオブジェクトにはlayersフィールド — アニメーションレイヤーの配列が含まれます。各レイヤーは、シェイプレイヤー、イメージレイヤー、テキストレイヤー、またはPreCompレイヤーになります。各レイヤーには、キーフレームに結び付けられたトランスフォームプロパティ(位置、スケール、回転、不透明度)が定義されます。
const animationData = {
"v": "5.5.2",
"fr": 60,
"w": 200,
"h": 200,
"layers": [{
"ty": 4,
"nm": "Circle",
"shapes": [{
"ty": "el",
"p": { "k": [100, 100] }
}]
}]
}
キーフレームは、タイムスタンプ、値、および補間用のベジェ曲線を持つ配列として定義されます。BodymovinはAfter Effectsの曲線を自動的にLottie互換形式に変換し、フレームレベルの精度でタイミングとイージング関数を保持します。
Bodymovinは、コンポジションをLottie JSONファイルにエクスポートするAdobe After Effects拡張機能です。このプラグインは、シェイプ、マスク、エフェクト、テキストレイヤー、トラッキングなど、After Effectsのほとんどの機能をサポートしています。3Dレイヤーといくつかのプラグインには制限があります — これらはエクスポートされず、アニメーションを2Dに簡略化する必要があります。
iOSでは、LottieはSwift Package Manager、CocoaPods、またはCarthageを介して統合されます。メインクラスは、SwiftUI用のLottieViewとUIKit用のLottieAnimationViewです。lottie-iosパッケージは、バンドル、ネットワーク、Dataオブジェクトからのアニメーションをサポートしています。
LottieViewは、バンドルからのJSONファイル名またはネットワーク読み込み用のURLを受け入れるSwiftUI用のViewコンポーネントです。アニメーションは指定された速度と繰り返し回数で自動的に再生されます。
import Lottie
LottieView(animation: LottieAnimation
.named("loading_spinner"))
.loopMode(.loop)
.animationSpeed(1.5)
.frame(width: 100, height: 100)
UIKitでは、LottieAnimationViewが使用され、Interface Builderまたはプログラムで設定できます。このViewは、play、pause、stopのすべてのアニメーション状態と、データ読み込み用のプログレスバーをサポートしています。LottieAnimationViewは、リスト内のアニメーションアイコン用にUITableViewCellやUICollectionViewCellに埋め込むことができます — スクロール時にアニメーションは一時停止し、セルが画面に表示されると再開されるため、CPUとGPUのリソースを節約できます。
最新のiOS開発では、SwiftUIとLottieを組み合わせてアニメーション化されたオンボーディング画面やインタラクティブ要素を積極的に作成しています:スクロール時にScrollViewReaderを介してアニメーションの進行状況がスクロール位置と同期します。これにより、アニメーションがユーザーの指の動きに継続的に追従するパララックス効果が生まれ、重い動画ファイルを使わずにエンゲージメントを高めます。
iOSのLottieプレーヤーは、特定のフレームから別のフレームまでの再生、KeyPathsを介した塗りつぶし/ストローク色の変更、LottieAnimationDelegateを介したイベントのリッスンためのAPIを提供します。パフォーマンスを最適化するために、スクロール中にアニメーションを一時停止し、停止時に再開できます。
Androidでは、LottieはGradle依存関係com.airbnb.android:lottieを介して追加されます。メインコンポーネントはLottieAnimationViewで、XMLレイアウトに通常のViewとして配置し、属性またはプログラムで設定できます。
@Composable
fun LoadingAnimation() {
val composition by rememberLottieComposition(
spec = LottieCompositionSpec.RawRes(R.raw.loading)
)
LottieAnimation(
composition = composition,
iterations = LottieConstants.IterateForever
)
}
XMLレイアウトでは、LottieAnimationViewは属性を介して設定されます:lottie_rawRes(res/raw内のJSONへの参照)、lottie_autoPlay、lottie_loop。ネットワーク読み込みはlottie_urlまたはプログラムでsetAnimationFromUrlを介してサポートされています。Android版Lottieは、ハードウェアアクセラレーションに依存しない独自のCanvasレンダラーを使用します。
静的なアニメーションの場合、JSONはres/rawに配置され、RawResを介して参照されます。動的なアニメーションの場合、LottieはURLまたはDataオブジェクトからJSONを読み込み、ダウンロードの進行状況を示すコールバックを提供します。Lottieキャッシュは、読み込まれたアニメーションを自動的にメモリに保持し、再レンダリング時の再ダウンロードを防ぎます。
Android向けLottieは、リストアイテムに直接埋め込まれたLottieAnimationViewを介してRecyclerViewでのアニメーションをサポートしています。パフォーマンス最適化のため、遅延読み込みでsetAnimationを使用し、RecyclerView.OnChildAttachStateChangeListenerコールバックを介して画面外の要素のアニメーションを無効にすることをお勧めします。これにより、アニメーションアイコンを含む長いリストをスクロールする際のFPS低下を防ぎます。
Lottieは、元のAfter Effectsファイルを変更することなく、既成のアニメーションをカスタマイズするための強力なAPIを提供します。これにより、1つのアニメーションを異なるテーマ、色、アプリケーションサイズに適応させることができます。
塗りつぶしとストロークの色は、KeyPath(アニメーション要素への文字列パス)を介して実行時に変更できます。例えば、カートアイコンの色を赤から青に変更するには、そのKeyPathを見つけて新しい値を適用するだけです。これにより、異なるカラースキームごとに同じアニメーションの複数バージョンを保存する必要がなくなります。
各Lottieアニメーションは、速度(animationSpeed)、進行度(setProgress)、フレーム範囲(play(fromFrame:toFrame:))で制御できます。進行モードでは、アニメーションをスクロールジェスチャーと同期できます:画面をスクロールするほどアニメーションが進行します — これはオンボーディングやパララックス効果で一般的な手法です。
| パラメーター | 説明 | 値の例 |
|---|---|---|
| animationSpeed | 再生速度の倍率 | 2.0 — 2倍の速さ |
| loopMode | アニメーション繰り返しモード | .loop, .repeat(3), .playOnce |
| progress | 0.0から1.0までの手動フレーム制御 | 0.5 — アニメーションの50% |
| play(from:to:) | フレーム範囲を再生 | play(from: 0, to: 30) |
よくある質問
Lottieは解像度に依存しないベクター形式を使用し、GIFよりも5〜10倍少ない容量です。動画とは異なり、Lottieは透明な背景、実行時の色変更、品質を損なわない任意のサイズ変更をサポートしており、レスポンシブインターフェースに最適です。
フレームを失わずにJSONを圧縮するにはlottie-image-compressorツールを使用します。After Effectsで元のアニメーションを最適化します:キーフレームの数を減らし、ベクターレイヤーの代わりにラスター画像を使用せず、複雑なマスクを簡略化します。
はい、LottieはAfter Effectsのテキストレイヤー(フォント、サイズ、色、配置を含む)をサポートしています。一部のプラットフォームでは実行時にテキストを動的に変更できますが、異なるフォントを使用する複雑なテキストの場合はネイティブUIコンポーネントを使用することをお勧めします。
はい、Lottieはアニメーションロゴに最適です。ベクター形式により、Apple Watchから4Kモニターまで、あらゆる画面で鮮明さが保証されます。ブランディングが変更された場合、アニメーションを再エクスポートせずにKeyPathを介してロゴの色を更新できます。
純粋なLottieはJSON内のインタラクティブトリガーをサポートしていません。インタラクティブ性のためには、アニメーションをセグメントに分割し、ボタン押下やスクロール時にコードで起動します。進行モードでは、アニメーションをジェスチャーにバインドしてパララックス効果を作成できます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。