読者です 読者をやめる 読者になる 読者になる

オールアバウトTech Blog

株式会社オールアバウトのエンジニアブログです。

グラフDBのNeo4jでカフェのレコメンド機能を実験してみた

お世話になります。オールアバウトのsutchanです。
今回は、"Neo4j“というグラフデータベースを触って遊んでみた話をしたいと思います。

Neo4j(グラフデータベース)とは

まず、グラフデータベースとはなんぞやという話から。 グラフデータベースはグラフ構造を持ったデータを扱うのに特化したデータベースです。 グラフ構造は、電車の経路やSNSソーシャルグラフ、ドラマの人物相関図のようなものと言えば、イメージしやすいかもしれません。 図にあるように、グラフデータベースは、データの実体であるNodeと、それらをつなぐRelationで構成されていることがわかります。 NodeとRelationには、Property(Key-Value形式の付加情報)も付けることができます。 グラフデータベースは、その特徴から、電車の乗換案内や地図アプリの経路探索、SNSの「知り合いかも?」など、レコメンド機能によく使われているそうです。

f:id:allabout-techblog:20170222174934p:plain

では、このNeo4jを使ってどう遊ぶのか…… 今回は、弊社のスマホアプリ「CafeSnap」を題材に、 自分におすすめのカフェを推薦する機能(= カフェレコメンド機能)を実現する ことを目指して、Neo4jで遊んでみます!

続きを読む

最新の技術はこれだ!Technology Radarによる技術トレンド調査

@takkyです。

前回の記事で@yamatoが社内勉強会についての記事を執筆していました。

allabout-tech.hatenablog.com

今回は勉強会の1つであるTeam TechRaderで、TECHNOLOGY RADAR NOV'16の共有会を行ったので、
結果を報告したいと思います。

TECHNOLOGY RADARとは

www.thoughtworks.com

TECHNOLOGY RADERとはThoughtWorks社が発表している技術トレンド分析の調査結果になります。 年1-2回発表しており、2016年は4月と11月に発表されました。

ユニークな点は、技術トレンドの分析を
Techniques(開発手法) / Tools(ツール) / Platforms (プラットフォーム) / Languages & Frameworks(言語とフレームワーク)
の4分野に分けているところです。
また、評価結果も ADOPT / TRIAL / ASSESS / HOLDの4つに分けているところです。

  • ADOPT : プロジェクトにマッチするならば、採用を強くおすすめしている。
  • TRIAL : プロジェクトでリスクを管理できればやる価値はある。
  • ASSESS: どのような影響をあたえるか理解するために採用するときがある。(今後のために採用するときがある)
  • HOLD : 採用する場合は慎重に進める必要がある。

分野や評価結果については以下記事が詳しく書かれていますので、合わせて読むと理解が深まります。

dev.classmethod.jp

今回は NOV'16を8人で調査したので調査結果を共有します。
また、数が多いため本記事ではADOPTとして取り上げられていた技術について紹介したいと思います
(紹介する内容は調査時の各人のコメントとなっています。)

Techniques

consumer-driven contract testing

  • マイクロサービスでのテスト設計のデザインパターン
  • ある機能の供給アプリ、利用アプリのインタフェース仕様を、利用者側から規約としてコード化、そのコードをテストする考え方。
  • ツール的にはPactがある。

Pipeline as code

  • デプロイパイプラインはツールでなく、コードで定義しよう。
  • LambdaCD, GoCD, Concourseでこのテクニックが使えるよ。

Threat Modeling

  • 2004年にMicrosoft発祥
  • システムの初期設計時点から、どんな攻撃をどのぐらいの頻度でどこにどう受けて、影響度はどのぐらいか、を整理しておく開発プロセス
  • 整理してあれば実装フェーズでどのツールで何を守れて何が守れない、等が一目瞭然になる。

Tools

Babel

babeljs.io

  • ES6,7のソースをES5に変換してくれるコンパイラ
  • これによりES6,7に対応していないブラウザに対応できる。

consul

www.consul.io

  • Hasicorp(Vagrantとか出しているところ)のツール。
  • DNSHTTPSベースでヘルスチェックなどが出来るツール。
  • Consulテンプレートを使うとmod_proxyを利用したクライアントのロードバランサーが簡単に作成できるようになる。
  • DockerとConsulを組み合わせて設定を簡単にできる

Grafana

grafana.org

  • 様々なソースのデータをダッシュボード化出来るツール。kibanaに似ている。
  • 時間軸を同期してくれるのが特徴

Packer

www.packer.io

  • Hasicorpのツール
  • AWSなどのマシン・イメージに関する作業を単純化できる
  • Packer用のテンプレートファイルで管理する

Platforms

Docker

www.docker.com

  • Linux名前空間とcgroupsを用いて、通常のプロセスにOSのような実行環境を構築する。
  • あくまで通常のプロセスなので、軽量。
  • アプリケーションとその実行環境を含めた管理を容易にする。

HSTS

developer.mozilla.org

  • TrialからAdoptになった。
  • HTTP Strict Transport Securityの略。
  • 一般的にhttps化する際にhttp→httpsへのリダイレクトをする事が多い。
  • ただし、httpが残っているとダウングレード攻撃等のリスクが増える。
  • HTTPレスポンスのヘッダーにHSTSのヘッダーを追加することで、ブラウザにSSL対応済みだと記憶させ、常にhttpsにアクセスするようにすることができる。
  • あるプロジェクトのhttps化の際に導入したが、GCPのLBのヘルスチェックが検証時点(2016/11)でhttpしか対応していないため、無限ループになってしまう問題があった。

Linux security modules

  • SELinuxをはじめとするLinuxのセキュリティを高める為のモジュール群
  • 基本的にはホワイトリスト形式のアクセス管理。
  • Grsecurityが利用できるようになったので、注目を集めている。
  • sysctlで制御できる。

Language & Frameworks

Ember.js

emberjs.com

  • クライアントサイドMVCフレームワークのひとつ。
  • Handlebarsというテンプレート言語を利用してTemplateを技術する。
  • TemplateとModelはバインディングされており、Modelのプロパティを変更することによりTemplateは再レンダリングされ、Template(HTML) が変更されるとModelのプロパティが変更される。このため、GUIアプリケーションを構築している時に記述しなければならない、変更イベントの多くを省略できる。

React.js

facebook.github.io

  • Facebook製のViewライブラリ。
  • Stateと呼ばれる状態を管理するオブジェクトがあり、Stateを更新するとDOMを再レンダリングする。
  • レンダリング時には、Virtual DOMという機能を利用して行われる。
  • DOMを完全に破棄せずに更新のあった個所のみを切り替えることができる。
  • React.jsを使用することにより、DOMのライフサイクルを管理できる。
  • 一方通行のデータフローのアーキテクチャ「Flux」を実現しやすいライブラリ。

Redux

Read Me · Redux

  • ReactがDOMの管理を解決したが、state(状態)の管理は開発者に委ねられたままなので、Reduxはそこを解決するためのフレームワークである(=stateを管理するライブラリ)。
  • ReactではデータフローにFluxを提案しているが、ReduxはFluxの概念を拡張してより扱いやすく設計されている。
  • React以外にもAngularJSやjQueryなどと併せて使用することもできる(Reactと使用するのが一番相性がいい)。

Spring Boot

Spring Boot

  • Spring Frameworkで簡単にアプリケーションを作るためのプラットフォーム。
  • Spring frameworkは巨大化したJ2EEへのアンチテーゼとして登場したが、時間が経つにつれJ2EE以上に肥大化した。それをコンパクトにしたのが、Spring Boot。

まとめ

いかがでしたか?
今回はADOPTとして取り上げられている14個について紹介をしました。
DockerやReact.jsのように弊社でも一部プロジェクトで取り入れている技術もありますし、
consulやpackerなど導入を考えたい技術もありました。

トレンドを抑えているだけあって、TECHNOLOGY RADARで紹介されている技術は今すぐ取り入れたいものが多かったです。
TRIALも含め調査して、今後の技術採用の一つの情報源として上手く使用していきたいですね。  

機械学習、React + Flux、Pepperなど、オールアバウトの社内勉強会をご紹介

こんにちは、yamatoです。
オールアバウトには現在30人くらいエンジニア社員が居るのですが、社内での勉強会がどんどん活発に行われるようになってきています。

f:id:allabout-techblog:20170120112426j:plain

勉強会をやる意義

  • スキルアップ
    エンジニアを取り巻く環境は常に変化しているので、常に学んでスキルを伸ばしていくことはとても重要です。
    エンジニアとして様々な引き出しを持っておくことは、会社の事業にも活きると思います。
    また、弊社のビジョンでは個人の「自立」を謳っており、社員もそういった意識で向上心を持って仕事に取り組んでいます。
  • 業務で使う新技術の啓蒙活動
    採用したい技術があるが、チームメンバーのスキルが追いついていない場合、きちんと教育を行う必要があります。
    そのために勉強会を行う場合もあります。

上記のような意義がありますが、ポイントは一人でなく複数人で行うことで挫折せずに継続できるというところだと思います。

オールアバウトで行われている勉強会

全体ワークショップは部で公式に運用しているものですが、それ以外のものは必要に応じてメンバーが自発的に始めた「野良勉強会」です。

続きを読む

社内ワークショップでPHP 7のLT会を開催しました!

こんにちは、新卒エンジニアの@amymdです。

弊社では定期的にエンジニアで社内ワークショップを行っています。そこでは毎回新しい技術の共有やもくもく会などを行っています。

今回はPHP 7のLT会を開催しましたので、その内容を報告したいと思います。

概要

PHP 7.0は2015年12月3日にリリースされ、さらに今年の12月1日にはPHP 7.1がリリースされています。
弊社の開発では主にPHPを使用しており、徐々にPHP 7を使用するプロジェクトが増えてきました。

そこで、PHP 7で何ができるようになったのか、その一部を紹介するLT会を開催しました。

続きを読む

バーガーショップで例えるオールアバウトでのLaravelアーキテクチャ

オールアバウトで開発チームに所属している@pakkunです。

12月も近くなり、大きく時期から外れてしまいますが、弊社では8月から9月にかけてサマーインターンを行いました。 その際に弊社で導入しているLaravelというPHPフレームワークの付き合い方を資料とライブコーディングでインターン生に説明しました。

抜粋になりますが、弊社でのLaravelとの付き合い方をブログでも公開します。

とは言え、Laravelを知らない人もいるかと思いますので、まず初めに軽く説明します。

3行でLaravelを知る

MVCベースと記載しましたが、開発者のTaylor Otwellさんは「MVC Is Killing You」と著書で言っており、MVCに縛られると辛くなるので、あまり深くとらわれないようにしましょう。

次にどんな機能があるのか見てみましょう。

Laravelの機能

上記にあげたのは一例です。フルスタックフレームワークであるだけに、他にもイベント管理や認証管理など素晴らしい機能がたくさんあります。

続きを読む