brewfileでMacのソフトウェアインストールを自動化する

3年ぶりにmacを買い替えた。

macbook air 11inch(2012) -> macbook pro 13inch(2017)

13インチなのにサイズがほとんど11インチairと同じだ。ディスプレイもきれいになって、最高という感じ。

せっかくなので、今まであまり使ったことがなかったHomebrewを使ってソフトウェアインストールを自動化してみた。

github.com

homebrew をインストールする

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Brewfileを作る

移行元のmacで、dumpコマンドを実行しBrewfileを書き出す。

$ brew bundle dump

brewでインストール可能なパッケージはsearch コマンドで検索できる。

$ brew search {name}

書き出されたBrewfileを元に不要なものを削除したり、追加したりして、下のようなBrewfileを作った。

$ cat Brewfile
cask_args appdir: "/Applications"
tap "homebrew/core"
tap "homebrew/bundle"
tap "caskroom/cask"
brew "vim"
brew "zsh"
brew "curl"
cask "atom"
cask "docker"
cask "dropbox"
cask "evernote"
cask "filezilla"
cask "firefox"
cask "google-chrome"
cask "google-drive-file-stream"
cask "google-japanese-ime"
cask "iterm2"
cask "keepassx"
cask "mysqlworkbench"
cask "skitch"
cask "skype"
cask "slack"
cask "vlc"

上記のBrewfileを移行先PCに置いてbrew bundle を実行する。

$ brew bundle

Slack基本使い方まとめ

概要

Slackをちゃんと業務で使うために、基本機能まとめる。

get.slack.help

基本

メンバー種別/権限

大きく4つの種別が存在する。

  • オーナー
  • 管理者
  • メンバー
  • ゲスト

詳細はこちら Slack メンバーの種別と権限 – Slack

チームとワークスペース

チームとは、Slack を使ってコミュニケートする人たちのグループです。

Slack ワークスペースは、あなたとチームメートがコミュニケートし、仕事を果たすために共有するデジタルスペースです。

ふむ。チームとワークスペースは、意味合い的には同じなのかな。

小〜中規模の企業では、全社員が1つの Slack ワークスペースに所属するケースが多いでしょう。

大規模組織じゃないかぎりは、1つのワークスペース運用のみで事足りるようだ。

チャンネル

ワークスペース内にはいくつもの チャンネルがあり、他のメンバーとの会話のほとんどがこのチャンネルを利用して行われます。

  • ワークスペースの中に、チャンネルは属している。プロジェクトや関心事の単位でチャンネルをワークスペースの中に作成していけば良さそう。
  • #general と #random はワークスペース作成時にデフォルトで作成される。#general はチーム全体共有用、#random は雑談用。

パブリックとプライベートチャンネル

  • パブリックは、チーム全体に公開される。チーム内の誰もが閲覧できる。
  • プライベートはそのチャンネルに招待されたメンバーのみ閲覧、検索可能。一部メンバーとクローズドな会話をするときに使う。

DM(ダイレクトメッセージ)

DMはチャンネル内でできない、よりセンシティブな会話をするときのみ使う。

検索

右上の検索ボックスから検索可能。

無料と有料プランの違い

4つのプランがある。フリー/スタンダード/プラス/Enerprise Grid

プラン・製品・機能 – Slack

フリープランには、以下のような制限がある。運用が以下の制限に引っかかるようであれば、有料プランへ移行した方がいい。

  • 検索可能メッセージ: チームの直近のコミュニケーション10,000件
  • 音声通話とビデオ通話: 一対一のみ
  • ファイルストレージ: ワークスペース全体で 5GB
  • アプリとサービス: 10 点のサードパーティまたはカスタムインテグレーション

実践

ワークスペースの作成

https://slack.com/create#email

環境設定

https://{workspace name}.slack.com/admin/settings#settings

ワークスペース設定、チーム権限、認証などを設定可能。

メンバーの招待

https://{workspace name}.slack.com/admin/invites

チームへの参加

  • チームオーナーまたは管理者から招待してもらう
  • 招待メールが届くので、メール内のリンクから参加する

カスタム絵文字の登録

  • 左上のチーム名をクリック
  • 「slack」をカスタマイズを選択する

*使用できる画像にはピクセル幅、ファイルサイズの制限があるので注意。

スレッド機能

チャンネルに投稿されたメッセージに対して、直接コメントできる。 一連の会話をまとめることができる。

メンション機能

@のあとに対象を入力することで、その対象に対して通知を送ることができる。

  • @here: チャンネルに参加していて、オンラインのメンバー全員に通知を送る
  • @channel: チャンネルに参加している全メンバーに通知を送る
  • @everyone: このメンションはワークスペース全員に通知を送る
  • @{username}: username に対して通知を送る

メッセージ書式

*msg* : 強調
~msg~ : 取り消し線
_msg_ : 斜体
> : 引用
>>> : 複数行の引用
`code` : コードブロック
```code``` : コードブロック。ブロックで表示する。

slashコマンド

/ (slash)の後に特定のコマンドを入力することで様々な機能を実行できる。スラッシュを入力すると、コマンド一覧がサジェストされる。

3rdパーティアプリケーションとの連携

App Directory から、外部サービスとSlackの連携をさせることができる。

https://{workspace name}.slack.com/apps

googleカレンダーGitHub、Jira など様々な外部サービスとの連携が用意されている。

雑感

slack >>>>> chatwork

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

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:マンガは除く