rails OAuth

今日はrailsでのログイン機能の一つであるOAuthについてまとめたいと思います。

OAuthとTwitterFacebookGitHubなどの自身がアカウントを保有する他のサービスを利用して認証を行うシステムです。railsではgemとして実装されており、omniauthと言うgemを入れておけば後は自分が使いたいサービスのgemをインストールして設定を進めていく形になります。

# Gemfile
gem "omniauth" #これは必ずインストールする必要あり
gem "omniauth-twitter" 
gem "omniauth-gitfub"

この機能を使うにはgemの設定だけでなく、APIを用いる際に使ったようなAPIキーやクライアントIDの設定もする必要があります。githubの場合ではconfig/initializer以下にファイルを作成して必要な情報を書きこむのですが、この際にIDなどをベタ書きしてしまうとセキュリティ的に宜しくないのでcredential.ymlに記述するようにします。

ここまで設定できたら、ログインするUserモデルに必要なカラム(providerやid)を搭載して作成すれば完了です。

Android バリデーション

今日はAndroidStudioでの開発に置けるバリデーションのかけ方についてまとめたいと思います。

そもそもバリデーションとはアプリやサービスで何か値を入力した際に、入力された値が正しい形式に乗っ取っているものなのかをチェックすることをさします。Rubyなどではモデルに正規表現で有効な値を記述しました。

Androidではメソッドとして入力された値を取得、if文でその値が適切な形になっていることを確認し処理を分岐させると言った形やライブラリを搭載してバリデーションをつけることも可能です。AndroidSaripaarという名前のライブラリがあるのですが、2015年くらいから使われており今は年に一回コンパイルが行われるくらいのものとなっています。

しかし、ライブラリを利用するにはValidationListenerを継承したクラスを作成するなど若干手間がかかります。使い方自体は難しい訳ではないのですが文字数チェックなどの簡単な入力の為にわざわざそこまでする必要はありません。

別のバリデーションのかけ方としてはxmlファイルに最大桁数を直接書き込むと言った形があります。

 <EditText
        // 最大入力桁数を10に制限する
        android:maxLength="10"
       />

これで10を超える桁は入力出来なくなりました。ここではメソッドやライブラリでバリデーションをかけた場合と違い、そもそも10以上の文字が入力できなくなると言った形になります。

今日は以上です。

データベース Firestore

今日はデータベースの一つであるFirestoreについてまとめたいと思います。

FirestoreはGoogleのnoSQL型のデータベースでクライアント側とサーバー側のデータを保存、同期する物です。MySQLなどと違いSQLを必要としないDBが増えつつあるのかもしれません。

実際、AndroidStudioでアプリを作成する際に使ってみたのですが導入の方法はかなり簡単でした。大まかな手順としてはプロジェクトを作成→プロジェクトの中にDBを作成→アプリにFirestoreを導入と言った流れになります。

最初にセキュリティのモードを選択するのですが、基本的にAndroidSDKで用いる際にはテストモードを選択します。しかし、ここでセキュリティを初期のままにしておくと30日後に使えなくなってしまうので気をつけます。実際期限が切れる三日前から毎日Googleからメールがきます。

アプリにFireStoreを追加する方法としてはbuild.gradleファイルにFirestoreを使用する為の記述を加えるだけです。

// appのbuild.gradle
implementation 'com.google.firebase:firebase-firestore:バージョン'

FireStoreを使う為の準備を終えたら、あとはRealmの時と同じようにデータを作成する段階でインスタンスを初期化するだけです。

使い方はそこまで複雑ではないのですが、Firestoreにはカラムやレコードが存在しません。その代わり、データはドキュメントと言った形でキーバリューストアで保存されます。そしてそのドキュメントがコレクションにまとめられると言った構造になっています。

コレクションは自動で生成される為、明示的に作成する必要はありません。データにアクセスする際にはコレクション名を指定する形で呼び出します。

今日は以上です。

Androidアーキテクチャ Flux

今日は先日に引き続きAndroidアーキテクチャのひとつであるFluxについてまとめたいと思います。参考にした記事は下記のものになります。

https://employment.en-japan.com/engineerhub/entry/2018/01/17/110000

FluxアーキテクチャはMVVMのようにまだ広く使われているものでは無いですがMVVMなどには無い利点を持ち、少数ではあるが日本のサービスにも用いられ始めているアーキテクチャになります。

MVVMはユーザアクションからのみのデータ更新は問題なく行うことが可能で、構造もわかりやすいです。しかし、Ajaxでの非同期通信で複数人からのデータ更新要求が必要になるとデータの整合性などに不安が残ります。

FluxではAction→Dispatcher→Store→Viewの形で処理が流れ、それぞれが別々の役割を持ちます。ActionがViewからの入力などを処理しその結果をStoreに伝達、DispatcherがActionをStoreに伝達、StoreがDispatcherから送られたActionおよびそれが含むデータに応じて自身の状態を変更し保持、Viewが画面に結果を表示と言った形です。

このように何がどのような役割を持っているかが明確に別れることによって処理を書く場所が明確化される。状態管理がStoreのみに集約されることによって記述の簡素化を計ることができると言ったメリットも存在します。

今日は以上です。

Androidアーキテクチャ MVVM

今日はAndroidアプリ開発アーキテクチャについてdeveloperガイドの内容を元にまとめたいと思います。

アーキテクチャとはアプリの設計手法を指し、Ruby on Railsで開発を行なっていた時に使っていたMVCの考え方などと同種のような物に感じました。アーキテクチャを用いて開発を行うことによってアプリのメンテナンス性やユーザエクスペリエンスの向上に繋がるとされています。

このアーキテクチャの基本原則として挙げられる二つの要素としては、関心の分離とUIをモデルで操作になります。関心の分離はクラスをシンプルに保つことによってライフサイクルの問題発生を回避しユーザエクスペリエンスの向上に繋げる。UIをモデルで操作はアプリから独立して管理されるModelコンポーネントを使用することで問題発生を避ける意図があります。

今日はAndroidアプリ開発の際に用いられることがあるMVVMの考え方についてまとめたいと思います。MVVMはModel,View,ViewModelの頭文字をとってつけられた名前でそれぞれのコンポーネントがそれぞれの役割を持ちます。

ViewはUIを表示する為のコンポーネントでViewModelより必要なデータを必要な形に加工したのちに受け取ります。Viewが依存関係を保つのはViewModelのみで他のコンポーネントと関係は持ちません。

次にViewModelの役割は先ほど記述したViewへのデータ渡しや、逆にViewから渡されたデータを保存するメソッドの呼び出しなども行うコンポーネントになります。厳密に言えばViewModelの下にRepositoryと言ったデータ取得のみを行うコンポーネントを設置する形もあるのですが、これもViewModelに含まれるとされます。

最後にModelです。これはデータを実態として保存するコンポーネントでデータの永続化を担っています。この下にはSQliteなどのDBが存在しています。

このようなツリー構造になっているアプリ構造の考え方がMVVMと呼ばれるものになります。

今日は以上です。

Android機能 アダプタクラス

今日はandroidstudioに置けるリストデータの作成についてまとめたいと思います。

アクティビティの中でリストを作成する場合、リストデータの用意→アダプタオブジェクトの作成→ListViewにアダプタオブジェクトをセットと言った手順を踏みます。

リストデータの用意はonCreateメソッド内でListオブジェクトを追加し、データをaddメソッドで追加すれば終わりです。次にアダプタオブジェクトを作成します。アダプタオブジェクトはリストビューの各行にリストデータを当てはめる働きをするオブジェクトになります。これを使うにはAdapterインターフェースを実装したクラスを利用します。ArrayAdapterクラス、SimpleAdapterクラス、SimpleCursorAdapterクラスなどを元になるリストデータの型によって使い分ける形になります。

 // リストデータを入れるListオブジェクトを作成
 List<String> baseballteams = new ArrayList<>();
 // リストデータの登録
 baseballteams.add("ジャイアンツ");
 baseballteams.add("タイガース");
 baseballteams.add("ホークス");
 baseballteams.add("バファローズ");
 //アダプタオブジェクトを作成
 ArrayAdapter<String> adapter = new ArrayAdapter<>(アクティビティクラス名.this,android.R.layout.simple_list_item1,baseballteams);
 //リストビューにアダプタオブジェクトを設定
 lvMenu.setAdapter(adapter);

ArrayAdapterクラスをnewする時には三つの引数を伴います。一つ目はアクティビティクラス名.this、二つ目はリストビューの各行のレイアウトを表すR値、三つ目はリストデータそのものを記述します。

今日は以上です。

Android開発に登場するクラスまとめ(kotlin)

今日はkotlinでのAndroid開発に登場するクラスの役割と、使い方をまとめたいと思います。

AndroidStudioで開発を行う際には、今まで他の言語で開発を行う際には見なかったクラスなども登場します。

classの定義はRubyJavaなどと同じくclassからクラス名を宣言する形になります。

class クラス名(){
  関数や変数を記述
}

しかし、実際開発をしていると見慣れないクラスが頻出し都度都度調べる形になってしまったのでここにRクラスとLogクラスについてまとめたいと思います。

まずRクラスについてです。R(Resource)クラスはresディレクトリに置いたテキストや写真にアクセスする為のクラスになります。AndroidStudioではactivity_main画面などもresディレクトリ内に配置されており、MainActivity.kitからonCreateメソッドが始めに呼び出される際もsetContentViewメソッド内でRクラスによって画面が呼び出され居ています。

次にLogクラスについてです。Androidアプリではログを出力する為には別途で出力する為の設定をする必要があり、その際に使うのがLogクラスになります。デバッグの際などにLog.dなどと記述することによってログを出力する事ができます。