エンジニア転職面接で最低限聞いておくべきチェックリスト

Webアプリケーションエンジニア目線で確認しておくべきことのチェックリスト。忘れがちなので書き出してみた。

チェックリスト

  • 会社のメインプロダクトは?
  • 開発手法は?
    • プロジェクトマネジメントツールは?
    • ソースコード管理は?
    • CI/CDにはどう行っている?
    • コミュニケーションツールは?
  • 開発環境は?
    • サーバ構成は?
    • 開発環境構築は自動化されているか?
    • サーバサイドの採用技術/メインFWは?
    • フロントエンドサイドの採用技術/メインFWは?
    • 開発マシン、モニタ、その他デバイス、ソフトウェア、に最も力を発揮できるものを使えるか
  • インフラ
  • 組織について
    • 社内人間関係に問題はなさそうか。
    • 組織におけるエンジニア部署の立場はどうか。
    • 開発部署のリーダーが尊敬できそうな人間かどうか。(自分より優れていると感じるか)
  • 人事評価制度について
    • エンジニアの評価はどのように行うのか。その評価制度で自身に昇給の見込みがあるのか。

まとめ

これぐらいは最低限確認しておくべきだな、と最近感じている。

Docker チュートリアル

現状

Dockerは聞いたことあるけど実際に使ったことはない。

ゴール

チュートリアルを通してDockerでweb serverを立ち上げてみる

Dockerとは

Docker - Wikipedia

コンテナ型の仮想化環境を提供するオープンソースソフトウェアである[3]。VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、性能劣化がほとんどないという利点を持つ。

ふむ。

イメージとは

An image is a lightweight, stand-alone, executable package that includes everything needed to run a piece of software, including the code, a runtime, libraries, environment variables, and config files.

イメージは、コード、ランタイム、ライブラリ、環境変数、設定ファイルなど、ソフトウェアを実行するために必要なすべてを含む軽量でスタンドアロンの実行可能パッケージです。

コンテナとは

A container is a runtime instance of an image—what the image becomes in memory when actually executed. It runs completely isolated from the host environment by default, only accessing host files and ports if configured to do so.

コンテナはイメージのランタイムインスタンスです。イメージが実際に実行されたときにメモリに格納されます。デフォルトではホスト環境と完全に分離されており、ホストファイルとポートにアクセスするように設定されている場合にのみアクセスします。

つまりは、イメージ(パッケージ)を使ってコンテナ(実態)を作成するようだ。

MacにDockerをインストールする

Docker For Mac | Docker

Docker for Mac is the best way to get started with Docker on a Mac.

MacでDockerを使う最高の方法らしい。とりあえずこれを使ってDockerを導入してみることにする。

まず以下から、Get Docker for Mac (Stable) をダウンロード&インストール

Install Docker for Mac | Docker Documentation

インストールしたらDocker for Macを起動する

f:id:tic40:20180112190046p:plain

nginx web serverを立ち上げてみる

$ docker run -d -p 80:80 --name webserver nginx

http://localhost/ にアクセスして、"Welcome to nginx!" ページが表示されればOK.

docker ps でwebserver コンテナの詳細を確認する

$ docker ps
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
1d5a3d6f77d9        nginx               "nginx -g 'daemon of…"   24 seconds ago      Up 24 seconds       0.0.0.0:80->80/tcp   webserver

先程起動した、webserver の詳細が表示される。

起動した webserver コンテナにログインする

docker exec -it webserver bash

コンテナの停止/削除

# 停止する
$ docker stop webserver
# 再度開始する
$ docker start webserver

停止したコンテナは、docker ps では表示されない。停止したコンテナ詳細を表示する場合は、docker ps -a で表示する。

停止と削除を同時に行う場合は、docker rm -f webserver を実行する。このコマンドはコンテナを削除するが、nginx imageは削除しない。docker imagesを実行することでローカルイメージのリストを表示できる。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              3f8a4339aadd        2 weeks ago         108MB

イメージを削除する場合は、docker rmi nginx で削除ができる。

雑感

  • とりあえず一旦ここまで。
  • まだわかってないこと
    • Dockerfile ファイルの書き方
    • docker-compose について
    • どういう単位でコンテナを分割すればいいか

32bit CentOSへGo言語をインストールする

Go を動かす必要があったのでインストールした際の覚書

環境

  • CentOS release 6.5 (Final) 32bit

ダウンロード

以下から32bit linuxの最新版を探す

Downloads - The Go Programming Language

1.9.2 が最新版だったので、これをダウンロードする。

$ wget https://dl.google.com/go/go1.9.2.linux-386.tar.gz

インストール

ダウンロードしたファイルを/usr/local へ解凍

tar -C /usr/local -xzf go1.9.2.linux-386.tar.gz

bashへパスを追加

$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
$ source ~/.bashrc

サンプルコードの作成

$ cat > hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

サンプルコードの実行

$ go run hello.go
hello, world

done!

Vue.js にGoogle Analyticsのイベントトラッキングを設定する

やりたいこと

Vue.jsで、ボタンクリックイベントのトラッキングをしたい。

方法

vue-analytics を使うと簡単にいけた

github.com

実装方法は公式に書いてある通りなんだけど、一応下記の要領で実装した。

Setting

app.js

import Vue from 'vue'
import VueAnalytics from 'vue-analytics'
import router from '@js/router/index'

Vue.use(VueAnalytics, {
  id: UA-xxxxxxxxx,
  router
})

ボタンにトラッキングを仕込む

component.js

<button
  class="btn"
  :v-ga="$ga.event('category', 'action', 'label', 'value')"
  @click="doSomething()">
  this is a button
</button>

実装後にログ送信を確認するには、chrome extensionのgoogle tag assitantを使うと簡単に調べることができる。

chrome.google.com

2017年に読んだ本たち

2017年に読了した本*1

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

古典。今更感はあるが、読みながら実際に全部のデザインパターンを自分で書いたりしてみた。

Soft Skills: The Software Developer's Life Manual

Soft Skills: The Software Developer's Life Manual

翻訳版では無く洋書の方。洋書を全部読むのは辛くかなり時間がかかったが、非常にためになった。 エンジニアは技術ブログを書いて、エンジニアコミュニティに入り、ゲームは辞めて、健康に気を使え!という感じの内容。ごもっとも。

Webフロントエンド ハイパフォーマンス チューニング

Webフロントエンド ハイパフォーマンス チューニング

10月から実務でフロントエンドを担当していたのでフロントエンドパフォーマンスを調べるために買った。

超速!  Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus)

超速! Webページ速度改善ガイド ── 使いやすさは「速さ」から始まる (WEB+DB PRESS plus)

同上。

サピエンス全史(上)文明の構造と人類の幸福

サピエンス全史(上)文明の構造と人類の幸福

人類の足跡をたどる。教養としての読書。

ヒトラーの経済政策-世界恐慌からの奇跡的な復興 (祥伝社新書151)

ヒトラーの経済政策-世界恐慌からの奇跡的な復興 (祥伝社新書151)

同僚からの勧めで読む。

フェルマーの最終定理 (新潮文庫)

フェルマーの最終定理 (新潮文庫)

何年も積ん読していた本。やっと読んだ。 数学はそもそも好きだし、何より読み物として面白かった。

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

文字コードについて案外ふんわりとした理解だったので購入。 文字コードについて、とても詳しくかかれている。Webエンジニア必読だと思う。

完全独習 ベイズ統計学入門

完全独習 ベイズ統計学入門

興味本位で買った本。 ベイズ統計についてわかったようで、本質はよくわからないけど、ちょっとわかった気になれた。

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

一時期話題になったマイクロサービスについて体系的にまとめられている本。 結局どうすればいいの?実際実装どうすればいいの?って思うところはある(実践的な本ではない、あくまで理論の解説)。 マイクロサービスを理解するために良い本。

初めての自動テスト ―Webシステムのための自動テスト基礎

初めての自動テスト ―Webシステムのための自動テスト基礎

フロントエンドの最新の自動テストについて知りたかったが、ちょっとこれは初級者向けな内容だったかな。 少し物足りなかった。自動テスト自体が本当に初めてという人向け。

愛を伝える5つの方法

愛を伝える5つの方法

対人関係が苦手なので、社会性を身につけるために読んだ。 パートナーと円満にコミュニケーションをする方法がかかれている。

GO WILD 野生の体を取り戻せ!  科学が教えるトレイルラン、低炭水化物食、マインドフルネス

GO WILD 野生の体を取り戻せ! 科学が教えるトレイルラン、低炭水化物食、マインドフルネス

炭水化物は摂取せずにトレイルランをしろ!

買ったけどまだ全部読んでない

言語が違えば、世界も違って見えるわけ

言語が違えば、世界も違って見えるわけ

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awkプログラミング 改訂版 (A nutshell handbook)

PythonによるWebスクレイピング

PythonによるWebスクレイピング

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

統計クイックリファレンス 第2版

統計クイックリファレンス 第2版

プログラミングのための線形代数

プログラミングのための線形代数

集合知プログラミング

集合知プログラミング

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

虐殺器官 (ハヤカワ文庫JA)

虐殺器官 (ハヤカワ文庫JA)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

感想

月1.2冊ペース。思ったより本を読んでない年だった。来年はもっと読書をしよう

*1:マンガは除く

error while loading shared libraries: libfontconfig.so.1

環境

CentOS release 6.5

事象

karmaでPhantomJSを起動しようとするとエラーでこけた。エラーは以下。

ERROR [launcher]: Cannot start PhantomJS
    xx/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory

解決

fontconfig をインストールすることで正常に起動するようになった。

$ yum -y install fontconfig-devel
15 12 2017 15:16:49.997:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
15 12 2017 15:16:50.035:INFO [launcher]: Starting browser PhantomJS

vue-cliのwebpack productionビルド時にconsoleログ出力を削除したい

vue-cliでwebpackでproductionビルドを行う際に、以下のように

UglifyJsPluginにcompress.drop_console オプションを追加するとconsole.log, console.errorなどのconsole.xのコードを削除できる

build/webpack.prod.conf.js

    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false,
        drop_console: true // added
      },
      sourceMap: true
    }),

オプション一覧はこちらを参照

https://github.com/mishoo/UglifyJS2/tree/harmony#minify-options