ブロックチェーン・AI・システム開発の株式会社INDETAIL

INDETAILで使っている技術を総まとめ【2018年版】

2018.12.01
tacck

※本記事は、INDETAIL Advent Calendar 2018の一環として投稿しています。

この記事は、INDETAIL Advent Calendar 2018の1日目の記事です。

こんにちは、tacckです。
札幌は雪が本格的に積もるようになってきて、もうすっかり冬の到来です。
そして、この季節といえば、そう「Advent Calendar」ですね!

という、一年前と同じ感じで始まりました。

ここしばらくは技術ブログが書けていなかった分、今年はより面白い記事が読めるはずです!

今年も初日は「INDETAILではだいたいこういう技術を使っているよ」という感じで、紹介していきます。
今年は社内のエンジニアにアンケートを行なったので、それに基づいてまとめていきたいと思います!
(回答は、各項目で複数回答可としています。)

INDETAILの大まかな技術領域

昨年も紹介したように、弊社では大きく二つの主力事業と、一つの先進事業があります。

今年この事業において主にどういう領域に携わったか、という形で質問しました。

名前 %
フロントエンド 57.1
バックエンド 76.2
モバイルアプリ 23.8
デスクトップアプリ 11.9
ネットワーク / インフラ 31.0
ブロックチェーン 16.7
その他 11.9

弊社のエンジニアは、基本的にはそれぞれの領域を専門として役割わけをしているのですが、一部の人は案件に応じて技術領域を跨いだ開発もやったりします。

案件内容的にWeb系のシステム開発(またそれに関わる技術)が多く、それが見えているかな、と思います。
また、昨年はまだ研究・実証実験段階だったブロックチェーンですが、今年はその規模もより大きくなってきています。
モバイルアプリも、まだまだ需要のある状態ですね。

では、各領域の中での技術詳細を見ていきたいと思います。

フロントエンド

JavaScript

名前 %
JavaScript ES6以降 73.9
JavaScript ES5以前 39.1
TypeScript 13.0

流石に ECMAScript2015(ES6) 以降を取り扱う機会が多くなってきたのですが、一方でそれ以前のバージョンも業務ではそこそこ触らざるを得ないこともわかります。

TypeScript などのAltJSは、まだまだ普及していないのが現状ですね。
私もこれから真面目に取り扱うので、来年には大きく普及させられるようにしたいと思います。

JavaScript フレームワーク/ライブラリ系

名前 %
Vue.js 55.6
React 7.4
Angular 18.5
jQuery 1系 18.5
jQuery 2系 29.6
jQuery 3系 25.9
Polymer 3.7
Jest 11.1
Jasmine 7.4
Selenium 7.4
PhantomJS 7.4

ちょっと色々と混ざってしまっていますが、大きくフレームワーク系とライブラリ系です。

フレームワークとしては、Vue.jsが大きく人気ですね。
昨年は「これから触れれば」という状態でしたが、一気にシェアを伸ばしました。
フロントエンドチームの人と話をしても、既存のフロントエンド開発の流れと親和性が高いようで、取り入れやすいようです。
私も今年から使い始めましたが、確かに扱いやすくて良いフレームワークだと感じます。

一方で、よく比較される ReactAngular は、現状はそこまで採用されていないことがわかります。
jQueryも、それぞれの数は多くないですが、全てのバージョンで利用されています。
特に、jQuery 1系 は、息の長い案件で利用されていたりするので、まだまだ使われそうな気配です。

特にここは、トレンドの変化も激しい領域ですね。
色んな技術によってより良い環境となっていって欲しいところです。

テスト系のライブラリは、あまり種類は上がってこなかったですね。
これだと「実際に案件で使われているか」はわかりづらいですが、みんなが使っているというにはもう一歩な感触です。
この辺りもきちんと普及させていきたいですね。
JavaScriptでのTDDも、来年には実施できれば良いなと考えています。

その他のツールとしてブラウザ操作を行なう SeleniumPhantomJS も、わずかですが使われていました。
ただ、 PhantomJS は開発終了しているので今後伸びることは無いかなぁ、と思います。
個人的に、この領域では Puppeteer が今後は定着してくるのでは、と考えています。

AltCSS

名前 %
Sass / SCSS 88.9
Less 11.1
Stylus 22.2
PostCSS 11.1

こちらは、そもそもの回答数が少なく、使っている人・使っていない人で大きく割れている領域かな、と感じます。
使っている人たちの中では、 Sass / SCSS がダントツでした。

CSS フレームワーク

名前 %
UIkit 25.0
Bootstrap 4 43.8
Bootstrap 3 37.5
Materialize 6.3
Vuetify 12.5

こちらも、案件で使う・使わないがあるのですが、使っている中では、 Bootstrap が多いですね。
UIkit など、世の中で比較的人気のあるフレームワークは、何がしか使われる機会もある感じです。

ツールなど

名前 %
npm 85.7
yarn 47.6
JSLint 4.8
ESLint 19.0
Babel 14.8
webpack 33.3
Gulp 23.8
Node.js 8系以降 33.3
Node.js 6系 23.8

ここは、最近のフロントエンドの開発では切っても切り離せないツール類です。

まず、これらを実行するために Node.js をローカルで実行できないといけなかったりしますが、まだ6系も回答がありました。
先のJavaScriptの ES5以前 が必要な開発もあり、その辺りとセットになっていると感じます。
個人的には、新規では8系以降(できれば10系以上)にしたいですね。

ツールやライブラリを管理するパッケージマネージャーは、やはり npm の方が強いですね。
しかし yarn もだいぶ使われるようになったと感じます。

Lint系ツールは、 ESLint がやや多いですが、全体からみるときちんと使われていないように思います。
使うだけで、単純な記述ミスは減らせるので、是非使ってください。
Babelwebpack といったコードの変換系ツールは、最近では利用するパッケージ(例えばVue-Cliなど)によっては暗黙的に含まれていて、あまり意識しないことも多いかと思います。
また、この辺りは同様に Gulp のようなタスクランナー無しでも同じようなことを実現できたりするので、今後個別のタスクランナーの需要は下がってくるかもしれないですね。
一方で、仕組みは知っておかないといざという時に困るので、バランスよく知識は得ておきたいところです。

バックエンド

言語

名前 %
PHP 7系 46.9
PHP 5系 28.1
Java 9以上 6.3
Java 8 12.5
Java 7以下 21.9
Python 3系 15.6
Python 2系 6.3
Node.js 8系以上 31.3
Node.js 6系 3.1
Golang 15.6
Ruby 6.3
Groovy 3.1

バックエンドについては、弊社では基本的には PHPJava を推奨しており、それが反映されているかなぁ、と感じます。
特に、今年はPHPの案件が多かったので、よりPHPに偏った結果になっていますね。
ただ、 PHP 5系 は年内で全てEOLを迎えるので、早めに7系へ移行してください。

Javaについては今年の初めにOracleから発表があり、ライセンス形態が大きく変わりました。
現状の Oracle JDK は有償での利用が必要になります。
一方、無償で利用可能な OpenJDK は、AdoptOpenJDKだけでなく、MicrosoftやAWSといった大手のクラウドベンダーによりLTS版の提供が発表されました。
プロジェクトや顧客に応じて、どのベンダーのどのバージョンを選択するか、決めていかないといけないですね。

余談ですが、 Groovy を開発で使っているという人、この記事を読んだら私に耳打ちしてください。

フレームワーク

名前 %
Laravel 5.5以上 41.7
Laravel 5.0〜5.4 16.7
CakePHP 3系 4.2
CakePHP 2系 16.7
CodeIgniter 4.2
Symfony 16.7
その他PHPフレームワーク 8.3
Play Framework 8.3
Spring Framework 5系 4.2
Spring Framework 4系 8.3
Ruby on Rails 8.3
Django 4.2
Express 8.3
hapi 4.2

PHPのフレームワークは色々ありますね。ただ、ここ一年は特に Laravel 5.5 を推していたので、多く導入されています。
ただ、 Laravel 5.4 以下はすでにEOLを迎えているので、バージョンアップ必要ですね。

それ以外は、割と色々と扱っている感じです。これは、基本的には顧客からの指定によるものが大きいですね。
ここも、色々と新しいものを検証しつつ、適したものを採用できるようにしておきたいです。

ミドルウェア

名前 %
MySQL 8系 21.4
MySQL 5.7 46.4
MySQL 5.6以下 32.1
PostgreSQL 3.6
Nginx 28.6
Apache HTTP Server 2.4 17.9
Apache HTTP Server 2.2 17.9
Unicorn 10.7
memcached 14.3
Redis 28.6
MongoDB 14.3
AWS DynamoDB 3.6
HAProxy 3.6
CouchDB 3.6
AWS Aurora(MySQL互換) 3.6
Cassandra 7.2

まずRDBについては、MySQL系でほぼ占められていますね。
この辺りは、バージョンアップや他のDBへのマイグレーションなどに手間がかかるので、きちんと見極めて使えるようにしたいところです。

Webサーバは、概ね一般的な感じでしょうか。 Apache HTTP Server 2.2 は、長く続いているプロジェクトで手放せない感じですね。

それ以外は、各プロジェクトの特性に応じて色々と使っています。
DB系のサービスは、もっとクラウドのフルマネージドサービスの活用を推進したいところです。

モバイルアプリ

ターゲットプラットフォーム

名前 %
Android専用 75.0
iOS専用 50.0
クロスプラットフォーム 33.3
ガラケー 8.3

続いてモバイルアプリです。
基本的には、Android・iOSそれぞれのネイティブアプリを作る形が多いです。

クロスプラットフォーム系は、現時点では技術調査の範囲ですね。

言語

名前 %
Java 84.6
Kotlin 7.7
Swift 4系 23.1
Swift 3系以下 15.4
Objective-C 46.2
C++ / C 7.7
JavaScript / AltJS 30.8

先ほどのプラットフォームにある通り、Androidは Java 、iOSは Swift での開発が中心です。

Androidでは Kotlin はまだ対応件数も少ないですが、今後伸ばすべきポイントですね。
iOSは、比較的継続開発の案件も多く、 Objective-C はまだまだ必要なようです。

JavaScript 系は、クロスプラットフォーム開発で使っている感じです。
React Native や Flutter 、 Weex といったところを、現在は検証している状態です。

あとここには現れていないですが、ソーシャルゲーム運営には Unity の得意なエンジニアも在籍しているので、そういったタイトル運営もできると嬉しいですね。

ツールなど

名前 %
CocoaPods 40.0
Carthage 60.0
Fabric 100.0
fastlane 40.0

CocoaPodsCarthage はiOSアプリのライブラリ管理ツールですね。
ここは、案件ごとにそれぞれ使っている感じです。

Androidは実質 Gradle 一択なので、ここには書いていないです。

あと、弊社ではビルドに fastlane、 ビルドしたアプリの検証端末への配信に Fabric を使っています。
ただし、 Fabric は Google の Firebase に統合されていっているので、近いうちに Firebase のツールとして使うことになるかと思います。

ネットワーク / インフラ

OS

名前 %
Linux (RHEL) 5.0
Linux (CentOS 7系) 50.0
Linux (CentOS 6系以下) 55.0
Linux (Debian) 15.0
Windows Server 10.0

続いて、インフラ関連です。まずは、サーバOSから。

見ての通り、弊社ではLinux系のディストリビューションを扱うことがほぼ、です。
CentOS の6系と7系がほぼ同数なのですが、ここは継続しているプロジェクトとそうでない所の差ですね。

プラットフォーム

名前 %
AWS 90.0
GCP 20.0
Azure 5.0
さくらインターネット 15.0
オンプレミス / データセンター(パブリッククラウドではない事業者) 10.0
その他パブリッククラウド 5.0

サーバを利用しているプラットフォームですが、AWSを指定されることが多くなりましたね。
弊社も特に指定がなければAWSを勧めている状況です。

一方で、他のプラットフォームにもそれぞれの良さがあるので、プロジェクトに応じて使い分けられるようにする必要がありますね。
特に、フルマネージドサービスを使う場合にどこを選ぶとプロジェクトにフィットするのか、というところを見極めたいと思います。

クラウドのサービス利用状況

名前 %
仮想マシン利用 / AWS EC2など 83.3
アプリケーション基盤利用 / AWS Elastic Beanstalkなど 16.7
ファンクションサービス基盤利用 / AWS Lambdaなど 27.8
コンテナ基盤利用 / AWS ECSなど 33.3

さて、クラウドを使う場合のサービスの利用状況です。
基本としては、いわゆる IaaS としての仮想マシン利用が中心です。
これは、現時点では顧客にも理解してもらいやすく、もうしばらくはこういう状況かな、と思います。

一方で、いわゆる PaaS 的なサービスの利用も見えるようになってきました。
この辺りを正しく利用することで、サーバ構築や管理のコストを下げることができるようになります。
ここは、プロジェクトにうまく適用できるように、さらに推進していきたいところですね。

構成管理ツール

名前 %
Ansible 85.7
Terraform 14.3
クラウドプラットフォームで提供されているサービス / AWS CloudFormationなど 28.6

サーバを自分たちで構築・管理する場合には、構成管理ツールを使うことで少しでもコストを下げたいところです。

利用件数は全体として少ないのですが、その中でも Ansible の利用が多いですね。
個人的にも Ansible は好きなので、嬉しい所です。

これに限らず、 Infrastructure as Code は積極的に取り組むべきところです。

自動化関連サービス

名前 %
Jenkins 80.0
Travis CI 13.3
GitLab Runner 13.3
AWS CodeDeploy / AWS CodePipeline 13.3

CI/CD 周りは、まだまだ Jenkins が根強いですね。私も愛用しています。

ワークフローの作りやすさや実行のしやすさなど、クラウドサービスの利点も多いと思いますが、 Jenkins は歴史がある分メトリクスを集めやすい(情報も見つけやすい)感じですね。

とはいえ、 Jenkins の運用も結構なコストになってくるので、うまくクラウドサービスを活用できるようにしていきたいです。

ブロックチェーン

ブロックチェーン技術

名前 %
Hyperledger Fabric 100.0
Ethereum 62.5
Ethereum Private 12.5

弊社でのブロックチェーン技術は、 Hyperledger Fabric を中心に取り組んでいます。
プライベートネットワークでの利用であれば、 Hyperledger Fabric の利用が適していることが多いので、こちらをまず提案しますね。

一方で、パブリックネットワークで特に仮想通貨に関わるのであれば、 Ethereum となります。
また Ethereum はプライベートでのネットワーク構築も可能なので、要件によっては Ethereum をプライベートに使う、ということもあります。

また、この辺りの関連技術・延長として、Scalar社の Scalar DLT を利用した開発についても協業を行なっております。

株式会社Scalarと株式会社INDETAILの協業開始。Scalar DLT等のシステム導入にかかる協力体制を強化

Hyperledger Fabric については、開発フレームワークである Hyperledger Composer も利用しており、要件に応じてうまく開発できるような研究も平行して進めていたりします。

開発環境

開発マシン/OS

名前 %
Windows 10 47.4
Windows 8.x 5.3
macOS 10.14系 21.1
macOS 10.13系 31.6
macOS 10.12系以下 18.4
Ubuntu 18.x系 13.2
Ubuntu 16.x系 7.9
CentOS 6系 2.6

ここからは、各自の開発環境について見ていきます。

弊社は、プロジェクトでの必要性と各自の好みの両面から、マシンやOSを選択しています。
なので、WindowsmacOS で半々といったところです。
最近は Ubuntu のデスクトップを使うメンバーもいますね。
CentOS なのは、リモートのサーバで直接開発しなければいけないパターンですね。

バージョンとしては、 Windows はかなり移行が進んでほぼ10にできました。
これはライセンスが絡むので、むしろ管理しやすいという点もあると思います。
一方 macOS はバージョン間でのライセンス移行が無い分アップグレードが自主性に任されているため、低いバージョンも残っていますね。
アップグレードには時間もかかるので、計画的にやっていきましょう。

エディタ / IDE

名前 %
Eclipse 28.2
IntelliJ IDEA 10.3
PhpStorm 23.1
RubyMine 2.6
NetBeans 7.7
Visual Studio 7.7
Xcode 12.8
Android Studio 12.8
Visual Studio Code 48.7
Atom 17.9
Sublime Text 20.5
Brackets 2.6
さくらエディタ 33.3
メモ帳 17.9
Vim 41.0
Emacs 5.1
vi 2.6

IDEでは、単体では Eclipse が強いですね。これは、長く使われているプロダクトでもあるので、慣れているメンバーも多いということもあると思います。
一方、最近は積極的にJetBrains系のIDEも導入しており、特に PhpStorm が多く導入されています。
私は言語をまたぐことが多いので、IDEは IntelliJ IDEA を公私問わず愛用しています。
その他、 Visual StudioXcodeAndroid Studio といった、専用のIDEもプロジェクトに応じて使っていますね。

エディタは、さらに各自の好みで色々とあります。
しかし、最近は Visual Studio Code が一気に広がっていますね。 AtomSublime Text といったものも、根強い人気があります。
Windowsだと さくらエディタ もまだまだ使われているようです。

あと、よくネタに挙がりますが、弊社では Vim 派が圧倒的ですね。 頑張れ Emacs

別件ですが、 メモ帳 で開発していると回答した方、この記事を読んだら至急私のところに来てください。
個別に話をしましょう。

開発用仮想環境・ツールなど

名前 %
VMware 23.5
VirtualBox 82.4
Vagrant 55.9
Docker 44.1
Docker Compose 29.4

開発用の仮想環境は、ほとんどのエンジニアが何がしか使っていますね。
VirtualBox がほぼで、それを Vagrant で構築・利用するパターンが多いです。

Docker も徐々にですが、ようやく使われてきた感じです。

仮想環境はとても便利なので、さらに使いこなしていきたいですね。

まとめ

いかがでしたでしょうか?

思った以上に長くなってしまいしたが、社内の技術バランスの雰囲気が少しでも伝われば幸いです。
技術は日々進化し、明日にはまったく新しいものが生まれ、それが常識になっていきます。
「一つにこだわる」姿勢と「新しいものに切り替える」柔軟性を、うまくバランスを取りながら、これからもエンジニアの集団として成長できるようにしていきたいと思います。

特に来年は、 TDDServerless 関連の知見・技術をさらに強化していければ、と考えています。

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。