yujiro's blog

エンジニアリング全般の事書きます

SwiftUI & Combine MVVM サンプル

概要 そろそろSwiftUI & Combine のキャッチアップとMVVM 構成のアーキテクチャについて考察しないといけないなーと思ったのでGW中にノリで色々いじってみた。 下記のような簡易ログイン画面を用意して、SwiftUI & Combine と MVVM + クリーンアーキテクチャ…

DDD - 仕様パターンの紹介

DDD には仕様パターンというものが存在する。 仕様パターンは、 バリデーションなどの評価処理 リポジトリと組み合わせたフィルタリング機能 この2つに使われる事が多い。

DTO を用意してドメインオブジェクトの流出を防ぐ

先月発売された「ドメイン駆動設計入門」を読んでいる。 www.shoeisha.co.jp ドメイン駆動設計においては、ドメインオブジェクトを利用するのはアプリケーションサービスに留めるべきで、それより外の世界にドメインオブジェクトを流出させるべきではない、…

オープン・クローズドの原則(OCP)について

Robert C. Martin のCleanArchitecture にはSOLID原則について記載があるが、どの原則もアーキテクチャの観点から論じられている。 「単一責任の原則(SRP)」をコンポーネント向けに言い換えたものが「閉鎖性共通の原則(CCP)」にあたり 「インターフェー…

CleanArchitecture - 「コンポーネントの凝集性」についてまとめる

CleanArchitecture 第13章「コンポーネントの凝集性」を簡単にまとめる。 コンポーネントとは CleanArchitecture に簡潔に記載されているので、そのまま引用する。 コンポーネントとは、デプロイの単位のことである。システムの一部としてデプロイできる、最…

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 0]'

先日、iOSアプリのクラッシュログで以下が発見された Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 0]'

Kotlin でby キーワードを使ってコレクションオブジェクトを簡単に実装する

コレクションオブジェクトを実装する際、Kotlin だとby キーワードを使って実装をシンプルにすることができます。

iOS でRxSwift を使ったユニットテストを書く

iOS でRxSwift を使っている場合、ユニットテストはexpectation を使って非同期部分をテストする方法があります。 以下は簡単なサンプルです。

RxJava での購読解除はuber のAutoDisposeを使ったほうが良さそう、という話

現在、仕事場のAndroid のコードでは2種類の購読解除方法を使っている 1つめは、bindToLifeCycle、bindUntilEvent を使う方法 single .compose(bindToLifeCycle()) ... もう一つは、Autodispose を使う方法 https://github.com/uber/AutoDispose single .as(…

Swift でprivate なプロパティを書き換える

小ネタです。 ユニットテストを書いているとき、テスト対象のprivate なインスタンス変数を書き換えたいと思うことがあります。 標準のリフレクションだと結構面倒くさいことになります。 詳しくは、https://stackoverflow.com/questions/31589405/using-ref…

iOSアプリにクリーンアーキテクチャをいれてみた

この記事では、iOSアプリで実際にクリーンアーキテクチャを取り入れてみた例を紹介します。 クリーンアーキテクチャが何か、というところについてはここでは割愛します。 定義・前提等の全体感は省略させていだき、iOSアプリに取り入れる上で必要なクリーン…

クロスサイト・スクリプティング(XSS)

はじめに この記事の内容は 「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」 の第4章3節の要点をまとめたものです。 www.sbcr.jp ※ 基本的に引用は避けています。

【Alamofire 実践】Router の使い方とその問題点、URLRequestConvertible について

今回はAlamofire の実践編ということで、もう少し踏み込んだAlamofire の使い方を書いていこうと思います。 前回記事 : 【Swift】Alamofire を使って色んなリクエストを投げてみる - yujiro's blog Alamofire を実際に使う際、エンドポイントの管理にはURLRe…

【Swift】Alamofire を使って色んなリクエストを投げてみる

iOSでHTTPリクエストをする際によく使われるAlamofire の使い方を紹介します。 Alamofire は HTTPリクエストをするのにrequest, download, upload メソッドが用意されています。 今回はこれらの基本的な使い方について紹介しようと思います。

SQLインジェクション

はじめに この記事の内容は 「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」 の第4章4節の要点をまとめたものです。 ※ 基本的に引用は避けています。 www.sbcr.jp

ELB導入

はじめに かなり前に書いたものです。(2017年12月) 個人esa からの転記。 目標 EC2 を複数作って、ELBに登録し、アクセスを分散させてみる。

Objective-C について開発に最低限必要な知識

3月からiOS 開発してます。 現場では、iOS のソースコードは全面Swift化の方向で進んでいるのですが、まだObjective-C のソースコードが多く残っている状態でして、まぁそういう現場は多いのではないかと思います。 僕としても本腰いれて勉強するつもりはな…

B tree index について

MySQL などRDBのインデックスには B tree が採用されている。(厳密に言うと B+tree インデックスである。参考 : B TreeとB+ Treeの違い) 最適なインデックスを生成するには、このツリーの仕組みについて把握している必要がある。 これまで、表面的な知識・…

Proc の種類と使い分け 【Ruby】

Effective Ruby 第5章、項目34 「Proc の引数の個数の違いに対応できるようにすることを検討しよう」を読んで、Proc の知識が深まったのでアウトプットしてみます。

Elasticsearch について

インストールから、よく使われるプラグインを入れて、使い方をざっくりとご紹介したいと思います。

Ansible で Ubuntu16.04に Rails, MySQL5.6, NodeJS 用の開発環境を作成する

今までchefを使っていたのだけれど、知り合いから手軽でオススメ & python製 と聞きつけて試してみたらすごく気に入った。 王道なrails開発環境用のplaybook(chefでいうcookbook)を紹介してみようと思う。 macにansibleを入れて、ubuntu16.04 の仮想マシン…

NeoBundle から dein.vim に乗り換えた

職場の方から教えてもらい、何やら早いらしいので変えてみました。 下記の記事に紹介されていますが、NeoBundle とくらべて30% 以上速くなったそうな。

サブドメイン環境でCircleCI でCapybara, Poltergeist を使うとき、hosts と Capybara.app_host に気をつける

事の発端 ローカルでは動く feature spec が circle ci 上で動かなかった。 circle ci 上で確認したエラーは以下。 Capybara::Poltergeist::StatusFailError Request to 'http://admin.lvh.me:3000/admin_users/sign_in' failed to reach server, check DNS …

.vimrc の各言語のタブのインデント数を外部ファイルから読み込む形にした

なんか同じ言語でもプロジェクトによってインデント数切り替えたいとかでてきたので実装してみました。 外部ファイルは .vimrc.local にして、ここに let ruby_tabnum = 2 という風に記述しておいてそれを読み込んで設定するといった形にすることにしました…

Clipper を使って、ゲストOS [Ubuntu]とホストOS [Mac] 間でクリップボードを共有する

はじめに 私がWeb開発する上で欠かせないclipper をご紹介したいと思います。 GitHub - wincent/clipper: Clipboard access for local and remote tmux sessions 結構これ教えると喜ばれる事が多かったので需要があるのかなと思いました。 これを使うと、ゲ…

S3 をLinuxにマウントする【goofys編】

s3fs が遅くて、それより高性能っぽいのがこの goofys。 S3 をLinux にマウントする【s3fs編】 - yujiro's blog 性能とかについては https://blog.arena.ne.jp/vps/1093 がわかりやすいです。 早速使ってみたいと思います。 go が必要になりますが、goenv か…

S3 をLinux にマウントする【s3fs編】

これできるって知った時はびっくりしました。 色々幅が広がりそうですよね。 手順をご紹介します。

aws cli インストール & 利用

手順メモです。

Rails にmongoid をいれてMongoDBを操作してみる

MongoDB はDBですが、以下の特徴があります。 NoSQL スキーマレス トランザクション不可能 詳細については以下がわかりやすいです。 https://utage.headwaters.co.jp/blog/?p=5051 こちらをmongoid というORMを入れて、Rails からいじってみようという試みで…

Rspec 導入と簡単な使い方【Rails】

導入 ※ Rails 5.0.6 に導入しています。 Gemfile に gem "rspec-rails", "~> 3.1.0" を追加。