こんにちは。Wantedlyでエンジニアをしている森脇です。
先日とある機会があって、社内のエンジニアにアンケートを行いました。その内容は、この2つです。
- 仕事中によく検索するキーワードはなんですか?
- 最近気になっている技術・話題はなんですか?
その結果を眺めていると、あまり知らない名前が出てきたりして、調べながらまとめてまとめるだけで幅広い分野のトレンドを理解するのに役立ったので、せっかくなのでこのエンジニアブログで公開することにしました。
広い分野のトレンドが知りたい人は、ぜひブックマークしていただければと思います。
話題の粒度がバラバラだったり、自分が知らないところは内容が薄かったりしますが、ご容赦ください。きっと会社による偏りが出てたりすると思うので、面白いと思った人は、あなたの会社でも調べてみてはいかがでしょう?
バックエンド
Ruby on Rails
Wantedly VisitのバックエンドはRailsでできているほか、Wantedly ChatやWantedly Peopleの裏側にもRailsで作られたServiceが存在しています。
「Rails remove_columns」など特定の関数を検索していたり、「Rails5.1 新機能」「Rails5.2 changes」などで検索してRailsの最新情報を追っている人も多く見られました。
Rails5に関する変更点まとめなどもWantedly Engineer Blogに投稿しているので、Rails4から使っている人は是非目を通して見てください!
Ruby
RailsはRuby言語で動いているので、もちろん注目度は高いです。こちらもRailsと同様、「ruby 2.5」などの最新情報を追っている人が多かったです。
Go言語
多くのマイクロサービスがGo言語で作られており、新しく作られるサービスはGo言語で作られることが多いです。社内のGo言語書ける比率も日に日に上がっています。
検索しているのは「gopath」「goroot」など最初につまづきやすいものだったり、こういう時はどういうライブラリを使うべきか(romaji変換、エラー処理、テスト等)を調べるパターンが多いです。ORMライブラリであるGORMや、HTTP web frameworkであるGinを使っているものが多く、そのドキュメントもよく検索されています。
また、Go言語の特徴であるchannelやgoroutineについてもよく調べられてるほか、「golang DI」のようによりTestableなコードを書くためのパターンを調べているものもありました。
Rust
Wantedlyでは導入されていない言語の中でもっとも注目度が高かったものは、このRust言語でした。
Rustは速度、安全性、並行性の3つのゴールにフォーカスしたシステムプログラミング言語です。
https://www.rust-lang.org/ja-JP/
Elixir
こちらもプログラミング言語ですね。細かいことは省略させていただきますが、こちらも導入されていませんが複数人が興味を持っていました。
Elixir is a dynamic, functional language designed for building scalable and maintainable applications.
https://elixir-lang.org/
GraphQL
もっとも多くの人が注目していたのが、このGraphQLでした。APIの設計パターンであり、次のような特徴を持っています。(GitHub APIから学ぶ次世代のAPI実装方式GraphQL より引用)
- 必要なデータだけリクエストし、受け取れる
- 関連するオブジェクトを1クエリで処理できる
- クエリの検証が容易
Wantedlyでは検討段階で導入されていませんが、その社内での注目度の高さから導入される日は近いかもしれません。
Graph DB
上のGraphQLと似ている名前ですが、全くの別物です。モノとその関係性を記述していくためのデータベースです。
GraphDBの実装である Dgraph の勉強会が社内で行われたり、社内での注目度は急上昇しています。
Redis
インメモリのキーバリューストアであり、単純なキャッシュ用途だけでなく、Visitの募集一覧のランキングの計算にも広く使われています。
「redis sorted set」などの、ランキングの実装で頻出するSortedSetというデータ構造の使い方について調べている人が多かったり、「redis 4」と最新バージョンについて調べていたりもします。
gRPC
Googleが公開したRPC(Remote Procedure Call)のフレームワークです。より堅牢な通信を必要とする内部向けのサービスで使用されることが多いです。
Wantedlyの中でも、過去に何回か検証が行われたりしましたが、今は導入に向けて本格的に動き出しているようです。
Apache Spark
分散処理のための基盤で、特定のデータに対して繰り返しアクセスするためのキャッシュ機構をもつことで、機械学習のような計算がHadoopよりも効率よく行えることが特徴です。
Wantedly Peopleをはじめとして、機械学習はどんどんプロダクトに導入されているので、このような技術に興味をもつエンジニアも増えているようです。
フロントエンド
React
JavaScriptのUIライブラリで、Wantedly Visit はReact化がどんどん進んでいます。
「react16 changes」など、Railsなどと同様に最新バージョンの変更点が検索されていたり、「react component lifecycle」などのように覚えにくいポイントを定期的に調べたりしているようです。
また、「react performance」もよく調べられてます。大きくなってもパフォーマンスが落ちないように注意すべき点も多いので、日々注意しながら開発することは大事です。Wantedly PeopleのWeb版のReactのパフォーマンスについて書いた記事もあるので、興味があるかたはぜひご覧ください。
「redux」「redux-saga」「react-router」などのように、特定のライブラリの使い方や、状態管理のベストプラクティスについての検索も見られました。
このWantedly Engineer Blogでも多くのReactの記事を公開しているので、興味があるかたはぜひご覧ください。
yarn
JavaScriptのパッケージ管理ツールです。Wantedly Visitでは、その安定性からリリース後にすぐ移行したり、ほとんどのプロジェクトはyarnになっています。npm5も安定して速くなっていると聞いているので、また機会があればしっかり検証しようと思っています。
SSR(Server-side rendering)
Reactなどの通常はブラウザで動くJavaScriptを、サーバー内で処理する技術です。
表示速度を高速化したり(First Meaningful Paint)、クロールされやすいページにするために有効だったりします(Wantedlyでは未検証)。
本番導入はされていませんが、www.wantedly.com に導入するための検証が進んでいたりするので、近いうちにこのブログで紹介させてもらえると思うので、期待してお待ちください。
PWA(Progressive web apps)
Webアプリをネイティブアプリのように扱えるようにする技術で、Push通知が送れたり、オフラインでも使えるなど、ネイティブのような機能を組み込めます。
最近、iOSのSafariが対応を考えていると話題になり、一気に注目度が上がったようです
AMP(Accelerated Mobile Pages)
英語3文字で表現すると上のPWAと同じように見えますが、違うものです。
AMP を導入すれば、端末や配信プラットフォームの種類を問わず、いつでも高速で美しく、パフォーマンスに優れたウェブサイトや広告を作成できるようになります。
https://www.ampproject.org/ja/
Wantedlyでは導入はされていませんが、事例もかなり集まっているので、再び検証をするべきかなと考えています。
Flow, TypeScript
どちらも、JavaScriptに型チェックを導入する技術です。
比較記事も多く出ていますが、どちらの方がいいという結論はないので、アプリケーションやメンバーによりどちらかが選択されたり、どちらも選択されなかったり、という状況です。
Reason
Facebookが開発している、OCaml上に構築されたJavaScriptの開発環境のようなものです。
Facebook messengerのWebアプリである messenger.com の半分がReasonに置き換えられたという記事が公開されて、にわかに注目を集めています。
iOS / Android
Swift
iOSアプリを開発するための言語です。
「Swift4」など検索ワードで、先日リリースされた最新バージョンについて調べている人が多いです。
Kotlin
Androidアプリの開発言語としてGoogle I/O 2017で正式採用がアナウンスされた言語です。
世間的にも社内でも注目度はかなり高く、Wantedlyでも導入が進められています。
React Native
Reactでネイティブアプリをかくためのフレームワークです。
WebではReactを書く人が多いので、ネイティブアプリの設計段階ではよく選択肢として上がってきますが、まだ導入されてるプロダクトはありません。
RXSwift / RXJava
iOSやAndroidでReactiveなプログラムを書くためのライブラリですね。両プラットフォームで高い関心があることから、GUIアプリケーションを開発するための選択肢として、かなり有力になっているようです。
MVVM
Model-View-ViewModelの3つを中心としたアプケーションのアーキテクチャです。
Rxを用いたMVVMが、Wantedlyのアプリではよく使われるアーキテクチャになっています。
Flux / Redux
Reactとの組み合わせで有名になった、単一方向のデータフローでアプリケーションの状態を管理するアーキテクチャであるFluxと、その実装であるReduxですが、iOSやAndroid界隈でも注目を集めています。
Application Coordinator
アプリケーション全体が、今どういう画面状態なのかを管理するための設計パターンです。複雑な画面遷移をうまく扱うためのパターンみたいです。webもネイティブも、同じように画面遷移や状態管理で悩んでるんですね。
https://speakerdeck.com/ayanonagon/shi-jian-de-boundaries
ConstraintLayout
Androidに新しく導入された、制約を定義することでレイアウトを自動的に管理できる機能です。iOSのAutoLayoutのようなものですね。
Androidの新しいLayout、ConstraintLayoutことはじめ - Qiita
Flutter
iOSとAndroidに対応したアプリをDart言語で開発できる、Google製のフレームワークです。
https://flutter.io/
Wantedlyでは導入されていませんが、React Native同様に、モバイルアプリのクロスプラットフォーム開発はやはり夢がありますね。
CoreML / ARKit
先日リリースされたiOS11のSDKの新機能も注目されています。
CoreMLは、機械学習に関するフレームワークで、画像解析や自然言語処理やゲームなどで、学習済みモデルを用いた機械学習が手軽に行えるようになります。
ARKitは、AR(Augmented Reality, 拡張現実)アプリケーションを開発するためのフレームワークです。平面や光源を認識し、カメラの映像にリアリティのあるCGモデルを重ねることができます。デモ動画を見れば、その精度の高さが感じられると思います。
ARKitに限らず、VR/AR技術への関心も高かったです。
インフラ
Docker, Kubernetes
Dockerはコンテナ型のアプリケーション実行のための仮想化環境であり、Kubernetesは、複数台のホストから構成されるDockerの実行環境を簡単に扱えるようにする技術です。Wantedlyのインフラは、そのほとんどがkubernetes上で動くdocker環境になっています。Wantedlyが実際に使用に関しては、こちらの記事をご覧ください。
Docker と Kubernetes を使って『変化に強いインフラ』を作る | Wantedly Engineer Blogインフラチームの皆さんは日々、「kubernetes (エラーメッセージ)」と検索して試行錯誤しながら「変化に強いインフラ」を作ってくれているみたいです。
API gateway
複雑なマイクロサービスを、見た目はモノリシックなものとしてアプリケーションから使用できるようにする技術です。
APIのリクエストは全てKongを経由して受け付けることで複数の言語で立ち上げたマイクロサービスを一元に管理することが可能となります。
オープンソースのAPI GatewayであるKong や、AmazonのフルマネージドなAPI Gateway などを検証している段階です。
以前の記事でも、その利点について触れているので、ぜひご覧ください。
Spinnaker
複数のクラウドに対するアプリケーションのデプロイとクラスタを管理し、継続的デリバリのプロセスを自動化するための、Netflixが公開した技術です。
https://www.spinnaker.io/
まだ、導入や検証などは進んでいませんが、注目している技術として挙げられました。
Istio
Istioは適切なトラフィックに対する粒度の可視化と管理を、アプリケーションのコードを一切変更することなく提供し、CIOやCSO(訳注:技術責任者やセキュリティ責任者)が、組織全体に対して要求されるセキュリティやコンプライアンスの適用を支援するのに不可欠なものである。
http://www.publickey1.jp/blog/17/googleibmistiokubernetes.html
こちらもまだ、導入や検証などは進んでいません。
Stackdriver
インフラの総合的なモニタリングツールであり、リッチダッシュボード、アラート、ログ解析、トレーシング、エラーレポートなどを一つの製品で行うことができます。
Wantedlyでは、DatadogやLogentriesなどの複数サービスを用いて実現しているので、その有用性について調査が行われたりしています。
その他
ベイズ推定
観測事象(観測された事実)から、推定したい事柄(それの起因である原因事象)を、確率的な意味で推論する枠組みの一つです。
Wantedlyでは、様々なデータを用いた改善が行われていますが、その中で改善の効果をより効率的に評価したりするために注目されています。
Swagger
RESTful APIを開発するためのフレームワークです。APIの定義であるOpenAPI Specificationを作ることで、開発に便利なモックサーバーを作れたり、ドキュメントを生成したり、そのAPIを扱うクライアントコードを生成したりなど、その機能は多岐に及びます。
iOSやAndroid, JavaScriptなど複数のプラットフォームで同じAPIを使用することも増えてくるため、導入を検討するための情報収集などが進んでいます。
ISUCON
これは技術ではないですが、気になっている話題として多くの注目を集めていました。ISUCONとは、(Iikanjii Speed Up Contest, いい感じにスピードアップコンテスト)の略で、与えられたアプリケーションを制限時間以内にできるだけ高速化するチーム制の競技です。 http://isucon.net/
Wantedlyも3年前から参加していて、先日行われたISUCON7でも、Wantedlyメンバーがいるチームが3チームも決勝に進出することができました。その時の様子は、こちらに載っています。
iOS Human Interface Guidelines
Appleが公開している、iOSで優れたインターフェイスをデザインするためのガイドラインです。デザイナーだけでなく、エンジニアにもこれを読み込んでいる人は少なくないです。
Themes - Overview - iOS Human Interface Guidelines
Material design
主にAndroidアプリのデザインなどで取り入れられてる、Googleが提唱するデザインのガイドラインです。
上記のiOS Human Interface Guidelinesもそうですが、プラットフォームのルールに従ってデザインすることは、ユーザーに優れたUXを提供するために重要なので、しっかり読み込んでデザインに取り入れています。
https://material.io/guidelines/
Abstract
デザインのバージョン管理、コンポーネント化、チームでのデータ管理自体などを行うものです。デザイナーの生産性をあげるために導入が検討されていたりします。
Abstract - Secure version control and design workflow management
いかがでしたか?結構長くなりましたが、知らない技術があったり、同じく注目している技術があったり、あの技術は入ってないのかな、みたいな意見もあるかなと思います。
なので、ぜひ皆さんの会社の技術トレンドも知りたいので、興味がある人はぜひやってみてください!