branch10480’s blog

Topics that I've learned.

TDD(テスト駆動開発)についての覚え書き

先日、こちらの本を概要をまとめながら読了しました。

booth.pm

前半はテスト駆動開発(TDD)についての概要説明になっていて、中盤は実際にiOSアプリ開発でTDDを実践していくという内容です。

後半は新しいアプリにへの導入や、既存プロジェクトへの導入について説明がされていて大変勉強になりました。

今回はその前半部分の私なりのまとめになりますが、実践部分を読みながら実際にコードを書いてみてTDDの触りが体験できたように思いますのでよければ是非ご購入ください。

以下、まとめになります。

続きを読む

GitHubのREADME.mdに載せる用のgif画像を作る

目的のコマンドはこちら

ffmpeg -i origin.mp4 -vf scale=640:-1 -r 24 output.gif

普段のアプリ開発やちょっとしたプロジェクトを作ったときに、動作紹介用のgif画像が欲しいときが今まで多々ありました。

そのgif作成にはffmpegを使っていますが、毎回そのコマンドを調べて叩いていたので、今回は備忘録として書いておこうと思います。

欲しいのはこんな感じのgifです。

f:id:branch10480:20210406215639g:plain

続きを読む

複数のQuickSpecのbeforeSuiteとitの実行順序

担当しているプロジェクトのUIテストコードに Quick/Nimble(テスト用フレームワーク) を導入しようとして若干ハマったのでメモします。

何に詰まったのか

最初、Spec1とSpec2のように複数のQuickSpecを用意して、それぞれ初期化処理をしてから実際のテストを走らせようとしていました。

  • Spec1
    • beforeSuite1 - (A)
    • it1 - (B)
  • Spec2
    • beforeSuite2 - (C)
    • it2 - (D)

構造としては上記にようにして、私は以下の実行順序を期待します。

  1. Spec1について、beforeSuite -> it
  2. Spec2について、beforeSuite -> it

しかし実際にテストを実行してみると、Spec2のbeforeSuiteの処理が効いているように見えません。。

なぜ...?

続きを読む

Clean Architecture についてまとめてみた

皆さんこんにちは! 最近作ろうとしているアプリを Clean Architecture で実装しようと思い立ちました。

しかしどういうものかを忘れてしまっていたため、今回は備忘録がてらブログにまとめようと思います。

Clean Architecture はシステムアーキテクチャ

アーキテクチャは大別すると、以下2つがあります。

  1. GUIアーキテクチャ
  2. システムアーキテクチャ

GUIアーキテクチャは UI と モデル を分けるというところにフォーカスしたアーキテクチャです。 一方、システムアーキテクチャは上記にとどまらず、システム全体の構造に着目したものになります。

Clean Architecture は後者です。

4つの登場人物、配置と依存関係のルール

Clean Architecture には重要なコンポーネントと呼ばれる登場人物が4人います。 それがこれらです。

続きを読む

アプリ アーキテクチャ ガイド を読んでみた

今回は業務で Android の設計について調査したので備忘録がてらつらつら書いていこうと思います。参照したドキュメントはこちらです。

アプリ アーキテクチャ ガイド

モバイルアプリのユーザー体験

Android アプリでは アプリマニフェスト にアプリコンポーネントを宣言しておき、全体的なユーザー体験をどのように組み込むかを決定します。

ちなみにアプリコンポーネントにはこのようなものがあります。

  • アクティビティ
  • フラグメント
  • サービス
  • コンテンツプロバイダ
  • ブロードキャストレシーバー

...etc

通信の問題だったり、インテントを使った別アプリ起動、メモリ解放のためのアプリコンポーネントの破棄などは任意のタイミング・順番でおこるため、アプリのデータや状態をアプリコンポーネント内に保存してはいけません。

続きを読む

Andriod の ViewModel について 〜 1 〜

ViewModel の概要

ViewModelはライフサイクルを意識し、UI関連のデータの保存・管理用のクラスです。

UIコントローラ(アクティビティやフラグメント)の主な目的は、UIデータの表示、ユーザー操作への対処、OSとのやり取り(権限リクエストなど)を行うことです。

それ以外のデータベースやネットワークからのデータ読み込みなどの責務は別のクラスに移したほうがファイルの肥大化を防げ、テストもしやすくなります。

ViewModelを実装する

アーキテクチャコンポーネントにはUIコントローラ向けにUIのデータを準備する ViewModel ヘルパークラスが実装されています。

ViewModel オブジェクトは設定の変更時に自動的に保存され、このオブジェクトが保持しているデータはUIコントローラが復帰時に即座に利用できます。

続きを読む

アクティビティ間の移動

画面遷移するときにはアクティビティ間の移動が発生する。今回はアクティビティの移動についてまとめる。

アクティビティを別のアクティビティから開始する

別のアクティビティを開始する方法は2通りあるが、両方とも Intent オブジェクトを渡す。

  • startActivity()
  • startActivityForResult()

Intent では以下2通りの指定ができる。

  1. 明示的に呼び出す先のアクティビティを正確に指定する
  2. 実行する操作タイプを記述して暗黙的な起動にすることができる

2の場合は、別のアプリが起動することがある。

startActivity()

新しく起動するアクティビティから結果を受け取る必要がない場合に使用する。

続きを読む